diff --git a/build/ci.go b/build/ci.go index 0b0098052f..1a4f527d8e 100644 --- a/build/ci.go +++ b/build/ci.go @@ -260,7 +260,7 @@ func buildFlags(env build.Environment, staticLinking bool, buildTags []string) ( if runtime.GOOS == "linux" { // Enforce the stacksize to 8M, which is the case on most platforms apart from // alpine Linux. - extld := []string{"-Wl,-z,stack-size=0x800000"} + extld := []string{"-Wl,-z,stack-size=0x800000", "-ldl"} if staticLinking { extld = append(extld, "-static") // Under static linking, use of certain glibc features must be diff --git a/core/rawdb/accessors_rollup_event.go b/core/rawdb/accessors_rollup_event.go index 796e60628a..e04c3f0c70 100644 --- a/core/rawdb/accessors_rollup_event.go +++ b/core/rawdb/accessors_rollup_event.go @@ -144,3 +144,30 @@ func ReadFinalizedL2BlockNumber(db ethdb.Reader) *uint64 { finalizedL2BlockNumber := number.Uint64() return &finalizedL2BlockNumber } + +// WriteLastFinalizedBatchIndex stores the last finalized batch index in the database. +func WriteLastFinalizedBatchIndex(db ethdb.KeyValueWriter, lastFinalizedBatchIndex uint64) { + value := big.NewInt(0).SetUint64(lastFinalizedBatchIndex).Bytes() + if err := db.Put(lastFinalizedBatchIndexKey, value); err != nil { + log.Crit("failed to store last finalized batch index for rollup event", "batch index", lastFinalizedBatchIndex, "value", value, "err", err) + } +} + +// ReadLastFinalizedBatchIndex fetches the last finalized batch index from the database. +func ReadLastFinalizedBatchIndex(db ethdb.Reader) *uint64 { + data, err := db.Get(lastFinalizedBatchIndexKey) + if err != nil && isNotFoundErr(err) { + return nil + } + if err != nil { + log.Crit("failed to read last finalized batch index from database", "key", lastFinalizedBatchIndexKey, "err", err) + } + + number := new(big.Int).SetBytes(data) + if !number.IsUint64() { + log.Crit("unexpected finalized batch index in database", "data", data, "number", number) + } + + lastFinalizedBatchIndex := number.Uint64() + return &lastFinalizedBatchIndex +} diff --git a/core/rawdb/accessors_rollup_event_test.go b/core/rawdb/accessors_rollup_event_test.go index 861b452352..6ccba99f0e 100644 --- a/core/rawdb/accessors_rollup_event_test.go +++ b/core/rawdb/accessors_rollup_event_test.go @@ -58,6 +58,32 @@ func TestFinalizedL2BlockNumber(t *testing.T) { } } +func TestLastFinalizedBatchIndex(t *testing.T) { + batchIndxes := []uint64{ + 1, + 1 << 2, + 1 << 8, + 1 << 16, + 1 << 32, + } + + db := NewMemoryDatabase() + + // read non-existing value + if got := ReadLastFinalizedBatchIndex(db); got != nil { + t.Fatal("Expected nil for non-existing value", "got", *got) + } + + for _, num := range batchIndxes { + WriteLastFinalizedBatchIndex(db, num) + got := ReadLastFinalizedBatchIndex(db) + + if *got != num { + t.Fatal("Batch index mismatch", "expected", num, "got", got) + } + } +} + func TestFinalizedBatchMeta(t *testing.T) { batches := []*FinalizedBatchMeta{ { diff --git a/core/rawdb/schema.go b/core/rawdb/schema.go index f1ccf64c17..4ccd401b04 100644 --- a/core/rawdb/schema.go +++ b/core/rawdb/schema.go @@ -152,6 +152,7 @@ var ( batchChunkRangesPrefix = []byte("R-bcr") batchMetaPrefix = []byte("R-bm") finalizedL2BlockNumberKey = []byte("R-finalized") + lastFinalizedBatchIndexKey = []byte("R-finalizedBatchIndex") // Row consumption rowConsumptionPrefix = []byte("rc") // rowConsumptionPrefix + hash -> row consumption by block diff --git a/go.mod b/go.mod index 128436e1f4..1e84b0f124 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/scroll-tech/go-ethereum -go 1.20 +go 1.21 require ( github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 @@ -40,9 +40,9 @@ require ( github.com/hashicorp/go-bexpr v0.1.10 github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 github.com/holiman/bloomfilter/v2 v2.0.3 - github.com/holiman/uint256 v1.2.3 + github.com/holiman/uint256 v1.2.4 github.com/huin/goupnp v1.3.0 - github.com/iden3/go-iden3-crypto v0.0.12 + github.com/iden3/go-iden3-crypto v0.0.15 github.com/influxdata/influxdb-client-go/v2 v2.4.0 github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c github.com/jackpal/go-nat-pmp v1.0.2 @@ -57,20 +57,21 @@ require ( github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 github.com/rs/cors v1.7.0 + github.com/scroll-tech/da-codec v0.1.1-0.20240727174557-66c0e75af163 github.com/scroll-tech/zktrie v0.8.4 - github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible + github.com/shirou/gopsutil v3.21.11+incompatible github.com/status-im/keycard-go v0.2.0 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 github.com/supranational/blst v0.3.11 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tyler-smith/go-bip39 v1.1.0 github.com/urfave/cli/v2 v2.25.7 go.uber.org/automaxprocs v1.5.2 - golang.org/x/crypto v0.14.0 + golang.org/x/crypto v0.17.0 golang.org/x/exp v0.0.0-20230905200255-921286631fa9 - golang.org/x/sync v0.3.0 - golang.org/x/sys v0.13.0 - golang.org/x/text v0.13.0 + golang.org/x/sync v0.6.0 + golang.org/x/sys v0.17.0 + golang.org/x/text v0.14.0 golang.org/x/time v0.3.0 golang.org/x/tools v0.13.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 @@ -81,7 +82,6 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect github.com/DataDog/zstd v1.4.5 // indirect - github.com/StackExchange/wmi v1.2.1 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 // indirect @@ -92,7 +92,8 @@ require ( github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 // indirect github.com/aws/smithy-go v1.15.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.7.0 // indirect + github.com/bits-and-blooms/bitset v1.12.0 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect github.com/cockroachdb/redact v1.0.8 // indirect @@ -105,7 +106,7 @@ require ( github.com/deepmap/oapi-codegen v1.6.0 // indirect github.com/dlclark/regexp2 v1.7.0 // indirect github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 // indirect - github.com/go-ole/go-ole v1.2.5 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -134,11 +135,12 @@ require ( github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/rivo/uniseg v0.2.0 // indirect - github.com/rogpeppe/go-internal v1.9.0 // indirect + github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + github.com/yusufpapurcu/wmi v1.2.3 // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/net v0.17.0 // indirect google.golang.org/protobuf v1.27.1 // indirect diff --git a/go.sum b/go.sum index 3c352e8a76..53fbf8533b 100644 --- a/go.sum +++ b/go.sum @@ -35,14 +35,18 @@ github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOv github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0/go.mod h1:c+Lifp3EDEamAkPVzMooRNOK6CZjNSdEnf1A7jsI9u4= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4= github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= +github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= @@ -53,8 +57,6 @@ github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4K github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= @@ -97,11 +99,12 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= -github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bits-and-blooms/bitset v1.12.0 h1:U/q1fAF7xXRhFCrhROzIfffYnu+dlS38vCZtmFVPHmA= +github.com/bits-and-blooms/bitset v1.12.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= @@ -121,6 +124,7 @@ github.com/cloudflare/cloudflare-go v0.79.0/go.mod h1:gkHQf9xEubaQPEuerBuoinR9P8 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y= github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= @@ -154,7 +158,6 @@ github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dchest/blake512 v1.0.0/go.mod h1:FV1x7xPPLWukZlpDpWQ88rF/SFwZ5qbskrzhLMB92JI= github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= @@ -170,6 +173,7 @@ github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwu github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/docker v24.0.5+incompatible h1:WmgcE4fxyI6EEXxBRxsHnZXrO1pQ3smi0k/jho4HLeY= github.com/docker/docker v24.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= @@ -224,8 +228,9 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= -github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= -github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= @@ -334,6 +339,7 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -344,16 +350,16 @@ github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZ github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= -github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= +github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= +github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= -github.com/iden3/go-iden3-crypto v0.0.12 h1:dXZF+R9iI07DK49LHX/EKC3jTa0O2z+TUyvxjGK7V38= -github.com/iden3/go-iden3-crypto v0.0.12/go.mod h1:swXIv0HFbJKobbQBtsB50G7IHr6PbTowutSew/iBEoo= +github.com/iden3/go-iden3-crypto v0.0.15 h1:4MJYlrot1l31Fzlo2sF56u7EVFeHHJkxGXXZCtESgK4= +github.com/iden3/go-iden3-crypto v0.0.15/go.mod h1:dLpM4vEPJ3nDHzhWFXDjzkn1qHoBeOT/3UEhXsEsP3E= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= @@ -497,6 +503,7 @@ github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssy github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -505,6 +512,7 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= @@ -534,8 +542,9 @@ github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -543,11 +552,13 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= +github.com/scroll-tech/da-codec v0.1.1-0.20240727174557-66c0e75af163 h1:Cz0YXihFVms8pdtNNkV2PBVacZxE24yyAFSalNf8xtg= +github.com/scroll-tech/da-codec v0.1.1-0.20240727174557-66c0e75af163/go.mod h1:D6XEESeNVJkQJlv3eK+FyR+ufPkgVQbJzERylQi53Bs= github.com/scroll-tech/zktrie v0.8.4 h1:UagmnZ4Z3ITCk+aUq9NQZJNAwnWl4gSxsLb2Nl7IgRE= github.com/scroll-tech/zktrie v0.8.4/go.mod h1:XvNo7vAk8yxNyTjBDj5WIiFzYW4bx/gJ78+NK6Zn6Uk= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -569,8 +580,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -606,6 +617,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= +github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -624,9 +637,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -700,7 +712,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= @@ -723,8 +734,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -779,18 +790,18 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -803,8 +814,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/rollup/rollup_sync_service/abi.go b/rollup/rollup_sync_service/abi.go index 0252ecd02f..6975001f18 100644 --- a/rollup/rollup_sync_service/abi.go +++ b/rollup/rollup_sync_service/abi.go @@ -12,7 +12,7 @@ import ( // scrollChainMetaData contains ABI of the ScrollChain contract. var scrollChainMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainId\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMaxNumTxInChunk\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newMaxNumTxInChunk\",\"type\":\"uint256\"}],\"name\":\"UpdateMaxNumTxInChunk\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateProver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateSequencer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addProver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"_parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"_chunks\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"_skippedL1MessageBitmap\",\"type\":\"bytes\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_withdrawRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_aggrProof\",\"type\":\"bytes\"}],\"name\":\"finalizeBatchWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_stateRoot\",\"type\":\"bytes32\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxNumTxInChunk\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isProver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isSequencer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"layer2ChainId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeProver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxNumTxInChunk\",\"type\":\"uint256\"}],\"name\":\"updateMaxNumTxInChunk\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdrawRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\": false,\"inputs\": [{\"indexed\": true,\"internalType\": \"uint256\",\"name\": \"batchIndex\",\"type\": \"uint256\"},{\"indexed\": true,\"internalType\": \"bytes32\",\"name\": \"batchHash\",\"type\": \"bytes32\"}],\"name\": \"CommitBatch\",\"type\": \"event\"},{\"anonymous\": false,\"inputs\": [{\"indexed\": true,\"internalType\": \"uint256\",\"name\": \"batchIndex\",\"type\": \"uint256\"},{\"indexed\": true,\"internalType\": \"bytes32\",\"name\": \"batchHash\",\"type\": \"bytes32\"},{\"indexed\": false,\"internalType\": \"bytes32\",\"name\": \"stateRoot\",\"type\": \"bytes32\"},{\"indexed\": false,\"internalType\": \"bytes32\",\"name\": \"withdrawRoot\",\"type\": \"bytes32\"}],\"name\": \"FinalizeBatch\",\"type\": \"event\"},{\"anonymous\": false,\"inputs\": [{\"indexed\": true,\"internalType\": \"uint256\",\"name\": \"batchIndex\",\"type\": \"uint256\"},{\"indexed\": true,\"internalType\": \"bytes32\",\"name\": \"batchHash\",\"type\": \"bytes32\"}],\"name\": \"RevertBatch\",\"type\": \"event\"},{\"anonymous\": false,\"inputs\": [{\"indexed\": false,\"internalType\": \"uint256\",\"name\": \"oldMaxNumTxInChunk\",\"type\": \"uint256\"},{\"indexed\": false,\"internalType\": \"uint256\",\"name\": \"newMaxNumTxInChunk\",\"type\": \"uint256\"}],\"name\": \"UpdateMaxNumTxInChunk\",\"type\": \"event\"},{\"anonymous\": false,\"inputs\": [{\"indexed\": true,\"internalType\": \"address\",\"name\": \"account\",\"type\": \"address\"},{\"indexed\": false,\"internalType\": \"bool\",\"name\": \"status\",\"type\": \"bool\"}],\"name\": \"UpdateProver\",\"type\": \"event\"},{\"anonymous\": false,\"inputs\": [{\"indexed\": true,\"internalType\": \"address\",\"name\": \"account\",\"type\": \"address\"},{\"indexed\": false,\"internalType\": \"bool\",\"name\": \"status\",\"type\": \"bool\"}],\"name\": \"UpdateSequencer\",\"type\": \"event\"},{\"inputs\": [{\"internalType\": \"uint8\",\"name\": \"version\",\"type\": \"uint8\"},{\"internalType\": \"bytes\",\"name\": \"parentBatchHeader\",\"type\": \"bytes\"},{\"internalType\": \"bytes[]\",\"name\": \"chunks\",\"type\": \"bytes[]\"},{\"internalType\": \"bytes\",\"name\": \"skippedL1MessageBitmap\",\"type\": \"bytes\"}],\"name\": \"commitBatch\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"uint8\",\"name\": \"version\",\"type\": \"uint8\"},{\"internalType\": \"bytes\",\"name\": \"parentBatchHeader\",\"type\": \"bytes\"},{\"internalType\": \"bytes[]\",\"name\": \"chunks\",\"type\": \"bytes[]\"},{\"internalType\": \"bytes\",\"name\": \"skippedL1MessageBitmap\",\"type\": \"bytes\"},{\"internalType\": \"bytes\",\"name\": \"blobDataProof\",\"type\": \"bytes\"}],\"name\": \"commitBatchWithBlobProof\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"uint256\",\"name\": \"batchIndex\",\"type\": \"uint256\"}],\"name\": \"committedBatches\",\"outputs\": [{\"internalType\": \"bytes32\",\"name\": \"\",\"type\": \"bytes32\"}],\"stateMutability\": \"view\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"bytes\",\"name\": \"batchHeader\",\"type\": \"bytes\"},{\"internalType\": \"bytes32\",\"name\": \"prevStateRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes32\",\"name\": \"postStateRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes32\",\"name\": \"withdrawRoot\",\"type\": \"bytes32\"}],\"name\": \"finalizeBatch\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"bytes\",\"name\": \"batchHeader\",\"type\": \"bytes\"},{\"internalType\": \"bytes32\",\"name\": \"prevStateRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes32\",\"name\": \"postStateRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes32\",\"name\": \"withdrawRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes\",\"name\": \"blobDataProof\",\"type\": \"bytes\"}],\"name\": \"finalizeBatch4844\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"bytes\",\"name\": \"batchHeader\",\"type\": \"bytes\"},{\"internalType\": \"bytes32\",\"name\": \"prevStateRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes32\",\"name\": \"postStateRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes32\",\"name\": \"withdrawRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes\",\"name\": \"aggrProof\",\"type\": \"bytes\"}],\"name\": \"finalizeBatchWithProof\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"bytes\",\"name\": \"batchHeader\",\"type\": \"bytes\"},{\"internalType\": \"bytes32\",\"name\": \"prevStateRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes32\",\"name\": \"postStateRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes32\",\"name\": \"withdrawRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes\",\"name\": \"blobDataProof\",\"type\": \"bytes\"},{\"internalType\": \"bytes\",\"name\": \"aggrProof\",\"type\": \"bytes\"}],\"name\": \"finalizeBatchWithProof4844\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"bytes\",\"name\": \"batchHeader\",\"type\": \"bytes\"},{\"internalType\": \"bytes32\",\"name\": \"postStateRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes32\",\"name\": \"withdrawRoot\",\"type\": \"bytes32\"}],\"name\": \"finalizeBundle\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"bytes\",\"name\": \"batchHeader\",\"type\": \"bytes\"},{\"internalType\": \"bytes32\",\"name\": \"postStateRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes32\",\"name\": \"withdrawRoot\",\"type\": \"bytes32\"},{\"internalType\": \"bytes\",\"name\": \"aggrProof\",\"type\": \"bytes\"}],\"name\": \"finalizeBundleWithProof\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"uint256\",\"name\": \"batchIndex\",\"type\": \"uint256\"}],\"name\": \"finalizedStateRoots\",\"outputs\": [{\"internalType\": \"bytes32\",\"name\": \"\",\"type\": \"bytes32\"}],\"stateMutability\": \"view\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"bytes\",\"name\": \"_batchHeader\",\"type\": \"bytes\"},{\"internalType\": \"bytes32\",\"name\": \"_stateRoot\",\"type\": \"bytes32\"}],\"name\": \"importGenesisBatch\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"uint256\",\"name\": \"batchIndex\",\"type\": \"uint256\"}],\"name\": \"isBatchFinalized\",\"outputs\": [{\"internalType\": \"bool\",\"name\": \"\",\"type\": \"bool\"}],\"stateMutability\": \"view\",\"type\": \"function\"},{\"inputs\": [],\"name\": \"lastFinalizedBatchIndex\",\"outputs\": [{\"internalType\": \"uint256\",\"name\": \"\",\"type\": \"uint256\"}],\"stateMutability\": \"view\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"bytes\",\"name\": \"batchHeader\",\"type\": \"bytes\"},{\"internalType\": \"uint256\",\"name\": \"count\",\"type\": \"uint256\"}],\"name\": \"revertBatch\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"inputs\": [{\"internalType\": \"uint256\",\"name\": \"batchIndex\",\"type\": \"uint256\"}],\"name\": \"withdrawRoots\",\"outputs\": [{\"internalType\": \"bytes32\",\"name\": \"\",\"type\": \"bytes32\"}],\"stateMutability\": \"view\",\"type\": \"function\"}]", } // L1CommitBatchEvent represents a CommitBatch event raised by the ScrollChain contract. diff --git a/rollup/rollup_sync_service/batch_header.go b/rollup/rollup_sync_service/batch_header.go deleted file mode 100644 index 2930d859af..0000000000 --- a/rollup/rollup_sync_service/batch_header.go +++ /dev/null @@ -1,123 +0,0 @@ -package rollup_sync_service - -import ( - "encoding/binary" - "fmt" - "math/big" - - "github.com/scroll-tech/go-ethereum/common" - "github.com/scroll-tech/go-ethereum/core/types" - "github.com/scroll-tech/go-ethereum/crypto" -) - -const batchHeaderVersion = 0 - -// BatchHeader contains batch header info to be committed. -type BatchHeader struct { - // Encoded in BatchHeaderV0Codec - version uint8 - batchIndex uint64 - l1MessagePopped uint64 - totalL1MessagePopped uint64 - dataHash common.Hash - parentBatchHash common.Hash - skippedL1MessageBitmap []byte -} - -// NewBatchHeader creates a new BatchHeader -func NewBatchHeader(version uint8, batchIndex, totalL1MessagePoppedBefore uint64, parentBatchHash common.Hash, chunks []*Chunk) (*BatchHeader, error) { - // buffer for storing chunk hashes in order to compute the batch data hash - var dataBytes []byte - - // skipped L1 message bitmap, an array of 256-bit bitmaps - var skippedBitmap []*big.Int - - // the first queue index that belongs to this batch - baseIndex := totalL1MessagePoppedBefore - - // the next queue index that we need to process - nextIndex := totalL1MessagePoppedBefore - - for chunkID, chunk := range chunks { - // build data hash - totalL1MessagePoppedBeforeChunk := nextIndex - chunkHash, err := chunk.Hash(totalL1MessagePoppedBeforeChunk) - if err != nil { - return nil, err - } - dataBytes = append(dataBytes, chunkHash.Bytes()...) - - // build skip bitmap - for blockID, block := range chunk.Blocks { - for _, tx := range block.Transactions { - if tx.Type != types.L1MessageTxType { - continue - } - currentIndex := tx.Nonce - - if currentIndex < nextIndex { - return nil, fmt.Errorf("unexpected batch payload, expected queue index: %d, got: %d. Batch index: %d, chunk index in batch: %d, block index in chunk: %d, block hash: %v, transaction hash: %v", nextIndex, currentIndex, batchIndex, chunkID, blockID, block.Header.Hash(), tx.TxHash) - } - - // mark skipped messages - for skippedIndex := nextIndex; skippedIndex < currentIndex; skippedIndex++ { - quo := int((skippedIndex - baseIndex) / 256) - rem := int((skippedIndex - baseIndex) % 256) - for len(skippedBitmap) <= quo { - bitmap := big.NewInt(0) - skippedBitmap = append(skippedBitmap, bitmap) - } - skippedBitmap[quo].SetBit(skippedBitmap[quo], rem, 1) - } - - // process included message - quo := int((currentIndex - baseIndex) / 256) - for len(skippedBitmap) <= quo { - bitmap := big.NewInt(0) - skippedBitmap = append(skippedBitmap, bitmap) - } - - nextIndex = currentIndex + 1 - } - } - } - - // compute data hash - dataHash := crypto.Keccak256Hash(dataBytes) - - // compute skipped bitmap - bitmapBytes := make([]byte, len(skippedBitmap)*32) - for ii, num := range skippedBitmap { - bytes := num.Bytes() - padding := 32 - len(bytes) - copy(bitmapBytes[32*ii+padding:], bytes) - } - - return &BatchHeader{ - version: version, - batchIndex: batchIndex, - l1MessagePopped: nextIndex - totalL1MessagePoppedBefore, - totalL1MessagePopped: nextIndex, - dataHash: dataHash, - parentBatchHash: parentBatchHash, - skippedL1MessageBitmap: bitmapBytes, - }, nil -} - -// Encode encodes the BatchHeader into RollupV2 BatchHeaderV0Codec Encoding. -func (b *BatchHeader) Encode() []byte { - batchBytes := make([]byte, 89+len(b.skippedL1MessageBitmap)) - batchBytes[0] = b.version - binary.BigEndian.PutUint64(batchBytes[1:], b.batchIndex) - binary.BigEndian.PutUint64(batchBytes[9:], b.l1MessagePopped) - binary.BigEndian.PutUint64(batchBytes[17:], b.totalL1MessagePopped) - copy(batchBytes[25:], b.dataHash[:]) - copy(batchBytes[57:], b.parentBatchHash[:]) - copy(batchBytes[89:], b.skippedL1MessageBitmap[:]) - return batchBytes -} - -// Hash calculates the hash of the batch header. -func (b *BatchHeader) Hash() common.Hash { - return crypto.Keccak256Hash(b.Encode()) -} diff --git a/rollup/rollup_sync_service/block.go b/rollup/rollup_sync_service/block.go deleted file mode 100644 index e86fb020b4..0000000000 --- a/rollup/rollup_sync_service/block.go +++ /dev/null @@ -1,167 +0,0 @@ -package rollup_sync_service - -import ( - "encoding/binary" - "errors" - "fmt" - "math" - "math/big" - - "github.com/scroll-tech/go-ethereum/common" - "github.com/scroll-tech/go-ethereum/common/hexutil" - "github.com/scroll-tech/go-ethereum/core/types" -) - -const blockContextByteSize = 60 - -// WrappedBlock contains the block's Header, Transactions and WithdrawTrieRoot hash. -type WrappedBlock struct { - Header *types.Header `json:"header"` - // Transactions is only used for recover types.Transactions, the from of types.TransactionData field is missing. - Transactions []*types.TransactionData `json:"transactions"` - WithdrawRoot common.Hash `json:"withdraw_trie_root,omitempty"` -} - -// BlockContext represents the essential data of a block in the ScrollChain. -// It provides an overview of block attributes including hash values, block numbers, gas details, and transaction counts. -type BlockContext struct { - BlockHash common.Hash - ParentHash common.Hash - BlockNumber uint64 - Timestamp uint64 - BaseFee *big.Int - GasLimit uint64 - NumTransactions uint16 - NumL1Messages uint16 -} - -// numL1Messages returns the number of L1 messages in this block. -// This number is the sum of included and skipped L1 messages. -func (w *WrappedBlock) numL1Messages(totalL1MessagePoppedBefore uint64) uint64 { - var lastQueueIndex *uint64 - for _, txData := range w.Transactions { - if txData.Type == types.L1MessageTxType { - lastQueueIndex = &txData.Nonce - } - } - if lastQueueIndex == nil { - return 0 - } - // note: last queue index included before this block is totalL1MessagePoppedBefore - 1 - // TODO: cache results - return *lastQueueIndex - totalL1MessagePoppedBefore + 1 -} - -// Encode encodes the WrappedBlock into RollupV2 BlockContext Encoding. -func (w *WrappedBlock) Encode(totalL1MessagePoppedBefore uint64) ([]byte, error) { - bytes := make([]byte, 60) - - if !w.Header.Number.IsUint64() { - return nil, errors.New("block number is not uint64") - } - - // note: numL1Messages includes skipped messages - numL1Messages := w.numL1Messages(totalL1MessagePoppedBefore) - if numL1Messages > math.MaxUint16 { - return nil, errors.New("number of L1 messages exceeds max uint16") - } - - // note: numTransactions includes skipped messages - numL2Transactions := w.numL2Transactions() - numTransactions := numL1Messages + numL2Transactions - if numTransactions > math.MaxUint16 { - return nil, errors.New("number of transactions exceeds max uint16") - } - - binary.BigEndian.PutUint64(bytes[0:], w.Header.Number.Uint64()) - binary.BigEndian.PutUint64(bytes[8:], w.Header.Time) - // TODO: [16:47] Currently, baseFee is 0, because we disable EIP-1559. - binary.BigEndian.PutUint64(bytes[48:], w.Header.GasLimit) - binary.BigEndian.PutUint16(bytes[56:], uint16(numTransactions)) - binary.BigEndian.PutUint16(bytes[58:], uint16(numL1Messages)) - - return bytes, nil -} - -func txsToTxsData(txs types.Transactions) []*types.TransactionData { - txsData := make([]*types.TransactionData, len(txs)) - for i, tx := range txs { - v, r, s := tx.RawSignatureValues() - - nonce := tx.Nonce() - - // We need QueueIndex in `NewBatchHeader`. However, `TransactionData` - // does not have this field. Since `L1MessageTx` do not have a nonce, - // we reuse this field for storing the queue index. - if msg := tx.AsL1MessageTx(); msg != nil { - nonce = msg.QueueIndex - } - - txsData[i] = &types.TransactionData{ - Type: tx.Type(), - TxHash: tx.Hash().String(), - Nonce: nonce, - ChainId: (*hexutil.Big)(tx.ChainId()), - Gas: tx.Gas(), - GasPrice: (*hexutil.Big)(tx.GasPrice()), - To: tx.To(), - Value: (*hexutil.Big)(tx.Value()), - Data: hexutil.Encode(tx.Data()), - IsCreate: tx.To() == nil, - V: (*hexutil.Big)(v), - R: (*hexutil.Big)(r), - S: (*hexutil.Big)(s), - } - } - return txsData -} - -func convertTxDataToRLPEncoding(txData *types.TransactionData) ([]byte, error) { - data, err := hexutil.Decode(txData.Data) - if err != nil { - return nil, fmt.Errorf("failed to decode txData.Data: %s, err: %w", txData.Data, err) - } - - tx := types.NewTx(&types.LegacyTx{ - Nonce: txData.Nonce, - To: txData.To, - Value: txData.Value.ToInt(), - Gas: txData.Gas, - GasPrice: txData.GasPrice.ToInt(), - Data: data, - V: txData.V.ToInt(), - R: txData.R.ToInt(), - S: txData.S.ToInt(), - }) - - rlpTxData, err := tx.MarshalBinary() - if err != nil { - return nil, fmt.Errorf("failed to marshal binary of the tx: %+v, err: %w", tx, err) - } - - return rlpTxData, nil -} - -func (w *WrappedBlock) numL2Transactions() uint64 { - var count uint64 - for _, txData := range w.Transactions { - if txData.Type != types.L1MessageTxType { - count++ - } - } - return count -} - -func decodeBlockContext(encodedBlockContext []byte) (*BlockContext, error) { - if len(encodedBlockContext) != blockContextByteSize { - return nil, errors.New("block encoding is not 60 bytes long") - } - - return &BlockContext{ - BlockNumber: binary.BigEndian.Uint64(encodedBlockContext[0:8]), - Timestamp: binary.BigEndian.Uint64(encodedBlockContext[8:16]), - GasLimit: binary.BigEndian.Uint64(encodedBlockContext[48:56]), - NumTransactions: binary.BigEndian.Uint16(encodedBlockContext[56:58]), - NumL1Messages: binary.BigEndian.Uint16(encodedBlockContext[58:60]), - }, nil -} diff --git a/rollup/rollup_sync_service/chunk.go b/rollup/rollup_sync_service/chunk.go deleted file mode 100644 index dff2eca7e6..0000000000 --- a/rollup/rollup_sync_service/chunk.go +++ /dev/null @@ -1,155 +0,0 @@ -package rollup_sync_service - -import ( - "encoding/binary" - "encoding/hex" - "errors" - "fmt" - "strings" - - "github.com/scroll-tech/go-ethereum/common" - "github.com/scroll-tech/go-ethereum/core/rawdb" - "github.com/scroll-tech/go-ethereum/core/types" - "github.com/scroll-tech/go-ethereum/crypto" -) - -// Chunk contains blocks to be encoded -type Chunk struct { - Blocks []*WrappedBlock `json:"blocks"` -} - -// NumL1Messages returns the number of L1 messages in this chunk. -// This number is the sum of included and skipped L1 messages. -func (c *Chunk) NumL1Messages(totalL1MessagePoppedBefore uint64) uint64 { - var numL1Messages uint64 - for _, block := range c.Blocks { - numL1MessagesInBlock := block.numL1Messages(totalL1MessagePoppedBefore) - numL1Messages += numL1MessagesInBlock - totalL1MessagePoppedBefore += numL1MessagesInBlock - } - // TODO: cache results - return numL1Messages -} - -// Encode encodes the Chunk into RollupV2 Chunk Encoding. -func (c *Chunk) Encode(totalL1MessagePoppedBefore uint64) ([]byte, error) { - numBlocks := len(c.Blocks) - - if numBlocks > 255 { - return nil, errors.New("number of blocks exceeds 1 byte") - } - if numBlocks == 0 { - return nil, errors.New("number of blocks is 0") - } - - var chunkBytes []byte - chunkBytes = append(chunkBytes, byte(numBlocks)) - - var l2TxDataBytes []byte - - for _, block := range c.Blocks { - blockBytes, err := block.Encode(totalL1MessagePoppedBefore) - if err != nil { - return nil, fmt.Errorf("failed to encode block: %v", err) - } - totalL1MessagePoppedBefore += block.numL1Messages(totalL1MessagePoppedBefore) - - if len(blockBytes) != 60 { - return nil, fmt.Errorf("block encoding is not 60 bytes long %x", len(blockBytes)) - } - - chunkBytes = append(chunkBytes, blockBytes...) - - // Append rlp-encoded l2Txs - for _, txData := range block.Transactions { - if txData.Type == types.L1MessageTxType { - continue - } - rlpTxData, err := convertTxDataToRLPEncoding(txData) - if err != nil { - return nil, err - } - var txLen [4]byte - binary.BigEndian.PutUint32(txLen[:], uint32(len(rlpTxData))) - l2TxDataBytes = append(l2TxDataBytes, txLen[:]...) - l2TxDataBytes = append(l2TxDataBytes, rlpTxData...) - } - } - - chunkBytes = append(chunkBytes, l2TxDataBytes...) - - return chunkBytes, nil -} - -// Hash hashes the Chunk into RollupV2 Chunk Hash -func (c *Chunk) Hash(totalL1MessagePoppedBefore uint64) (common.Hash, error) { - chunkBytes, err := c.Encode(totalL1MessagePoppedBefore) - if err != nil { - return common.Hash{}, err - } - numBlocks := chunkBytes[0] - - // concatenate block contexts - var dataBytes []byte - for i := 0; i < int(numBlocks); i++ { - // only the first 58 bytes of each BlockContext are needed for the hashing process - dataBytes = append(dataBytes, chunkBytes[1+60*i:60*i+59]...) - } - - // concatenate l1 and l2 tx hashes - for _, block := range c.Blocks { - var l1TxHashes []byte - var l2TxHashes []byte - for _, txData := range block.Transactions { - txHash := strings.TrimPrefix(txData.TxHash, "0x") - hashBytes, err := hex.DecodeString(txHash) - if err != nil { - return common.Hash{}, err - } - if txData.Type == types.L1MessageTxType { - l1TxHashes = append(l1TxHashes, hashBytes...) - } else { - l2TxHashes = append(l2TxHashes, hashBytes...) - } - } - dataBytes = append(dataBytes, l1TxHashes...) - dataBytes = append(dataBytes, l2TxHashes...) - } - - hash := crypto.Keccak256Hash(dataBytes) - return hash, nil -} - -// DecodeChunkBlockRanges decodes the provided chunks into a list of block ranges. Each chunk -// contains information about multiple blocks, which are decoded and their ranges (from the -// start block to the end block) are returned. -func DecodeChunkBlockRanges(chunks [][]byte) ([]*rawdb.ChunkBlockRange, error) { - var chunkBlockRanges []*rawdb.ChunkBlockRange - for _, chunk := range chunks { - if len(chunk) < 1 { - return nil, fmt.Errorf("invalid chunk, length is less than 1") - } - - numBlocks := int(chunk[0]) - if len(chunk) < 1+numBlocks*blockContextByteSize { - return nil, fmt.Errorf("chunk size doesn't match with numBlocks, byte length of chunk: %v, expected length: %v", len(chunk), 1+numBlocks*blockContextByteSize) - } - - blockContexts := make([]*BlockContext, numBlocks) - for i := 0; i < numBlocks; i++ { - startIdx := 1 + i*blockContextByteSize // add 1 to skip numBlocks byte - endIdx := startIdx + blockContextByteSize - blockContext, err := decodeBlockContext(chunk[startIdx:endIdx]) - if err != nil { - return nil, err - } - blockContexts[i] = blockContext - } - - chunkBlockRanges = append(chunkBlockRanges, &rawdb.ChunkBlockRange{ - StartBlockNumber: blockContexts[0].BlockNumber, - EndBlockNumber: blockContexts[len(blockContexts)-1].BlockNumber, - }) - } - return chunkBlockRanges, nil -} diff --git a/rollup/rollup_sync_service/l1client.go b/rollup/rollup_sync_service/l1client.go index 0aaf4466ca..34ffc4db1b 100644 --- a/rollup/rollup_sync_service/l1client.go +++ b/rollup/rollup_sync_service/l1client.go @@ -56,7 +56,7 @@ func newL1Client(ctx context.Context, l1Client sync_service.EthClient, l1ChainId } // fetcRollupEventsInRange retrieves and parses commit/revert/finalize rollup events between block numbers: [from, to]. -func (c *L1Client) fetchRollupEventsInRange(ctx context.Context, from, to uint64) ([]types.Log, error) { +func (c *L1Client) fetchRollupEventsInRange(from, to uint64) ([]types.Log, error) { log.Trace("L1Client fetchRollupEventsInRange", "fromBlock", from, "toBlock", to) query := ethereum.FilterQuery{ @@ -80,8 +80,8 @@ func (c *L1Client) fetchRollupEventsInRange(ctx context.Context, from, to uint64 } // getLatestFinalizedBlockNumber fetches the block number of the latest finalized block from the L1 chain. -func (c *L1Client) getLatestFinalizedBlockNumber(ctx context.Context) (uint64, error) { - header, err := c.client.HeaderByNumber(ctx, big.NewInt(int64(rpc.FinalizedBlockNumber))) +func (c *L1Client) getLatestFinalizedBlockNumber() (uint64, error) { + header, err := c.client.HeaderByNumber(c.ctx, big.NewInt(int64(rpc.FinalizedBlockNumber))) if err != nil { return 0, err } diff --git a/rollup/rollup_sync_service/l1client_test.go b/rollup/rollup_sync_service/l1client_test.go index 79c82c8a31..8c7bd92f8b 100644 --- a/rollup/rollup_sync_service/l1client_test.go +++ b/rollup/rollup_sync_service/l1client_test.go @@ -26,17 +26,17 @@ func TestL1Client(t *testing.T) { l1Client, err := newL1Client(ctx, mockClient, 11155111, scrollChainAddress, scrollChainABI) require.NoError(t, err, "Failed to initialize L1Client") - blockNumber, err := l1Client.getLatestFinalizedBlockNumber(ctx) + blockNumber, err := l1Client.getLatestFinalizedBlockNumber() assert.NoError(t, err, "Error getting latest confirmed block number") assert.Equal(t, uint64(36), blockNumber, "Unexpected block number") - logs, err := l1Client.fetchRollupEventsInRange(ctx, 0, blockNumber) + logs, err := l1Client.fetchRollupEventsInRange(0, blockNumber) assert.NoError(t, err, "Error fetching rollup events in range") assert.Empty(t, logs, "Expected no logs from fetchRollupEventsInRange") } type mockEthClient struct { - commitBatchRLP []byte + txRLP []byte } func (m *mockEthClient) BlockNumber(ctx context.Context) (uint64, error) { @@ -63,7 +63,7 @@ func (m *mockEthClient) SubscribeFilterLogs(ctx context.Context, query ethereum. func (m *mockEthClient) TransactionByHash(ctx context.Context, txHash common.Hash) (*types.Transaction, bool, error) { var tx types.Transaction - if err := rlp.DecodeBytes(m.commitBatchRLP, &tx); err != nil { + if err := rlp.DecodeBytes(m.txRLP, &tx); err != nil { return nil, false, err } return &tx, false, nil diff --git a/rollup/rollup_sync_service/rollup_sync_service.go b/rollup/rollup_sync_service/rollup_sync_service.go index ef00526702..52ce75e27e 100644 --- a/rollup/rollup_sync_service/rollup_sync_service.go +++ b/rollup/rollup_sync_service/rollup_sync_service.go @@ -8,6 +8,11 @@ import ( "reflect" "time" + "github.com/scroll-tech/da-codec/encoding" + "github.com/scroll-tech/da-codec/encoding/codecv0" + "github.com/scroll-tech/da-codec/encoding/codecv1" + "github.com/scroll-tech/da-codec/encoding/codecv2" + "github.com/scroll-tech/da-codec/encoding/codecv3" "github.com/scroll-tech/go-ethereum/accounts/abi" "github.com/scroll-tech/go-ethereum/common" "github.com/scroll-tech/go-ethereum/core" @@ -149,7 +154,7 @@ func (s *RollupSyncService) Stop() { } func (s *RollupSyncService) fetchRollupEvents() { - latestConfirmed, err := s.client.getLatestFinalizedBlockNumber(s.ctx) + latestConfirmed, err := s.client.getLatestFinalizedBlockNumber() if err != nil { log.Warn("failed to get latest confirmed block number", "err", err) return @@ -169,7 +174,7 @@ func (s *RollupSyncService) fetchRollupEvents() { to = latestConfirmed } - logs, err := s.client.fetchRollupEventsInRange(s.ctx, from, to) + logs, err := s.client.fetchRollupEventsInRange(from, to) if err != nil { log.Error("failed to fetch rollup events in range", "from block", from, "to block", to, "err", err) return @@ -219,23 +224,57 @@ func (s *RollupSyncService) parseAndUpdateRollupEventLogs(logs []types.Log, endB batchIndex := event.BatchIndex.Uint64() log.Trace("found new FinalizeBatch event", "batch index", batchIndex) - parentBatchMeta, chunks, err := s.getLocalInfoForBatch(batchIndex) - if err != nil { - return fmt.Errorf("failed to get local node info, batch index: %v, err: %w", batchIndex, err) + lastFinalizedBatchIndex := rawdb.ReadLastFinalizedBatchIndex(s.db) + + // After darwin, FinalizeBatch event emitted every bundle, which contains multiple batches. + // Therefore there are a range of finalized batches need to be saved into db. + // + // The range logic also applies to the batches before darwin when FinalizeBatch event emitted + // per single batch. In this situation, `batchIndex` just equals to `*lastFinalizedBatchIndex + 1` + // and only one batch is processed through the for loop. + startBatchIndex := batchIndex + if lastFinalizedBatchIndex != nil { + startBatchIndex = *lastFinalizedBatchIndex + 1 + } else { + log.Warn("got nil when reading last finalized batch index. This should happen only once.") } - endBlock, finalizedBatchMeta, err := validateBatch(event, parentBatchMeta, chunks, s.stack) - if err != nil { - return fmt.Errorf("fatal: validateBatch failed: finalize event: %v, err: %w", event, err) + parentBatchMeta := &rawdb.FinalizedBatchMeta{} + if startBatchIndex > 0 { + parentBatchMeta = rawdb.ReadFinalizedBatchMeta(s.db, startBatchIndex-1) } - rawdb.WriteFinalizedL2BlockNumber(s.db, endBlock) - rawdb.WriteFinalizedBatchMeta(s.db, batchIndex, finalizedBatchMeta) + var highestFinalizedBlockNumber uint64 + batchWriter := s.db.NewBatch() + for index := startBatchIndex; index <= batchIndex; index++ { + chunks, err := s.getLocalChunksForBatch(index) + if err != nil { + return fmt.Errorf("failed to get local node info, batch index: %v, err: %w", index, err) + } - if batchIndex%100 == 0 { - log.Info("finalized batch progress", "batch index", batchIndex, "finalized l2 block height", endBlock) + endBlock, finalizedBatchMeta, err := validateBatch(index, event, parentBatchMeta, chunks, s.bc.Config(), s.stack) + if err != nil { + return fmt.Errorf("fatal: validateBatch failed: finalize event: %v, err: %w", event, err) + } + + rawdb.WriteFinalizedBatchMeta(batchWriter, index, finalizedBatchMeta) + highestFinalizedBlockNumber = endBlock + parentBatchMeta = finalizedBatchMeta + + if index%100 == 0 { + log.Info("finalized batch progress", "batch index", index, "finalized l2 block height", endBlock) + } } + if err := batchWriter.Write(); err != nil { + log.Error("fatal: failed to batch write finalized batch meta to database", "startBatchIndex", startBatchIndex, "endBatchIndex", batchIndex, + "batchCount", batchIndex-startBatchIndex+1, "highestFinalizedBlockNumber", highestFinalizedBlockNumber, "err", err) + return fmt.Errorf("failed to batch write finalized batch meta to database: %w", err) + } + rawdb.WriteFinalizedL2BlockNumber(s.db, highestFinalizedBlockNumber) + rawdb.WriteLastFinalizedBatchIndex(s.db, batchIndex) + log.Debug("write finalized l2 block number", "batch index", batchIndex, "finalized l2 block height", highestFinalizedBlockNumber) + default: return fmt.Errorf("unknown event, topic: %v, tx hash: %v", vLog.Topics[0].Hex(), vLog.TxHash.Hex()) } @@ -248,17 +287,17 @@ func (s *RollupSyncService) parseAndUpdateRollupEventLogs(logs []types.Log, endB return nil } -func (s *RollupSyncService) getLocalInfoForBatch(batchIndex uint64) (*rawdb.FinalizedBatchMeta, []*Chunk, error) { +func (s *RollupSyncService) getLocalChunksForBatch(batchIndex uint64) ([]*encoding.Chunk, error) { chunkBlockRanges := rawdb.ReadBatchChunkRanges(s.db, batchIndex) if len(chunkBlockRanges) == 0 { - return nil, nil, fmt.Errorf("failed to get batch chunk ranges, empty chunk block ranges") + return nil, fmt.Errorf("failed to get batch chunk ranges, empty chunk block ranges") } endBlockNumber := chunkBlockRanges[len(chunkBlockRanges)-1].EndBlockNumber for i := 0; i < defaultMaxRetries; i++ { if s.ctx.Err() != nil { log.Info("Context canceled", "reason", s.ctx.Err()) - return nil, nil, s.ctx.Err() + return nil, s.ctx.Err() } localSyncedBlockHeight := s.bc.CurrentBlock().Number.Uint64() @@ -273,24 +312,24 @@ func (s *RollupSyncService) getLocalInfoForBatch(batchIndex uint64) (*rawdb.Fina localSyncedBlockHeight := s.bc.CurrentBlock().Number.Uint64() if localSyncedBlockHeight < endBlockNumber { - return nil, nil, fmt.Errorf("local node is not synced up to the required block height: %v, local synced block height: %v", endBlockNumber, localSyncedBlockHeight) + return nil, fmt.Errorf("local node is not synced up to the required block height: %v, local synced block height: %v", endBlockNumber, localSyncedBlockHeight) } - chunks := make([]*Chunk, len(chunkBlockRanges)) + chunks := make([]*encoding.Chunk, len(chunkBlockRanges)) for i, cr := range chunkBlockRanges { - chunks[i] = &Chunk{Blocks: make([]*WrappedBlock, cr.EndBlockNumber-cr.StartBlockNumber+1)} + chunks[i] = &encoding.Chunk{Blocks: make([]*encoding.Block, cr.EndBlockNumber-cr.StartBlockNumber+1)} for j := cr.StartBlockNumber; j <= cr.EndBlockNumber; j++ { block := s.bc.GetBlockByNumber(j) if block == nil { - return nil, nil, fmt.Errorf("failed to get block by number: %v", i) + return nil, fmt.Errorf("failed to get block by number: %v", i) } - txData := txsToTxsData(block.Transactions()) + txData := encoding.TxsToTxsData(block.Transactions()) state, err := s.bc.StateAt(block.Root()) if err != nil { - return nil, nil, fmt.Errorf("failed to get block state, block: %v, err: %w", block.Hash().Hex(), err) + return nil, fmt.Errorf("failed to get block state, block: %v, err: %w", block.Hash().Hex(), err) } withdrawRoot := withdrawtrie.ReadWTRSlot(rcfg.L2MessageQueueAddress, state) - chunks[i].Blocks[j-cr.StartBlockNumber] = &WrappedBlock{ + chunks[i].Blocks[j-cr.StartBlockNumber] = &encoding.Block{ Header: block.Header(), Transactions: txData, WithdrawRoot: withdrawRoot, @@ -298,13 +337,7 @@ func (s *RollupSyncService) getLocalInfoForBatch(batchIndex uint64) (*rawdb.Fina } } - // get metadata of parent batch: default to genesis batch metadata. - parentBatchMeta := &rawdb.FinalizedBatchMeta{} - if batchIndex > 0 { - parentBatchMeta = rawdb.ReadFinalizedBatchMeta(s.db, batchIndex-1) - } - - return parentBatchMeta, chunks, nil + return chunks, nil } func (s *RollupSyncService) getChunkRanges(batchIndex uint64, vLog *types.Log) ([]*rawdb.ChunkBlockRange, error) { @@ -321,6 +354,10 @@ func (s *RollupSyncService) getChunkRanges(batchIndex uint64, vLog *types.Log) ( return nil, fmt.Errorf("failed to get block by hash, block number: %v, block hash: %v, err: %w", vLog.BlockNumber, vLog.BlockHash.Hex(), err) } + if block == nil { + return nil, fmt.Errorf("failed to get block by hash, block not found, block number: %v, block hash: %v", vLog.BlockNumber, vLog.BlockHash.Hex()) + } + found := false for _, txInBlock := range block.Transactions() { if txInBlock.Hash() == vLog.TxHash { @@ -354,77 +391,150 @@ func (s *RollupSyncService) decodeChunkBlockRanges(txData []byte) ([]*rawdb.Chun return nil, fmt.Errorf("failed to unpack transaction data using ABI, tx data: %v, err: %w", txData, err) } - type commitBatchArgs struct { - Version uint8 - ParentBatchHeader []byte - Chunks [][]byte - SkippedL1MessageBitmap []byte - } - var args commitBatchArgs - err = method.Inputs.Copy(&args, values) - if err != nil { - return nil, fmt.Errorf("failed to decode calldata into commitBatch args, values: %+v, err: %w", values, err) + if method.Name == "commitBatch" { + type commitBatchArgs struct { + Version uint8 + ParentBatchHeader []byte + Chunks [][]byte + SkippedL1MessageBitmap []byte + } + + var args commitBatchArgs + if err = method.Inputs.Copy(&args, values); err != nil { + return nil, fmt.Errorf("failed to decode calldata into commitBatch args, values: %+v, err: %w", values, err) + } + + return decodeBlockRangesFromEncodedChunks(encoding.CodecVersion(args.Version), args.Chunks) + } else if method.Name == "commitBatchWithBlobProof" { + type commitBatchWithBlobProofArgs struct { + Version uint8 + ParentBatchHeader []byte + Chunks [][]byte + SkippedL1MessageBitmap []byte + BlobDataProof []byte + } + + var args commitBatchWithBlobProofArgs + if err = method.Inputs.Copy(&args, values); err != nil { + return nil, fmt.Errorf("failed to decode calldata into commitBatchWithBlobProofArgs args, values: %+v, err: %w", values, err) + } + + return decodeBlockRangesFromEncodedChunks(encoding.CodecVersion(args.Version), args.Chunks) } - if args.Version != batchHeaderVersion { - return nil, fmt.Errorf("unexpected batch version, expected: %v, got: %v", batchHeaderVersion, args.Version) - } - - return DecodeChunkBlockRanges(args.Chunks) + return nil, fmt.Errorf("unexpected method name: %v", method.Name) } // validateBatch verifies the consistency between the L1 contract and L2 node data. +// It performs the following checks: +// 1. Recalculates the batch hash locally +// 2. Compares local state root, local withdraw root, and locally calculated batch hash with L1 data (for the last batch only when "finalize by bundle") +// // The function will terminate the node and exit if any consistency check fails. -// It returns the number of the end block, a finalized batch meta data, and an error if any. -func validateBatch(event *L1FinalizeBatchEvent, parentBatchMeta *rawdb.FinalizedBatchMeta, chunks []*Chunk, stack *node.Node) (uint64, *rawdb.FinalizedBatchMeta, error) { +// +// Parameters: +// - batchIndex: batch index of the validated batch +// - event: L1 finalize batch event data +// - parentBatchMeta: metadata of the parent batch +// - chunks: slice of chunk data for the current batch +// - chainCfg: chain configuration to identify the codec version +// - stack: node stack to terminate the node in case of inconsistency +// +// Returns: +// - uint64: the end block height of the batch +// - *rawdb.FinalizedBatchMeta: finalized batch metadata +// - error: any error encountered during validation +// +// Note: This function is compatible with both "finalize by batch" and "finalize by bundle" methods. +// In "finalize by bundle", only the last batch of each bundle is fully verified. +// This check still ensures the correctness of all batch hashes in the bundle due to the parent-child relationship between batch hashes. +func validateBatch(batchIndex uint64, event *L1FinalizeBatchEvent, parentBatchMeta *rawdb.FinalizedBatchMeta, chunks []*encoding.Chunk, chainCfg *params.ChainConfig, stack *node.Node) (uint64, *rawdb.FinalizedBatchMeta, error) { if len(chunks) == 0 { - return 0, nil, fmt.Errorf("invalid argument: length of chunks is 0, batch index: %v", event.BatchIndex.Uint64()) + return 0, nil, fmt.Errorf("invalid argument: length of chunks is 0, batch index: %v", batchIndex) } startChunk := chunks[0] if len(startChunk.Blocks) == 0 { - return 0, nil, fmt.Errorf("invalid argument: block count of start chunk is 0, batch index: %v", event.BatchIndex.Uint64()) + return 0, nil, fmt.Errorf("invalid argument: block count of start chunk is 0, batch index: %v", batchIndex) } startBlock := startChunk.Blocks[0] endChunk := chunks[len(chunks)-1] if len(endChunk.Blocks) == 0 { - return 0, nil, fmt.Errorf("invalid argument: block count of end chunk is 0, batch index: %v", event.BatchIndex.Uint64()) + return 0, nil, fmt.Errorf("invalid argument: block count of end chunk is 0, batch index: %v", batchIndex) } endBlock := endChunk.Blocks[len(endChunk.Blocks)-1] - localStateRoot := endBlock.Header.Root - if localStateRoot != event.StateRoot { - log.Error("State root mismatch", "batch index", event.BatchIndex.Uint64(), "start block", startBlock.Header.Number.Uint64(), "end block", endBlock.Header.Number.Uint64(), "parent batch hash", parentBatchMeta.BatchHash.Hex(), "l1 finalized state root", event.StateRoot.Hex(), "l2 state root", localStateRoot.Hex()) - stack.Close() - os.Exit(1) + // Note: All params of batch are calculated locally based on the block data. + batch := &encoding.Batch{ + Index: batchIndex, + TotalL1MessagePoppedBefore: parentBatchMeta.TotalL1MessagePopped, + ParentBatchHash: parentBatchMeta.BatchHash, + Chunks: chunks, } - localWithdrawRoot := endBlock.WithdrawRoot - if localWithdrawRoot != event.WithdrawRoot { - log.Error("Withdraw root mismatch", "batch index", event.BatchIndex.Uint64(), "start block", startBlock.Header.Number.Uint64(), "end block", endBlock.Header.Number.Uint64(), "parent batch hash", parentBatchMeta.BatchHash.Hex(), "l1 finalized withdraw root", event.WithdrawRoot.Hex(), "l2 withdraw root", localWithdrawRoot.Hex()) - stack.Close() - os.Exit(1) - } - - // Note: All params for NewBatchHeader are calculated locally based on the block data. - batchHeader, err := NewBatchHeader(batchHeaderVersion, event.BatchIndex.Uint64(), parentBatchMeta.TotalL1MessagePopped, parentBatchMeta.BatchHash, chunks) - if err != nil { - return 0, nil, fmt.Errorf("failed to construct batch header, batch index: %v, err: %w", event.BatchIndex.Uint64(), err) - } - - // Note: If the batch headers match, this ensures the consistency of blocks and transactions - // (including skipped transactions) between L1 and L2. - localBatchHash := batchHeader.Hash() - if localBatchHash != event.BatchHash { - log.Error("Batch hash mismatch", "batch index", event.BatchIndex.Uint64(), "start block", startBlock.Header.Number.Uint64(), "end block", endBlock.Header.Number.Uint64(), "parent batch hash", parentBatchMeta.BatchHash.Hex(), "parent TotalL1MessagePopped", parentBatchMeta.TotalL1MessagePopped, "l1 finalized batch hash", event.BatchHash.Hex(), "l2 batch hash", localBatchHash.Hex()) - chunksJson, err := json.Marshal(chunks) + var localBatchHash common.Hash + if startBlock.Header.Number.Uint64() == 0 || !chainCfg.IsBernoulli(startBlock.Header.Number) { // codecv0: genesis batch or batches before Bernoulli + daBatch, err := codecv0.NewDABatch(batch) if err != nil { - log.Error("marshal chunks failed", "err", err) + return 0, nil, fmt.Errorf("failed to create codecv0 DA batch, batch index: %v, err: %w", batchIndex, err) + } + localBatchHash = daBatch.Hash() + } else if !chainCfg.IsCurie(startBlock.Header.Number) { // codecv1: batches after Bernoulli and before Curie + daBatch, err := codecv1.NewDABatch(batch) + if err != nil { + return 0, nil, fmt.Errorf("failed to create codecv1 DA batch, batch index: %v, err: %w", batchIndex, err) + } + localBatchHash = daBatch.Hash() + } else if !chainCfg.IsDarwin(startBlock.Header.Number, startBlock.Header.Time) { // codecv2: batches after Curie and before Darwin + daBatch, err := codecv2.NewDABatch(batch) + if err != nil { + return 0, nil, fmt.Errorf("failed to create codecv2 DA batch, batch index: %v, err: %w", batchIndex, err) + } + localBatchHash = daBatch.Hash() + } else { // codecv3: batches after Darwin + daBatch, err := codecv3.NewDABatch(batch) + if err != nil { + return 0, nil, fmt.Errorf("failed to create codecv3 DA batch, batch index: %v, err: %w", batchIndex, err) + } + localBatchHash = daBatch.Hash() + } + + localStateRoot := endBlock.Header.Root + localWithdrawRoot := endBlock.WithdrawRoot + + // Note: If the state root, withdraw root, and batch headers match, this ensures the consistency of blocks and transactions + // (including skipped transactions) between L1 and L2. + // + // Only check when batch index matches the index of the event. This is compatible with both "finalize by batch" and "finalize by bundle": + // - finalize by batch: check all batches + // - finalize by bundle: check the last batch, because only one event (containing the info of the last batch) is emitted per bundle + if batchIndex == event.BatchIndex.Uint64() { + if localStateRoot != event.StateRoot { + log.Error("State root mismatch", "batch index", event.BatchIndex.Uint64(), "start block", startBlock.Header.Number.Uint64(), "end block", endBlock.Header.Number.Uint64(), "parent batch hash", parentBatchMeta.BatchHash.Hex(), "l1 finalized state root", event.StateRoot.Hex(), "l2 state root", localStateRoot.Hex()) + stack.Close() + os.Exit(1) + } + + if localWithdrawRoot != event.WithdrawRoot { + log.Error("Withdraw root mismatch", "batch index", event.BatchIndex.Uint64(), "start block", startBlock.Header.Number.Uint64(), "end block", endBlock.Header.Number.Uint64(), "parent batch hash", parentBatchMeta.BatchHash.Hex(), "l1 finalized withdraw root", event.WithdrawRoot.Hex(), "l2 withdraw root", localWithdrawRoot.Hex()) + stack.Close() + os.Exit(1) + } + + // Verify batch hash + // This check ensures the correctness of all batch hashes in the bundle + // due to the parent-child relationship between batch hashes + if localBatchHash != event.BatchHash { + log.Error("Batch hash mismatch", "batch index", event.BatchIndex.Uint64(), "start block", startBlock.Header.Number.Uint64(), "end block", endBlock.Header.Number.Uint64(), "parent batch hash", parentBatchMeta.BatchHash.Hex(), "parent TotalL1MessagePopped", parentBatchMeta.TotalL1MessagePopped, "l1 finalized batch hash", event.BatchHash.Hex(), "l2 batch hash", localBatchHash.Hex()) + chunksJson, err := json.Marshal(chunks) + if err != nil { + log.Error("marshal chunks failed", "err", err) + } + log.Error("Chunks", "chunks", string(chunksJson)) + stack.Close() + os.Exit(1) } - log.Error("Chunks", "chunks", string(chunksJson)) - stack.Close() - os.Exit(1) } totalL1MessagePopped := parentBatchMeta.TotalL1MessagePopped @@ -439,3 +549,94 @@ func validateBatch(event *L1FinalizeBatchEvent, parentBatchMeta *rawdb.Finalized } return endBlock.Header.Number.Uint64(), finalizedBatchMeta, nil } + +// decodeBlockRangesFromEncodedChunks decodes the provided chunks into a list of block ranges. +func decodeBlockRangesFromEncodedChunks(codecVersion encoding.CodecVersion, chunks [][]byte) ([]*rawdb.ChunkBlockRange, error) { + var chunkBlockRanges []*rawdb.ChunkBlockRange + for _, chunk := range chunks { + if len(chunk) < 1 { + return nil, fmt.Errorf("invalid chunk, length is less than 1") + } + + numBlocks := int(chunk[0]) + + switch codecVersion { + case encoding.CodecV0: + if len(chunk) < 1+numBlocks*60 { + return nil, fmt.Errorf("invalid chunk byte length, expected: %v, got: %v", 1+numBlocks*60, len(chunk)) + } + daBlocks := make([]*codecv0.DABlock, numBlocks) + for i := 0; i < numBlocks; i++ { + startIdx := 1 + i*60 // add 1 to skip numBlocks byte + endIdx := startIdx + 60 + daBlocks[i] = &codecv0.DABlock{} + if err := daBlocks[i].Decode(chunk[startIdx:endIdx]); err != nil { + return nil, err + } + } + + chunkBlockRanges = append(chunkBlockRanges, &rawdb.ChunkBlockRange{ + StartBlockNumber: daBlocks[0].BlockNumber, + EndBlockNumber: daBlocks[len(daBlocks)-1].BlockNumber, + }) + case encoding.CodecV1: + if len(chunk) != 1+numBlocks*60 { + return nil, fmt.Errorf("invalid chunk byte length, expected: %v, got: %v", 1+numBlocks*60, len(chunk)) + } + daBlocks := make([]*codecv1.DABlock, numBlocks) + for i := 0; i < numBlocks; i++ { + startIdx := 1 + i*60 // add 1 to skip numBlocks byte + endIdx := startIdx + 60 + daBlocks[i] = &codecv1.DABlock{} + if err := daBlocks[i].Decode(chunk[startIdx:endIdx]); err != nil { + return nil, err + } + } + + chunkBlockRanges = append(chunkBlockRanges, &rawdb.ChunkBlockRange{ + StartBlockNumber: daBlocks[0].BlockNumber, + EndBlockNumber: daBlocks[len(daBlocks)-1].BlockNumber, + }) + case encoding.CodecV2: + if len(chunk) != 1+numBlocks*60 { + return nil, fmt.Errorf("invalid chunk byte length, expected: %v, got: %v", 1+numBlocks*60, len(chunk)) + } + daBlocks := make([]*codecv2.DABlock, numBlocks) + for i := 0; i < numBlocks; i++ { + startIdx := 1 + i*60 // add 1 to skip numBlocks byte + endIdx := startIdx + 60 + daBlocks[i] = &codecv2.DABlock{} + if err := daBlocks[i].Decode(chunk[startIdx:endIdx]); err != nil { + return nil, err + } + } + + chunkBlockRanges = append(chunkBlockRanges, &rawdb.ChunkBlockRange{ + StartBlockNumber: daBlocks[0].BlockNumber, + EndBlockNumber: daBlocks[len(daBlocks)-1].BlockNumber, + }) + case encoding.CodecV3: + if len(chunk) != 1+numBlocks*60 { + return nil, fmt.Errorf("invalid chunk byte length, expected: %v, got: %v", 1+numBlocks*60, len(chunk)) + } + daBlocks := make([]*codecv3.DABlock, numBlocks) + for i := 0; i < numBlocks; i++ { + startIdx := 1 + i*60 // add 1 to skip numBlocks byte + endIdx := startIdx + 60 + daBlocks[i] = &codecv3.DABlock{} + if err := daBlocks[i].Decode(chunk[startIdx:endIdx]); err != nil { + return nil, err + } + } + + chunkBlockRanges = append(chunkBlockRanges, &rawdb.ChunkBlockRange{ + StartBlockNumber: daBlocks[0].BlockNumber, + EndBlockNumber: daBlocks[len(daBlocks)-1].BlockNumber, + }) + + default: + return nil, fmt.Errorf("unexpected batch version %v", codecVersion) + } + } + return chunkBlockRanges, nil +} diff --git a/rollup/rollup_sync_service/rollup_sync_service_test.go b/rollup/rollup_sync_service/rollup_sync_service_test.go index 5bc1515d4d..2e1e5ec240 100644 --- a/rollup/rollup_sync_service/rollup_sync_service_test.go +++ b/rollup/rollup_sync_service/rollup_sync_service_test.go @@ -9,6 +9,7 @@ import ( "testing" "time" + "github.com/scroll-tech/da-codec/encoding" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -49,7 +50,7 @@ func TestRollupSyncServiceStartAndStop(t *testing.T) { service.Stop() } -func TestDecodeChunkRanges(t *testing.T) { +func TestDecodeChunkRangesCodecv0(t *testing.T) { scrollChainABI, err := scrollChainMetaData.GetAbi() require.NoError(t, err) @@ -57,17 +58,17 @@ func TestDecodeChunkRanges(t *testing.T) { scrollChainABI: scrollChainABI, } - data, err := os.ReadFile("./testdata/commit_batch_transaction.json") + data, err := os.ReadFile("./testdata/commitBatch_input_codecv0.json") require.NoError(t, err, "Failed to read json file") - type transactionJson struct { - CallData string `json:"calldata"` + type tx struct { + Input string `json:"input"` } - var txObj transactionJson - err = json.Unmarshal(data, &txObj) + var commitBatch tx + err = json.Unmarshal(data, &commitBatch) require.NoError(t, err, "Failed to unmarshal transaction json") - testTxData, err := hex.DecodeString(txObj.CallData[2:]) + testTxData, err := hex.DecodeString(commitBatch.Input[2:]) if err != nil { t.Fatalf("Failed to decode string: %v", err) } @@ -78,14 +79,21 @@ func TestDecodeChunkRanges(t *testing.T) { } expectedRanges := []*rawdb.ChunkBlockRange{ - {StartBlockNumber: 335921, EndBlockNumber: 335928}, - {StartBlockNumber: 335929, EndBlockNumber: 335933}, - {StartBlockNumber: 335934, EndBlockNumber: 335938}, - {StartBlockNumber: 335939, EndBlockNumber: 335942}, - {StartBlockNumber: 335943, EndBlockNumber: 335945}, - {StartBlockNumber: 335946, EndBlockNumber: 335949}, - {StartBlockNumber: 335950, EndBlockNumber: 335956}, - {StartBlockNumber: 335957, EndBlockNumber: 335962}, + {StartBlockNumber: 4435142, EndBlockNumber: 4435142}, + {StartBlockNumber: 4435143, EndBlockNumber: 4435144}, + {StartBlockNumber: 4435145, EndBlockNumber: 4435145}, + {StartBlockNumber: 4435146, EndBlockNumber: 4435146}, + {StartBlockNumber: 4435147, EndBlockNumber: 4435147}, + {StartBlockNumber: 4435148, EndBlockNumber: 4435148}, + {StartBlockNumber: 4435149, EndBlockNumber: 4435150}, + {StartBlockNumber: 4435151, EndBlockNumber: 4435151}, + {StartBlockNumber: 4435152, EndBlockNumber: 4435152}, + {StartBlockNumber: 4435153, EndBlockNumber: 4435153}, + {StartBlockNumber: 4435154, EndBlockNumber: 4435154}, + {StartBlockNumber: 4435155, EndBlockNumber: 4435155}, + {StartBlockNumber: 4435156, EndBlockNumber: 4435156}, + {StartBlockNumber: 4435157, EndBlockNumber: 4435157}, + {StartBlockNumber: 4435158, EndBlockNumber: 4435158}, } if len(expectedRanges) != len(ranges) { @@ -94,12 +102,178 @@ func TestDecodeChunkRanges(t *testing.T) { for i := range ranges { if *expectedRanges[i] != *ranges[i] { - t.Fatalf("Mismatch at index %d: expected %v, got %v", i, *expectedRanges[i], *ranges[i]) + t.Errorf("Mismatch at index %d: expected %v, got %v", i, *expectedRanges[i], *ranges[i]) } } } -func TestGetChunkRanges(t *testing.T) { +func TestDecodeChunkRangesCodecv1(t *testing.T) { + scrollChainABI, err := scrollChainMetaData.GetAbi() + require.NoError(t, err) + + service := &RollupSyncService{ + scrollChainABI: scrollChainABI, + } + + data, err := os.ReadFile("./testdata/commitBatch_input_codecv1.json") + require.NoError(t, err, "Failed to read json file") + + type tx struct { + Input string `json:"input"` + } + var commitBatch tx + err = json.Unmarshal(data, &commitBatch) + require.NoError(t, err, "Failed to unmarshal transaction json") + + testTxData, err := hex.DecodeString(commitBatch.Input[2:]) + if err != nil { + t.Fatalf("Failed to decode string: %v", err) + } + + ranges, err := service.decodeChunkBlockRanges(testTxData) + if err != nil { + t.Fatalf("Failed to decode chunk ranges: %v", err) + } + + expectedRanges := []*rawdb.ChunkBlockRange{ + {StartBlockNumber: 1690, EndBlockNumber: 1780}, + {StartBlockNumber: 1781, EndBlockNumber: 1871}, + {StartBlockNumber: 1872, EndBlockNumber: 1962}, + {StartBlockNumber: 1963, EndBlockNumber: 2053}, + {StartBlockNumber: 2054, EndBlockNumber: 2144}, + {StartBlockNumber: 2145, EndBlockNumber: 2235}, + {StartBlockNumber: 2236, EndBlockNumber: 2326}, + {StartBlockNumber: 2327, EndBlockNumber: 2417}, + {StartBlockNumber: 2418, EndBlockNumber: 2508}, + } + + if len(expectedRanges) != len(ranges) { + t.Fatalf("Expected range length %v, got %v", len(expectedRanges), len(ranges)) + } + + for i := range ranges { + if *expectedRanges[i] != *ranges[i] { + t.Errorf("Mismatch at index %d: expected %v, got %v", i, *expectedRanges[i], *ranges[i]) + } + } +} + +func TestDecodeChunkRangesCodecv2(t *testing.T) { + scrollChainABI, err := scrollChainMetaData.GetAbi() + require.NoError(t, err) + + service := &RollupSyncService{ + scrollChainABI: scrollChainABI, + } + + data, err := os.ReadFile("./testdata/commitBatch_input_codecv2.json") + require.NoError(t, err, "Failed to read json file") + + type tx struct { + Input string `json:"input"` + } + var commitBatch tx + err = json.Unmarshal(data, &commitBatch) + require.NoError(t, err, "Failed to unmarshal transaction json") + + testTxData, err := hex.DecodeString(commitBatch.Input[2:]) + if err != nil { + t.Fatalf("Failed to decode string: %v", err) + } + + ranges, err := service.decodeChunkBlockRanges(testTxData) + if err != nil { + t.Fatalf("Failed to decode chunk ranges: %v", err) + } + + expectedRanges := []*rawdb.ChunkBlockRange{ + {StartBlockNumber: 200, EndBlockNumber: 290}, + {StartBlockNumber: 291, EndBlockNumber: 381}, + {StartBlockNumber: 382, EndBlockNumber: 472}, + {StartBlockNumber: 473, EndBlockNumber: 563}, + {StartBlockNumber: 564, EndBlockNumber: 654}, + {StartBlockNumber: 655, EndBlockNumber: 745}, + {StartBlockNumber: 746, EndBlockNumber: 836}, + {StartBlockNumber: 837, EndBlockNumber: 927}, + {StartBlockNumber: 928, EndBlockNumber: 1018}, + } + + if len(expectedRanges) != len(ranges) { + t.Fatalf("Expected range length %v, got %v", len(expectedRanges), len(ranges)) + } + + for i := range ranges { + if *expectedRanges[i] != *ranges[i] { + t.Errorf("Mismatch at index %d: expected %v, got %v", i, *expectedRanges[i], *ranges[i]) + } + } +} + +func TestDecodeChunkRangesCodecv3(t *testing.T) { + scrollChainABI, err := scrollChainMetaData.GetAbi() + require.NoError(t, err) + + service := &RollupSyncService{ + scrollChainABI: scrollChainABI, + } + + data, err := os.ReadFile("./testdata/commitBatchWithBlobProof_input_codecv3.json") + require.NoError(t, err, "Failed to read json file") + + type tx struct { + Input string `json:"input"` + } + var commitBatch tx + err = json.Unmarshal(data, &commitBatch) + require.NoError(t, err, "Failed to unmarshal transaction json") + + testTxData, err := hex.DecodeString(commitBatch.Input[2:]) + if err != nil { + t.Fatalf("Failed to decode string: %v", err) + } + + ranges, err := service.decodeChunkBlockRanges(testTxData) + if err != nil { + t.Fatalf("Failed to decode chunk ranges: %v", err) + } + + expectedRanges := []*rawdb.ChunkBlockRange{ + {StartBlockNumber: 1, EndBlockNumber: 9}, + {StartBlockNumber: 10, EndBlockNumber: 20}, + {StartBlockNumber: 21, EndBlockNumber: 21}, + {StartBlockNumber: 22, EndBlockNumber: 22}, + {StartBlockNumber: 23, EndBlockNumber: 23}, + {StartBlockNumber: 24, EndBlockNumber: 24}, + {StartBlockNumber: 25, EndBlockNumber: 25}, + {StartBlockNumber: 26, EndBlockNumber: 26}, + {StartBlockNumber: 27, EndBlockNumber: 27}, + {StartBlockNumber: 28, EndBlockNumber: 28}, + {StartBlockNumber: 29, EndBlockNumber: 29}, + {StartBlockNumber: 30, EndBlockNumber: 30}, + {StartBlockNumber: 31, EndBlockNumber: 31}, + {StartBlockNumber: 32, EndBlockNumber: 32}, + {StartBlockNumber: 33, EndBlockNumber: 33}, + {StartBlockNumber: 34, EndBlockNumber: 34}, + {StartBlockNumber: 35, EndBlockNumber: 35}, + {StartBlockNumber: 36, EndBlockNumber: 36}, + {StartBlockNumber: 37, EndBlockNumber: 37}, + {StartBlockNumber: 38, EndBlockNumber: 38}, + {StartBlockNumber: 39, EndBlockNumber: 39}, + {StartBlockNumber: 40, EndBlockNumber: 40}, + } + + if len(expectedRanges) != len(ranges) { + t.Fatalf("Expected range length %v, got %v", len(expectedRanges), len(ranges)) + } + + for i := range ranges { + if *expectedRanges[i] != *ranges[i] { + t.Errorf("Mismatch at index %d: expected %v, got %v", i, *expectedRanges[i], *ranges[i]) + } + } +} + +func TestGetChunkRangesCodecv0(t *testing.T) { genesisConfig := ¶ms.ChainConfig{ Scroll: params.ScrollConfig{ L1Config: ¶ms.L1Config{ @@ -110,12 +284,12 @@ func TestGetChunkRanges(t *testing.T) { } db := rawdb.NewDatabase(memorydb.New()) - rlpData, err := os.ReadFile("./testdata/commit_batch_tx.rlp") + rlpData, err := os.ReadFile("./testdata/commitBatch_codecv0.rlp") if err != nil { t.Fatalf("Failed to read RLP data: %v", err) } l1Client := &mockEthClient{ - commitBatchRLP: rlpData, + txRLP: rlpData, } bc := &core.BlockChain{} stack, err := node.New(&node.DefaultConfig) @@ -151,68 +325,562 @@ func TestGetChunkRanges(t *testing.T) { } } -func TestValidateBatch(t *testing.T) { - templateBlockTrace1, err := os.ReadFile("./testdata/blockTrace_02.json") - require.NoError(t, err) - wrappedBlock1 := &WrappedBlock{} - err = json.Unmarshal(templateBlockTrace1, wrappedBlock1) - require.NoError(t, err) - chunk1 := &Chunk{Blocks: []*WrappedBlock{wrappedBlock1}} +func TestGetChunkRangesCodecv1(t *testing.T) { + genesisConfig := ¶ms.ChainConfig{ + Scroll: params.ScrollConfig{ + L1Config: ¶ms.L1Config{ + L1ChainId: 11155111, + ScrollChainAddress: common.HexToAddress("0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0"), + }, + }, + } + db := rawdb.NewDatabase(memorydb.New()) - templateBlockTrace2, err := os.ReadFile("./testdata/blockTrace_03.json") - require.NoError(t, err) - wrappedBlock2 := &WrappedBlock{} - err = json.Unmarshal(templateBlockTrace2, wrappedBlock2) - require.NoError(t, err) - chunk2 := &Chunk{Blocks: []*WrappedBlock{wrappedBlock2}} + rlpData, err := os.ReadFile("./testdata/commitBatch_codecv1.rlp") + if err != nil { + t.Fatalf("Failed to read RLP data: %v", err) + } + l1Client := &mockEthClient{ + txRLP: rlpData, + } + bc := &core.BlockChain{} + stack, err := node.New(&node.DefaultConfig) + if err != nil { + t.Fatalf("Failed to new P2P node: %v", err) + } + defer stack.Close() + service, err := NewRollupSyncService(context.Background(), genesisConfig, db, l1Client, bc, stack) + if err != nil { + t.Fatalf("Failed to new rollup sync service: %v", err) + } - templateBlockTrace3, err := os.ReadFile("./testdata/blockTrace_04.json") + vLog := &types.Log{ + TxHash: common.HexToHash("0x1"), + } + ranges, err := service.getChunkRanges(1, vLog) require.NoError(t, err) - wrappedBlock3 := &WrappedBlock{} - err = json.Unmarshal(templateBlockTrace3, wrappedBlock3) + + expectedRanges := []*rawdb.ChunkBlockRange{ + {StartBlockNumber: 1, EndBlockNumber: 11}, + } + + if len(expectedRanges) != len(ranges) { + t.Fatalf("Expected range length %v, got %v", len(expectedRanges), len(ranges)) + } + + for i := range ranges { + if *expectedRanges[i] != *ranges[i] { + t.Fatalf("Mismatch at index %d: expected %v, got %v", i, *expectedRanges[i], *ranges[i]) + } + } +} + +func TestGetChunkRangesCodecv2(t *testing.T) { + genesisConfig := ¶ms.ChainConfig{ + Scroll: params.ScrollConfig{ + L1Config: ¶ms.L1Config{ + L1ChainId: 11155111, + ScrollChainAddress: common.HexToAddress("0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0"), + }, + }, + } + db := rawdb.NewDatabase(memorydb.New()) + + rlpData, err := os.ReadFile("./testdata/commitBatch_codecv2.rlp") + if err != nil { + t.Fatalf("Failed to read RLP data: %v", err) + } + l1Client := &mockEthClient{ + txRLP: rlpData, + } + bc := &core.BlockChain{} + stack, err := node.New(&node.DefaultConfig) + if err != nil { + t.Fatalf("Failed to new P2P node: %v", err) + } + defer stack.Close() + service, err := NewRollupSyncService(context.Background(), genesisConfig, db, l1Client, bc, stack) + if err != nil { + t.Fatalf("Failed to new rollup sync service: %v", err) + } + + vLog := &types.Log{ + TxHash: common.HexToHash("0x2"), + } + ranges, err := service.getChunkRanges(1, vLog) require.NoError(t, err) - chunk3 := &Chunk{Blocks: []*WrappedBlock{wrappedBlock3}} + + expectedRanges := []*rawdb.ChunkBlockRange{ + {StartBlockNumber: 143, EndBlockNumber: 143}, + {StartBlockNumber: 144, EndBlockNumber: 144}, + {StartBlockNumber: 145, EndBlockNumber: 145}, + {StartBlockNumber: 146, EndBlockNumber: 146}, + {StartBlockNumber: 147, EndBlockNumber: 147}, + {StartBlockNumber: 148, EndBlockNumber: 148}, + {StartBlockNumber: 149, EndBlockNumber: 149}, + {StartBlockNumber: 150, EndBlockNumber: 150}, + {StartBlockNumber: 151, EndBlockNumber: 151}, + {StartBlockNumber: 152, EndBlockNumber: 152}, + {StartBlockNumber: 153, EndBlockNumber: 153}, + {StartBlockNumber: 154, EndBlockNumber: 154}, + {StartBlockNumber: 155, EndBlockNumber: 155}, + {StartBlockNumber: 156, EndBlockNumber: 156}, + {StartBlockNumber: 157, EndBlockNumber: 157}, + {StartBlockNumber: 158, EndBlockNumber: 158}, + {StartBlockNumber: 159, EndBlockNumber: 159}, + {StartBlockNumber: 160, EndBlockNumber: 160}, + {StartBlockNumber: 161, EndBlockNumber: 161}, + {StartBlockNumber: 162, EndBlockNumber: 162}, + {StartBlockNumber: 163, EndBlockNumber: 163}, + {StartBlockNumber: 164, EndBlockNumber: 164}, + {StartBlockNumber: 165, EndBlockNumber: 168}, + {StartBlockNumber: 169, EndBlockNumber: 169}, + {StartBlockNumber: 170, EndBlockNumber: 170}, + {StartBlockNumber: 171, EndBlockNumber: 171}, + {StartBlockNumber: 172, EndBlockNumber: 172}, + {StartBlockNumber: 173, EndBlockNumber: 173}, + {StartBlockNumber: 174, EndBlockNumber: 174}, + } + + if len(expectedRanges) != len(ranges) { + t.Fatalf("Expected range length %v, got %v", len(expectedRanges), len(ranges)) + } + + for i := range ranges { + if *expectedRanges[i] != *ranges[i] { + t.Fatalf("Mismatch at index %d: expected %v, got %v", i, *expectedRanges[i], *ranges[i]) + } + } +} + +func TestGetChunkRangesCodecv3(t *testing.T) { + genesisConfig := ¶ms.ChainConfig{ + Scroll: params.ScrollConfig{ + L1Config: ¶ms.L1Config{ + L1ChainId: 11155111, + ScrollChainAddress: common.HexToAddress("0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0"), + }, + }, + } + db := rawdb.NewDatabase(memorydb.New()) + + rlpData, err := os.ReadFile("./testdata/commitBatchWithBlobProof_codecv3.rlp") + if err != nil { + t.Fatalf("Failed to read RLP data: %v", err) + } + l1Client := &mockEthClient{ + txRLP: rlpData, + } + bc := &core.BlockChain{} + stack, err := node.New(&node.DefaultConfig) + if err != nil { + t.Fatalf("Failed to new P2P node: %v", err) + } + defer stack.Close() + service, err := NewRollupSyncService(context.Background(), genesisConfig, db, l1Client, bc, stack) + if err != nil { + t.Fatalf("Failed to new rollup sync service: %v", err) + } + + vLog := &types.Log{ + TxHash: common.HexToHash("0x3"), + } + ranges, err := service.getChunkRanges(1, vLog) + require.NoError(t, err) + + expectedRanges := []*rawdb.ChunkBlockRange{ + {StartBlockNumber: 41, EndBlockNumber: 41}, + {StartBlockNumber: 42, EndBlockNumber: 42}, + {StartBlockNumber: 43, EndBlockNumber: 43}, + {StartBlockNumber: 44, EndBlockNumber: 44}, + {StartBlockNumber: 45, EndBlockNumber: 45}, + {StartBlockNumber: 46, EndBlockNumber: 46}, + {StartBlockNumber: 47, EndBlockNumber: 47}, + {StartBlockNumber: 48, EndBlockNumber: 48}, + {StartBlockNumber: 49, EndBlockNumber: 49}, + {StartBlockNumber: 50, EndBlockNumber: 50}, + {StartBlockNumber: 51, EndBlockNumber: 51}, + {StartBlockNumber: 52, EndBlockNumber: 52}, + {StartBlockNumber: 53, EndBlockNumber: 53}, + {StartBlockNumber: 54, EndBlockNumber: 54}, + {StartBlockNumber: 55, EndBlockNumber: 55}, + {StartBlockNumber: 56, EndBlockNumber: 56}, + {StartBlockNumber: 57, EndBlockNumber: 57}, + {StartBlockNumber: 58, EndBlockNumber: 58}, + {StartBlockNumber: 59, EndBlockNumber: 59}, + {StartBlockNumber: 60, EndBlockNumber: 60}, + {StartBlockNumber: 61, EndBlockNumber: 61}, + {StartBlockNumber: 62, EndBlockNumber: 62}, + {StartBlockNumber: 63, EndBlockNumber: 63}, + {StartBlockNumber: 64, EndBlockNumber: 64}, + {StartBlockNumber: 65, EndBlockNumber: 65}, + {StartBlockNumber: 66, EndBlockNumber: 66}, + {StartBlockNumber: 67, EndBlockNumber: 67}, + {StartBlockNumber: 68, EndBlockNumber: 68}, + {StartBlockNumber: 69, EndBlockNumber: 69}, + {StartBlockNumber: 70, EndBlockNumber: 70}, + } + + if len(expectedRanges) != len(ranges) { + t.Fatalf("Expected range length %v, got %v", len(expectedRanges), len(ranges)) + } + + for i := range ranges { + if *expectedRanges[i] != *ranges[i] { + t.Fatalf("Mismatch at index %d: expected %v, got %v", i, *expectedRanges[i], *ranges[i]) + } + } +} + +func TestValidateBatchCodecv0(t *testing.T) { + chainConfig := ¶ms.ChainConfig{} + + block1 := readBlockFromJSON(t, "./testdata/blockTrace_02.json") + chunk1 := &encoding.Chunk{Blocks: []*encoding.Block{block1}} + + block2 := readBlockFromJSON(t, "./testdata/blockTrace_03.json") + chunk2 := &encoding.Chunk{Blocks: []*encoding.Block{block2}} + + block3 := readBlockFromJSON(t, "./testdata/blockTrace_04.json") + chunk3 := &encoding.Chunk{Blocks: []*encoding.Block{block3}} parentBatchMeta1 := &rawdb.FinalizedBatchMeta{} event1 := &L1FinalizeBatchEvent{ BatchIndex: big.NewInt(0), - BatchHash: common.HexToHash("0xd0f52bc254646e639bf24cc34606319a111975b2fdc431b1381eb6199bc09790"), + BatchHash: common.HexToHash("0xfd3ecf106ce993adc6db68e42ce701bfe638434395abdeeb871f7bd395ae2368"), StateRoot: chunk3.Blocks[len(chunk3.Blocks)-1].Header.Root, WithdrawRoot: chunk3.Blocks[len(chunk3.Blocks)-1].WithdrawRoot, } - endBlock1, finalizedBatchMeta1, err := validateBatch(event1, parentBatchMeta1, []*Chunk{chunk1, chunk2, chunk3}, nil) + + endBlock1, finalizedBatchMeta1, err := validateBatch(event1.BatchIndex.Uint64(), event1, parentBatchMeta1, []*encoding.Chunk{chunk1, chunk2, chunk3}, chainConfig, nil) assert.NoError(t, err) assert.Equal(t, uint64(13), endBlock1) - templateBlockTrace4, err := os.ReadFile("./testdata/blockTrace_05.json") - require.NoError(t, err) - wrappedBlock4 := &WrappedBlock{} - err = json.Unmarshal(templateBlockTrace4, wrappedBlock4) - require.NoError(t, err) - chunk4 := &Chunk{Blocks: []*WrappedBlock{wrappedBlock4}} + block4 := readBlockFromJSON(t, "./testdata/blockTrace_05.json") + chunk4 := &encoding.Chunk{Blocks: []*encoding.Block{block4}} parentBatchMeta2 := &rawdb.FinalizedBatchMeta{ BatchHash: event1.BatchHash, TotalL1MessagePopped: 11, - StateRoot: chunk3.Blocks[len(chunk3.Blocks)-1].Header.Root, - WithdrawRoot: chunk3.Blocks[len(chunk3.Blocks)-1].WithdrawRoot, + StateRoot: event1.StateRoot, + WithdrawRoot: event1.WithdrawRoot, } assert.Equal(t, parentBatchMeta2, finalizedBatchMeta1) event2 := &L1FinalizeBatchEvent{ BatchIndex: big.NewInt(1), - BatchHash: common.HexToHash("0xfb77bf8f3bf449126ebbf403fdccfcf78636e34d72d62eed8da0e8c9fd38fa63"), + BatchHash: common.HexToHash("0xadb8e526c3fdc2045614158300789cd66e7a945efe5a484db00b5ef9a26016d7"), StateRoot: chunk4.Blocks[len(chunk4.Blocks)-1].Header.Root, WithdrawRoot: chunk4.Blocks[len(chunk4.Blocks)-1].WithdrawRoot, } - endBlock2, finalizedBatchMeta2, err := validateBatch(event2, parentBatchMeta2, []*Chunk{chunk4}, nil) + endBlock2, finalizedBatchMeta2, err := validateBatch(event2.BatchIndex.Uint64(), event2, parentBatchMeta2, []*encoding.Chunk{chunk4}, chainConfig, nil) assert.NoError(t, err) assert.Equal(t, uint64(17), endBlock2) parentBatchMeta3 := &rawdb.FinalizedBatchMeta{ BatchHash: event2.BatchHash, TotalL1MessagePopped: 42, - StateRoot: chunk4.Blocks[len(chunk4.Blocks)-1].Header.Root, - WithdrawRoot: chunk4.Blocks[len(chunk4.Blocks)-1].WithdrawRoot, + StateRoot: event2.StateRoot, + WithdrawRoot: event2.WithdrawRoot, } assert.Equal(t, parentBatchMeta3, finalizedBatchMeta2) } + +func TestValidateBatchCodecv1(t *testing.T) { + chainConfig := ¶ms.ChainConfig{BernoulliBlock: big.NewInt(0)} + + block1 := readBlockFromJSON(t, "./testdata/blockTrace_02.json") + chunk1 := &encoding.Chunk{Blocks: []*encoding.Block{block1}} + + block2 := readBlockFromJSON(t, "./testdata/blockTrace_03.json") + chunk2 := &encoding.Chunk{Blocks: []*encoding.Block{block2}} + + block3 := readBlockFromJSON(t, "./testdata/blockTrace_04.json") + chunk3 := &encoding.Chunk{Blocks: []*encoding.Block{block3}} + + parentBatchMeta1 := &rawdb.FinalizedBatchMeta{} + event1 := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(0), + BatchHash: common.HexToHash("0x73cb3310646716cb782702a0ec4ad33cf55633c85daf96b641953c5defe58031"), + StateRoot: chunk3.Blocks[len(chunk3.Blocks)-1].Header.Root, + WithdrawRoot: chunk3.Blocks[len(chunk3.Blocks)-1].WithdrawRoot, + } + + endBlock1, finalizedBatchMeta1, err := validateBatch(event1.BatchIndex.Uint64(), event1, parentBatchMeta1, []*encoding.Chunk{chunk1, chunk2, chunk3}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(13), endBlock1) + + block4 := readBlockFromJSON(t, "./testdata/blockTrace_05.json") + chunk4 := &encoding.Chunk{Blocks: []*encoding.Block{block4}} + + parentBatchMeta2 := &rawdb.FinalizedBatchMeta{ + BatchHash: event1.BatchHash, + TotalL1MessagePopped: 11, + StateRoot: event1.StateRoot, + WithdrawRoot: event1.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta2, finalizedBatchMeta1) + event2 := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(1), + BatchHash: common.HexToHash("0x7f230ce84b4bf86f8ee22ffb5c145e3ef3ddf2a76da4936a33f33cebdb63a48a"), + StateRoot: chunk4.Blocks[len(chunk4.Blocks)-1].Header.Root, + WithdrawRoot: chunk4.Blocks[len(chunk4.Blocks)-1].WithdrawRoot, + } + endBlock2, finalizedBatchMeta2, err := validateBatch(event2.BatchIndex.Uint64(), event2, parentBatchMeta2, []*encoding.Chunk{chunk4}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(17), endBlock2) + + parentBatchMeta3 := &rawdb.FinalizedBatchMeta{ + BatchHash: event2.BatchHash, + TotalL1MessagePopped: 42, + StateRoot: event2.StateRoot, + WithdrawRoot: event2.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta3, finalizedBatchMeta2) +} + +func TestValidateBatchCodecv2(t *testing.T) { + chainConfig := ¶ms.ChainConfig{BernoulliBlock: big.NewInt(0), CurieBlock: big.NewInt(0)} + + block1 := readBlockFromJSON(t, "./testdata/blockTrace_02.json") + chunk1 := &encoding.Chunk{Blocks: []*encoding.Block{block1}} + + block2 := readBlockFromJSON(t, "./testdata/blockTrace_03.json") + chunk2 := &encoding.Chunk{Blocks: []*encoding.Block{block2}} + + block3 := readBlockFromJSON(t, "./testdata/blockTrace_04.json") + chunk3 := &encoding.Chunk{Blocks: []*encoding.Block{block3}} + + parentBatchMeta1 := &rawdb.FinalizedBatchMeta{} + event1 := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(0), + BatchHash: common.HexToHash("0xaccf37a0b974f2058692d366b2ea85502c99db4a0bcb9b77903b49bf866a463b"), + StateRoot: chunk3.Blocks[len(chunk3.Blocks)-1].Header.Root, + WithdrawRoot: chunk3.Blocks[len(chunk3.Blocks)-1].WithdrawRoot, + } + + endBlock1, finalizedBatchMeta1, err := validateBatch(event1.BatchIndex.Uint64(), event1, parentBatchMeta1, []*encoding.Chunk{chunk1, chunk2, chunk3}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(13), endBlock1) + + block4 := readBlockFromJSON(t, "./testdata/blockTrace_05.json") + chunk4 := &encoding.Chunk{Blocks: []*encoding.Block{block4}} + + parentBatchMeta2 := &rawdb.FinalizedBatchMeta{ + BatchHash: event1.BatchHash, + TotalL1MessagePopped: 11, + StateRoot: event1.StateRoot, + WithdrawRoot: event1.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta2, finalizedBatchMeta1) + event2 := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(1), + BatchHash: common.HexToHash("0x62ec61e1fdb334868ffd471df601f6858e692af01d42b5077c805a9fd4558c91"), + StateRoot: chunk4.Blocks[len(chunk4.Blocks)-1].Header.Root, + WithdrawRoot: chunk4.Blocks[len(chunk4.Blocks)-1].WithdrawRoot, + } + endBlock2, finalizedBatchMeta2, err := validateBatch(event2.BatchIndex.Uint64(), event2, parentBatchMeta2, []*encoding.Chunk{chunk4}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(17), endBlock2) + + parentBatchMeta3 := &rawdb.FinalizedBatchMeta{ + BatchHash: event2.BatchHash, + TotalL1MessagePopped: 42, + StateRoot: event2.StateRoot, + WithdrawRoot: event2.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta3, finalizedBatchMeta2) +} + +func TestValidateBatchCodecv3(t *testing.T) { + chainConfig := ¶ms.ChainConfig{LondonBlock: big.NewInt(0), BernoulliBlock: big.NewInt(0), CurieBlock: big.NewInt(0), DarwinTime: new(uint64)} + + block1 := readBlockFromJSON(t, "./testdata/blockTrace_02.json") + chunk1 := &encoding.Chunk{Blocks: []*encoding.Block{block1}} + + block2 := readBlockFromJSON(t, "./testdata/blockTrace_03.json") + chunk2 := &encoding.Chunk{Blocks: []*encoding.Block{block2}} + + block3 := readBlockFromJSON(t, "./testdata/blockTrace_04.json") + chunk3 := &encoding.Chunk{Blocks: []*encoding.Block{block3}} + + parentBatchMeta1 := &rawdb.FinalizedBatchMeta{} + event1 := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(0), + BatchHash: common.HexToHash("0x015eb56fb95bf9a06157cfb8389ba7c2b6b08373e22581ac2ba387003708265d"), + StateRoot: chunk3.Blocks[len(chunk3.Blocks)-1].Header.Root, + WithdrawRoot: chunk3.Blocks[len(chunk3.Blocks)-1].WithdrawRoot, + } + + endBlock1, finalizedBatchMeta1, err := validateBatch(event1.BatchIndex.Uint64(), event1, parentBatchMeta1, []*encoding.Chunk{chunk1, chunk2, chunk3}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(13), endBlock1) + + block4 := readBlockFromJSON(t, "./testdata/blockTrace_05.json") + chunk4 := &encoding.Chunk{Blocks: []*encoding.Block{block4}} + + parentBatchMeta2 := &rawdb.FinalizedBatchMeta{ + BatchHash: event1.BatchHash, + TotalL1MessagePopped: 11, + StateRoot: event1.StateRoot, + WithdrawRoot: event1.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta2, finalizedBatchMeta1) + event2 := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(1), + BatchHash: common.HexToHash("0x382cb0d507e3d7507f556c52e05f76b05e364ad26205e7f62c95967a19c2f35d"), + StateRoot: chunk4.Blocks[len(chunk4.Blocks)-1].Header.Root, + WithdrawRoot: chunk4.Blocks[len(chunk4.Blocks)-1].WithdrawRoot, + } + endBlock2, finalizedBatchMeta2, err := validateBatch(event2.BatchIndex.Uint64(), event2, parentBatchMeta2, []*encoding.Chunk{chunk4}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(17), endBlock2) + + parentBatchMeta3 := &rawdb.FinalizedBatchMeta{ + BatchHash: event2.BatchHash, + TotalL1MessagePopped: 42, + StateRoot: event2.StateRoot, + WithdrawRoot: event2.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta3, finalizedBatchMeta2) +} + +func TestValidateBatchUpgrades(t *testing.T) { + chainConfig := ¶ms.ChainConfig{LondonBlock: big.NewInt(0), BernoulliBlock: big.NewInt(3), CurieBlock: big.NewInt(14), DarwinTime: func() *uint64 { t := uint64(1684762320); return &t }()} + + block1 := readBlockFromJSON(t, "./testdata/blockTrace_02.json") + chunk1 := &encoding.Chunk{Blocks: []*encoding.Block{block1}} + + parentBatchMeta1 := &rawdb.FinalizedBatchMeta{} + event1 := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(0), + BatchHash: common.HexToHash("0x4605465b7470c8565b123330d7186805caf9a7f2656d8e9e744b62e14ca22c3d"), + StateRoot: chunk1.Blocks[len(chunk1.Blocks)-1].Header.Root, + WithdrawRoot: chunk1.Blocks[len(chunk1.Blocks)-1].WithdrawRoot, + } + + endBlock1, finalizedBatchMeta1, err := validateBatch(event1.BatchIndex.Uint64(), event1, parentBatchMeta1, []*encoding.Chunk{chunk1}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(2), endBlock1) + + block2 := readBlockFromJSON(t, "./testdata/blockTrace_03.json") + chunk2 := &encoding.Chunk{Blocks: []*encoding.Block{block2}} + + parentBatchMeta2 := &rawdb.FinalizedBatchMeta{ + BatchHash: event1.BatchHash, + TotalL1MessagePopped: 0, + StateRoot: event1.StateRoot, + WithdrawRoot: event1.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta2, finalizedBatchMeta1) + event2 := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(1), + BatchHash: common.HexToHash("0xc4af33bce87aa702edc3ad4b7d34730d25719427704e250787f99e0f55049252"), + StateRoot: chunk2.Blocks[len(chunk2.Blocks)-1].Header.Root, + WithdrawRoot: chunk2.Blocks[len(chunk2.Blocks)-1].WithdrawRoot, + } + endBlock2, finalizedBatchMeta2, err := validateBatch(event2.BatchIndex.Uint64(), event2, parentBatchMeta2, []*encoding.Chunk{chunk2}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(3), endBlock2) + + block3 := readBlockFromJSON(t, "./testdata/blockTrace_04.json") + chunk3 := &encoding.Chunk{Blocks: []*encoding.Block{block3}} + + parentBatchMeta3 := &rawdb.FinalizedBatchMeta{ + BatchHash: event2.BatchHash, + TotalL1MessagePopped: 0, + StateRoot: event2.StateRoot, + WithdrawRoot: event2.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta3, finalizedBatchMeta2) + event3 := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(2), + BatchHash: common.HexToHash("0x9f87f2de2019ed635f867b1e61be6a607c3174ced096f370fd18556c38833c62"), + StateRoot: chunk3.Blocks[len(chunk3.Blocks)-1].Header.Root, + WithdrawRoot: chunk3.Blocks[len(chunk3.Blocks)-1].WithdrawRoot, + } + endBlock3, finalizedBatchMeta3, err := validateBatch(event3.BatchIndex.Uint64(), event3, parentBatchMeta3, []*encoding.Chunk{chunk3}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(13), endBlock3) + + block4 := readBlockFromJSON(t, "./testdata/blockTrace_05.json") + chunk4 := &encoding.Chunk{Blocks: []*encoding.Block{block4}} + + parentBatchMeta4 := &rawdb.FinalizedBatchMeta{ + BatchHash: event3.BatchHash, + TotalL1MessagePopped: 11, + StateRoot: event3.StateRoot, + WithdrawRoot: event3.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta4, finalizedBatchMeta3) + event4 := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(3), + BatchHash: common.HexToHash("0xd33332aef8efbc9a0be4c4694088ac0dd052d2d3ad3ffda5e4c2010825e476bc"), + StateRoot: chunk4.Blocks[len(chunk4.Blocks)-1].Header.Root, + WithdrawRoot: chunk4.Blocks[len(chunk4.Blocks)-1].WithdrawRoot, + } + endBlock4, finalizedBatchMeta4, err := validateBatch(event4.BatchIndex.Uint64(), event4, parentBatchMeta4, []*encoding.Chunk{chunk4}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(17), endBlock4) + + parentBatchMeta5 := &rawdb.FinalizedBatchMeta{ + BatchHash: event4.BatchHash, + TotalL1MessagePopped: 42, + StateRoot: event4.StateRoot, + WithdrawRoot: event4.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta5, finalizedBatchMeta4) +} + +func TestValidateBatchInFinalizeByBundle(t *testing.T) { + chainConfig := ¶ms.ChainConfig{LondonBlock: big.NewInt(0), BernoulliBlock: big.NewInt(0), CurieBlock: big.NewInt(0), DarwinTime: func() *uint64 { t := uint64(0); return &t }()} + + block1 := readBlockFromJSON(t, "./testdata/blockTrace_02.json") + block2 := readBlockFromJSON(t, "./testdata/blockTrace_03.json") + block3 := readBlockFromJSON(t, "./testdata/blockTrace_04.json") + block4 := readBlockFromJSON(t, "./testdata/blockTrace_05.json") + + chunk1 := &encoding.Chunk{Blocks: []*encoding.Block{block1}} + chunk2 := &encoding.Chunk{Blocks: []*encoding.Block{block2}} + chunk3 := &encoding.Chunk{Blocks: []*encoding.Block{block3}} + chunk4 := &encoding.Chunk{Blocks: []*encoding.Block{block4}} + + event := &L1FinalizeBatchEvent{ + BatchIndex: big.NewInt(3), + BatchHash: common.HexToHash("0xaa6dc7cc432c8d46a9373e1e96d829a1e24e52fe0468012ff062793ea8f5b55e"), + StateRoot: chunk4.Blocks[len(chunk4.Blocks)-1].Header.Root, + WithdrawRoot: chunk4.Blocks[len(chunk4.Blocks)-1].WithdrawRoot, + } + + endBlock1, finalizedBatchMeta1, err := validateBatch(0, event, &rawdb.FinalizedBatchMeta{}, []*encoding.Chunk{chunk1}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(2), endBlock1) + + endBlock2, finalizedBatchMeta2, err := validateBatch(1, event, finalizedBatchMeta1, []*encoding.Chunk{chunk2}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(3), endBlock2) + + endBlock3, finalizedBatchMeta3, err := validateBatch(2, event, finalizedBatchMeta2, []*encoding.Chunk{chunk3}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(13), endBlock3) + + endBlock4, finalizedBatchMeta4, err := validateBatch(3, event, finalizedBatchMeta3, []*encoding.Chunk{chunk4}, chainConfig, nil) + assert.NoError(t, err) + assert.Equal(t, uint64(17), endBlock4) + + parentBatchMeta5 := &rawdb.FinalizedBatchMeta{ + BatchHash: event.BatchHash, + TotalL1MessagePopped: 42, + StateRoot: event.StateRoot, + WithdrawRoot: event.WithdrawRoot, + } + assert.Equal(t, parentBatchMeta5, finalizedBatchMeta4) +} + +func readBlockFromJSON(t *testing.T, filename string) *encoding.Block { + data, err := os.ReadFile(filename) + assert.NoError(t, err) + + block := &encoding.Block{} + assert.NoError(t, json.Unmarshal(data, block)) + return block +} diff --git a/rollup/rollup_sync_service/testdata/commitBatchWithBlobProof_codecv3.rlp b/rollup/rollup_sync_service/testdata/commitBatchWithBlobProof_codecv3.rlp new file mode 100644 index 0000000000..4640f84687 Binary files /dev/null and b/rollup/rollup_sync_service/testdata/commitBatchWithBlobProof_codecv3.rlp differ diff --git a/rollup/rollup_sync_service/testdata/commitBatchWithBlobProof_input_codecv3.json b/rollup/rollup_sync_service/testdata/commitBatchWithBlobProof_input_codecv3.json new file mode 100644 index 0000000000..ca13d9a749 --- /dev/null +++ b/rollup/rollup_sync_service/testdata/commitBatchWithBlobProof_input_codecv3.json @@ -0,0 +1,31 @@ +{ + "blockHash": "0xb7f00b3235ef6066d61e5e5be5472cdd1edc0a64537b84f110f860e6614a4759", + "blockNumber": "0x187", + "from": "0xf472086186382fca55cd182de196520abd76f69d", + "gas": "0x3e052", + "gasPrice": "0x3b9aca07", + "maxFeePerGas": "0x3b9aca0e", + "maxPriorityFeePerGas": "0x3b9aca00", + "maxFeePerBlobGas": "0x2", + "hash": "0x8de0573f1f72ced727838df60088d9084333d27384a77bf331d520cac0e6a298", + "input": "0x86b053a9000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000108000000000000000000000000000000000000000000000000000000000000010a0000000000000000000000000000000000000000000000000000000000000005900000000000000000000000000000000000000000000000000e5a938b077b60c939e58eeede33d4385228b532cf73e54aca76731a27acc86b7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000008e0000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000009a00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a600000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000b200000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000ca00000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d600000000000000000000000000000000000000000000000000000000000000dc00000000000000000000000000000000000000000000000000000000000000e200000000000000000000000000000000000000000000000000000000000000e800000000000000000000000000000000000000000000000000000000000000ee0000000000000000000000000000000000000000000000000000000000000021d09000000000000000100000000668ebf810000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000000200000000668ec0650000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000000300000000668ec0680000000000000000000000000000000000000000000000000000000002e71a60000000000098968000070000000000000000000400000000668ec06b0000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000000500000000668ec08e0000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000000600000000668ec0910000000000000000000000000000000000000000000000000000000002e71a60000000000098968000080000000000000000000700000000668ec0940000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000000800000000668ec0970000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000000900000000668ec0b50000000000000000000000000000000000000000000000000000000002e71a6000000000009896800001000000000000000000000000000000000000000000000000000000000000000000000002950b000000000000000a00000000668ec0b80000000000000000000000000000000000000000000000000000000002e71a60000000000098968000020000000000000000000b00000000668ec0bb0000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000000c00000000668ec1630000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000000d00000000668ec1660000000000000000000000000000000000000000000000000000000002e71a60000000000098968000120000000000000000000e00000000668ec1690000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000000f00000000668ec16e0000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000001000000000668ec1710000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000001100000000668ec1740000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000001200000000668ec17c0000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000001300000000668ec21b0000000000000000000000000000000000000000000000000000000002e71a60000000000098968000010000000000000000001400000000668ec21e0000000000000000000000000000000000000000000000000000000002e71a600000000000989680003400000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001500000000668ec2210000000000000000000000000000000000000000000000000000000002e71a60000000000098968000400000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001600000000668ec2240000000000000000000000000000000000000000000000000000000002e71a600000000000989680003d0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001700000000668ec2270000000000000000000000000000000000000000000000000000000002e71a600000000000989680003f0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001800000000668ec22a0000000000000000000000000000000000000000000000000000000002e71a60000000000098968000400000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001900000000668ec22d0000000000000000000000000000000000000000000000000000000002e71a600000000000989680003d0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001a00000000668ec2300000000000000000000000000000000000000000000000000000000002e71a600000000000989680003e0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001b00000000668ec2330000000000000000000000000000000000000000000000000000000002e71a60000000000098968000400000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001c00000000668ec2360000000000000000000000000000000000000000000000000000000002e71a600000000000989680003f0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001d00000000668ec2390000000000000000000000000000000000000000000000000000000002e71a60000000000098968000410000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001e00000000668ec23c0000000000000000000000000000000000000000000000000000000002e71a600000000000989680003e0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000001f00000000668ec23f0000000000000000000000000000000000000000000000000000000002e71a600000000000989680003f0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000002000000000668ec2420000000000000000000000000000000000000000000000000000000002e71a600000000000989680003d0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000002100000000668ec2450000000000000000000000000000000000000000000000000000000002e71a600000000000989680003a0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000002200000000668ec2480000000000000000000000000000000000000000000000000000000002e71a600000000000989680003d0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000002300000000668ec24b0000000000000000000000000000000000000000000000000000000002e71a600000000000989680003e0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000002400000000668ec24e0000000000000000000000000000000000000000000000000000000002e71a600000000000989680003c0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000002500000000668ec2510000000000000000000000000000000000000000000000000000000002e71a600000000000989680003b0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000002600000000668ec2540000000000000000000000000000000000000000000000000000000002e71a600000000000989680003d0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000002700000000668ec2570000000000000000000000000000000000000000000000000000000002e71a60000000000098968000370000000000000000000000000000000000000000000000000000000000000000000000003d01000000000000002800000000668ec25a0000000000000000000000000000000000000000000000000000000002e71a60000000000098968000390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00b3a20d1a749d0917ef837a9973e549be83321ecafc3b8388f25c5c247078e383e4b062167826f53032aa9bb0fc2a8ef610e1c4e5d0f70ee133a76b5020224a8b2428ba7ec725c61950716b2758aa21f1b0cc3f0bf1551474537093924829c170e3d74228be4c07acf24b5c1adb1adac92d25a32f79ba51731343fc0f52cb11e32bbcedb1969853cf854f61862e915744fb5fbc3d4ec8701fc0f626f5c97211b", + "nonce": "0x1", + "to": "0x475652655309fa7cb1397537bee9a7fbafdc11ca", + "transactionIndex": "0x0", + "value": "0x0", + "type": "0x3", + "accessList": [ + { + "address": "0x3d9a28f7692cb94740bb64f08cb5cd19aa5cd3dd", + "storageKeys": [] + } + ], + "chainId": "0x1b207", + "blobVersionedHashes": [ + "0x0132d1238782d359051322a61d997a57f5b2f86d6f36c2aad4eda0118e3a213a" + ], + "v": "0x0", + "r": "0xe8f6ca4ef76a295dc6aa0099e0e9c4a2902cb0ffaeff0c4bae258575d00cae94", + "s": "0x20682493a94948fb97b8cb67e8ae86f444a96e39c5945f10d1008cf1a0508851", + "yParity": "0x0" +} diff --git a/rollup/rollup_sync_service/testdata/commit_batch_tx.rlp b/rollup/rollup_sync_service/testdata/commitBatch_codecv0.rlp similarity index 100% rename from rollup/rollup_sync_service/testdata/commit_batch_tx.rlp rename to rollup/rollup_sync_service/testdata/commitBatch_codecv0.rlp diff --git a/rollup/rollup_sync_service/testdata/commitBatch_codecv1.rlp b/rollup/rollup_sync_service/testdata/commitBatch_codecv1.rlp new file mode 100644 index 0000000000..b0feda0443 Binary files /dev/null and b/rollup/rollup_sync_service/testdata/commitBatch_codecv1.rlp differ diff --git a/rollup/rollup_sync_service/testdata/commitBatch_codecv2.rlp b/rollup/rollup_sync_service/testdata/commitBatch_codecv2.rlp new file mode 100644 index 0000000000..cbb35f1579 Binary files /dev/null and b/rollup/rollup_sync_service/testdata/commitBatch_codecv2.rlp differ diff --git a/rollup/rollup_sync_service/testdata/commitBatch_input_codecv0.json b/rollup/rollup_sync_service/testdata/commitBatch_input_codecv0.json new file mode 100644 index 0000000000..ab2bb62c06 --- /dev/null +++ b/rollup/rollup_sync_service/testdata/commitBatch_input_codecv0.json @@ -0,0 +1,27 @@ +{ + "blockHash": "0xab5112f13fcfae4ce2e9b9ffac41aba17113fedded7c9864f332a8ef4195f1d5", + "blockNumber": "0x129dac3", + "hash": "0x5ec08d23bfc4340e3fc4f799daded1d66ccff2b6a31cc4799f3d3db5ceca8d82", + "yParity": "0x0", + "accessList": [ + { + "address": "0xfa148514d03420b7b1a13ec74da06d2ca875539c", + "storageKeys": [] + } + ], + "transactionIndex": "0x83", + "type": "0x2", + "nonce": "0x1fa2c", + "input": "0x1325aca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001c440000000000000000000000000000000000000000000000000000000000000005900000000000001fa2b0000000000000000000000000003c46d21938370953ecbc239ac066a14c60b16a637db1ca34f7c0ce8698b0bae71ceb8e6c4ba1924589e26d6eeb2f7cafb63a1af0cf38bac082e0b961c79783034a12600000000000000000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000498000000000000000000000000000000000000000000000000000000000000066e000000000000000000000000000000000000000000000000000000000000075800000000000000000000000000000000000000000000000000000000000008c00000000000000000000000000000000000000000000000000000000000000ad00000000000000000000000000000000000000000000000000000000000000cd40000000000000000000000000000000000000000000000000000000000000f3200000000000000000000000000000000000000000000000000000000000011ca00000000000000000000000000000000000000000000000000000000000013b600000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000197e0000000000000000000000000000000000000000000000000000000000001a020000000000000000000000000000000000000000000000000000000000001b860000000000000000000000000000000000000000000000000000000000000177b01000000000043acc6000000006603090600000000000000000000000000000000000000000000000000000000000000000000000000989680000e00000000027af90277830829f084202fbf00830a987c94581b26f362ad383f7b51ef8a165efa13dde398a48703328b944c4000b902048624ba07000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e5961c58754af82c631b06f68d19aef0329cc0b30000000000000000000000000000000000000000000000000003328b944c4000000000000000000000000000d3c20b5ce963b9d7ade66c01023f63aff68bc1cb000000000000000000000000000000000000000000000000000000000000759e000000000000000000000000f9d0b0b11c55defdb635c8bcc1a65ab5188ffe0400000000000000000000000000000000000000000000000000000000000001447efbdeef07f0f2080075d76d1d0afefa64aa41cfa08321d5135b2fa7fce56bda000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000038e280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec3a03fc0e58b12802aa5022458678375e4eb96a909c80d7f648c588aa9919917279fa0779517565c9954b15ff4d09ed715b0d02746bd32ec7e22036585d7ff5255cf23000000b1f8af831111ae841c29c7208301529c9487627c7e586441eef9ee3c28b66662e897513f3380b844535b355c000000000000000000000000d799f02456cb96496af2e851ef42476ad43935160000000000000000000000000000000000000000000000000426ddfe67d28c0083104ec3a084139c52a998a8fe5c0bad1e014128efe4932091d06a9175b1e408c3acc6184aa05e8278540b7aef2b549c2d6a5e3050b680ca62e684539ace6aecdaa40576b6c7000000b1f8af831111af841c29c7208301529c9487627c7e586441eef9ee3c28b66662e897513f3380b844535b355c0000000000000000000000001387206062803f7f343ccb79ebcadea44ebe2e2f0000000000000000000000000000000000000000000000000426ddfe67d28c0083104ec3a0af45bb15bc6ceaae0acc495e5795f6844fae52cc2afa3b39be198016342db6f6a0734ace753f76e53ea7b327d27fe64ddcee7aaa5a48d8ad9642e09aaa9e8dacd1000000aef8ac0b841c29c720830161379406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b300000000000000000000000080e38291e06339d10aab483c65695d004dbd5c6900000000000000000000000000000000000000000000000000000000004be11983104ec3a017077e130e10cb386969ec690af223056dfd65d6fb826a4e5f89bbaf295cc869a018d2c3d6cbf241f410aeafc1681a9721a4feeed24b3fded75cf67ca87648912b000002d0f902cd15841c29c72083040ea29480e38291e06339d10aab483c65695d004dbd5c6980b902642cc4081e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000205efd70000000000000000000000000000000000000000000000000000018e7bed9871000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df00000000000000000000000000000000000000000000000000000000021081cb000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000002076d4632853fb165cf7c7e7fad592dac70f4fe10000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df000000000000000000000000a0dae0ca50c5eb8dcafa71d416d3f77597fbe79c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec4a047aa0887bb2643e5ad31d4a254552a7216ee5046bb1b698455bf12e7c2ed7a90a05188da1bb93a6cec86c49b995d857c2d0a71184a7c5759e7740692cb79e7f55f00000390f9038d07841b6b0b008306f8669474670a3998d9d6622e32d0847ff5977c37e0ec9180b90324186aaba2000000000000000000000000ff428b209697c64f8d2d3e23d88e95e7ae2306fc000000000000000000000000ff428b209697c64f8d2d3e23d88e95e7ae2306fc000000000000000000000000c7cc19ef9a37cca9855402f14ee6ad16d36fb571000000000000000000000000c7cc19ef9a37cca9855402f14ee6ad16d36fb571000000000000000000000000000000000000000000000000000258000f07945b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012f525c1dc6f6f54b506060a746110fd26f26864d2527168fbac027466a0441e26a37ab98d678c6d8229debfd490e5fc4406c456ff9a07a51c2964ff9c7effb67ec8817337bbe3cbe5f9ccaccc9bfd520b47159ae2a30869327359ea85b402965554b6d2f7870ad81601d62e81543fbf7dbe356996a3d7b669924cc579fc52ccfb0e2b1409265c9340e495b119360eb75523869643dce1ac006d980984c535620d8467de329641fd7b62bf0536946a92d746ae67931a2370ff3b957b9dee5eca57bf16a2e5482c98c4355318260bb0ec931c4561ce7a50485dd46f140c56a73fa1fe8adcde644b661dbad7adbd30864e795c1fd7ee0642771ed05d32a200eb24107efa080c8db5b35ec87bd296378a7513dc574a0a8d6712f01801a6a83b6db9140d1afaa0477d65bb15183b33daf3e1002fba63bb6b46f114fdc5a82ed18fb812c1329d1be59ebbf55e2284e6810c2c819fcc36bf71ac75d4e77782bcfb87a8909cb00622f7a5a32892f21306c0dc00234a47d4bdaa8fe0151446a745e770073ea0d6078ab324e8ed79a3393b6921ec837e7132364230e5274c765b95a8a1f74aad09099a1d3b42acdaa390cf8d9cd4135a55fcd66059ecfd4c3cd84a90db9847a8d921633b3d96fa2185f5a985e455a044c491972bb01970a5673492c8679dd08d48411e24b167dd4cdcdeee1e2b2955f04dfeb68ada073678aa0919d9608b5d278ed601865b3dfb9746459e64a573bb617c7f8e8a2639f10e41bed4ebc15ba4409fb296f7878186e544bf73d21bab49e97f4c5569b03439248ab023cb9a244683104ec4a05c64033e21e83f2852a67ac27709dddf292f43a0138ae58c38cb8aec7b17a3a2a01e28f0a406e2d13bcb72b99bd468771a55b65847772ae84c798c5bd6bae56ec700000210f9020d05841ad27480830267d294aaaaaaaacb71bf2c8cae522ea5fa455571a7410680b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000320c56a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000033ed5bed42be70000000000000000000000000000000000000000000000000000000000000000083104ec3a02ba17e8b51764c6f68fe8e29e56576f51416f501e47298bd3b41be0789653c28a04f5c5688198e03d625e69c62a5860207949ff03890953e4027d8a66f797c1b0c000000adf8ab0e841ad2748082e89494f55bec9cafdbe8730f096aa55dad6d22d44099df80b844095ea7b300000000000000000000000080e38291e06339d10aab483c65695d004dbd5c69ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec3a0ed0c29fb6307d37ad5b84d5280bc52c9faa2c435160f847b586f5acaa01dc1a1a074a986e7becf2b8c5e694f3f9b1a9de3219f2a878eb5e468d4c5221ad0406bcb00000072f87014841ad2748082ecff94a0d013b84fbaeff5abfc92a412a44572382dca08865af3107a4000841249c58b83104ec3a0a70ca4f4524a6109a046dd64de4ecb5138feed7c92b5a18eb65ce6cfde7005cfa028742449538c4c94a1ac3181ab4f2f6839f026b1a3643c63fd90c573284dda1b00000597f905940f841ad274808308e4fe944e998615ad430c1ca46a69d813ede6eb3ec55edb87038d7ea4c68000b90524301a3720000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f9700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000030275b89f5789800000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004c00000000000000000000000000000000000000000000000000000000066030b500000000000000000000000000000000000000000000000000000000000000003000000000000000000000000ab5819ac14dc28008e63ba0b8159495c06acde9e000000000000000000000000585245f79829fc75f8e2fd224b90d19449c6a0f6000000000000000000000000585245f79829fc75f8e2fd224b90d19449c6a0f6000000000000000000000000000000000000000000000000000000000000000300000000000000000000000083ffefbca071347df469c4e64820c95b01b957be000000000000000000000000a631b2a2c3469aa1bf5dc49977207f378d16d7d80000000000000000000000003bdb8ee4cabf15a7239cf0726f20ea37d190edd80000000000000000000000000000000000000000000000000000000000000004000000000000000000000000ab5819ac14dc28008e63ba0b8159495c06acde9e000000000000000000000000a631b2a2c3469aa1bf5dc49977207f378d16d7d80000000000000000000000003bdb8ee4cabf15a7239cf0726f20ea37d190edd80000000000000000000000004e998615ad430c1ca46a69d813ede6eb3ec55edb0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005300000000000000000000000000000000000004000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cb000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f9700000000000000000000000000000000000000000000000000000000000000400000000000000000000000006c1c420c04f4d563d6588a97693af902b87be5f100000000000000000000000000000000000000000000000000038d7ea4c6800083104ec4a0d8a6441660f20fc6c91ff8bf10cebdeff6db8d7e51354ecc58fb602683551563a032962f4928d52af98506c47bd1ef7599325b1a713b89cee840fe6b8cc456383d000000aef8ac63841ad2748083066ee494ec53c830f4444a8a56455c6836b5d2aa794289aa80b844962941780000000000000000000000000d8f8e271dd3f2fc58e5716d3ff7041dbe3f0688000000000000000000000000000000000000000000000000000000000120668883104ec3a0eba3f5004bff6e9beddb1df6e0db58623d5ed8cbf1b767f2ca34a4d81409c651a02bfa80d7a63b1384398e80a7d61ec53d1ebafdaaf99d4ff8d741bddb6a5017b20000008cf88a45841ad2748082ab1a94e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134d7c683104ec3a042d14df620658bf6a551c06ccd30e2f04fb28d3492a97f359147354e5aac747ea0170b85008421c32336b8d89a682dfa1deeb4754949c98ac21bfec66251f335540000016ff9016c20841ad27480826e8e9447fbe95e981c0df9737b6971b451fb15fdc989d980b901045b7d7482000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000403633396637616538663934613464663630323961303366643830333761383837323264383064356136653265666131376537303530633738353730623463613300000000000000000000000000000000000000000000000000000000000000403430313462396265653466373934346264313839323561343361303163323864636331353037353562613436646333623636663136393130343238613763633783104ec4a08e3068a36c592243ad71c7ec408660d063985f3c12558320a36aca7335ea70c7a01b12c5c4a55abd5cc7a8ae3089ef7de1338498c67912f12fa9fc1da8cc5acfbf000000adf8ab10841ad2748082679a94b65ad8d81d1e4cb2975352338805af6e39ba8be880b844095ea7b30000000000000000000000002db0afd0045f3518c77ec6591a542e326befd3d7000000000000000000000000000000000000000000004ef81231e69da0fb63ee83104ec4a080b6d9c83ec16fa443cf544f283e44a9ee04689503a9d71e62e636502bbbc4c3a0641a349ea60010f88692a7545dea558dafc65e8a0fbfb06ffdcc39eec29c406500000000000000000000000000000000000000000000000000000000000000000000002fcc02000000000043acc7000000006603090900000000000000000000000000000000000000000000000000000000000000000000000000989680000f0000000000000043acc8000000006603090c00000000000000000000000000000000000000000000000000000000000000000000000000989680000f0000000000aef8ac258435a4e900830161139406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b30000000000000000000000000122960d6e391478bfe8fb2408ba412d5600f621000000000000000000000000000000010000000000000000000000000000000083104ec3a059385c2658560e9e1e62e652d3b6cbf85c4947bcd2e6dd8cf0e4f9f58e5e3b35a0492325e052fc52d7ad695c3e1c9c5c8ee95c891c9f1a706d5b1e5b7d8f345e9600000073f871068426be36808302067194978132d279905cdfd0d80af13bb9dd2066076099862d79883d2000841249c58b83104ec3a021b2c3bb04bdea993ba86308794373aa3547aa23adafeba9b4b64d3004e20430a0656d8ebe00433595082dcf3b47859ec3746dfcda6ffb0b302ec1cb9470964ad600000072f8708303a972841d8119c0827b0c942a03256195029f21594d03b71367e874b98369bb8703eb2c332ff0068083104ec3a0cedd197b18f95501ccb1938b0bfb791737b5a54846093a7c492695b7b9a32e04a02f4d44c199d3963f575eca6d07b14b82474b574437081ff6858cec10cb31abb500000095f89316841c9c380083018a43940241fb446d6793866245b936f2c3418f818bdcd3880b0e11a89e598000a4b6b55f250000000000000000000000000000000000000000000000000b086849b46f800083104ec3a09445d5975e0524ba981f5dff888f4b5235790f4e3784016b4cd1611a3647febea00c9e9bce629d48895925e2bcd377ab846b537de9a50dc764f9cd41221a096638000000aef8ac01841c9c3800830163539406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a74106ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec4a04c4f4c22bad767e0912848437903d47587b30d659646bd601a862bbbb4366befa0431fe80c2c6b5f347940eb7c2341e5aeebf5469f904e95e0abde7c2290a1a523000000adf8ab0c841c29c72082eaba9406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aa111c62cdeef205f70e6722d1e22274274ec12f0000000000000000000000000000000000000000000000000000000000f9f16d83104ec3a00d8d15eb86c813dd8d3c8e6b503ecccaa0b9db8464d02d43b59694013e71196aa06ce267796ee24dc88369e49af8877072718c1cce8fb7010ea992d643156436a2000000adf8ab09841c29c72082eca29406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aa111c62cdeef205f70e6722d1e22274274ec12fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec4a0c34ae30a24a494a9eb4e9416287a24def677baaa6296941142ebcbf65e95caa2a01652b61e30c6e84d43ebb4611e70f8925c8925354150bc9ab1926eb7a59001b200000210f9020d1d841b6b0b008302b89794aaaaaaaacb71bf2c8cae522ea5fa455571a7410680b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002154fd7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000000000000000022995260e51b1c0000000000000000000000000000000000000000000000000000000000000000083104ec3a001ac7b4e716fcd997508ef2ff0db4bb568f5fa64522d0e302d1162ac69907266a0530eb83f3ff54a7fa296e1cf2d1f1b4152a7d84cfc250586fb0d6a9f102d959f00000275f902720e841ad9524f830a90a7941502d025bfa624469892289d45c0352997251728854033d6d929b90204ac9650d8000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000016496f639ed000000000000000000000000ec9e48c59d388bf55d55fef2120d427cd3d5168c00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000530000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000002f3a0000000000000000000000000000000000000000000000000000000000002f7c400000000000000000000000000000000000000000000000000000000000003e40000000000000000000000000000000000000000000000000000004033d6d929000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066124b440000000000000000000000000000000000000000000000000000000083104ec4a0ffe3a30fdd5bca926295fa0b1d51bb45fb885c8288a5087a660790213238f5f0a026ac2b2e3e2959d18261176fa0dab6663676710a3e43b4eafe494be651cfe7f20000006ff86d18841ad27480827bb494a49a2afa779f4dfbf4e1c36952c1a5a4d9a8d96a8087646174613a2c3083104ec4a02e843fdc0ece6e86f7271a9e0e708a11ef90275bb115717cd7f7ebf82b504b16a03e6783607a46b6dad1e8f36aba497f21dbe923ae45436d09cb03ccd9cea90de1000000adf8ab13841ad2748082eb7a9406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b300000000000000000000000018b71386418a9fca5ae7165e31c385a5130011b6000000000000000000000000000000000000000000000000000000000028124783104ec3a086ba8a486d0e641bb1b4ab77ea2ee73aadb531519bb890bfb46aded41b1660c5a07710a68ab768cbd9da53fc3f0c68a5ddea1ff8a8d5f7dceef772de521b5fd16b00000bd2f90bcf820696841ad27480830239c394ce16f69375520ab01377ce7b88f5ba8c48f8d66680b90b641a98b2e06bd74f273376604d935a488cbebbaa579001bd04a8876b22f71fc5802d0d194300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000b20000000000000000000000000000000000000000000000000000000000087d0fe00000000000000000000000000000000000000000000000000000000000000046261736500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a3078636531364636393337353532306162303133373763653742383866354241384334384638443636360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000091dc314e8b095d8a0d04ca5353b4ab3b3a2b86f2000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000006e000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f4052150000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f405215000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000044095ea7b300000000000000000000000033d91116e0370970444b0281ab117e161febfcdd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f4052150000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000033d91116e0370970444b0281ab117e161febfcdd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000104414bf389000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000000000000000000000000000000000000000000064000000000000000000000000ea749fd6ba492dbc14c24fe8a3d08769229b896c0000000000000000000000000000000000000000000000000000018e7bd2f218000000000000000000000000000000000000000000000000000000000087d1e40000000000000000000000000000000000000000000000000000000000868d610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f4052150000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000044095ea7b3000000000000000000000000aa111c62cdeef205f70e6722d1e22274274ec12f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000aa111c62cdeef205f70e6722d1e22274274ec12f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000012418a13086000000000000000000000000000000000000000000000000000000000087d9220000000000000000000000000000000000000000000000000008b47f4b6a119600000000000000000000000000000000000000000000000000000000000000a000000000000000000000000091dc314e8b095d8a0d04ca5353b4ab3b3a2b86f20000000000000000000000000000000000000000000000000000018e7bd2f219000000000000000000000000000000000000000000000000000000000000000100000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000005300000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c555344430000000000000000000000000000000000000000000000000083104ec3a00ba5486806127ab61a698a3a84fcb66f44131141b8c38622bfb87f5c4cace47ba077475ad41ee72bda3edb00843191e1eba6c6ecf55bf5c136642dbd648454f3f600000170f9016d81aa841ad27480826e8e9447fbe95e981c0df9737b6971b451fb15fdc989d980b901045b7d7482000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000406234303937326339353833383562353231306136306462333163313231376631303832366530353561303136316564643863333565616131366133323137376100000000000000000000000000000000000000000000000000000000000000403236613333663364383165373733396132613938616634383564383930316530333832376232613430393865313462303261383737653930386530376463633483104ec4a01af0c3728d0d7c11e424b472599ec77e0b0b15ad2d859da0290b8a0d8c756901a07c3dc394aa52bf1ed369ae938290329f1dd81f15c04ba9ac760f3c6cca47a7f9000007d7f907d426841ad2748083035dfe940cab6977a9c70e04458b740476b498b21401964187030429376a1000b90764a4d730410000000000059e1b6601d06d916bbe845c424dc9317e8b815ca18f207a12c84a03fe10bb5c151ba666295da9eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0ca6319198958c74570a8e547538262ae993ca117a0e481f908209137a46268ebea49653b798e1cc5912de2b287648df6cd3a8dfdd14d938cc889223e29d06e430bf3320f1062480100f29d53789c2142cd1804081c1f2d765e838623dafc1d600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000680040000000000000000000000068089c372275512e09f5359f82ce68a9d46ce19003201000000000000c803e8916bbe845c424dc9317e8b815ca18f207a12c84a0000000000030429376a100000000000000000000000000000000000000005c10000000000030429376a100000000000000000000000000000000000000004de0000000000030429376a100000000000000000000000000000000000000005d10000000000030429376a100000000000000000000000000000000000000003ed0000000000030429376a100000000000000000000000000000000000000004d70000000000030429376a100000000000000000000000000000000000000005c40000000000030429376a100000000000000000000000000000000000000005c20000000000030429376a100000000000000000000000000000000000000005c50000000000030429376a100000000000000000000000000000000000000004d30000000000030429376a100000000000000000000000000000000000000004d10000000000030429376a100000000000000000000000000000000000000004d20000000000030429376a100000000000000000000000000000000000000005c60000000000030429376a100000000000000000000000000000000000000004d60000000000030429376a100000000000000000000000000000000000000005c70000000000030429376a100000000000000000000000000000000000000004d50000000000030429376a100000000000000000000000000000000000000004d40000000000030429376a100000000000000000000000000000000000000006840000000000030429376a100000000000000000000000000000000000000005930000000000030429376a100000000000000000000000000000000000000005940000000000030429376a100000000000000000000000000000000000000005950000000000030429376a100000000000000000000000000000000000000005920000000000030429376a1000000000000000000000000000000000000000058c0000000000030429376a100000000000000000000000000000000000000006850000000000030429376a1000000000000000000000000000000000000000067e0000000000030429376a100000000000000000000000000000000000000005900000000000030429376a100000000000000000000000000000000000000006820000000000030429376a1000000000000000000000000000000000000000067c0000000000030429376a1000000000000000000000000000000000000000067f0000000000030429376a1000000000000000000000000000000000000000058d0000000000030429376a1000000000000000000000000000000000000000067d0000000000030429376a100000000000000000000000000000000000000006810000000000030429376a100000000000000000000000000000000000000005910000000000030429376a100000000000000000000000000000000000000006800000000000030429376a1000000000000000000000000000000000000000058f0000000000030429376a1000000000000000000000000000000000000000067b0000000000030429376a100000000000000000000000000000000000000006830000000000030429376a1000000000000000000000000000000000000000058e0000000000030429376a100000000000000000000000000000000000000005890000000000030429376a1000000000000000000000000000000000000000067a0000000000030429376a100000000000000000000000000000000000000006790000000000030429376a1000000000000000000000000000000000000000058a0000000000030429376a100000000000000000000000000000000000000005870000000000030429376a100000000000000000000000000000000000000007620000000000030429376a100000000000000000000000000000000000000005880000000000030429376a1000000000000000000000000000000000000000058b0000000000030429376a100000000000000000000000000000000000000006740000000000030429376a100000000000000000000000000000000000000005820000000000030429376a100000000000000000000000000000000000000006770000000000030429376a100000000000000000000000000000000000000005850000000000030429376a1000000000000000000000000000000000000000067383104ec4a0d7537cf71019beeeef38dec63e1552a493f7b93125ae44c25bff446c8fdd53e3a018221bb17b86f37e17a92bdd74885f288ed3c3088ee70707a88651088318f369000000cef8cc04841ad274808304029b9411fcfe756c05ad438e312a7fd934381537d3cffe80b86469328dec0000000000000000000000005300000000000000000000000000000000000004ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000073f9ce3e0f57c2b1756061b6890d69cf961fc71683104ec3a07ab506510c7b06ae1e9fdce1a9b665693ca7919c2d3ee09df0d11790414bd1cfa016478eed5cdf6b904a877df6d6a17174e74b02ec883f9dfa5b08a9badd8dd2a000000074f8721784283baec0827e609487627c7e586441eef9ee3c28b66662e897513f338807a58b94a73d800084db6b524683104ec4a09985a299a2ca70c4118d3afbea6c62ed59d80898ba8049ee8c8ea8408fa6a8cca02a1d4cf86bfad3cf126c1d3490b13165f92e141ecc094a6c1b431d11f0de28b2000000aef8ac0684202fbf00830120b094f55bec9cafdbe8730f096aa55dad6d22d44099df80b844095ea7b3000000000000000000000000efeb222f8046aaa032c56290416c3192111c00850000000000000000000000000000000000000000000000000000000000569fa583104ec4a0df3ee7466d929537ed0ed740f5a2704f2050e679aad0e75d1d36098b57246986a02b89a5a1a62701fbeddca8165a8cfeaaef00c6a4888010a4dce6769a5af3bbc50000006df86b09841f78a4008302a43b94718aa132efee7c549cf0d732134f868a0f2c604d80841249c58b83104ec3a08a3d077978fd3e6076ea8b0e09ece3588244b6abcba043e19170ddf32ed3c07ba03bf98ef558e903bacf2ee402255e3825dfae38e2a0725e51baa5370362708ff9000000aef8ac20841d8119c083047cd994ec53c830f4444a8a56455c6836b5d2aa794289aa80b844830cbbbd000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c000000000000000000000000000000000000000000000000030c47107dca8e2083104ec3a08188c5d85db2fb3c428751ef565031fce3597a1e5ccec338570ead5d8c53edcba06cff8e0ddf358742d0731e67ec8ff9b436917365e969b3b2ffe95fd2aaeb617c00000093f8911a841ad27480830177109416c0baa8a2aa77fab8d0aece9b6947ee1b74b943865af3107a4000a440d097c3000000000000000000000000739815d56a5ffc21950271199d2cf9e23b944f1c83104ec3a042bc7d5b2ad88c6760278b9aa1dc611a8dae979944bbe5af180eba3ee79b3001a043e2cc45b6ec3a8bafa0f2c084a6ce23ac86e3ef96df0a75e4f545a17f3858a0000000adf8ab0a841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a74106000000000000000000000000000000000000000000000000000000000137083a83104ec4a0d16e001887481b4a553331a8f76b05e60b5a629b220e111263904169ca311139a058d4cebf1558fe8a3707045c4cc4eeabb8581f64faff114d3776cda413f0e897000000adf8ab0c841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000fc30937f5cde93df8d48acaf7e6f5d8d8a31f636000000000000000000000000000000000000000000000000000000000cf1a64b83104ec3a038fdfacb0355f6a3931ed712bb989ee8b4629ac4d65d4926a997eb7e6db178bca0036d3124c13c4dc4b1b54008adf0a5acd017da2c3a783b506667ae08f25b459700000217f9021417841ad2748083025b2294aaaaaaaacb71bf2c8cae522ea5fa455571a741068711c37937e08000b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff5433e2b3d8211706e6102aa947100000000000000000000000000000000000000000000000000000000010f7945000000000000000000000000000000000000000000000000000000000000000083104ec4a065c7e33cd77a45b2bfd6751fbcb35526c5a1ed017a99968761f73f6a6ed53962a06f06ee3ce7a4d44baf84b18b404709aa3164c77c114005ee919131e3f8a202ac00000210f9020d2c841ad27480830267d294aaaaaaaacb71bf2c8cae522ea5fa455571a7410680b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2c7c530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000000000000000000f9a085e877a3a4000000000000000000000000000000000000000000000000000000000000000083104ec4a026e5a0043a217b6556efe3c85a1e7ed9b5c800422acb45d2ee089abc7e61c04ea04eaa7703fb3f29a1353c0343c925be4b2e24299764b49eb06221b57cd6f7820300000073f87102841ad274808302067194c110be1cb504502504623f043dc7a3fadf242c72862d79883d2000841249c58b83104ec3a0913d18d1a8909bd664838a1aa807d7b21e43916fddef32764601f89756390fc2a0743b5cc93d16a7956cd45c45923d787dc9abcefd09f06837638038744e85aca100000073f87111841ad2748083020671949fa57d91d457059f03fa323d60c410a32884e396862d79883d2000841249c58b83104ec3a050f5a8624efccc88ad5d58bba87eeb9813fad2d534367ac7ace528ff52b55ba7a04d59c00b2524ae66e72589a8aa512c2bff925d1c092e7312e5f1bfe624b8af4400000281f9027e01841ad27480830249f08086b5e620f48000b9022360806040527389a512a24e9d63e98e41f681bf77f27a7ef89eb76000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163460405161009f90610185565b60006040518083038185875af1925050503d80600081146100dc576040519150601f19603f3d011682016040523d82523d6000602084013e6100e1565b606091505b5050905080610125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011c9061019a565b60405180910390fd5b506101d6565b60006101386007836101c5565b91507f4661696c757265000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006101786000836101ba565b9150600082019050919050565b60006101908261016b565b9150819050919050565b600060208201905081810360008301526101b38161012b565b9050919050565b600081905092915050565b600082825260208201905092915050565b603f806101e46000396000f3fe6080604052600080fdfea264697066735822122095fed2c557b62b9f55f8b3822b0bdc6d15fd93abb95f37503d3f788da6cbb30064736f6c6343000800003383104ec3a0ab015f7c152ac6cf727e71b7d563e4eaa7cf172067a80b72a27b725696946620a05d590c8fa01e05871908cb03b2fcf93823c9311b1511f06939609fe06834734900000210f9020d04841ad27480830267ba94aaaaaaaacb71bf2c8cae522ea5fa455571a7410680b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000fd4f0b43cdc1000000000000000000000000000000000000000000000000000000000000000083104ec3a080477cee851db13b7be8cbffc2f18c17af3d347bd6cfcd2793293861a475eb85a05a3c594e24f173b95a6e00a9ce4f523ba8d530a9fb721b96ddd4d95a9cf640c7000000aef8ac08841ad27480830999ff94ec53c830f4444a8a56455c6836b5d2aa794289aa80b8444b8a35290000000000000000000000000d8f8e271dd3f2fc58e5716d3ff7041dbe3f0688000000000000000000000000000000000000000000000000000000012115208083104ec3a02494e24fdc3fe34a06d7251fc1359154f7797ceda668b6ca1c662644fbf1a215a01e338467d6c111789312da503e13094ef6a47d68b19ce6f95e3541b7563c85dd000000adf8ab098417d7840082c08d94f55bec9cafdbe8730f096aa55dad6d22d44099df80b844095ea7b300000000000000000000000026cb8660eefcb2f7652e7796ed713c9fb8373f8e000000000000000000000000000000000000000000000000000000001ed2fcf183104ec3a0304c92fcd91dedddee46f1a09880dfc40bb35ad7b71d452f09ca53ebb828c54ea00c8f21732c451b5a382e081d5b5a65c119d6fd6a07e7ec14ed9a03d38415037000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d2f01000000000043acc9000000006603090f00000000000000000000000000000000000000000000000000000000000000000000000000989680000f000000000072f870830849fb84283baec0827b0c943b1d30d4a8d52ac398d80402941e11c65b4aa483873843aae74ed0308083104ec3a0360ca28be08a53b7eba64911972d829449c3aa1e5a48d22b18a8ec05e334f04ea035e7b18452cd67e54483e30f7217e2a33b16fcb7670322982b7a833229dd33db0000017df9017a12841dcd65008301adb98080b9012560806040526000805461ffff1916905534801561001b57600080fd5b5060fb8061002a6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80630c55699c146037578063b49004e914605b575b600080fd5b60005460449061ffff1681565b60405161ffff909116815260200160405180910390f35b60616063565b005b60008054600191908190607a90849061ffff166096565b92506101000a81548161ffff021916908361ffff160217905550565b61ffff81811683821601908082111560be57634e487b7160e01b600052601160045260246000fd5b509291505056fea2646970667358221220666c87ec501268817295a4ca1fc6e3859faf241f38dd688f145135970920009264736f6c6343000812003383104ec4a0ad518686cd77228e8f062597a92cf773a0470a15eadd8b9dc8c54910d37e7a66a06e148d29a567d8eb4d8921c358682f5cdf056143346b0a5d4342e38a3e99df9b000000aef8ac07841c29c720830149aa9406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b300000000000000000000000080e38291e06339d10aab483c65695d004dbd5c6900000000000000000000000000000000000000000000000000000000008f24cc83104ec3a0442ed8380de187b862f5eaf2017d8c33a02fd7f71d180280d8dd6cf6c7a6fd0fa0071b96b62316b5f9717542ff6595b4438a537e98c6744c43a1edef235b24d7ea000000aef8ac18841c29c720830149cc9406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a741060000000000000000000000000000000000000000000000000000000002031e8383104ec3a0ef27913a67a82a170f0412967c0c5487fa4145c286ff6353d49f8c473b36d5dea01d3701ea33351d082de532e400f06eaa5faef235b9a9ddd5fbb666bd10722029000000b5f8b308841c29c7208303fe7d94ec53c830f4444a8a56455c6836b5d2aa794289aa870a521505129000b844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c000000000000000000000000000000000000000000000000000a52150512900083104ec4a086c70539d84a46c289c3774baf27161d96eca84432d3ad0fcdde26e52c23ea44a03d565b139e80d3dda4e8048220d05500fc9bdadaaa7f36e8e7966217ab261bd1000000aef8ac11841c29c720830149bb9406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b300000000000000000000000080e38291e06339d10aab483c65695d004dbd5c690000000000000000000000000000000000000000000000000000000002b0ec2083104ec3a092f06c1af9d099c8e5c192696eff2ebea11a01d25fa0083851edd90fc93a9184a05d811acfbb7161d9ffd8c57cee86c092db32c01dfb56fc6fd27c7dac7e1127c5000002b7f902b41f841b5bc8c08306b798942db0afd0045f3518c77ec6591a542e326befd3d787740818d25d4000b90244ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000014475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a5ddba6fdd5c599a4b0b9379fe28cbf318687ff300000000000000000000000000000000000000000000000000740818d25d40000000000000000000000000000000000000000000000000000000000006ed9d030000000000000000000000000000000000000000000000000000000066030b5d000000000000000000000000000000000000000000000000000000000000004253000000000000000000000000000000000000040001f406efdbff2a14a7c8e15944d1f4a48f9f95f663a40001f4f55bec9cafdbe8730f096aa55dad6d22d44099df00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec4a04a015249d635ebe05905dc3721c2db492d5490c2fba87d0e5098a92fef1d4a56a050ee7894564d32e9bb1b9862e354864defca236097a8da03a401d4d1530e2b01000000b4f8b22d841ad2748083043a87947dac480d20f322d2ef108a59a465ccb5749371c4860edcee952ec8b844f5c358c6000000000000000000000000000000000000000000000000000000000000a4ec0000000000000000000000000000000000000000000000000000000016a6f3c383104ec3a0f564e165f7d0ec60f0fdf4cf5ee5f86273cb24a87815f6fa3e30b4d24193b335a0767c356448ead916337c9bb7a48b9b61031bf897f707b7cad837f34eb4989f8100000a17f90a141b841ad274808305e1d1946352a56caadc4f1e25cd6c75970fa768a3304e6487470de4df820000b909a490411a320000000000000000000000008d2b7e5501eb6d92f8e349f2febe785dd070be74000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000008d2b7e5501eb6d92f8e349f2febe785dd070be74000000000000000000000000bf646598aae1aebffff243b7460c299e19610d9800000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000438ee63000000000000000000000000000000000000000000000000000000000443d98500000000000000000000000000000000000000000000000000000000000000000000000000000000000000003487ef9f9b36547e43268b8f0e2349a226c70b5300000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000005600000000000000000000000005300000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000004d0e30db000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002449f8654220000000000000000000000005300000000000000000000000000000000000004000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001045761880400000000000000000000000096cfa2a369ec67a93c324a35e693fbeea11c0594000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008d2b7e5501eb6d92f8e349f2febe785dd070be7400000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003f8c7d3063579bdb0b90997e18a770eae32e1ebb0853000000000000000000000000000000000000040001f406efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000648a6a1e8500000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000353c1f0bc78fbbc245b3c93ef77b1dcc5b77d2a0000000000000000000000000000000000000000000000000000000000443d98500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a49f86542200000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d1660f9900000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000bf646598aae1aebffff243b7460c299e19610d980000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec3a0e976d4e03f5dbc387027934cc0eab6d42d995b1dcb41514d28712794e89dddd5a0390e8545628ddd1e88860718a4b3855adf9d99173bb11e1237de28009970afa1000002d0f902cd09841ad274808302a1349480e38291e06339d10aab483c65695d004dbd5c6980b902642cc4081e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000cad3995af2f2680000000000000000000000000000000000000000000000000000000066030dad00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000000c9f18d500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c70000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000003d5870b727f347bedf045f3f55ee430587b22c9d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec4a052096576a969f41097a5f04e1d1cd03791e6ffdb75658c6617279c5e77636e3aa04b652d544c1f8b07d001116ff199762fdce2c4055b165b865f8b5def2e553b91000002d7f902d40a841ad2748083028d879480e38291e06339d10aab483c65695d004dbd5c698731bced02db0000b902642cc4081e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000002ed863800000000000000000000000000000000000000000000000000000000660337e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031bced02db00000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000078ea8e533c834049de625e05f0b4deffe9db5f6e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005300000000000000000000000000000000000004000000000000000000000000703de8951c7042c3262943168217ce94c89810220000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000083104ec3a0e79f5801cc87a91aba5476097bf3054bbbe6797470d33642052b7589acb7461ba02e05d051900972bbdc2341793dc757ddab68d7aa026c6836ddf825709a66b994000000b6f8b432841ad274808304e68094ec53c830f4444a8a56455c6836b5d2aa794289aa88061cc1d9010541f2b844abdb5ea8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c000000000000000000000000000000000000000000000000061cc1d9010541f283104ec3a0160427007cd65553c28d9f87cd50394cc8be13082bb3d20216a09035e926164da01f68d16b088b8d317e8f6607455b07162e14f767724811d85a8f00ed1c54458500000310f9030d03841ad274808304bead9480e38291e06339d10aab483c65695d004dbd5c6980b902a4353766c6000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c7000000000000000000000000000000000000000000000000000000004001cfee300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000c3ace79098d291c10489c165d72bc7089aa9790a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000119abb000000000000000000000000000000000000000000000000000124a38acc3e770000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000660337e3000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000411334a2a2b1c2bb18463bf09af0b8e3be7d7c783652fad4eff628f2c263cbb7b00adbcd75494a604d8f6e3a8cdab02ad0164d6adc8894c64a721105ece52f0e411b0000000000000000000000000000000000000000000000000000000000000083104ec4a0cad600fae8943c28e2d9da00b98cdad5747c3516b3118b16cafe19fc3a579aaba00cdb657c43fc1f595f41af5574fe01824eca228bd308a6405ca259672a1d94db0000006cf86a0d841ad2748082678094ffc3b2cf9bc079c26ddf8837cdae426fd30f72c68084b49004e983104ec4a041b17b2571a62e11d0b13a0d7a5a9adc336e0fac3b1cac45f20c22792d7aeda6a01a7bc2cc94ad11637bef6575f0e088b2573d21a84ff141ec765dc3c965ae3733000000adf8ab1c841ad2748082eb869406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a7410600000000000000000000000000000000000000000000000000000000001b9d6383104ec3a007030700fc9386c23723fd9577f2165a320d7791b04f48647f8fdda243e7d85ea051c87d5d16d09410bd626530123c4476c09cd2c46fa661960f379924472b8e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7701000000000043acca000000006603091200000000000000000000000000000000000000000000000000000000000000000000000000989680000e000000000190f9018d0a8422de64408302ca6b94aa111c62cdeef205f70e6722d1e22274274ec12f80b9012418a13086000000000000000000000000000000000000000000000000000000000002e006000000000000000000000000000000000000000000000000007d80813d322df800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000475f01342d61234767c2099b100fb52f06eb77cc0000000000000000000000000000000000000000000000000000000066030b0100000000000000000000000000000000000000000000000000000000000000010000000000000000000000003c1bca5a656e69edcd0d4e36bebb3fcdaca60cf10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000083104ec4a05212bbd6dd8ee6b233c4bcc02fccdfa727f743663008ba00e302880590998374a060b933ae52509ff098304815d8a6b7f6cd6409f06696dc53ce6ad797bf4ce6a100000190f9018d098422de64408302ca6b94aa111c62cdeef205f70e6722d1e22274274ec12f80b9012418a130860000000000000000000000000000000000000000000000000000000000021a30000000000000000000000000000000000000000000000000005c9b7aab58cbf000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000092ce7f1504a8cb95627be59e916bdc6ee69c23ad0000000000000000000000000000000000000000000000000000000066030b0100000000000000000000000000000000000000000000000000000000000000010000000000000000000000003c1bca5a656e69edcd0d4e36bebb3fcdaca60cf10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000083104ec3a0d33b7ddf0505d1acca3b5a86737bf0293b3851d2689c6c9bfcf50e9c9b7fe4f4a039419f6b00e623699dfe35f7ffad0ffd34046e2512d51ce4844a11db7f410a9100000070f86e15841d8119c0827b0c94e4edb277e41dc89ab076a1f049f4a3efa700bce8880cc4ed5711fd37aa8083104ec3a023fc2e8fee511b3aa3e1d04dfda83b7170630de49664bcb23dc2c087e8f0dd73a031acc3a189928da5c02546227c3b8fd3647c10548eb5315c764d4abdec6f1f62000000adf8ab13841ad274808271b894530000000000000000000000000000000000000480b844095ea7b30000000000000000000000006352a56caadc4f1e25cd6c75970fa768a3304e64000000000000000000000000000000000000000000000000000000000000000083104ec4a0e5b98f5710c6803cef3aeaa136e56f9cfad5b2f213e80318de8537ff5e243768a01e4a0ac5d0bec90d791b8436af2047362e82a28689fa10da0fcac1099794f169000000b5f8b302841ad274808303dc7994ec53c830f4444a8a56455c6836b5d2aa794289aa8712cf6e5bdccaccb844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c0000000000000000000000000000000000000000000000000012cf6e5bdccacc83104ec3a068eeb09d6e2492dabb83bea9c7f8bed36890d3a6dd3ce0409f3bad932e658bf4a03395a3f0fc0bc7dc03ffa64c0ca1c35af3787a1216b182a53cf3ff882f2c17f70000006df86b02841ad274808302067194f4d4e95c1a35381da8e2da1062dcabe9d58fcc9c80841249c58b83104ec4a0d4ea964e2af54269d7f305891ba40f4d8de45cd3a62943ba339601de5832a2dfa050ae51a34909d4449c39ff4b129cba5d698a46ef7e92f741a36cf510d749913a0000008df88b8182841ad2748082ab1a94e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134d7c683104ec3a0c820bc9addd7e44bd58ad16e365c58eaaa1ef160181dd7cc6225e21a504df5d5a0628397057668b4dbcae996d6ada3a4e86e496d555c1e2281582636391fb0b59d000000adf8ab57841ad2748082c1dd94f55bec9cafdbe8730f096aa55dad6d22d44099df80b844095ea7b300000000000000000000000025ab3efd52e6470681ce037cd546dc60726948d3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec4a03571e91e056c8ece33c49832d9bc894871da5b32edab58a91d5a9686ce24b364a0751fc29a0af97278eb59dad878a42168cf1a71f1a6b50a34d052b9f3e4daa44400000190f9018d15841ad274808303655c94aa111c62cdeef205f70e6722d1e22274274ec12f80b9012418a1308600000000000000000000000000000000000000000000000000000000014fb180000000000000000000000000000000000000000000000000001580fb87f3bbcc00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a220c0137d2d5b01782298b38418bbb176b4b40d0000000000000000000000000000000000000000000000000000000066030d5c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000083104ec4a0bace7ef791e4a91852b296d4e2559b9323fd62a88309dfa358d0f50e497422fda033ab932efe329778875e0910d8c3112a5fcbbbc735b65615f3be9967d7b11c97000000adf8ab11841ad2748082d33c94ca77eb3fefe3725dc33bccb54edefc3d9f764f9780b844095ea7b300000000000000000000000080e38291e06339d10aab483c65695d004dbd5c69ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec3a07f8ce359b34b6f4cd44731e27dc28d77c06000076e9410b7449d37a20bb70195a004d168f42a20735ee67160787c97bb2ed0af47704b6881c948bc109f988e824900000073f8711b841ad274808302067194c2f494b48ad2f056a8044dbee2de2271decf9171862d79883d2000841249c58b83104ec3a0ab4334a7b07567d78b9c4dadfe8a1d5c0a961d11226b0a3aaaca3d036a798d2ca07500d734bcbc44d932c33e1ce9d176d0f55c0975b6f11548369afcb1a3eb61b800000074f8720e841ad27480830206719454a4c52cba8a270a04626a83a48a205c8b7981058701476b081e8000841249c58b83104ec3a0f12e8c70b01cf8f0b046c4b4401eb4ebff4045a98765d02d8d0dbf7e5332413da0617625a549d68692124872775f6bae1f6c8f51b8781fba5ac454915f65e20265000000b5f8b310841ad274808303dc5694ec53c830f4444a8a56455c6836b5d2aa794289aa87470de4df820000b844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c00000000000000000000000000000000000000000000000000470de4df82000083104ec3a054883d0ae061f43811276eb77ce1e4439ff1b0d6894ebd9df345c7c8d1ddc21da00c1c04b375d7b6a2dc5102306065b72a187488783c5d8a10fc6e4beb873bc79100000390f9038d16841ad27480830493d3944e998615ad430c1ca46a69d813ede6eb3ec55edb80b90324301a3720000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000000000000000000000000000000000000076efcfcd0000000000000000000000000000000000000000000000000000000076a00992000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000066030b5c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000716fcc67dca500a91b4a28c9255262c398d8f971000000000000000000000000000000000000000000000000000000000000000100000000000000000000000025603aedf9b3ebf600a6058eb6be7b97349c002f000000000000000000000000000000000000000000000000000000000000000200000000000000000000000025603aedf9b3ebf600a6058eb6be7b97349c002f0000000000000000000000004e998615ad430c1ca46a69d813ede6eb3ec55edb000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000006c1c420c04f4d563d6588a97693af902b87be5f1000000000000000000000000000000000000000000000000000000000000000083104ec4a0245a1efa8c2a36d51a30734634cabbfa3f67e04d9c18fe958aa180b5dfa057f3a03aa013180e456fd54b9cb35d2bae11a3e90d7fc057fefb8cfe3207ffae4a0b36000000000000000000000000000000000000000000000000000000000000000000000000000000164101000000000043accb00000000660309150000000000000000000000000000000000000000000000000000000000000000000000000098968000130000000002d7f902d4278435a4e9008303b2f99480e38291e06339d10aab483c65695d004dbd5c69871172e3116d22a0b902642cc4081e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000001095a610000000000000000000000000000000000000000000000000000000066124b500000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172e3116d22a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000530000000000000000000000000000000000000400000000000000000000000028b6778cd97e4dbd97f844981a3e82bf1a83858c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec3a091b3b4e1da13ccb99f5846d4a8a9928b2fcc0b52e63eb98bd7f8b8762aaa9711a04305a1ffbb3eff8004174a6db652246fb52ffbbbd08f310d14c0f0f985fe597000000073f87183070bf884283baec0827b0c94ac061f901252813ef3184af5f029f429296244f588042b617f68f690038083104ec4a02525c7c78955de896e6cc09faebe7595f41a4480d873ddaa477e6db7bd555543a04414a4e55ccd18a7b1b21ff6e4f3ee2b5f8047a0ac06a86781a1ef136a2524ae000000d6f8d401841d34ce8083046edf94ca8edcc306119143dd010a1d61f31c3380f409bb8813d8616c6ccf0000b864d2d0e066000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000013d8616c6ccf0000000000000000000000000000000000000000000000000000000000000000000083104ec3a00809d93e0e8d1154688426fe38e576caa9161351232271f2810a7d82779a7dc8a01639ecdbe179b6738865f56f5dc7eb5574ff169846fc47b9fc3a7ad4b14fc832000000aef8ac04841c29c72083014ba29406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a74106ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec3a0e2fdde7125d66b7ad34b93aa61c7e94b97800cef1e66f4dcd278b806eff8deeea068d9f04054d3310700cf47d9a1cd71538f9d99f4a1547d0f01534ba8a686f16c000000aef8ac19841c29c720830149bb9406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b300000000000000000000000080e38291e06339d10aab483c65695d004dbd5c69000000000000000000000000000000000000000000000000000000000175eedb83104ec4a0997810c1d831894172cc6a3edf964f445b7d3219cd9e175d304f6f01382e46a7a0481fb7c83d5f098d1b855d3b3b9505bbb9a58528817917948c845de3c30ec92d000000eef8ec07841b6b0b008308225c94ff75a4b698e3ec95e608ac0f22a03b8368e05f5d80b88466514c9700000000000000000000000011fcfe756c05ad438e312a7fd934381537d3cffe0000000000000000000000000000000000000000000000000340b0e6cfe31c000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000083104ec3a0c88bfadc38c767d66658d14a8d87c4aa8e52f406752279f4aca4970ba148121ea05a7ff81741e9256b6dfadbe47fecaeef610d7e20dcf51096d6d5d1483d77a2ff00000075f87381c7841b6b0b0082cbdc945300000000000000000000000000000000000004880aaf96eb9d0d000084d0e30db083104ec3a07afd908a6efb57f87ca61a08fb1b1f78a6258a1f4385cc28b22f36af7e5badeaa010dd0da195b88e6e9401fd035861f048281a05c0d12f76674f052bf67f6ca524000000eef8ec07841b6b0b008308225c94ff75a4b698e3ec95e608ac0f22a03b8368e05f5d80b88466514c9700000000000000000000000011fcfe756c05ad438e312a7fd934381537d3cffe00000000000000000000000000000000000000000000000003fcd703e6af70000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000083104ec4a0f97e0bdef170e5082759249ba90b25083ffeebc81309e33d56aa00405e93eda3a010a852996450a6678dcb73f27ccda0c57b2a5330f5ec115239d4b4f4ad7b9d4f000000eef8ec07841b6b0b008308225c94ff75a4b698e3ec95e608ac0f22a03b8368e05f5d80b88466514c9700000000000000000000000011fcfe756c05ad438e312a7fd934381537d3cffe000000000000000000000000000000000000000000000000041f992c484787000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000083104ec4a0e6ca4e941cee6290a8637dadb1f62748eee2d0a4cd3b2aee8104e1c6f52bfac6a01135b72b72190c9f18fd83464610c897963894edfc69f743fe5f7eba745e72cd0000008df88b1e841b6b0b008301034c94eeb77b8d450ff62d71df3377e2e0abd0ec6b67e880a43fd1736600000000000000000000000000000000000000000000000000005a0a3bd5300083104ec3a09dbbafb683563d1085c00267fbe64a144ef56a0f0b1ee73d2066bf261cc257efa0541a6fd1fe125dc329a5cf5918209753850cf1318a3fccdedaf0ef06ee898038000000b5f8b30d841ad9524f8304155894ec53c830f4444a8a56455c6836b5d2aa794289aa87bb07303292d620b844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c00000000000000000000000000000000000000000000000000bb07303292d62083104ec4a08c4b2fb7aa4927e2a62d9923810105306f268c5f5c6168952507993a399858cca07d2bdee13cbdcef332589d1a1270ae3c697cc3406d4efbf56ae26dc2814b5307000000adf8ab10841ad2748082eb869406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b300000000000000000000000018b71386418a9fca5ae7165e31c385a5130011b600000000000000000000000000000000000000000000000000000000021f2a0b83104ec3a00730a89b6d08dc9dcb55fc056da1f8d78c342a0f84b4e49f1f2275d036fec3b1a004b2befd07f362e0eccd84f1b03b2c4d10ba3403145cf35fbb78eadea2725bc500000190f9018d32841ad2748083034fd894abe292b291a18699b09608de86888d77ad6baf2380b90124b49c99b80000000000000000000000007f69b86bf797176cf5ff0833918fddf842761bae0000000000000000000000000000000000000000000000000000000066045a4c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000413df47d8dd1181c1cad3f5c1f4256a72c98385a9cf9b33de482422fe1b4f4f1130ac2d61af597e8c43e7e9106a22687ae819babeab243c1ec777277aeda5047c31b0000000000000000000000000000000000000000000000000000000000000083104ec4a0e3cdd4ca48e0a17148fb08398e079ca2c0def58f9829b277df38de805bb166dca025266cf7e107c0dbd66cb5c62abc6670ff5efe2879bd55c7aa5724147d6fe21b000000b6f8b428841ad2748083037b9e94ec53c830f4444a8a56455c6836b5d2aa794289aa8802978798d2c3f000b844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c00000000000000000000000000000000000000000000000002978798d2c3f00083104ec3a0399e99b24832643fe32dad689687d808c65f912f8ac090ff06c9ece0450d0e56a024c1ca39a8c0f1c0b216279e650e2a19ae2a780f4816217f936fa1e9525f4df500000217f9021409841ad27480830291a394aaaaaaaacb71bf2c8cae522ea5fa455571a74106873129b712748078b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eba2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff5433e2b3d8211706e6102aa9471000000000000000000000000000000000000000000000000003129b712748078000000000000000000000000000000000000000000000000000000000000000083104ec4a08b53c9bec4781132ba9a95cae6a1bacc33e966f794280fcad2220defa329c49ba07eb696391a3369eefa5aa83f8cbbacd28af772bc5e4c222122ebd61ea0ce4d6d00000217f9021409841ad27480830291a394aaaaaaaacb71bf2c8cae522ea5fa455571a74106873339d59b8570ceb901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b01c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff5433e2b3d8211706e6102aa9471000000000000000000000000000000000000000000000000003339d59b8570ce000000000000000000000000000000000000000000000000000000000000000083104ec4a03c697055bd0340b73938e35e22f7c6a510fcd1d17ea2218c6c397f2bb594b7f9a0091ff1628104e0a8eb7213359e676e262dc817a71dd0cb65e912cdf523dd668800000217f9021404841ad2748083024ecb94aaaaaaaacb71bf2c8cae522ea5fa455571a74106872a30be8873b8c5b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002819a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff5433e2b3d8211706e6102aa9471000000000000000000000000000000000000000000000000002a30be8873b8c5000000000000000000000000000000000000000000000000000000000000000083104ec4a0fa226da93cf391710cc5349f7cc9f2c9ab81b65008c18122a7d73d2bfe79ef9ca0496d3c80e571adf5d7af291f0986ec2151ce64724e374ce02fd362fa99ce3fca000001d6f901d330841ad274808303521794734583f62bb6ace3c9ba9bd5a53143ca2ce8c55a8601d1a94a2000b901642646478b000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000001d1a94a200000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000000000000000000000000000000000000000001bbb0000000000000000000000005cff95c443c25796c21fd5ec8f40c5d3761d732f00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000700301ffff0201b6dacf7d94d871651a38e23ba8e4028ba604a605530000000000000000000000000000000000000404530000000000000000000000000000000000000400b6dacf7d94d871651a38e23ba8e4028ba604a605005cff95c443c25796c21fd5ec8f40c5d3761d732f000bb80000000000000000000000000000000083104ec3a068a18693e6093929d995b358eff06a2a4cfc4cf4693043373f2d49144d2d84c8a06d4ba3ed50ef3ccb4074dd5cf2ecaa9e7ee8083a77cc02972278e9ac9e7a1d56000000adf8ab0a841ad2748082d22894ca77eb3fefe3725dc33bccb54edefc3d9f764f9780b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a74106000000000000000000000000000000000000000000000000ea066b7f4835ce7e83104ec3a0fa17c5230902287bfe8dcec002746bd089249e02fa061410e78bed3cde636195a05865aa0bdc8168110be0af374e416ae995ede0b2bab62bd40d1ad3c8272efc630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c901000000000043accc000000006603091800000000000000000000000000000000000000000000000000000000000000000000000000989680001d0000000001b7f901b407841ad274808301e07d8080b9015f6080604052348015600e575f80fd5b506101438061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80632e64cec1146100385780636057361d14610056575b5f80fd5b610040610072565b60405161004d919061009b565b60405180910390f35b610070600480360381019061006b91906100e2565b61007a565b005b5f8054905090565b805f8190555050565b5f819050919050565b61009581610083565b82525050565b5f6020820190506100ae5f83018461008c565b92915050565b5f80fd5b6100c181610083565b81146100cb575f80fd5b50565b5f813590506100dc816100b8565b92915050565b5f602082840312156100f7576100f66100b4565b5b5f610104848285016100ce565b9150509291505056fea2646970667358221220a6710181372d0f08d0c328ad9dc690bcf7935799fa8c413722ea2563efaa104b64736f6c6343000819003383104ec4a07d86e83fe8d525583ea25ad5746e3a5d428266c22774fa533fd41b3b61bdd119a031b9770cdbf20152cd64bd7563d0612f9ea001c642e37ed939e8315e2da7ccce00000190f9018d0b8422de64408302d42f94aa111c62cdeef205f70e6722d1e22274274ec12f80b9012418a13086000000000000000000000000000000000000000000000000000000000002e006000000000000000000000000000000000000000000000000007d80813d322df800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000475f01342d61234767c2099b100fb52f06eb77cc0000000000000000000000000000000000000000000000000000000066030b0700000000000000000000000000000000000000000000000000000000000000010000000000000000000000003c1bca5a656e69edcd0d4e36bebb3fcdaca60cf10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000083104ec3a01fe43be052ff70ac65495980d44c9b1e905704e44b16b3569fd3071c37f2197fa04bea0c740b627ab769101ea3eb2833ffc6edef1f1cdbe5f8d6bfe70d57fa80b000000190f9018d0a8422de64408302d42f94aa111c62cdeef205f70e6722d1e22274274ec12f80b9012418a130860000000000000000000000000000000000000000000000000000000000021a30000000000000000000000000000000000000000000000000005c9b7aab58cbf000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000092ce7f1504a8cb95627be59e916bdc6ee69c23ad0000000000000000000000000000000000000000000000000000000066030b0700000000000000000000000000000000000000000000000000000000000000010000000000000000000000003c1bca5a656e69edcd0d4e36bebb3fcdaca60cf10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000083104ec3a0022effac4d868312603900cd778557bd2177e02ce3e5bdb1af420c8d25bdefc1a04fb515f79ae7212554dcf42672cf0afd153c6a95f1629155727dce7d6ebc43b800000170f9016d0784202fbf0083036e1294efeb222f8046aaa032c56290416c3192111c008580b9010418cbafe50000000000000000000000000000000000000000000000000000000000569fa5000000000000000000000000000000000000000000000000000559d5f0cee28600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000436e3d22c78fa52cdce1d4157d6dc45b16fba6a1000000000000000000000000000000000000000000000000000000006603171f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df000000000000000000000000530000000000000000000000000000000000000483104ec3a06591ac2c3771d33030b15fddc632b4d388b21035a1cf61bb31c19706a4c03a08a0316c8dfa0141045312ad539019fd50cd991eee11bdf69b0c70fbfb26608d732800000073f8718303a973841d8119c0827b0c94ca9ad076f2c25571c719df64b2ec1d4087e15f57880d7621dc582100068083104ec3a0791f46a56340e66c96eeff3e65ddc73e0d69e655e6c55b2beab5056b4442fb4aa01e31811b2b870035e2bee93bce3a399069385a72c437e93fb3d1a0fff01ec73500000070f86e0f841c9c3800827b0c94e4edb277e41dc89ab076a1f049f4a3efa700bce8880e0991e40e4ee33f8083104ec4a068ed29a368883c1df9dc94102fbf65601c6d544a752b8a701d02c162b8ce568ba037effe18ac5bb0fa1a75e8ad91fe9f2345300b8cc783aaa7331f011219242bd3000000aef8ac14841c29c720830149cc9406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a741060000000000000000000000000000000000000000000000000000000001e76de283104ec3a034ad705da8eae066174b882040819580094c8e48fa0c4e36c787da23835d49c0a01ce3fc8f51c97a43dd58342a755084443e1bfa9003ed5aaa25eb8b6faca3b35100000217f902140a841ad27480830291a394aaaaaaaacb71bf2c8cae522ea5fa455571a74106874afbafabc68896b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004744a100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff5433e2b3d8211706e6102aa9471000000000000000000000000000000000000000000000000004afbafabc68896000000000000000000000000000000000000000000000000000000000000000083104ec4a0e18d85930b47ef5cd0f1bfe0ad3058ab32dad5ca4b5ebc982783858adc0346e1a010f109560724d969d5b12fe0e4e3f899b8f6a1f52c9a5f99e8d2a65ba7607d050000017df9017a0e841ad274808301adb98080b9012560806040526000805461ffff1916905534801561001b57600080fd5b5060fb8061002a6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80630c55699c146037578063b49004e914605b575b600080fd5b60005460449061ffff1681565b60405161ffff909116815260200160405180910390f35b60616063565b005b60008054600191908190607a90849061ffff166096565b92506101000a81548161ffff021916908361ffff160217905550565b61ffff81811683821601908082111560be57634e487b7160e01b600052601160045260246000fd5b509291505056fea2646970667358221220666c87ec501268817295a4ca1fc6e3859faf241f38dd688f145135970920009264736f6c6343000812003383104ec4a0809fe6d0fa8e11ddc844d53883d94e78a96d45ee2c4f58ae1bb8d74b059a2116a0476e07c694de480314bcedc3d3bb773c38a63f171eabbb9f0f420aba9d07748e00000217f9021409841ad27480830291a394aaaaaaaacb71bf2c8cae522ea5fa455571a741068734194f1bce2714b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031848380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff5433e2b3d8211706e6102aa94710000000000000000000000000000000000000000000000000034194f1bce2714000000000000000000000000000000000000000000000000000000000000000083104ec3a0c17ba1939911153ec8bb51c8e412d26f822772c7528891dbab6f95abdab3855aa057aababb1a6ca4e0d5cf4279104f5c613759e7de99f4a0e06055f5a56c7d25980000006df86b1d841ad274808302067194273e78151cd2db0dc9f4899828c18e521a2941cc80841249c58b83104ec4a019cbcd4f5bcc9cd4215e720ce55d25ff0f696ef249935f308e838447a69aa8b0a07f52c2efcc75fdcdbcfe0cd22662396e113a28dbd21f77c7d7ab7018cfa67d9f000001d0f901cd0a841ad274808303b81094734583f62bb6ace3c9ba9bd5a53143ca2ce8c55a80b901642646478b000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df0000000000000000000000000000000000000000000000000000000001e5aa77000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000001f30b02abb0daf000000000000000000000000425920b77a8b9819aa95c92c79e30fb68cf6c98a00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000007002f55bec9cafdbe8730f096aa55dad6d22d44099df01ffff01303260590c0e77d9974b6b20b7d6dd60f8254c3800734583f62bb6ace3c9ba9bd5a53143ca2ce8c55a01530000000000000000000000000000000000000401ffff0200425920b77a8b9819aa95c92c79e30fb68cf6c98a0000000000000000000000000000000083104ec4a0910b6389a4f6a005b31c0ddc249d6de91ba655dec16336be0445cbc9873483f8a0137292aa1630013e6f64c3401262c9d009084a780406b24938bbd5f7124bf67500000270f9026d0c841ad274808303fdab94a6b71e26c5e0845f74c812102ca7114b6a896ab280b902041688f0b90000000000000000000000003e5c63644e683549055b9be8653de26e0b4cd36e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164b63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009d34dc9c5d525f26d8404e8272aa993739b970e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec4a0d7b9e6a51fab5e543f897840bb6fb5b622b31208f6d32227ac826fd2563e84baa02bb3b4fe383203cf39e972e8faf0ca2e7727736a3503eb7e503bc91b4db41c15000000aef8ac64841ad27480831e848094ec53c830f4444a8a56455c6836b5d2aa794289aa80b844f2b9fdb80000000000000000000000000d8f8e271dd3f2fc58e5716d3ff7041dbe3f0688000000000000000000000000000000000000000000000000000000011046260083104ec3a0c960ea7ca90cda112eb232a65a2a2566827247a4b52028f6cbcdf94973a86bfaa02398cf26701b68b0a67338dfe9c49947e8fbade0e61d53b87ab7811b6e417ca7000000adf8ab1b841ad2748082c8b6949595910db7625ab963d2b32a60c2db5bb9fd20c980b844a9059cbb000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000000000000000000000000006f05b59d3b20000083104ec3a01bf31301e3354ff3b9836ebf347b770d4fbee2db5c9e060192353cb297a502c0a07f1eccebe433649bf218911a7230bce64e62d4e194cd79026f614aab6afe2df400000270f9026d04841ad274808303fdab94a6b71e26c5e0845f74c812102ca7114b6a896ab280b902041688f0b90000000000000000000000003e5c63644e683549055b9be8653de26e0b4cd36e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164b63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000005f24e8fbfd0844ffa2cfb0418d60eff194142cc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec4a0e97d0d66ab74bd413d9521973f1f050accdd09ae8e9c384cd611e9fbeced5723a01e6293ef56b6ce7caed52cd8eb2e9bdf892c59c455283f9c28dfaff123f9d066000000adf8ab15841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a74106000000000000000000000000000000000000000000000000000000001ee1a51083104ec3a0c20648081296674474f96547dedd9fa3f293584c0984b7ee61726f39732a7971a0788ce9cdb56532cef8ad8f33b13d3fb61579c281bc75666833bf4b07cb5c1691000000adf8ab15841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a741060000000000000000000000000000000000000000000000000000000022ccdc7883104ec3a020395401981a8262b6130d0fa38d0f615a349f9c68344df206fb876dd9e71aaca007711903efdc54267e0c8be83c57cb2db31846e9b2bf7d69c80026aacea4036a000000adf8ab16841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a741060000000000000000000000000000000000000000000000000000000020a9a69983104ec3a07d34952808501066143a63e5ba3cd6467c4ffd14617d9606ca7adcf062d0ebd6a05b6641b0fb4442541bd698c2c4d4da7840dd4aee3e4728f3d1a02ab9330d0328000000adf8ab15841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a74106000000000000000000000000000000000000000000000000000000001f4bd9f783104ec3a042ccaf811871cd23a3d2c41e8146bd51ce4e6049e6b857df049d2f2b3567c19fa00cb2cad4f4794bc2626ccd432371b0f8db9326fd9649e4b89a2d64741ae079a3000000adf8ab15841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a74106000000000000000000000000000000000000000000000000000000001ef0def183104ec4a093b449d504cc75f4192d97bd23c26390e70f345a8eaa8313b6691952f8fd51dda046985aeec26a2d570ed98ebe7674ce45e857aafc2e3d5137b7bc91f33b6771b1000000adf8ab15841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a74106000000000000000000000000000000000000000000000000000000001fb6898c83104ec4a0fb31f9b731f4f5246dbb8c0a1bd005c91245c567adb04347597520bdadeca646a0077dcb8ebf14edc7fc49c59a240c900bff62cb9a70d98871fc8f039e2ac619d8000000f5f8f322841ad274808305573094ff75a4b698e3ec95e608ac0f22a03b8368e05f5d87038fc4b888fad5b88402c5fcf800000000000000000000000011fcfe756c05ad438e312a7fd934381537d3cffe00000000000000000000000000000000000000000000000000038fc4b888fad500000000000000000000000000000000000000000000000000000000000000020000000000000000000000004b176a868b4a3803387bf3ce0ffedecc7e0fc50e83104ec3a098f1be3aea29b91cdbe18c1a3ce4f6143c9613d07207c6609d0d7105fe6802b8a02a6d49a7d36a09b3d5a6b7179211127a77885c3499a5a8e482d74ab3c365d1a7000000adf8ab15841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a7410600000000000000000000000000000000000000000000000000000000215ffd7f83104ec4a087cf97447b37eb7a9fc9b3d98d155ab1eef7a03079573468e10e0520039e8f28a0020dd50b494bc4c63218d11a194136e4a8c8cc481686494272082aa9975d08f0000000adf8ab15841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a74106000000000000000000000000000000000000000000000000000000001f981cd083104ec3a0ce0aab44f1aea8823a26f2a1838cf8311ed5739c71fb4e8471c8e76b4d6232c9a06e39e759e4d8b9ae186b104874ad4c90822eb7771c3a82ec3d8c773a61a66677000000adf8ab16841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a7410600000000000000000000000000000000000000000000000000000000219ce99f83104ec3a031ccb64003e742d6b516f1fa6eaac8aeca3648c54d9bfbecd9900bae4bde2365a010c709a9c49fd1e9c64909e3b0b4d2b841ef528541f28cac679ed6b5e48d857b000000adf8ab15841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a7410600000000000000000000000000000000000000000000000000000000204e59ec83104ec3a0500c9f36d00fbf063f8c5c4288099e3090dd2c2c5e733542ed820aa3c78e5ccfa00bbbc274c36543299e0450ed9a2e3ddf0cdec853fc71b041305b2009baea0957000000d6f8d480841ad27480830493e094ff75a4b698e3ec95e608ac0f22a03b8368e05f5d8801aa535d3d0c0000b864474cf53d00000000000000000000000011fcfe756c05ad438e312a7fd934381537d3cffe000000000000000000000000f6871e3d0e0ae33b71c8e8c0abda6d3fe0d8cc2c000000000000000000000000000000000000000000000000000000000000000083104ec3a0e6a8685340b69454139172bd73c7ee6a04699f73e6a9f020f0b7d6d0cecae7caa06c939dbba762d7b5512863bbf2573fcc03d9a4c5aebaffd5fa26a6b0b71b6c3200000190f9018d0a8417d7840083033cba9426cb8660eefcb2f7652e7796ed713c9fb8373f8e80b9012438ed173900000000000000000000000000000000000000000000000000000000000493e000000000000000000000000000000000000000000000000b823b09640a0a2eab00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002cc5bb7daaff7d3d538f895e125b0eb2f616722e0000000000000000000000000000000000000000000000000000000066030dbc0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000ddeb23905f6987d5f786a93c00bbed3d97af1ccc83104ec4a00906883b81dde1ac570704c60b87171cc37ad8f5138350aa8023f73ed1099ae7a001194e98ebaf1db788fe3ff0cd5d7722978785c7212c7cd1076431ad4cf677d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000201d02000000000043accd000000006603091b0000000000000000000000000000000000000000000000000000000000000000000000000098968000100000000000000043acce000000006603091e000000000000000000000000000000000000000000000000000000000000000000000000009896800009000000000072f87083070bf984283baec0827b0c946fd089754eafd49e4576776151eba0ea2ec11c7e8713b89ae725f0018083104ec3a02e52f968656b47a019b478218e644de12af47c208adedec9993dd62ad6a3c5aaa02ab7722012ee15c50450c4a3f04885845bad0aa021b51e80b5b25146ac4dd1620000006df86b0284202fbf008302a43b9419fa769fa67663ba72865ca555d6a86a986442a580841249c58b83104ec4a03990ddee11e2a81c24c4edb588dc8fe18fbf2235f9157873113242ba954d0891a06733d1369c4772d7659e48670e0c9a60491a954a167f821ed7efea4c50fa352900000132f9012f830829f184202fbf0083053db4948363302080e711e0cab978c081b9e69308d4980880b8c40894edf1000000000000000000000000000000000000000000000000000000000000004017ce55f79af7ac171133b22daecaadbda722b00cbe2e3a173fc10c51adbd6a7a00000000000000000000000000000000000000000000000000000000000000510100000000000001450000759e000000000000000000000000f9d0b0b11c55defdb635c8bcc1a65ab5188ffe0400007606000000000000000000000000d3c20b5ce963b9d7ade66c01023f63aff68bc1cb00000000000000000000000000000083104ec4a0fb6a1b9c8b18bc1f6db5985361b436313999ee600a7844345a555401e9d9d92da07819fc92d50a76b0712409cb043d21d3428169dcde380e01b4bdbb5bd629a90c00000072f8708303a974841d8119c0827b0c94dcb2127a1029df85fc795df2e12722d06191bcb08764b82cbf61e0068083104ec4a038c29ff67ba3ba42e210113b31143b06d501db9d9d26f92d73e4a45b74b5bf03a0594a213b08669c58c832b266286d03599fb0fda209b11643b343839b5717b27b00000217f9021414841d8119c08302ab6594aaaaaaaacb71bf2c8cae522ea5fa455571a7410687366d6517b24920b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000366d6517b249200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff5433e2b3d8211706e6102aa947100000000000000000000000000000000000000000000000000000000032aeb28000000000000000000000000000000000000000000000000000000000000000083104ec3a07e2d92299c3ea8ca1525627883b58ed65d7e491065aa9eccc35f59556ee07d98a02cadcdc0410a9e6fc4adc6f7671496dbff27c82b76416291c9101289834072a6000000d1f8cf831111b0841c29c72083022cc49487627c7e586441eef9ee3c28b66662e897513f3380b8649c66c25d000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df000000000000000000000000006eb59d313dc6fbb976e5f435a9ca8c2cc6922d0000000000000000000000000000000000000000000000000000000011a02a4183104ec4a0f445c7875a4a42d7d7bf5b125f74afc1e3eef833cae50d9bfc8debd2bc76c229a059cce50a9e1b8a804cd09741d081b0829b1b36ac6a8ebff74cdee5b1511ad42a000000aef8ac0b841c29c72083010d8194f55bec9cafdbe8730f096aa55dad6d22d44099df80b844095ea7b3000000000000000000000000aa111c62cdeef205f70e6722d1e22274274ec12f00000000000000000000000000000000000000000000000000000000006fe3e483104ec3a045e35c184a01d54a868458ae6ea066eb493e555878a0b6da96f50fe3b34d76efa06d56a84ac6ca303641c572d26b9cde60f4af3d143e1cc0e241a1deb22c0c9077000000b1f8af831111b1841c29c720830152849487627c7e586441eef9ee3c28b66662e897513f3380b844535b355c000000000000000000000000b3261b2c33af77719b2dda538e667891b301ad7800000000000000000000000000000000000000000000000000f7e395631cdc0083104ec4a0d0856f1e34fbc599974afe5bd69142636d6858a71603ab9ab4882a1779dffe8ba04e7f9d7e956550b7681dba1e56979ca19cdd405d67c2cb0498c7635ecf8a031600000073f87105841ad2748083012fcb94a0d013b84fbaeff5abfc92a412a44572382dca08865af3107a4000841249c58b83104ec4a0847500e5ec91d53c265a5b8dcef136ae760a90fc7cdbcf75968330ad18be4fd2a02732b311ee5f57a5da93e836b1a27fde5320ab97fe757f9759325baf2ba773b800000281f9027e36841ad27480830269518086b5e620f48000b9022360806040527389a512a24e9d63e98e41f681bf77f27a7ef89eb76000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163460405161009f90610185565b60006040518083038185875af1925050503d80600081146100dc576040519150601f19603f3d011682016040523d82523d6000602084013e6100e1565b606091505b5050905080610125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011c9061019a565b60405180910390fd5b506101d6565b60006101386007836101c5565b91507f4661696c757265000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006101786000836101ba565b9150600082019050919050565b60006101908261016b565b9150819050919050565b600060208201905081810360008301526101b38161012b565b9050919050565b600081905092915050565b600082825260208201905092915050565b603f806101e46000396000f3fe6080604052600080fdfea264697066735822122095fed2c557b62b9f55f8b3822b0bdc6d15fd93abb95f37503d3f788da6cbb30064736f6c6343000800003383104ec3a0f911e0e29e1258b995ae71042379cd740f391a691afbc36c3d2447c940ecdc1ea0720fdaee461776981172daccd0fc1944d4aa27516d6cb21c5965d9ff8de8ad0f00000210f9020d13841ad27480830256ea94aaaaaaaacb71bf2c8cae522ea5fa455571a7410680b901a4a15112f90000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d8f16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000002f34d2636990f000000000000000000000000000000000000000000000000000000000000000083104ec4a0a27c402c1293b7a584e42af5fc7b70bd57cb198801e4670978265c0627718f38a05223a6e9be820d5cd3406e0c6d475df3e07f826345ccdcbf8b3c91a628b3e6a700000093f8911b841ad274808301771094c5471e35533e887f59df7a31f7c162eb98f367f7865af3107a4000a440d097c3000000000000000000000000739815d56a5ffc21950271199d2cf9e23b944f1c83104ec4a0c2692a2380475366525a34062460ff666ca8f1a32cd0cdabc7d9afeed238bbc8a03c0661ed2c1aafbd940c52cde49032dce96e4f21a8e23a6962d809637f838c650000006ff86d14841ad27480825208945e809a85aa182a9921edd10a4163745bb3e36284870b30e8870ae00c8083104ec3a029e98c9011caf0e63a1bb3d27b4a06c783e842d692b16b811d2d71b0ba90a483a04bba4b777a2a65c6a71182f1aa4aa925bc774d88d01a2983a5e3583b50022d3300000210f9020d23841ad27480830229c294aaaaaaaacb71bf2c8cae522ea5fa455571a7410680b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000010164e6760b7e770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff5433e2b3d8211706e6102aa9471000000000000000000000000000000000000000000000000000000000f49ff11000000000000000000000000000000000000000000000000000000000000000383104ec3a022b2fc4ab92c271c924991a2a579b67d8e6e369bba4fc3b731a4676475179040a05f910e519cd6443fe365fecc0744b727356ce39b4d965a98e7740bc2f606be50000001b0f901ad08841ad274808302a04e94734583f62bb6ace3c9ba9bd5a53143ca2ce8c55a80b901442646478b00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000001e60b98d000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df000000000000000000000000000000000000000000000000000000001e5155d3000000000000000000000000b2daa35f73e7bd029430dd2abc0f97d453113c2400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000420206efdbff2a14a7c8e15944d1f4a48f9f95f663a401ffff01ae5aa896bb93f4c7c5660b7fc894b3892255d01501b2daa35f73e7bd029430dd2abc0f97d453113c2400000000000000000000000000000000000000000000000000000000000083104ec3a06ed42868188e9c95e2069c4e8e72579b9cc936079197847121a755e252e1537aa0348ded211a76b24ee3cc22fe14e8b378d3920b6acacd8360d10636aee263b9c0000000adf8ab18841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b30000000000000000000000000d8f8e271dd3f2fc58e5716d3ff7041dbe3f0688000000000000000000000000000000000000000000000000000000000660b0c083104ec3a0ee48f7e6db2cb90da7519f8562532824bfaf9747b6bd9e56e1bcdba49f26a0fda02ae141d7002a4b0f64af376d74fb4d6855d78287329d4c7a66b79cdaf6c0e3ac00000073f8718303a975841d8119c0827b0c9469c24c302920836f04e886bd64d30c486a778f5788016345785d8a00068083104ec4a0fa64d94ae462bb48e0fcb4ad1d7dd4de3f30435b24ffc07d1ca1a08bbfa26427a02db84c6d7659fa4e44f83c933c97ba02297f4d81fa977d90f077e759db45de8400000238f9023502841c9c38008303dca794aaaaaaaacb71bf2c8cae522ea5fa455571a74106880159584f7fec4290b901c4a15112f9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000002f3cc000000000000000000000000000000000000000000000000000000000002fba00000000000000000000000000000000000000000000000000000000011098e8d000000000000000000000000000000000000000000004048cbb95ee800000000000000000000000000000000000000000000000000004196d922175f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec4a081f17782e61ebe34e2007b6f3a16a781425e53becb932d6b7a449583ac9344f4a0443c468a02d4fb0f93cc3b4f85bbc369abdb0556575b754e891ce5a125ebc0310000006cf86a06841c03a18082aa4c94c6ca94b94315391617b3fa4428d28c0de17597fc8084b49004e983104ec3a0c66cd99d4c1d26bb853694c0ac5108a79ff1f254d0f601f293f528db768683ada0291e7aac3710358caab0ae265a077bd7335556e4f3cc7c86249de535f6c5a12e000003f0f903ed04841ad27480830526019474670a3998d9d6622e32d0847ff5977c37e0ec9180b90384186aaba2000000000000000000000000c450a132d34a6fc85b8a1c077d389ec7bdb4870c000000000000000000000000c450a132d34a6fc85b8a1c077d389ec7bdb4870c0000000000000000000000004e42d45540d04a828529df0c5290acfbf4cbea970000000000000000000000004e42d45540d04a828529df0c5290acfbf4cbea970000000000000000000000000000000000000000000000000002580019462e9b00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000159b1fb28aa415b48ab56e858df5a5b3ad869b1b76d6b72351047f5269f679a0713bb28bec106e0ed9e65f69b739f2c6d018ebf04fd6e0f137f67cbdc75b6334c0864f64b5a9b3cb613d31cdbcea38ae049ad9960a3e9cd81050fee68214bce9d58865a99a1f71ee55db2e9c07bd1e490c596e4dc2b10b18e0fcbed322398649b7e82f2165f4350d9157241cf461fa2836fa09d227cd2898e329181f54f1d80713c8e95c09efa040caa07abce478b5deff0f1f5a5371e81b3ff8961988f48e64c1d8c260b127d26806e1c1eaf5f14971d3ad3829bd62f04203ae7b1f9d41d648aab3eff2c7f89fe827ac5d55d015879a90ffbf5e468a184701e7ad7c81445083227f015c4f2f546dff8b3690e6a99e3ac159cf7dfcd2f595318140ece11123f821e0fa825f3c0ec7baf5a6b4331c799ed802207aa212eb874469c1261fd024da5cd502cccf84e7be4d847fa2f2de49f76966445e9e46316d744fb0aee51348642a0825785e0e6aa8b06a1e289b04c891f0277aa616f9cbcf8f26e76c9bcf65a850f39023e5258e80edbfdf92a61c0ec8af5a8012094c46d6165db2dab7c3b2f5f3abe9f79ea07b41c83d80e14bae4ae3b137e8098f8fd95879af3f73d09593d95e128867c4be9f258bb937de01fe3ba8cc5fdbcc208ed8faa160f262cbc27ef7bb901a3b1f9350982ce7c565af835f55700d83e417c02c5146b7f3f6a957d5649d2dbdd0d815f3158da3950ddd3eeb17486eb68bbdde553657b3b56e4d4605a97081d69cfa58131c093de2a3e8c4a785b9600716ab6230a56aec96f20e930c19c9f4b5357269464dcb91a44fa36a477da5a7611c663adee42398b8413237187ea66c2ecac3c1c4086691092198093106ff7b01548d972b65aebc95d415bbe288e5f764432b9d14c964dc5c5056592e9ef7a2c04322199a1efc9fe7d04930c6058983104ec3a0a65059d01fd97bbb95a91a91026dadbc5a723b8b52fbc56bb64cc71d10789e93a0612cce881c9d823ba69ea9d198b62f347852d6f510c1dd973dba16c9148ce21a00000217f9021402841ad274808302740b94aaaaaaaacb71bf2c8cae522ea5fa455571a74106872e8a616e8ec000b901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000002e8a616e8ec0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff5433e2b3d8211706e6102aa94710000000000000000000000000000000000000000000000000000000002c3b5bf000000000000000000000000000000000000000000000000000000000000000083104ec3a02fccfc3b0f7b675350cd4193481ac9582dd301b5b8409b2ce00fdcdeb5b799aba032988936faa724d772033852d10bbe42784f35ed89d39ffae58d1ce704fd78f6000000adf8ab2d841ad2748082861b94f301805be1df81102c957f6d4ce29d2b8c056b2a80b844095ea7b3000000000000000000000000ff75a4b698e3ec95e608ac0f22a03b8368e05f5d00000000000000000000000000000000000000000000000006f05b5a143c3cf683104ec3a0ab48933e0547e0eb1a95b740c464a31099eec141d35720e1dcc568003910c818a048df38d59471b241b8fe72de7bdff81f2ffc44f393234316f0e4211e858ad93f000000f5f8f3822937841ad2748083060f8c94e124232389cce06ede97539700a9d27c1007bf2680b889f0cacc1a3c1bca5a656e69edcd0d4e36bebb3fcdaca60cf1f55bec9cafdbe8730f096aa55dad6d22d44099df5300000000000000000000000000000000000004080612b4137eaf6a46a871c5c8aec751a154e1ce1db790b12abb5bcb50c2aa6f1b54447046640010b3393300f8e0469c1dcbbc000000e8d4a5100026ac27292710271f020026f726f783104ec4a06a9c721361a1902f1b8a90b321047b1bc8ea20775603bc677dd48356f731dfe3a01323aa1b012d4ee1e15fb016b2bb5e59a257f49aabe9bf9f9437dc96866c6f370000006df86b0c841ad274808302067194bead4b41cec7c9c3d4d9573f022991d156ab8e6180841249c58b83104ec3a06e428d0c5bfeb2f25b4b56c16ed64e983c5414c73e1f79930757277b27b1867ea07d1761ef7a970e66583311301b6368d6575d01786b77a5855dbb81e2cdd38d12000002d6f902d308841ad2748083025b929480e38291e06339d10aab483c65695d004dbd5c6986fe021b375200b902642cc4081e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000d8b8c269b709b45000000000000000000000000000000000000000000000000000000006603172800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fe021b37520000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b39880c7a0b752179d6d7d9ae594ab4c02d6e5b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005300000000000000000000000000000000000004000000000000000000000000afc3e152db7f97eb0a731d622e868a482de840260000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000083104ec3a0913f608b08d82ed936005e7045c17a25eebf4c9e7ed7b61b6b8cdf8d58392caba021657b08c7e7a910bff2dac689f0d5cd82ea2e60da6c793e34df9a90c0504cfa00000000000000000000000000000000000000000000000000000000000000000025a201000000000043accf00000000660309210000000000000000000000000000000000000000000000000000000000000000000000000098968000100000000002d6f902d3158459682f008302bb209480e38291e06339d10aab483c65695d004dbd5c69877ad8000bbf3601b902642cc4081e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000738db3100000000000000000000000000000000000000000000000000000000660337f40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ad8000bbf360100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005300000000000000000000000000000000000004000000000000000000000000482de86c457a243f2c9a11f00436f0808bdcc4a40000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000083104ec3a0f25f8b2b66dcfcb32ed84d164c3c2b9995d20dd0eb58f7c0d51d2d75b8b585159fd1996b114a0e1df967f8b59a20c60956693f091300a0f08e9db7e3cfcd5747000000b6f8b424841d8119c08304096f94ec53c830f4444a8a56455c6836b5d2aa794289aa88033663a70de5a000b844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c000000000000000000000000000000000000000000000000033663a70de5a00083104ec3a085e28b9f6882336f8b1eeba8dd6399842f566e005b8b9eac2317c0c3572560cba075c4fe034eeeac6b31070c2dc6407fa21a8ae75795a1e1fbffad0b220e3e167d000000a1f89f820631841c29c721832dc6c0949691a483309a9c51d951995c174b6848834981f380b6180166987c33180009c4b4137eaf6a46a871c5c8aec751a154e1ce1db79018040000530000000000000000000000000000000000000483104ec3a0915166da63dc4860eb874d0463a041587735a19a3dca107425c0b3345a671623a0659727ac2766c55fc3316b6c8459b2be507ec79e28eb78b2cf9abd4754555dfe00000170f9016d2e841c29c7208303fe569418b71386418a9fca5ae7165e31c385a5130011b680b9010418cbafe500000000000000000000000000000000000000000000000000000000005d5a500000000000000000000000000000000000000000000000000005c499538f2a6300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000001febd2d5bdf7e504eb0fae7f6b805ab5b5934b790000000000000000000000000000000000000000000000000000000066031023000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000530000000000000000000000000000000000000483104ec4a029555b419e79d7cd8fb4ba86debc6477dbf39dc1df0914bad81384d399471abca051a03e52d1b5965580ff399f964c56dec249665260adee246d8b0a097bb55439000000f5f8f38229a2841c29c720830c350094e124232389cce06ede97539700a9d27c1007bf2680b889f0cacc1a3c1bca5a656e69edcd0d4e36bebb3fcdaca60cf106efdbff2a14a7c8e15944d1f4a48f9f95f663a45300000000000000000000000000000000000004080612b4137eaf6a46a871c5c8aec751a154e1ce1db7906905c59be1a7ea32d1f257e302401ec9a1401c5200f8e33cbaf0b1b3000000e8cb4035ea26ac272927102729020026f726f283104ec4a01accbf9170c2af5f2a9184f1389b7ea25f521f0201bef361f597272a61965932a03cac18a2de505c9e8c0527d562fa22300c6afb3c0767f33430de01402568ad04000002d0f902cd11841ad274808303b627942db0afd0045f3518c77ec6591a542e326befd3d780b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002467d653f52850e8c0000000000000000000000000000000000000000000000000000002b83196b5acf00000000000000000000000000000000000000000000000000000000066030b36000000000000000000000000000000000000000000000000000000000000002bb65ad8d81d1e4cb2975352338805af6e39ba8be8002710530000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c607178c0a0fe335b3880bac259bdc5ca685cad30000000000000000000000000000000000000000000000000000000083104ec3a03ef39feb6370ce664e954a457703c723f4942234f93d4bc874447f48b95a1fc2a002aed6594e91099ba2da28b97339007bb1485db9b6bdef34fc6ade35b6b97219000000adf8ab0e841ad2748082f4449406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b3000000000000000000000000aaaaaaaacb71bf2c8cae522ea5fa455571a74106ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec3a0da7a9d95bfba119e044558af8a4018b92dfc4f3f8b3d17b5ab4e0ef3f42ae128a05911620ad73109cc496bcf786c0285871783dcb45e6fff98e6c79ec5a48db0b700000410f9040d12841ad274808303710c9480e38291e06339d10aab483c65695d004dbd5c6980b903a42cc4081e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000259b8f93a088f200000000000000000000000000000000000000000000000000000000660337e6000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df000000000000000000000000000000000000000000000000000000000251723d0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001600000000000000000000000002076d4632853fb165cf7c7e7fad592dac70f4fe10000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c70000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000aff84642ba059a901208839e99c14185fc0773c10000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec3a04b7db67703b4bb61b576b2887e19d49f434beaf5fa4d5710da0bd5822d44f2a5a07826b352886816ffc23ae5811637b97cb82e9024285dd38806464f9ff8432ab100000390f9038d0d841ad27480830345c09480e38291e06339d10aab483c65695d004dbd5c6980b90324e84d494b0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000eba4078b60eac00000000000000000000000000000000000000000000000000000000660337f6000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000660337ec000000000000000000000000000000000000000000000000000000000000001cfafffd218898da4dc45995b29a0b29fbd8bf86f900d23980fdfd1c880dc311bb3f453cc594f4b1441613b97c5eff5f2b971b6fdfe0095944a07a2e88757c7771000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df0000000000000000000000000000000000000000000000000000000000e87f8a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000078ea8e533c834049de625e05f0b4deffe9db5f6e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df000000000000000000000000d4916b6b4a95c945e903a1474bdd8183cfca47b30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec3a08686107f87ea482622221780459ca82c85c42c87a146c40e83cd44743f9da633a056bee0efe56aa55e1ba8cf7c758498c2b3ed524ea71c1762da4d786d4c1de00300000418f904150e841ad274808303cee49480e38291e06339d10aab483c65695d004dbd5c6988010c3494671ea766b903a42cc4081e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000fc43d2500000000000000000000000000000000000000000000000000000000660337f20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c3494671ea76600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000078ea8e533c834049de625e05f0b4deffe9db5f6e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000053000000000000000000000000000000000000040000000000000000000000002076d4632853fb165cf7c7e7fad592dac70f4fe1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002076d4632853fb165cf7c7e7fad592dac70f4fe10000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df0000000000000000000000002439654cf4ffc8ac1bf5e913a0aab8c25d32e5a10000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000083104ec3a0b8fe9aba8fd8a936667532c1d25ed7c4e5103fe8feb37c1ca3345e236454a438a04a6b919679e78ebdd52c8da87c67e20e826cc343d80a39750ce6a6abe8f3821e000002b7f902b402841ad274808305f10b942db0afd0045f3518c77ec6591a542e326befd3d7872e2f6e5e148000b90244ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000014475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000727813b43dd284a81051bef1ade82b387157d357000000000000000000000000000000000000000000000000002e2f6e5e1480000000000000000000000000000000000000000000000000000000000002c3ad2b0000000000000000000000000000000000000000000000000000000066030b6f000000000000000000000000000000000000000000000000000000000000004253000000000000000000000000000000000000040001f4f55bec9cafdbe8730f096aa55dad6d22d44099df0001f406efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec4a0e0b856fc711f140d980bb92545929c1b0745ae922e85179f2bfa75a314d115aaa06d977aa5ab9a2e50f80dac2e05f7f8d77dfcb258347d5f5e2f5be11a0ac07c1400000170f9016d11841ad274808302ed9c9418b71386418a9fca5ae7165e31c385a5130011b680b9010418cbafe500000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000fccf045a0ec600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e6c23a33b8492e2aa9eab7d37853e86c8600da2a0000000000000000000000000000000000000000000000000000000066030dc1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000530000000000000000000000000000000000000483104ec3a0f44ce0b36335854a8868118e9cb8d86d04731058c216b496a74c905ed19710a6a04a5393736bd4b36dd984d714deeaec876b191926e5bb874c37f93fa8805ec24200000094f8920a841ad2748083017bdb9422104ebeb88d45d7c5682edb461c73544ab791c8870193d0ce47c000a440d097c30000000000000000000000001943f0ec6cad494b11739525342674e939737f8a83104ec4a0d4c43bc669a0a6f03775e9f39bae0749ce20aa502cdbdc15a025d724b8a61a06a07c87a783473de35a0c468923c8f572cbce2081a1a99a921854b47c8fc6802f98000000f5f8f38228ca841ad27480830c350094e124232389cce06ede97539700a9d27c1007bf2680b889f0cacc1a3c1bca5a656e69edcd0d4e36bebb3fcdaca60cf106efdbff2a14a7c8e15944d1f4a48f9f95f663a45300000000000000000000000000000000000004080612b4137eaf6a46a871c5c8aec751a154e1ce1db7906905c59be1a7ea32d1f257e302401ec9a1401c5200f8e36c3d54b220000000e8ceaf2f0026ac272927102729020026f726f283104ec3a0022e2c05509973e3a9e296c09e793e07c6a39a79d4d498573196a6a04ea3ad3fa0460fd082794e439610bc9ad8b804a332e23240eba6cddc62a082572998c9c367000007d7f907d413841ad274808302e492940cab6977a9c70e04458b740476b498b21401964187030429376a1000b90764a4d730410000000000059e1b6601d06d916bbe845c424dc9317e8b815ca18f207a12c84a6ec522b6ca5e44ae66295da9eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5f7d80e72b9202bf51c5bc387538262ae993ca117a0e481f908209137a46268ebea49653b798e1cc5912de2b287648df6cd3a8dfdd14d938cc889223e29d06e430bf3320f1062480100f29d53789c2142cd1804081c1f2d765e838623dafc1d600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000680180000000000000000000000068089c372275512e09f5359f82ce68a9d46ce19003201000000000000c803e8916bbe845c424dc9317e8b815ca18f207a12c84a0000000000030429376a100000000000000000000000000000000000000005c10000000000030429376a100000000000000000000000000000000000000004de0000000000030429376a100000000000000000000000000000000000000005d10000000000030429376a100000000000000000000000000000000000000003ed0000000000030429376a100000000000000000000000000000000000000004d70000000000030429376a100000000000000000000000000000000000000005c40000000000030429376a100000000000000000000000000000000000000005c20000000000030429376a100000000000000000000000000000000000000005c50000000000030429376a100000000000000000000000000000000000000004d30000000000030429376a100000000000000000000000000000000000000004d10000000000030429376a100000000000000000000000000000000000000004d20000000000030429376a100000000000000000000000000000000000000005c60000000000030429376a100000000000000000000000000000000000000004d60000000000030429376a100000000000000000000000000000000000000005c70000000000030429376a100000000000000000000000000000000000000004d50000000000030429376a100000000000000000000000000000000000000004d40000000000030429376a100000000000000000000000000000000000000006840000000000030429376a100000000000000000000000000000000000000005930000000000030429376a100000000000000000000000000000000000000005940000000000030429376a100000000000000000000000000000000000000005950000000000030429376a100000000000000000000000000000000000000005920000000000030429376a1000000000000000000000000000000000000000058c0000000000030429376a100000000000000000000000000000000000000006850000000000030429376a1000000000000000000000000000000000000000067e0000000000030429376a100000000000000000000000000000000000000005900000000000030429376a100000000000000000000000000000000000000006820000000000030429376a1000000000000000000000000000000000000000067c0000000000030429376a1000000000000000000000000000000000000000067f0000000000030429376a1000000000000000000000000000000000000000058d0000000000030429376a1000000000000000000000000000000000000000067d0000000000030429376a100000000000000000000000000000000000000006810000000000030429376a100000000000000000000000000000000000000005910000000000030429376a100000000000000000000000000000000000000006800000000000030429376a1000000000000000000000000000000000000000058f0000000000030429376a1000000000000000000000000000000000000000067b0000000000030429376a100000000000000000000000000000000000000006830000000000030429376a1000000000000000000000000000000000000000058e0000000000030429376a100000000000000000000000000000000000000005890000000000030429376a1000000000000000000000000000000000000000067a0000000000030429376a100000000000000000000000000000000000000006790000000000030429376a1000000000000000000000000000000000000000058a0000000000030429376a100000000000000000000000000000000000000005870000000000030429376a100000000000000000000000000000000000000007620000000000030429376a100000000000000000000000000000000000000005880000000000030429376a1000000000000000000000000000000000000000058b0000000000030429376a100000000000000000000000000000000000000006740000000000030429376a100000000000000000000000000000000000000005820000000000030429376a100000000000000000000000000000000000000006770000000000030429376a100000000000000000000000000000000000000005850000000000030429376a1000000000000000000000000000000000000000067383104ec3a0c50c30a27cfc14080b1790771935d855fb83ed3c7fe51af2687f94603f4c02f5a010d2845c439255ec424463f2a6bcbd22e5b5e03db5dcdbf5425996d2513899e9000001d7f901d409841ad274808304ce8f94aa111c62cdeef205f70e6722d1e22274274ec12f873272d323cf8000b9016467ffb66a0000000000000000000000000000000000000000000000000000000003062b2a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000005e4819feb6ecf0a42422795527f22de8862778060000000000000000000000000000000000000000000000000000000066030b6f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000004000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000000000000183104ec4a07ff55bc61e0268fc8ea612415bd4287fceef57ef2712ad9ce1126e9ad53c800ca01975d9200b39e90e7b662476e4ef261cca1b99d33ec3d5dea44bb3b40e992274000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000295201000000000043acd00000000066030924000000000000000000000000000000000000000000000000000000000000000000000000009896800016000000000170f9016d268435a4e90083040896940122960d6e391478bfe8fb2408ba412d5600f62180b9010418cbafe50000000000000000000000000000000000000000000000000000000001d97a7a000000000000000000000000000000000000000000000000001e32e1c0e66f9c00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000cb6daccc8334a87130fecf629a800ce89cd064810000000000000000000000000000000000000000000000000000000066124b5f000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000530000000000000000000000000000000000000483104ec4a0b6b31bd11522834787a9b10f3ee6958da517f3536692c20db2be4e80f9969a72a03d9f42f130cea4314c06e1698bbb83e379d91691dd913ba62a5d9dc0e3036aef00000273f902708307d3d084202fbf00831b24d094cb566e3b6934fa77258d68ea18e931fa75e1aaaa80b902046c459a2800000000000000000000000038de71124f7a447a01d67945a51edce9ff49125100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000066035d7b00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000084704316e5000000000000000000000000000000000000000000000000000000000000006e4f2f8cea88fc9da907cfce0e75b4c75ed47cba54817067bad30a5f6e64cf1dbf00000000000000000000000000000000000000000000000000000000000000144f2f8cea88fc9da907cfce0e75b4c75ed47cba54817067bad30a5f6e64cf1dbf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000822e7078be9c69af7894ac13390f2adf808a9d0c8243112403660494cfc693d4352feef8c781e100104bc63b14c178fd7469d60cde49b86699023b7d7a18c078391be1600ddc61d2cfb905b96a203e8e655c3a4b4075f9114cbb92f04c511d3fb88c4d2ca3574a41533d992079d7a09435a202b4de8089df61601c8f0b324534de571b00000000000000000000000000000000000000000000000000000000000083104ec3a06d44e5865d0f750648bf85f565b63c9f7733078e98d8e21c75695027d7380aeca026bd68ec8ced0b5baa7f36238018a843a89a35feb6ea00b67f99920e1baf201c00000870f9086d3184202fbf0083045a3f946131b5fae19ea4f9d964eac0408e4408b66337b580b90804e21fd0e90000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000005300000000000000000000000000000000000004000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df0000000000000000000000009f5af55fbc3d34d69aae140cc5640a6c80ece46f0000000000000000000000000000000000000000000000000000000066030dcc0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000401b96cfd40000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000083ffefbca071347df469c4e64820c95b01b957be0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc89700000000000000000000000000000000000000000000000000317f8b88feb286fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd008d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000003200000000000000000000000002faf9320000000000000000000000005300000000000000000000000000000000000004000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000009f5af55fbc3d34d69aae140cc5640a6c80ece46f00000000000000000000000000000000000000000000000000317f8b88feb2860000000000000000000000000000000000000000000000000000000002f8af3b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000317f8b88feb28600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f07b22536f75726365223a226d6574617661756c74222c22416d6f756e74496e555344223a2234392e3937313432343931373637313137222c22416d6f756e744f7574555344223a2235302e303032323236222c22526566657272616c223a22222c22466c616773223a322c22496e74656772697479496e666f223a7b224b65794944223a2231222c225369676e6174757265223a224e35535949654d57494349374466514d64722f6a6242777a57376f4d7547717130486a7a4c3759777a59423839682f7a502b4e37786e6b35745335436a58396444765036382f7a78783831546c6e38716253544d596a71694b31656f2f746c383368793363415a37616c6746423437456c42682f43387a656b7052394a5950373157492f454a47316a6c425848396d4b482f4b5433595541376a3667516264574b2b79564d4d526e4a42514b51527939596c30475951426c3363445947416f346f3533795459446d765767447736735277463872697a506c6d784c626262666b313532355a6f6f49716f4867334e4e4e4e724d4c536a5774643131554674414a4e54376b4a5654434e46747a4e717851687178456b59456b542b44396166303267516f74363965706245726370646a4f4163503463594245724c4c484757696d2b4157644c446d486954436b785854674a61685133773d3d227d7d0000000000000000000000000000000083104ec4a0cbba86591e98a23aca6c46ee6232f976b0b1f495991a9f9a8b838da05e26cbf7a02999e4d9440d1b3896e176759898a00d2e3deacc245290c15f703280b54456f9000000b6f8b423841d8119c08305150b94ec53c830f4444a8a56455c6836b5d2aa794289aa88036f07ba018d1000b844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c000000000000000000000000000000000000000000000000036f07ba018d100083104ec4a08845d7939685aacd842e7cc6a6f3ef070024fd041ce57ba86981e6a4c301ccc6a00d4c39ae9c32907b28532afcbe9c85188f9333b738ea162d92bafdd7b6c1665d000000b1f8af831111b2841c29c7208301529c9487627c7e586441eef9ee3c28b66662e897513f3380b844535b355c000000000000000000000000497083a97ec27e943fcccb05b0c3be315a5237e50000000000000000000000000000000000000000000000000426ddfe67d28c0083104ec4a034bf2f88c1909395607fd77fe449b8032a8af2b81473a2d4b8e3243a7afdc83fa066506c9a7ecf266f7480c8d0b10c0440bffdfda88d7985559a8389a6bb510544000000b1f8af831111b3841c29c7208301529c9487627c7e586441eef9ee3c28b66662e897513f3380b844535b355c0000000000000000000000007f8e253a0d296cb512fe197f0a723cab3db8b4970000000000000000000000000000000000000000000000000426ddfe67d28c0083104ec3a0f095612f59dee211b900f1065b083b30aca80dc13d0e44bff0e4ca2de7624856a02f1cf415fdcdf985f865aeaad6fa90684d385c4737d474a67c25fc8bd49eb871000002d0f902cd04841c29c720830471269480e38291e06339d10aab483c65695d004dbd5c6980b902642cc4081e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000017331090000000000000000000000000000000000000000000000000000018e7bede9e100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000017ac452000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000002076d4632853fb165cf7c7e7fad592dac70f4fe1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000004d4c9fd42a9f6370a6ecffed46381a382acf581c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec3a0c00566b4777fe8c98a4ab657e384d4db9a34e71e1d1fcba4254c00b0b87ba804a06775eece4cb8d89d74bee1ab37aca074166c5f5550bff76c73d6dcc52e0a174b0000016ff9016c10841c29c72082a5d59447fbe95e981c0df9737b6971b451fb15fdc989d980b901045b7d7482000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000406364653563313734333834653633643133653730663033376136633038613034313838653265633162306163313064343763303331613731353963323231623200000000000000000000000000000000000000000000000000000000000000403538666630333132333839356232613234613363623130623736666662303666373332636464393837363332666535616461633534393266396237316139336183104ec4a019a7f935bf8ad662c5269838b441a3f6ce0d0f05b2166a08e817ac1d829d57cea05579fb3baad45daa1b8cef817de3a24b10602dca5b0f8c0f2f83cf0069a44d8a00000230f9022d09841c29c7208305e4459480e38291e06339d10aab483c65695d004dbd5c6980b901c46cbe96fa0000000000000000000000002076d4632853fb165cf7c7e7fad592dac70f4fe100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000d27e4e3f596c8667000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000000085640f000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df00000000000000000000000000000000000000000000000000000000008551020000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a26393f297ffcba780a312d21264b3ad2935664a000000000000000000000000000000000000000000000000000000000000000083104ec4a09e6fc75f445c81588913a169437ffc19794b625b4a70c6fda91b62c48ce866e0a0433e97d8799d0e469d422d45f2045cba9bf62933dc35ff14befc0dd81e563f32000001b6f901b304841b6b0b0083038fe2940cab6977a9c70e04458b740476b498b2140196418612309ce54000b90144a4d73041000000000000011c660308b167d33407b2067a1804fbd7ff7527c8db5cd89658a71211acedcc9a1e662a87c2eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee522b81b0de4ea8129a340aff7538262ae993ca117a0e481f908209137a46268e6db2214ef5c92f791dfc2b1701329b53b6a91ba9436ccbb1cc6a60e4cccc04031e39613e9e8fffd6469c812f4b3a82de6472c03c5328182372b0378db683640600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000ad0ddcabeffe2898b4435ed2dd41c8308b39d5cb000101000000000000c80000000000000000000000000000000000000000000000000000000012309ce54000000000000000000000000000000000000000087e83104ec3a08dffadaf4cf756735a740a6a341584ad43ff1b7c601faeb4e5e318154e6736a0a06877796bd75fccb048e22fd0b226e19d2c14c3fe78e0d8ee965472523cbf93a100000074f87204841b6b0b008301300e945300000000000000000000000000000000000004879536c70891000084d0e30db083104ec4a090ae57a72c2751dee34c57ad2f5667202d49e6cdff572a25b7a8cef52684d4c6a01e3cc759cb99621587e4257652ca43f21b67063b5b0dd1fb55ee7e856ee4d65b00000390f9038d03841b6b0b008304e83c9480e38291e06339d10aab483c65695d004dbd5c6980b90324e84d494b00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000009d760dd9f127400000000000000000000000000000000000000000000000000000000660337f80000000000000000000000003c1bca5a656e69edcd0d4e36bebb3fcdaca60cf1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000066033753000000000000000000000000000000000000000000000000000000000000001b974edf9c4d26a7c047313e6c7a2b7e259969cd1aa96b279c0050bfcca6c157c53c9c6a2d47642dc4c515a84398bea5abca7e57eec6057b55529c968a0d61f9820000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000003c1bca5a656e69edcd0d4e36bebb3fcdaca60cf100000000000000000000000000000000000000000000000000000000000038f600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000914995cb63da121f14d51bc094ca72fc967b1f4600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000600000000000000000000000003c1bca5a656e69edcd0d4e36bebb3fcdaca60cf100000000000000000000000093b12677eed78e71ec8f482ff59962415e2926350000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec3a05b23f65b38915274611a3ec219effb113d09c1501d2da60a753d5b3e54b82a5ba0693e59be5321c36c6dac368bc411fbf42a801c14fc8561e4cc27396c3db6c2510000008bf88929841ad2748082c8a194530000000000000000000000000000000000000480a42e1a7d4d0000000000000000000000000000000000000000000000000011c37937e0800083104ec3a0c017d3d1e9b6b10c726a4bb6554658453744c28489a12795cea6acaede82fff69f6e1f0d2448f1cbf0af1e0c7e4a29f8292696373d0e77ac5c56ef7c7b4140c40000008cf88a02841ad2748082ab1a94e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134d7c683104ec4a00bb6f56929e36899c692136eb7daa609c7607afdb18b3f0794b64bcfb3a5f83ca05d9696dd8a4c7bdc3c1e0f1cd2f37e7288a40d799281cbb7690e3b877f13848e000000adf8ab1a841ad2748082b4cc94530000000000000000000000000000000000000480b844095ea7b300000000000000000000000063fdafa50c09c49f594f47ea7194b721291ec50f00000000000000000000000000000000000000000000000006623f9014ae000083104ec4a0f43a56a1f7bba744f94c40c3ec87d9d12ee7d97af9e2b5b62686b8d00af6df17a01776bd9b0a8b5b0f76314d15a81f39a65e7231a02a353d6d580011b458f6441a00000390f9038d0a841ad27480830371949480e38291e06339d10aab483c65695d004dbd5c6980b90324e84d494b000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000001f996833659b34e00000000000000000000000000000000000000000000000000000000660337f700000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000660337eb000000000000000000000000000000000000000000000000000000000000001b79c59d96ed5d03a724a90b2cab3795ca1fd38e077ae436cd3f1e6167435e7256755203f012d18ab1b76cb8b52d16f6802abdd045d9b978307dc0dad61f4b454300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000001e8d679f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c70000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000098a8c69a29722880b508a970b1668d0fc6eab1260000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec3a051a4447e1a845e1b2163ed2bebb296ec094aed08e9dc8c7e6ac8887ac7c4c283a07244e775208917d692c84241117d1ba9439c45a93448ba631405d72c84ca7562000000b5f8b380841ad27480830f424094ec53c830f4444a8a56455c6836b5d2aa794289aa871ff973cafa8000b844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c000000000000000000000000000000000000000000000000001ff973cafa800083104ec4a0bf951a93c45d70a13f126e433da961fc8cdcd7245ea3478a09619ec447a20098a018a11dd3082811c963e682bb8cc664d20c5c44db33d1ed400b3c9a4ed9b03e9b000001b1f901ae81a0841ad274808303f38994fb5f26851e03449a0403ca945ebb4201415fd1fc80b901443d719cd900000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000003c1bca5a656e69edcd0d4e36bebb3fcdaca60cf100000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000340b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100020000000000000000000000000000000000000000000000000000000008c3c03b000000000000000000000000000000000000000000000000000000000000000083104ec4a0fd9c5526d247de99f2afd0ef0634e41458cef3d5a8236c18a198a21401180b17a0416e9338612c08422a0dceb63b5c7a139cf03ec1621a846eee8edf774842b9d8000002d0f902cd0f841ad274808303ce969480e38291e06339d10aab483c65695d004dbd5c6980b902642cc4081e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000014dd5380000000000000000000000000000000000000000000000000000000066030d4700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000014fb180000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000002076d4632853fb165cf7c7e7fad592dac70f4fe1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000e50df781ee0f3f92803dab2d7421d1806bc46e3a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec3a0baa6ce4d43355ae757091ca1e027ab34bc31a3e45a81dd994b613840562478aba07867046db34b860ecd8a1fc55b02f391926d2f4573aed2501cd90b3d4d157c2a00000111f9010e828699841ad27480830182249425ab3efd52e6470681ce037cd546dc60726948d380b8a4ab115fd80100000014508000000000002aee6b82000000007b0066031db32750ff0324ff7929f4ff61bebdb61ce5af22fb4b9ba65956a4d9f4c861c77c95ac6f2fcc3bfde928921da7eaf534c3b4ce0ce712012f92fbe1d8c70e800226ef2e014ef9d04f000000000000000000000000f66f8cef0a1fbf4ba83f70da5e9dce197f634b08000000000000000000000000f66f8cef0a1fbf4ba83f70da5e9dce197f634b0883104ec4a07809dacd469c9d272d20319b7d0aa3a3038ca09839f77635b051bda38089cc01a018e494e7357fcd65d76a58c2c7b73a7d0fbdeb47116a3846d5595c269fa6fc7900000111f9010e82869a841ad27480830172789425ab3efd52e6470681ce037cd546dc60726948d380b8a4ab115fd801000000157cc0000000000060a9433a00000000760066031db72750ffe708ff53b38a9dc2360d783efc3941881d94ea6f77bdec23fcd27ae0e2577042d9b53869d7268d735d8c497ab8ad765cf9909df7195980ce54db79f94fdab2f3b64f06000000000000000000000000c12b60fca11708c0c1165ed2ad5d6d3f92ce0a43000000000000000000000000c12b60fca11708c0c1165ed2ad5d6d3f92ce0a4383104ec3a07ff7c2e48d6be5526dfe0bbd9e9677b57145f82583afdef9114830792e54f89ba057c71cd46464ac066644da081339495576cb56f00ea663d16a7d253b8037ec0a0000017df9017a2e841ad274808301adb98080b9012560806040526000805461ffff1916905534801561001b57600080fd5b5060fb8061002a6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80630c55699c146037578063b49004e914605b575b600080fd5b60005460449061ffff1681565b60405161ffff909116815260200160405180910390f35b60616063565b005b60008054600191908190607a90849061ffff166096565b92506101000a81548161ffff021916908361ffff160217905550565b61ffff81811683821601908082111560be57634e487b7160e01b600052601160045260246000fd5b509291505056fea2646970667358221220666c87ec501268817295a4ca1fc6e3859faf241f38dd688f145135970920009264736f6c6343000812003383104ec4a0d8f52be7cb793636437516143249947c3dbab8d9ade0a1efe422dadac07f880da055d2569431f08bdba22f11f5756dfc388057a57ba6d86d448ff3a7fafb82f3e200000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e8601000000000043acd10000000066030927000000000000000000000000000000000000000000000000000000000000000000000000009896800013000000000390f9038d0884202fbf008305950e9480e38291e06339d10aab483c65695d004dbd5c6980b90324e84d494b00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000001e941960000000000000000000000000000000000000000000000000000000066034f6f00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000066034f6f000000000000000000000000000000000000000000000000000000000000001c969b7742745bc5e08fb9730f0a2f17be6e6cc26c6173f48c6d088423fdc0d6d9576b70a9b434344bada4322d2432f7206f1a101e3547eaeb52e0de9a7782630800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000020301ab000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000002076d4632853fb165cf7c7e7fad592dac70f4fe1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000436e3d22c78fa52cdce1d4157d6dc45b16fba6a10000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec4a08001aef8d9905dc5d99d5b7cbc6e17a624daaa1ded23cad4592e14294ab519c0a04d185c502be6ed70581762be3d1d879932c5b0f0c9b65f2704b016ad806e06fb000002d0f902cd10841c29c7208305090d942db0afd0045f3518c77ec6591a542e326befd3d780b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab9723000000000000000000000000000000000000000000000000000a8e05c261cda30000000000000000000000000000000000000000000000000000000066031027000000000000000000000000000000000000000000000000000000000000002bf55bec9cafdbe8730f096aa55dad6d22d44099df0001f4530000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c000000000000000000000000000000000000000000000000000a8e05c261cda3000000000000000000000000af9bd2da810ecf5d1b904df15914a0c2bfc98a490000000000000000000000000000000000000000000000000000000083104ec4a087ee766709bc3e7ddb928cb0750cf129902c76ff5749fc44fb585548b9ed435aa0603bed8a267d5ffbfdaf5282492a5b4b31dd7d603d195e3ec05872900f83b782000000aef8ac07841c29c72083010f4494530000000000000000000000000000000000000480b844095ea7b3000000000000000000000000b31d07f716b5cd5c47e5d46e6955d7185f04fd2400000000000000000000000000000000000000000000000002adc7c324fe600083104ec4a0db4ca357ab235ee930ecf57e130c8d17a4229e801c6effbf075fd8f7eea3865aa067eb53db5e813fa178507182704e639853b514c71c21566297c9fae8ada6b5fa000003f0f903ed01841b6b0b00830704f79474670a3998d9d6622e32d0847ff5977c37e0ec9180b90384186aaba2000000000000000000000000274fb07a03b1f1a8ba0b058c55700699fdf00e04000000000000000000000000274fb07a03b1f1a8ba0b058c55700699fdf00e0400000000000000000000000008fb641cafdbaa043545c352dc64df6200ec3e7400000000000000000000000008fb641cafdbaa043545c352dc64df6200ec3e74000000000000000000000000000000000000000000000000000258001dbc2eab00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000153ddcec2b903b14c728ae966fdb7d3fad7a9043fa5f2c06fd79efa8e98f33b03f99a7f65d969c0580c2b79241e73372315bca0aa4c17ce12ae88549e7ac7e095e6784e01e237297eb75e617817474841735318532f1977895d3ee734f75dba75ecee69a95473ab6ed96e1fc05ce087ef6d945a5b1baf9c4b7d810a07163d95d139b704a8fbeb0a4456c7753332d694992f241ff56194659854b5fb975bcf2cd4208fc59b10078e8217f3d7cfe208975c5b3ee9446e98ae2d37326de93a3232b7291c6dad09a16880971a07797b9f0fbaaf17b073223c1f5636d1fecbb4d9325b97cc17112f854b4f30edb0593b369f7290ad1f57c25a8e05e4bf005b367b6172571df3b44fa5931d9ff85e553e2fa5d5f6f9c1decfcd60224dbd6961c283e387e4774a8510512d946b77ccf56b491c7feb857a8b203e3eec3e0124c31c40a2e8a8d6e3a226e1d2940051384dbe56e5b752c5dfae5b9a700a5223cf3592a61ceb4849244a8a99d91af6fd4e7e9ae4ece99af7575790b6d45c9d3a79cc369a1044083ca79c0cbc858038b81f02badbea2d1e63fd594b5f57787cc644c6fd439ac71ef49c7984d2b776dc15564c5540a93074857bd34addfc295569a2032791baf17d799aad761201a56b2b3f52c52d4bb73974dd36a9d605277be82f91c6006528906e1fd88b12ef616ed440023536b9ed4722f3c61006333a1cbda62df1f99653a92e1fab15fafad07c26758935854d825f112b3570da7978033b85934c728d3446efd0f9eaffd40c2fa21708b8edea304a878f18b5d69cbb6dc7deace32b583173a2e95e80c52686a9d2a76a27b7f6a347bec875545a99b41dc3b0095c466a4c4b3b10ec65242e82a46a0b49a819478c227b7d4bb1ecbc24fa9aa28b19940d677f764432b9d14c964dc5c5056592e9ef7a2c04322199a1efc9fe7d04930c6058983104ec3a07d3b7a3f9a7d9339a32a712c4a957f5855bee068b960baac0b39087c62743c60a07f227271a3afc8134e54d33027a112b7c49654803ae39dc28bc5dfd16bac843c000000f4f8f220841b5bc8c083035fc59426da582889f59eaae9da1f063be0140cd93e6a4f861695c574e6a8b88489a281b60000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a5ddba6fdd5c599a4b0b9379fe28cbf318687ff30000000000000000000000000000000000000000000000000000000000000001000075ad0000000000000000000000000000000000000000001bcfcc20b1f80083104ec3a0ac8cce4586d99f8f4f212cc6fd69866bb20a6bc9c27f092ea4192f010c9ac3b8a0623e6da348ed2c59b40eb87c5c64064636423f787a684cbfeea2b7fcbd16d6370000008cf88a05841ad2748082ab1a94e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134d7c683104ec4a0bd34aa24943fdf4692eba7e816f835a3c4b3ab78c4fa572f6eabf2cec2b4ab80a062a1158cea4bee10cab416e4029c7a37fa72d433bb79c1a90daf0930c0e0dfd70000008df88b8183841ad274808265ea94e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134d7c683104ec4a004bcb5158645fb97ade1c95e9dfed98f340c34b5fdbfd23bd2339891e89c6310a06b9156980b74e8ac18d9c1ec5c6db79de4cd4682d9d13810c48fdba50fb05a6700000111f9010e82869b841ad27480830182249425ab3efd52e6470681ce037cd546dc60726948d380b8a4ab115fd8010000000dac8000000000005230b4ad00000000700066031d902750ff2329ff0ba93a8a353999c857f7577522114c5b7beed91db3eab2cfabe95fedbcdb834ae4f99dd7fe2365055ad7a0d9e3c68c2780fa869aa6b9c00c3b2447cfbe83a043000000000000000000000000f8071664ac913d1520d3841337c430154a6e36f3000000000000000000000000f8071664ac913d1520d3841337c430154a6e36f383104ec3a0854d4d193d4c9aa575bb8a6a2bfb6620bb120211c4c3c8002eb9fb9e970bd4f7a07762d250a5cd6507f055631d4b42f3901cf4ec6e88cd4d523fabb809dfe94c7000000297f902943f841ad274808303d6eb942db0afd0045f3518c77ec6591a542e326befd3d7876a94d74f430000b90224ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000049936e3f4c691f9e59fdafa92f905e0e02a59fba000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000005b5dd702a6ec680000000000000000000000000000000000000000000000000000000066030b68000000000000000000000000000000000000000000000000000000000000002b53000000000000000000000000000000000000040001f4f610a9dfb7c89644979b4a0f27063e9e7d7cda3200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec3a0b99f72627143fce405f82ced1ee59b155e7bcc9121a595cd550812112dc502b7a03f5b3cee9eab5c1c7ae3d148659084b2473c766ca493f25c93a379f878b9689a00000093f8910c841ad274808302329894609c2f307940b8f52190b6d3d3a41c762136884e865af3107a4000a440d097c3000000000000000000000000ed8b6576ac0d3eab09f2c2fed3f4a5d4c7b6d86883104ec3a0102f8907c7e15d20a3211d62323ac2aa01e97458b8f7f7fa2e3da00f5b5ae27fa075f7f7066e97aca844e343def9a35532ef28b79e5cc4cfa70e0d29fc44a587ba0000006df86b03841ad2748083020671944c826c813f7d622edacce46abe0d89be3478aa4580841249c58b83104ec3a0263d90c09d5116790e94d944cdf9742f5be2320b28bf9f73d98550ef0bec3f9aa02a6e194b3378f0fb4cc2922b80104adefccfa7f36ad7b2d8ab4939ad59725f3d00000074f87217841ad2748082cab49453000000000000000000000000000000000000048811a70d42ba4c000084d0e30db083104ec4a061047669df72ca970364ef39b62d4ecb6f722d911c4d331276f8942cb013fa2ca0011eea61400cbad2aac8a50343280af61276ab2773d3d9ff31b1a919a44356c1000000cef8cc03841ad27480831e848094ec53c830f4444a8a56455c6836b5d2aa794289aa80b864c299823800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c83104ec3a06df5dfcee74e958e1cd81a4103a5a26733827e683b423bce3b286a036bebea87a01082d0fe47ee3f079c58fa92e3f2a39645dba8b5159215c1a1765345c731e0f100000115f901123a841ad274808302eeda94781e90f1c8fc4611c9b7497c3b47f99ef6969cbc865af3107a4000b8a4b2267a7b000000000000000000000000a58694a524f459b8c0b79241ea28737ba0f7dbc200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec4a033e756fe05d8649a188250140352daea868b042aabba9635b747fc39d03bf69fa00b7b16f9bf5af1a299c38512435b26c94744c24c8ab44f943c3a3c11e25679e900000237f902340b841ad274808302931a94aaaaaaaacb71bf2c8cae522ea5fa455571a741068718a18092bd78bdb901c4a15112f9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000002f3cc000000000000000000000000000000000000000000000000000000000002fba0000000000000000000000000000000000000000000000000000000000137083a000000000000000000000000000000000000000000004050425309fd00000000000000000000000000000000000000000000000000004196e8335d74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec4a002f2f5db9cdec76ca0ef6410cad2b6a809ef3c7a867ce9ab9615daf4f728f217a0426a7f0c59807fcde28bc8f54327491affc64c967758dee4902b7b07d167eaf9000000adf8ab16841ad2748082eb929406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b30000000000000000000000002db0afd0045f3518c77ec6591a542e326befd3d70000000000000000000000000000000000000000000000000000000002fa7d0683104ec4a0e8fe569a3b05e8ef62155e790d8399e4c9cb45d1301121b4f291f04b234ee6cda03b51622a92f7b9ef6ed9b35d3895d28891b830330ff0953665eb5a3a4568be720000016ff9016c07841ad27480826e8e9447fbe95e981c0df9737b6971b451fb15fdc989d980b901045b7d7482000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000403332636565393739653333323031626266363131323362383239366164303066363931366265653336373439386237336533666537386561363235656232346600000000000000000000000000000000000000000000000000000000000000406132306164653661313434663437643362653737366337653336393035376139366466313765356338616536613632383736326662613436616534303532633883104ec4a05bf84d74b20d6d1383696f407432cd5edfd22ad85f4fe719edd5d148c0eca62ca01f55f37eaa5dd00761615a3382af98577fa0a9ed758ad3592cfb8f48f44d9e0a000002d0f902cd1f841ad274808302a1349480e38291e06339d10aab483c65695d004dbd5c6980b902642cc4081e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000001104aaad3346eb000000000000000000000000000000000000000000000000000000006603380200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000010736d000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c70000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000009b04f868352a7e99f786d69dba25c4cc1b973cac0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec4a07fc513b4a9f86a1c8d4e54038618a96bd5bbe0d868a6a262341a3119c888bb3ba0408d16c496463ce3219e23a50157050016de578b2ac6dd63d57c3ef12a1e7f3c000002d0f902cd14841ad274808303e5e7942db0afd0045f3518c77ec6591a542e326befd3d780b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026dfd1b0000000000000000000000000000000000000000000000000027c9d726ee04000000000000000000000000000000000000000000000000000000000066030dc7000000000000000000000000000000000000000000000000000000000000002b06efdbff2a14a7c8e15944d1f4a48f9f95f663a4000bb8530000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b2995f6803a963391cb537608ee1004e3408bb50000000000000000000000000000000000000000000000000000000083104ec3a08d957616c825f16ba7fff937e66289fe00f418daf6e0b0a833cb3d082fb99007a00d3a92ed753035e788374c5a160a31c9dba97335b35ce473ad21cd743fe830f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000136b01000000000043acd2000000006603092a0000000000000000000000000000000000000000000000000000000000000000000000000098968000100000000000b1f8af831111b4841c29c7208301526c9487627c7e586441eef9ee3c28b66662e897513f3380b844535b355c00000000000000000000000083001915bc8ff18bf61539c86ae92c6870e2f3e6000000000000000000000000000000000000000000000000000e399b91a25c0083104ec4a0218607542f6c3bd9248dd00b40f8b0050904d8ef57604cdacab5ee9aaddcf4afa039e7e002c4ee7e40a59aca501571f7fe9d2cfcdd07a4f7ee9d845cffc17e322300000390f9038d0b841ad274808303719c9480e38291e06339d10aab483c65695d004dbd5c6980b90324e84d494b000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000338e73fb1d813f00000000000000000000000000000000000000000000000000000000660337fe00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000660337fa000000000000000000000000000000000000000000000000000000000000001c3eb375ee126532a0a2d281a53c39122a2176dd6f74835ef6cb5c2dbfb084a0f664cd66bed53fc82c4c5f56abfc748486f360eb4eacf32ce8feec8446f2cfb2ed00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000032d066900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c70000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000ac8d1da40dd0a213071f1157e4dd129bc292e3300000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec4a08b52b1e254a5c18cf7ecea2300c16fddf23fc5850ff5eea446181053fd3e128da0459927ef1f5401ad001524aa284b391167bdc3b3cfa1f2a895aaa30c3ac0cc5200000070f86e0f841ad274808252089480c67432656d59144ceff962e8faf8926599bcf88814b66cd7a745632a8083104ec4a04aa8984e35716d83ee39d89aec6f8d056e2cdcc6983a073df312f0cd22af5ff3a029cd303a66ad957783df9223b2fbc508763ae00eb61d1c4e961bd25482dc039400000072f87015841ad2748082ecff94a0d013b84fbaeff5abfc92a412a44572382dca08865af3107a4000841249c58b83104ec4a0f4a3357f1a6840697f7b4fc4228c84241e0083d80e7067bf8572df1d9bb0e5a4a06fd37d38b9d4806c01089e1110c7de09a046cf49c0d99d777ba38b49c578c8d000000390f9038d10841ad2748083035b039480e38291e06339d10aab483c65695d004dbd5c6980b90324e84d494b000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000037acf7354f7de0000000000000000000000000000000000000000000000000000000066033801000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f97ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000660337fc000000000000000000000000000000000000000000000000000000000000001bee7d1346903cb919275690ccc0e94600301dcc96ac666a02b1b2ea33b2617f9d63e52af53436870aa3cddc6447000683ea075b4fe911ca3edd8c5d53fb132e84000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f9700000000000000000000000000000000000000000000000031c4945c343d5f4900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b39880c7a0b752179d6d7d9ae594ab4c02d6e5b80000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f970000000000000000000000001af5b3906e388d1cdd56fc5dade1c71e133095770000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec3a0ff82628a2a1d8bb7db3e78b4becf869daafe100e7361e030aa8f492ad96800b9a0456269c095d7b2a02b91921c7bbcdbeefec75161e1690e88563655815c69e86e00000170f9016d14841ad274808302beb29418b71386418a9fca5ae7165e31c385a5130011b680b9010418cbafe50000000000000000000000000000000000000000000000000000000000281247000000000000000000000000000000000000000000000000000297e49304c9c100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000cabadc213648370a9e1b097321a20e9cb3e181450000000000000000000000000000000000000000000000000000000066030dd1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000530000000000000000000000000000000000000483104ec3a098fba55df026cb91cada64cdea78a1e5d9862f53f761d1a834858e81e739ea30a0269ce5871a353ded4bff8eb4034e07a58d256ecb107657d371c6901ab627b80b00000073f87107841ad27480830206719483eb631112e4a73f645ad5a9af5925da84c46315862d79883d2000841249c58b83104ec4a0517fd0bf5d6e941035d56a1b379dfa2369df267e28d4bdd99bdca418f717399ca05c62361bd61d9b444a343f813cf02dddd3d7b442311283454fdf3249e616f9390000006ff86d0a841ad274808257ec945e809a85aa182a9921edd10a4163745bb3e3628487fc7927736af4878083104ec4a0ea8736d937c4b9e39fde4db96ff76cfc6a5ec7b3eb4ad1359aac6804ae82661fa07e55ae9a4dfa5dbcf4724f932c5fb7eca4577b6ecde3e1691414eb59e92e0c9a00000210f9020d0b841ad274808302529d94aaaaaaaacb71bf2c8cae522ea5fa455571a7410680b901a4a15112f90000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f9700000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea056927ef6980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000000000000000000107b1fb5bb53f8000000000000000000000000000000000000000000000000000000000000000083104ec3a0d5ccdaf3da7723ff61ddfa4815edebcbaffab22f22e609a8bc38f4ac507d0cd0a02e1e0999770fbd0a4a42fa822972c85e09b2d85b2f63cd24b4977fd16b7fbf65000000b5f8b30d841ad274808303dc7994ec53c830f4444a8a56455c6836b5d2aa794289aa872c7c770db8258ab844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c000000000000000000000000000000000000000000000000002c7c770db8258a83104ec3a07acf779a50f703d17be89b6a8c7d3edf364f402fe4b02ba40c4c1d9cf4d59ad0a07ee59cdeee71ccb9094a2065acd374194fe00d7384dda118f599c1eff0ad648700000070f86e1e841ad27480825208942fc617e933a52713247ce25730f6695920b3befe8805ef7ee24a6f40008083104ec3a00284ef3e7c41461d8380aba5d4cff5f3f3ea8b976757e426cce8cfe87b6bd55ba0122d5e066cdf8d958416d36e64e19009d15566e246e677862f5e8995ef5448ab0000008cf88a02841ad2748082a73194530000000000000000000000000000000000000480a42e1a7d4d000000000000000000000000000000000000000000000000004380663abb800083104ec4a02535ac88d720011b9259b5901fa978cfeb211286a8481780d9a94479a18f36b6a0029786c8e575ce7afbcde52d4dde703c4663602f7e49333cb8cb5a2e5504d9fc00000094f8920b841ad2748083017bdb94a3e728825a6e462399f12bd702c5d88ceaf32bda870193d0ce47c000a440d097c30000000000000000000000001943f0ec6cad494b11739525342674e939737f8a83104ec4a095c62186cbceef7c958927265d5273c88ef036847b10d73a1d9b212e1650cb2da061b931c8d9a571b232a4c779251064b1a2eaa0c38a5f5faf2e3c6de83f634254000000aef8ac19841ad2748083051f1c94ec53c830f4444a8a56455c6836b5d2aa794289aa80b844abdb5ea80000000000000000000000000d8f8e271dd3f2fc58e5716d3ff7041dbe3f068800000000000000000000000000000000000000000000000000000000064e890083104ec4a020061000ee2e9da025f3ab6ab6a6da82b8ea5b02aa67c139b00e93fe2400fd1da07cc43bf458ee5383be9ceb2ef298bfbdd2a7b38344003bb5044c469c7e60c84a000001d7f901d417841ad274808302860394734583f62bb6ace3c9ba9bd5a53143ca2ce8c55a87470de4df820000b901642646478b000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000000439a8a6000000000000000000000000fb57a1b563d78692636f198476a63b2b3e566e8500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000700301ffff0201734583f62bb6ace3c9ba9bd5a53143ca2ce8c55a530000000000000000000000000000000000000401530000000000000000000000000000000000000401ffff01e64ae4128e725868e8fe52e771e3d272e787b04100fb57a1b563d78692636f198476a63b2b3e566e850000000000000000000000000000000083104ec4a02a8eaa57f513a3af4acf89777ba8d9674ed491cbb55592d211396f89d0045b6fa06db7057a3cf32cb457cb2db59be9478082212b207da5776c4f5f885a09e690150000010ff9010c58841ad274808301551b9425ab3efd52e6470681ce037cd546dc60726948d380b8a4c8173c4401000217ae76800000000000647d518400000fc73b0066031e1a2329092750022fb857f9ae326148176453a628f0aeb3a123ba854a6f394c428a5ad29750b9ebc9465f1430234b8ce02cd1bff277e5486c01954272be29a813b62bde8fdab6d40000000000000000000000001a8c1ce5ef00ae99d12a0d39c76e7ce6dea8f8440000000000000000000000001a8c1ce5ef00ae99d12a0d39c76e7ce6dea8f84483104ec3a0f3f420d6f1af631c3a86060824a9f314e7d836ee57472b99d6c1cabcf22ea16aa02dad8a3088d739975e293009e3cce080619d2ff74c3d583e3774b837289167a300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048bb01000000000043acd3000000006603092d0000000000000000000000000000000000000000000000000000000000000000000000000098968000060000000000aef8ac08841c29c720830127cb94f610a9dfb7c89644979b4a0f27063e9e7d7cda3280b844095ea7b30000000000000000000000002db0afd0045f3518c77ec6591a542e326befd3d7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec4a0a4783c5c1e7bedd5b0216bf850837033e7dd1cf180c9fc4b6450b6eea84bdf5ea0152fbb72147da90300cb8286144e70a8b58f43f1218638c75aa51415a927c94700000156f9015380841ad274808302ae0b9418b71386418a9fca5ae7165e31c385a5130011b68706276d3dae1000b8e47ff36ab500000000000000000000000000000000000000000000000000000000005d21690000000000000000000000000000000000000000000000000000000000000080000000000000000000000000c3b765f3a6ffcc60c8a01f2e74f7c6450d24b3ac0000000000000000000000000000000000000000000000000000000066030dd80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000530000000000000000000000000000000000000400000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a483104ec3a0143070ac74d0a336d4f009c0eb0be4fc6ecd029aaaffa9e68c05d872ec6a6ecfa0183bc3cd059710fe834b09875503e015fe71fef45cc7aa36a76792e073ff66ae00004298f9429514841ad27480830c27d4947b2e3fc7510d1a51b3bef735f985446589219354880a70a55dd6c8524ab94224819bc4b9000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000013e31000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000ca9ad076f2c25571c719df64b2ec1d4087e15f5700000000000000000000000000000000000000000000000000000000000041a00000000000000000000000000000000000000000000000000a688906bd8b0000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000844e21fd0e90000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000007b2e3fc7510d1a51b3bef735f985446589219354000000000000000000000000000000000000000000000000000000006603301300000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040e756cac1000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c700000000000000000000000000000000000000000000000000a688906bd8b000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005300000000000000000000000000000000000004000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc8970000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000a760000000000000000000000009fab7486000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000007b2e3fc7510d1a51b3bef735f9854465892193540000000000000000000000000000000000000000000000000a688906bd8b0000000000000000000000000000000000000000000000000000000000009edf13f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f17b22536f75726365223a22696e746572706f7274222c22416d6f756e74496e555344223a22323638392e343033353534353834373835222c22416d6f756e744f7574555344223a22323637382e3831333833222c22526566657272616c223a22222c22466c616773223a322c22496e74656772697479496e666f223a7b224b65794944223a2231222c225369676e6174757265223a224a4a2f533847356c7349654d6c2f7a624a676467716c436f6f34446854494a56424a4e2b6e48314f6d684c647054573066776e7437454f62782f61696a445a616c39697251774348764d59422f61684453446945422f386e592f31334b69573734326d364c757050765a7861564264557a30724a635359473639472f62324b47314a5068635648734f64684e316577374b6675615632696b756c73366c31767141687670527645414d337972434b566d6468464c7a4a664d6238786a374c30655772677849597338676836333941462b63682f36563233614352323348472b2b566d3430444d5a663542342b586147485a6b614c372f336f46306934322b78587345455653573861554356784b6e4a6c6273313856705350586f322b49623452506c67396c3847686d6d4142444172694231746552716d76717a4b752b4c494a654b584d447731365a726f48504c2b70664f756756773d3d227d7d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000009e000000000000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000001c2000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000913802896bc9a6600000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000088490411a320000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000004300000000000000000000000000000000000003000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f10000000000000000000000007b2e3fc7510d1a51b3bef735f9854465892193540000000000000000000000000000000000000000000000913802896bc9a660000000000000000000000000000000000000000000000000000a54fb72a1cc217b0000000000000000000000000000000000000000000000000a7d42d9bcf3a00a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000007b2e3fc7510d1a51b3bef735f98544658921935400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e5b07cdb0000000000000000000000007f0db0d77d0694f29c3f940b5b1f589fff6ef2e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000913802896bc9a660000000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002e43000000000000000000000000000000000000030001f4430000000000000000000000000000000000000400002100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001649f8654220000000000000000000000004300000000000000000000000000000000000004000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000430000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000242e1a7d4d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a49f865422000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d1660f99000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000007b2e3fc7510d1a51b3bef735f985446589219354000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009112d57a6f8518a40000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000088490411a320000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000004300000000000000000000000000000000000003000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f10000000000000000000000007b2e3fc7510d1a51b3bef735f98544658921935400000000000000000000000000000000000000000000009112d57a6f8518a4000000000000000000000000000000000000000000000000000a5256679c22037c0000000000000000000000000000000000000000000000000a7a937f4771ccf500000000000000000000000000000000000000000000000000000000000000020000000000000000000000007b2e3fc7510d1a51b3bef735f98544658921935400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e5b07cdb0000000000000000000000007f0db0d77d0694f29c3f940b5b1f589fff6ef2e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000009112d57a6f8518a4000000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002e43000000000000000000000000000000000000030001f4430000000000000000000000000000000000000400002100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001649f8654220000000000000000000000004300000000000000000000000000000000000004000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000430000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000242e1a7d4d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a49f865422000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d1660f99000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000007b2e3fc7510d1a51b3bef735f9854465892193540000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090eda86b73408ae80000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000088490411a320000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000004300000000000000000000000000000000000003000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f10000000000000000000000007b2e3fc7510d1a51b3bef735f985446589219354000000000000000000000000000000000000000000000090eda86b73408ae8000000000000000000000000000000000000000000000000000a4fb15c8cf8a1d40000000000000000000000000000000000000000000000000a77e424c84baffc00000000000000000000000000000000000000000000000000000000000000020000000000000000000000007b2e3fc7510d1a51b3bef735f98544658921935400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e5b07cdb0000000000000000000000007f0db0d77d0694f29c3f940b5b1f589fff6ef2e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000090eda86b73408ae8000000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002e43000000000000000000000000000000000000030001f4430000000000000000000000000000000000000400002100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001649f8654220000000000000000000000004300000000000000000000000000000000000004000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000430000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000242e1a7d4d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a49f865422000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d1660f99000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000007b2e3fc7510d1a51b3bef735f9854465892193540000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090c87b5c76fbfd2c0000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000088490411a320000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000004300000000000000000000000000000000000003000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f10000000000000000000000007b2e3fc7510d1a51b3bef735f985446589219354000000000000000000000000000000000000000000000090c87b5c76fbfd2c000000000000000000000000000000000000000000000000000a4d0c51744ffc4d0000000000000000000000000000000000000000000000000a7534ca3f8148ea00000000000000000000000000000000000000000000000000000000000000020000000000000000000000007b2e3fc7510d1a51b3bef735f98544658921935400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e5b07cdb0000000000000000000000007f0db0d77d0694f29c3f940b5b1f589fff6ef2e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000090c87b5c76fbfd2c000000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002e43000000000000000000000000000000000000030001f4430000000000000000000000000000000000000400002100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001649f8654220000000000000000000000004300000000000000000000000000000000000004000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000430000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000242e1a7d4d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a49f865422000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d1660f99000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000007b2e3fc7510d1a51b3bef735f9854465892193540000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090a34e4d7ab76f700000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000088490411a320000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000004300000000000000000000000000000000000003000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f10000000000000000000000007b2e3fc7510d1a51b3bef735f985446589219354000000000000000000000000000000000000000000000090a34e4d7ab76f70000000000000000000000000000000000000000000000000000a4a6746522812b70000000000000000000000000000000000000000000000000a72856fad12978c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000007b2e3fc7510d1a51b3bef735f98544658921935400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e5b07cdb0000000000000000000000007f0db0d77d0694f29c3f940b5b1f589fff6ef2e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000090a34e4d7ab76f70000000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002e43000000000000000000000000000000000000030001f4430000000000000000000000000000000000000400002100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001649f8654220000000000000000000000004300000000000000000000000000000000000004000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000430000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000242e1a7d4d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a49f865422000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d1660f99000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000007b2e3fc7510d1a51b3bef735f98544658921935400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000907e213e7e72e1b40000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000088490411a320000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000004300000000000000000000000000000000000003000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f10000000000000000000000007b2e3fc7510d1a51b3bef735f9854465892193540000000000000000000000000000000000000000000000907e213e7e72e1b4000000000000000000000000000000000000000000000000000a47c23b2680e4dd0000000000000000000000000000000000000000000000000a6fd61510ff9bad00000000000000000000000000000000000000000000000000000000000000020000000000000000000000007b2e3fc7510d1a51b3bef735f98544658921935400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e5b07cdb0000000000000000000000007f0db0d77d0694f29c3f940b5b1f589fff6ef2e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000907e213e7e72e1b4000000000000000000000000009f92b2706c643ae6fdf2e9ca472f0e48497385f100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002e43000000000000000000000000000000000000030001f4430000000000000000000000000000000000000400002100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001649f8654220000000000000000000000004300000000000000000000000000000000000004000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000430000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000242e1a7d4d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a49f865422000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d1660f99000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000007b2e3fc7510d1a51b3bef735f9854465892193540000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000b527a00000000000000000000000000000000000000000000000000017d509f3b3a0583104ec3a071aa96a80804c6dfc1014244c659c0a290220ade2d2c79d9cd483495f650c54ea02cbb97df055bcd39a97a3edf63e03f8ac5b28ff611b9537d7f2fe8ca04046c4c000000adf8ab11841ad2748082e89494f55bec9cafdbe8730f096aa55dad6d22d44099df80b844095ea7b300000000000000000000000080e38291e06339d10aab483c65695d004dbd5c69ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec4a05f31c45c3514b8248ae59b510e5264c1288aef2dd4d9a9d299756d630247db3aa07f8ce62a896f05e0dedca103e13544b5e81a10a649c24852be1b188738495519000000adf8ab1c841ad274808285ea949595910db7625ab963d2b32a60c2db5bb9fd20c980b844a9059cbb000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000000000000000000000000001bc16d674ec8000083104ec3a017ca7389809af3cdb672e30a4d74cd15e6b400e3e36967aaddefa7abb53a4a1da019ca37ed89bb6c4ff4d6f3d643818b8854ccad4f7c63c8439c9abf397d7cc6fa00000270f9026d05841ad274808303fd9f94a6b71e26c5e0845f74c812102ca7114b6a896ab280b902041688f0b90000000000000000000000003e5c63644e683549055b9be8653de26e0b4cd36e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164b63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ba9d00bc72a74f426361a42a9b9e162dab996e5100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec3a032ad67f4218d4ea21645f1ab9d57e676f90ea8e7845b9f2cf53caf59bb8e0473a06943e034025509c4eef60fb5dd68f028a98c526c639bcd84c09b0367b7ea5be20000000000000000000000000000000000000000000000000000000000000000000000080501000000000043acd40000000066030930000000000000000000000000000000000000000000000000000000000000000000000000009896800007000000000279f90276830829f284202fbf00830a987c94581b26f362ad383f7b51ef8a165efa13dde398a4865af3107a4000b902048624ba07000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e35b8d65fbe2824e3a6bffa6a0799a224dd8723c00000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000d3c20b5ce963b9d7ade66c01023f63aff68bc1cb000000000000000000000000000000000000000000000000000000000000759e000000000000000000000000f9d0b0b11c55defdb635c8bcc1a65ab5188ffe040000000000000000000000000000000000000000000000000000000000000145c2b4914e4ceb8f50e13b6a0f74ec8db5fe92e6c34e8b37e038f2162b763ad424000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000038e280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec4a01fd1cda32a91e6d4be86c62d49dd1f235de2812004af66f01c21688ed1ac7e24a07acc1d7be6f563264dbfb4d8d0f4a647fb78efefc23399f04f9cc6784f6dd4d4000000aef8ac0b841c29c720830120c194f55bec9cafdbe8730f096aa55dad6d22d44099df80b844095ea7b300000000000000000000000080e38291e06339d10aab483c65695d004dbd5c690000000000000000000000000000000000000000000000000000000001f6845783104ec4a0957e4f361b9bce36fc9c4ca7abd600fc7d44c70fde31c35a035532754dd96855a078256d219e17d2c625c972af5e811e803ab67cf9ddf0ac3d9bf210f08a465c7500000177f901740f841c29c72083045ef194aa111c62cdeef205f70e6722d1e22274274ec12f872461a3059c1e6bb9010467ffb66a000000000000000000000000000000000000000000000000000000000226a67b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000006de48b08c8f57403fa595a57f1032b406b68333a0000000000000000000000000000000000000000000000000000018e7bee22ea0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000530000000000000000000000000000000000000400000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000000000000083104ec4a04608564b5478f5f1d462eb2789e7a05c821d17a70d7bafb2a069a3dadaa2607ca06be968c83acfc022cc4d0629ac225c971024408a017c8479685428a9318c7aef00000156f9015339841c29c72083041241940122960d6e391478bfe8fb2408ba412d5600f6218707de6f82e5db95b8e47ff36ab50000000000000000000000000000000000000000000000000000000000738f0c0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000e8c91b44fead8e62794e934684ee3443fe84348800000000000000000000000000000000000000000000000000000000660310340000000000000000000000000000000000000000000000000000000000000002000000000000000000000000530000000000000000000000000000000000000400000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a483104ec3a00374b4cc43709b761889c76e9d8ae0a1645c34fce6e364dd14453bfc1e629e2ca056bf3d599cf64f2e832911fdcf2c0276a799d54e1517cace3f99c1fc621c94f700000073f87120841ad274808302067194953ef35fd705d3b835e12a7a80205c5224bd692d862d79883d2000841249c58b83104ec3a093d713ffa84b87ec85370982b511122f6afc66e1993748e8e46c0782781f673aa02356eca2bbb0746db7f95c6cddf8ef218ffa3381e687e54a6f41ce91e9464f96000000d5f8d309841ad274808303cfc394ff75a4b698e3ec95e608ac0f22a03b8368e05f5d870da175549c1800b864474cf53d00000000000000000000000011fcfe756c05ad438e312a7fd934381537d3cffe000000000000000000000000e1587c4f84db5bce07f570178f34e52d6a57beaf000000000000000000000000000000000000000000000000000000000000000083104ec3a0ef5910a7cd86b54b8e09c91719a8b777b48d14001d2a6e8c57875981040345b4a024334e4abbddf796c19618ca2a502004bd5cb4022cabc4e530218d708ea8109900000070f86e818c841ad27480825208945e809a85aa182a9921edd10a4163745bb3e362848717a023c7c1a0048083104ec4a0b169ec51e7a5cde6ec404507acd37df96b55effe5792f6bfffcf34f7cf6174f5a0309c16020e714717ba1ff6d8e6458d4ef6d61781bd261958a39d3db219860229000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180e01000000000043acd5000000006603093300000000000000000000000000000000000000000000000000000000000000000000000000989680000f000000000073f871830849fc84283baec0827b0c9400076e1ea45645fa760e671326deb4281c676e8588111380206f7c40158083104ec3a098f1962d150c11bc3780b81743adc96debb75a390e63e774ac78cea601222638a05d3c1889320a8ec84861b87840a845844469ed0692f1581b5cafe29544ad9948000001faf901f7830829f384202fbf00830f8d5c94a658742d33ebd2ce2f0bdff73515aa797fd161d987470de4df820000b901840508941e000000000000000000000000000000000000000000000000000000000000006e0000000000000000000000007dfb5e7808b5eb4fb8b9e7169537575f6ff1a2180000000000000000000000000000000000000000000000000000000000030d404f2f8cea88fc9da907cfce0e75b4c75ed47cba54817067bad30a5f6e64cf1dbf4f2f8cea88fc9da907cfce0e75b4c75ed47cba54817067bad30a5f6e64cf1dbf00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ae314a21792fbce6427ceef079cc68e78300a0d700000000000000000000000000000000000000000000000000000000000000680000000000000000000000004d73adb72bc3dd368966edd0f0b2148401a178e2000000000000ffb0006e4ae8cebccd7027820ba83188dfd73ccad0a9280600d67dfb5e7808b5eb4fb8b9e7169537575f6ff1a218ae314a21792fbce6427ceef079cc68e78300a0d700000000000000000000000000000000000000000000000083104ec4a0ecd6065e08a5ac8507099acbeb75fe08e69a838d1f03edae01d6d5fc441f8bfba078521acacb1a0b0e03309e312b4ce859225d35a63a0fc94b7a30234f59cbae6b00000093f89107841f78a4008302329894609c2f307940b8f52190b6d3d3a41c762136884e865af3107a4000a440d097c3000000000000000000000000b4a726f320b429730b2f1d2165c2ce06b932808583104ec4a0496daeceb48a12606bc67f89f2b03248e6ca3db6cd1a3d7ebb6ba77fbc995adaa06905c3999444b450d9227c0e424749de85852bc03344387dc4665d27acf19ab1000002d0f902cd0c841c29c7208303f1bc9480e38291e06339d10aab483c65695d004dbd5c6980b902642cc4081e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000004a9ae1aa764dd000000000000000000000000000000000000000000000000000000006603103400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000004be11900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c70000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000007141b84ef27b67b7192d95a672f70996e40c5c2d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec4a03c8bf9d078f6cf64ea8c373e4e84e822a9192dcb181b25ca6787e0fbaac94709a03b4d63b2394e6668a72d78339256c21152c324d5483cc0b9d0606d58417b218c000000adf8ab21841b5bc8c082c1dd94f55bec9cafdbe8730f096aa55dad6d22d44099df80b844095ea7b30000000000000000000000002db0afd0045f3518c77ec6591a542e326befd3d7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec3a0f2cdb7edf3e4bad66d60d70f35c80187451ebb9578b3298a1ebd205543b9f615a07006b3ae108254c05843c6530c65e1c0e6e6ef40d3322544d079cf567f6d9007000000adf8ab08841b3337ac82fa7e9406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b300000000000000000000000080e38291e06339d10aab483c65695d004dbd5c69ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec4a0ce1fd84a4522db88cc05194f81d874ad55a7afde2664a33b5d107ebfcb5c8856a07c18899a7b9c2762e94c8d0a78d15e5ebebecedf491199d896ddab5c026a09c7000002d7f902d409841ad274808302bb2c9480e38291e06339d10aab483c65695d004dbd5c6987471b46d16ce0f0b902642cc4081e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000042378250000000000000000000000000000000000000000000000000000000066030dce000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000471b46d16ce0f000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005300000000000000000000000000000000000004000000000000000000000000cf60ec7ff940b6ab942ac77e2b689374139f36810000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec3a00d3755e9af3f8878385789c9cc678ce88df461a1468d9dee7752fbdd99e3bf36a07e8ba44daa4e1af80a2c499fbc6075270976a0ae8e4d0be45cdcf014adfb6b0f000002d0f902cd06841ad2748083051b0a94470ab53a2e939bee3cc9d0064034cff925a9c8c580b90264fc8791900000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066124b6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044752414200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000449474f4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b516d61696d32667a7a6534000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec4a01aea9c26624c7b6c4061991a9cb84f4693274de3388e77863e5667c6dfc26623a05900464b1c65ed2772b3d659555e3eb07a48adf404829b820bcb2ed2b77151f50000006cf86a2f841ad2748082aa4c94d55d9eae96ce441890f403329252c9f3812a68d68084b49004e983104ec4a07bb33cf4d6d742f6b1d82add55aa484d4d926e1f5bc7d97d3b4ed69e95414ca7a0529626e404c76ba49bd96396647187c6a91fd72d3e6e724ef6c774dd1889415d0000017df9017a05841ad274808301adb98080b9012560806040526000805461ffff1916905534801561001b57600080fd5b5060fb8061002a6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80630c55699c146037578063b49004e914605b575b600080fd5b60005460449061ffff1681565b60405161ffff909116815260200160405180910390f35b60616063565b005b60008054600191908190607a90849061ffff166096565b92506101000a81548161ffff021916908361ffff160217905550565b61ffff81811683821601908082111560be57634e487b7160e01b600052601160045260246000fd5b509291505056fea2646970667358221220666c87ec501268817295a4ca1fc6e3859faf241f38dd688f145135970920009264736f6c6343000812003383104ec3a04294f9d3dad1faf18c17393c72bf51c06060923599b57d5808f0892c468cc621a04942bc3d7938aa50a6a8e5835e437aadc04c431f906f3a8e04d5c016ffc11faa00000170f9016d11841ad274808302bebf9418b71386418a9fca5ae7165e31c385a5130011b680b9010418cbafe500000000000000000000000000000000000000000000000000000000021f2a0b00000000000000000000000000000000000000000000000000234773521cce3e00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000008c2a9e424048ce25cf317fa404c5a45521d0f09e0000000000000000000000000000000000000000000000000000000066030d4a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000530000000000000000000000000000000000000483104ec3a0ac939a12190ca5626c21c5d397e8ef424e5bcad972d719b6cc1a6d854688487ca05f8a2f1b745741a4707e167566ba205db072bdf49ba10894351353bd331f5d0400000218f902155e841ad27480830291ba94aaaaaaaacb71bf2c8cae522ea5fa455571a741068803a026b8759bd33eb901a4a15112f9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a400000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000372261400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff5433e2b3d8211706e6102aa947100000000000000000000000000000000000000000000000003a026b8759bd33e000000000000000000000000000000000000000000000000000000000000000083104ec4a0ade3e0d76fdb8797692b6193ab3830da8706c82d795d31d6f887a5b06ddacaf3a052849362e62694c712b31a96699e6f58cb5883f6f309539cb2f0b8c8b305ed6b00000073f8713f841ad2748083013072946e55472109e6abe4054a8e8b8d9edffcb31032c586f5904616e000841249c58b83104ec4a081a9664d9bd0e4525bd67d4024de958f4cef4a4c3803d7a84ba8656d6b5d11a1a0175e5fdf1184dc29a3fdd54f0876c01557565ea7e8086cfec82f5ac6893e776e000002d0f902cd18841ad2748083037d289480e38291e06339d10aab483c65695d004dbd5c6980b902642cc4081e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000101f7200000000000000000000000000000000000000000000000000000000066030dcf00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000000000000000000000000000000000000001036640000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000002076d4632853fb165cf7c7e7fad592dac70f4fe1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000009c248d7e81394c2226f33afb2e896b6af895bb380000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000083104ec3a038de7c589fc0050b4148025eae889997015b9d4fb82c190aaeb683ad893a8798a01732e54a4f3c1ce929aeb885ee7ffb836ca32c1d4e94748a5e0c978c84fa31fe00000210f9020d0d841ad274808302b7dc94fc30937f5cde93df8d48acaf7e6f5d8d8a31f63680b901a45ae401dc000000000000000000000000000000000000000000000000000000006603101800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000cf1a64b000000000000000000000000000000000000000000000000000000000ce1d9f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec4a01f703e487e503c56700530ee5915457da31c2b8953a7c4f28ba8d7f6fe17b223a071a0b443345f8881e04621c1d8c2a7917cabc4765fce94a1493046f53b5fcae40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8c01000000000043acd60000000066030936000000000000000000000000000000000000000000000000000000000000000000000000009896800008000000000190f9018d10841c29c7208303ba9494aa111c62cdeef205f70e6722d1e22274274ec12f80b90124f41766d80000000000000000000000000000000000000000000000000000000000f4c3ec0000000000000000000000000000000000000000000000000000000000efdeba00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000130e2ffe04d96e0afc1bd7fba9eb0d7167e1b7c70000000000000000000000000000000000000000000000000000018e7bee2c5d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f55bec9cafdbe8730f096aa55dad6d22d44099df00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000000000000000000000000000000000000000000183104ec3a066299aa22610a71b7996bcc22aa2497c7956012faa9a14d831ba9774692a7581a07ced28f289f005e0e69035a3e4e4269c80203724218441cbd063b531d35c3aa6000000b1f8af831111b5841c29c720830152849487627c7e586441eef9ee3c28b66662e897513f3380b844535b355c000000000000000000000000a4e25ef85e8f8c987dadece5dd5d872628e5889500000000000000000000000000000000000000000000000000334a281f81f00083104ec3a0e72bba63a3428a02f6a5896b377b4db2bbbb89c0127f4eb7281169aa533bffffa03ad352dc0a155754425d719e04b4e7d9ee03a64c4dd2ccccdcc19d9eef848639000000f6f8f408841b6b0b008305815294ff75a4b698e3ec95e608ac0f22a03b8368e05f5d880342c5d306e41923b88402c5fcf800000000000000000000000011fcfe756c05ad438e312a7fd934381537d3cffe0000000000000000000000000000000000000000000000000342c5d306e419230000000000000000000000000000000000000000000000000000000000000002000000000000000000000000332a07d6dd6692f59b4359fb988b8f7bfd3b322c83104ec3a00c1a26211ee6bac59fa2b1c7c2042eb51477fb010823027a3b723f5c1dfa06e8a072b0dc3450f25ffc949744fe11f5beb607b762f188688808b0e39060e5d551f800000190f9018d0a841ad2748083039f009418b71386418a9fca5ae7165e31c385a5130011b680b9012438ed173900000000000000000000000000000000000000000000000000000000004c4b40000000000000000000000000000000000000000017182d390f56a4c3e6a980da00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000cb5f02599139712f8923f531c1da87a8fcb2a36e0000000000000000000000000000000000000000000000000000000066030dba000000000000000000000000000000000000000000000000000000000000000300000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000005300000000000000000000000000000000000004000000000000000000000000ce3cfe8781e6dd5ee185d63100236743469acfa183104ec4a0be937dd9eb747650be9bb7db8749d79ba3dfded187127110d22637f90f122a15a0603cd263fbf8d147a4544d778701fb0690635d71691d35101ea2d4b98f3a71a200000074f8720f841ad274808302086994af52c2731e304e83cf2fb5763ffca5b0f62e2738870110d9316ec000841249c58b83104ec3a0635b99363f302765a25c23be555a8848f51bd55c478d83645905d8dc140a5a8aa07976482755a97fa022ccbd2dd70de4fc198db1c02a93a0e6f4c53ce4eaae3105000002d7f902d409841ad274808303b2e89480e38291e06339d10aab483c65695d004dbd5c69879fdf42f6e48000b902642cc4081e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000966846700000000000000000000000000000000000000000000000000000000660338040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fdf42f6e4800000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000814a23b053fd0f102aeeda0459215c2444799c700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000530000000000000000000000000000000000000400000000000000000000000065d0fe3f22babd624d0176f107c8147cb1a9d9ae0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000083104ec4a04d16b68da6b1e630b7269837f79f48df6729a7d40d2249e8a5feee62596d51d1a007772c00159a45754615df9bcbae675856cc8f2fd499e57b7dd21541cf10f7500000016ff9016c0b841ad27480826e8e9447fbe95e981c0df9737b6971b451fb15fdc989d980b901045b7d7482000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000406466383536346435636233363763383033336432343131666637653863393962386363376636376538336337346163633165366364363264313566336133396100000000000000000000000000000000000000000000000000000000000000406364613761373764643861373530366239393463663633626535303639373763646639343563316637656565363138306463623238656639663363313232643283104ec4a050bf755a953e1dc2aa2ab1e897050c96dd543ed46641a91e543bd562b4a118c8a0462656f64ce1fcdbe7c5a65a7a1d34915f0c13fbda39458c7e5fd006eaa046a5000000aef8ac1b841ad274808301b2599463fdafa50c09c49f594f47ea7194b721291ec50f80b84414fa10e10000000000000000000000003a2b90a49757175491d790085528cde6e169805d00000000000000000000000000000000000000000000000006623f9014ae000083104ec4a0fa3c84092d89f196844e32a9b8af395c2f36ae8a11758275753f7613bc52a35fa02c832c90d93dbd9fd8e7272e51d9d9d65892f636c485033bb97587849d04e3af00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "r": "0x936d6a4bdeac41d80fc8bc53c0426697c3994f6d27ea3017f06ea4965261ae0e", + "s": "0x471b21b32a9a7a52ea4f490d15ad9012a4cf790d2e8553e33c9fbcbcfe2a3936", + "chainId": "0x1", + "v": "0x0", + "gas": "0x18d8fe", + "maxPriorityFeePerGas": "0x989680", + "from": "0xcf2898225ed05be911d3709d9417e86e0b4cfc8f", + "to": "0xa13baf47339d63b743e7da8741db5456dac1e556", + "maxFeePerGas": "0x141619bae6", + "value": "0x0", + "gasPrice": "0x9af5330fe" +} diff --git a/rollup/rollup_sync_service/testdata/commitBatch_input_codecv1.json b/rollup/rollup_sync_service/testdata/commitBatch_input_codecv1.json new file mode 100644 index 0000000000..43306d66d8 --- /dev/null +++ b/rollup/rollup_sync_service/testdata/commitBatch_input_codecv1.json @@ -0,0 +1,31 @@ +{ + "blockHash": "0x4ca0d33ed0d052e0e77bfb37cf2a48ca33fe04ba3673b8d902e0b7609a37f6e8", + "blockNumber": "0x15d4", + "from": "0xf472086186382fca55cd182de196520abd76f69d", + "gas": "0x150916", + "gasPrice": "0x3b9aca07", + "maxFeePerGas": "0x3b9aca0e", + "maxPriorityFeePerGas": "0x3b9aca00", + "maxFeePerBlobGas": "0x2", + "hash": "0x36b78570eca623a486eb484066d8d082737ae9508b35f2213ef34c2928fbf875", + "input": "0x1325aca0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000c3e0000000000000000000000000000000000000000000000000000000000000007901000000000000000700000000000000000000000000000000bef7359ed0c915f1db15d599d1c17aad248915474964569f490a2aef2bfb75b401c0b331128cb2c6990fbf9c444e36511bcddb06e8eda91b52ae9adc1b1dc6349cb06474aa0b2d6c93864c0fb4a8fdb4225895c5eeea2d829a7a6f3d73188e64000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000016a00000000000000000000000000000000000000000000000000000000000002c2000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000057200000000000000000000000000000000000000000000000000000000000006ca0000000000000000000000000000000000000000000000000000000000000822000000000000000000000000000000000000000000000000000000000000097a0000000000000000000000000000000000000000000000000000000000000ad2000000000000000000000000000000000000000000000000000000000000015555b000000000000069a000000006602f9810000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000069b000000006602f9840000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000069c000000006602f9870000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000069d000000006602f98b0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000069e000000006602f98e0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000069f000000006602f991000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006a0000000006602f994000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006a1000000006602f997000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006a2000000006602f99a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006a3000000006602f99d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006a4000000006602f9a0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006a5000000006602f9a3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006a6000000006602f9a6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006a7000000006602f9aa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006a8000000006602f9ad000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006a9000000006602f9b0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006aa000000006602f9b3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ab000000006602f9b7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ac000000006602f9ba000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ad000000006602f9bd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ae000000006602f9c0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006af000000006602f9c3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006b0000000006602f9c6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006b1000000006602f9c9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006b2000000006602f9cc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006b3000000006602f9cf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006b4000000006602f9d2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006b5000000006602f9d5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006b6000000006602f9d9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006b7000000006602f9dc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006b8000000006602f9df000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006b9000000006602f9e2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ba000000006602f9e5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006bb000000006602f9e8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006bc000000006602f9ec000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006bd000000006602f9ef000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006be000000006602f9f2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006bf000000006602f9f5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006c0000000006602f9f8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006c1000000006602f9fb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006c2000000006602f9fe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006c3000000006602fa01000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006c4000000006602fa04000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006c5000000006602fa08000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006c6000000006602fa0b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006c7000000006602fa0e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006c8000000006602fa11000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006c9000000006602fa14000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ca000000006602fa18000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006cb000000006602fa1b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006cc000000006602fa1e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006cd000000006602fa21000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ce000000006602fa24000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006cf000000006602fa27000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006d0000000006602fa2a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006d1000000006602fa2d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006d2000000006602fa30000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006d3000000006602fa34000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006d4000000006602fa37000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006d5000000006602fa3a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006d6000000006602fa3d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006d7000000006602fa40000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006d8000000006602fa44000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006d9000000006602fa47000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006da000000006602fa4a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006db000000006602fa4d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006dc000000006602fa50000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006dd000000006602fa53000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006de000000006602fa56000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006df000000006602fa5a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006e0000000006602fa5d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006e1000000006602fa60000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006e2000000006602fa63000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006e3000000006602fa66000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006e4000000006602fa69000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006e5000000006602fa6c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006e6000000006602fa6f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006e7000000006602fa72000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006e8000000006602fa76000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006e9000000006602fa7a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ea000000006602fa7d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006eb000000006602fa80000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ec000000006602fa83000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ed000000006602fa86000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ee000000006602fa89000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ef000000006602fa8c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006f0000000006602fa8f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006f1000000006602fa93000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006f2000000006602fa96000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006f3000000006602fa99000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006f4000000006602fa9c0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b00000000000006f5000000006602fa9f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006f6000000006602faa2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006f7000000006602faa5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006f8000000006602faa8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006f9000000006602faac000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006fa000000006602faaf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006fb000000006602fab2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006fc000000006602fab5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006fd000000006602fab8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006fe000000006602fabc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000006ff000000006602fabf00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000700000000006602fac200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000701000000006602fac500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000702000000006602fac800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000703000000006602facb00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000704000000006602facf00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000705000000006602fad200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000706000000006602fad500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000707000000006602fad800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000708000000006602fadb00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000709000000006602fade0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000070a000000006602fae20000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000070b000000006602fae50000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000070c000000006602fae80000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000070d000000006602faeb0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000070e000000006602faee0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000070f000000006602faf100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000710000000006602faf400000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000711000000006602faf800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000712000000006602fafb00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000713000000006602fafe00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000714000000006602fb0100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000715000000006602fb0400000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000716000000006602fb0700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000717000000006602fb0a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000718000000006602fb0d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000719000000006602fb100000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000071a000000006602fb140000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000071b000000006602fb170000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000071c000000006602fb1a0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000071d000000006602fb1d0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000071e000000006602fb200000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000071f000000006602fb2300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000720000000006602fb2600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000721000000006602fb2900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000722000000006602fb2d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000723000000006602fb3000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000724000000006602fb3300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000725000000006602fb3600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000726000000006602fb3900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000727000000006602fb3d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000728000000006602fb4000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000729000000006602fb430000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000072a000000006602fb460000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000072b000000006602fb490000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000072c000000006602fb4c0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000072d000000006602fb4f0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000072e000000006602fb520000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000072f000000006602fb5500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000730000000006602fb5800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000731000000006602fb5c00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000732000000006602fb5f00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000733000000006602fb6200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000734000000006602fb6500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000735000000006602fb6800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000736000000006602fb6b00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000737000000006602fb6e00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000738000000006602fb7100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000739000000006602fb740000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000073a000000006602fb770000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000073b000000006602fb7b0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000073c000000006602fb7e0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000073d000000006602fb810000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000073e000000006602fb840000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000073f000000006602fb8800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000740000000006602fb8b00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000741000000006602fb8e00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000742000000006602fb9100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000743000000006602fb9400000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000744000000006602fb9700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000745000000006602fb9a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000746000000006602fb9d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000747000000006602fba000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000748000000006602fba400000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000749000000006602fba70000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000074a000000006602fbaa0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000074b000000006602fbad0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000074c000000006602fbb00000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000074d000000006602fbb30000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000074e000000006602fbb70000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000074f000000006602fbba0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b0000000000000750000000006602fbbd00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000751000000006602fbc000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000752000000006602fbc300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000753000000006602fbc600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000754000000006602fbc900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000755000000006602fbcc00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000756000000006602fbd000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000757000000006602fbd300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000758000000006602fbd600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000759000000006602fbd90000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000075a000000006602fbdc0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000075b000000006602fbdf0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000075c000000006602fbe30000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000075d000000006602fbe60000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000075e000000006602fbe90000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000075f000000006602fbec00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000760000000006602fbef00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000761000000006602fbf200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000762000000006602fbf600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000763000000006602fbf900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000764000000006602fbfc00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000765000000006602fbff00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000766000000006602fc0200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000767000000006602fc0500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000768000000006602fc0800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000769000000006602fc0c0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000076a000000006602fc0f0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000076b000000006602fc120000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000076c000000006602fc150000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000076d000000006602fc180000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000076e000000006602fc1b0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000076f000000006602fc1e00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000770000000006602fc2100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000771000000006602fc2500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000772000000006602fc2800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000773000000006602fc2b00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000774000000006602fc2e00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000775000000006602fc3100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000776000000006602fc3400000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000777000000006602fc3700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000778000000006602fc3a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000779000000006602fc3d0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000077a000000006602fc400000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000077b000000006602fc440000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000077c000000006602fc470000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000077d000000006602fc4a0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000077e000000006602fc4d0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000077f000000006602fc5000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000780000000006602fc5300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000781000000006602fc5600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000782000000006602fc5900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000783000000006602fc5d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000784000000006602fc6000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000785000000006602fc6300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000786000000006602fc6600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000787000000006602fc6900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000788000000006602fc6c00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000789000000006602fc6f0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000078a000000006602fc720000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000078b000000006602fc750000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000078c000000006602fc780000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000078d000000006602fc7c0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000078e000000006602fc7f0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000078f000000006602fc8200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000790000000006602fc8500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000791000000006602fc8800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000792000000006602fc8c00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000793000000006602fc8f00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000794000000006602fc9200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000795000000006602fc9500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000796000000006602fc9800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000797000000006602fc9b00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000798000000006602fc9e00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000799000000006602fca10000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000079a000000006602fca40000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000079b000000006602fca70000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000079c000000006602fcab0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000079d000000006602fcae0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000079e000000006602fcb10000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000079f000000006602fcb4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007a0000000006602fcb7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007a1000000006602fcbb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007a2000000006602fcbe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007a3000000006602fcc1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007a4000000006602fcc4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007a5000000006602fcc7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007a6000000006602fcca000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007a7000000006602fcce000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007a8000000006602fcd1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007a9000000006602fcd4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007aa000000006602fcd70000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b00000000000007ab000000006602fcda000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ac000000006602fcdd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ad000000006602fce0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ae000000006602fce3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007af000000006602fce6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007b0000000006602fcea000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007b1000000006602fced000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007b2000000006602fcf1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007b3000000006602fcf4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007b4000000006602fcf7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007b5000000006602fcfb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007b6000000006602fcfe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007b7000000006602fd01000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007b8000000006602fd04000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007b9000000006602fd07000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ba000000006602fd0a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007bb000000006602fd0d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007bc000000006602fd10000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007bd000000006602fd14000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007be000000006602fd17000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007bf000000006602fd1a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007c0000000006602fd1d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007c1000000006602fd20000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007c2000000006602fd23000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007c3000000006602fd26000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007c4000000006602fd2a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007c5000000006602fd2d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007c6000000006602fd30000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007c7000000006602fd33000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007c8000000006602fd36000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007c9000000006602fd3a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ca000000006602fd3d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007cb000000006602fd40000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007cc000000006602fd43000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007cd000000006602fd46000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ce000000006602fd49000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007cf000000006602fd4c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007d0000000006602fd4f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007d1000000006602fd52000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007d2000000006602fd56000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007d3000000006602fd59000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007d4000000006602fd5c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007d5000000006602fd5f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007d6000000006602fd62000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007d7000000006602fd65000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007d8000000006602fd68000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007d9000000006602fd6b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007da000000006602fd6f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007db000000006602fd72000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007dc000000006602fd75000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007dd000000006602fd78000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007de000000006602fd7b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007df000000006602fd7e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007e0000000006602fd81000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007e1000000006602fd84000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007e2000000006602fd87000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007e3000000006602fd8b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007e4000000006602fd8e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007e5000000006602fd91000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007e6000000006602fd94000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007e7000000006602fd97000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007e8000000006602fd9a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007e9000000006602fd9d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ea000000006602fda1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007eb000000006602fda4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ec000000006602fda7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ed000000006602fdaa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ee000000006602fdad000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ef000000006602fdb0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007f0000000006602fdb3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007f1000000006602fdb6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007f2000000006602fdb9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007f3000000006602fdbc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007f4000000006602fdc0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007f5000000006602fdc3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007f6000000006602fdc6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007f7000000006602fdc9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007f8000000006602fdcc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007f9000000006602fdd0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007fa000000006602fdd3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007fb000000006602fdd6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007fc000000006602fdd9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007fd000000006602fddd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007fe000000006602fde0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000007ff000000006602fde300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000800000000006602fde600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000801000000006602fde900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000802000000006602fdec00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000803000000006602fdef00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000804000000006602fdf200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000805000000006602fdf60000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b0000000000000806000000006602fdf900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000807000000006602fdfc00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000808000000006602fdff00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000809000000006602fe020000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000080a000000006602fe050000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000080b000000006602fe090000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000080c000000006602fe0c0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000080d000000006602fe0f0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000080e000000006602fe120000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000080f000000006602fe1500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000810000000006602fe1800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000811000000006602fe1c00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000812000000006602fe1f00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000813000000006602fe2200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000814000000006602fe2500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000815000000006602fe2800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000816000000006602fe2b00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000817000000006602fe2e00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000818000000006602fe3100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000819000000006602fe350000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000081a000000006602fe380000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000081b000000006602fe3b0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000081c000000006602fe3e0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000081d000000006602fe420000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000081e000000006602fe450000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000081f000000006602fe4800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000820000000006602fe4b00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000821000000006602fe4e00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000822000000006602fe5100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000823000000006602fe5500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000824000000006602fe5800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000825000000006602fe5b00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000826000000006602fe5e00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000827000000006602fe6100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000828000000006602fe6400000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000829000000006602fe670000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000082a000000006602fe6b0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000082b000000006602fe6e0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000082c000000006602fe710000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000082d000000006602fe740000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000082e000000006602fe770000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000082f000000006602fe7a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000830000000006602fe7d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000831000000006602fe8000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000832000000006602fe8300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000833000000006602fe8700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000834000000006602fe8a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000835000000006602fe8d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000836000000006602fe9000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000837000000006602fe9300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000838000000006602fe9600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000839000000006602fe990000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000083a000000006602fe9d0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000083b000000006602fea00000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000083c000000006602fea30000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000083d000000006602fea60000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000083e000000006602fea90000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000083f000000006602feac00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000840000000006602feaf00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000841000000006602feb200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000842000000006602feb500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000843000000006602feb900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000844000000006602febc00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000845000000006602febf00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000846000000006602fec200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000847000000006602fec600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000848000000006602fec900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000849000000006602fecc0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000084a000000006602fecf0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000084b000000006602fed20000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000084c000000006602fed50000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000084d000000006602fed80000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000084e000000006602fedb0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000084f000000006602fede00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000850000000006602fee200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000851000000006602fee500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000852000000006602fee800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000853000000006602feeb00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000854000000006602feef00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000855000000006602fef200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000856000000006602fef500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000857000000006602fef800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000858000000006602fefb00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000859000000006602fefe0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000085a000000006602ff010000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000085b000000006602ff040000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000085c000000006602ff080000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000085d000000006602ff0b0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000085e000000006602ff0e0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000085f000000006602ff1100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000860000000006602ff140000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b0000000000000861000000006602ff1700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000862000000006602ff1a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000863000000006602ff1d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000864000000006602ff2100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000865000000006602ff2400000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000866000000006602ff2700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000867000000006602ff2a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000868000000006602ff2d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000869000000006602ff310000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000086a000000006602ff340000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000086b000000006602ff370000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000086c000000006602ff3a0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000086d000000006602ff3d0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000086e000000006602ff400000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000086f000000006602ff4300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000870000000006602ff4600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000871000000006602ff4900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000872000000006602ff4d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000873000000006602ff5000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000874000000006602ff5300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000875000000006602ff5600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000876000000006602ff5a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000877000000006602ff5d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000878000000006602ff6100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000879000000006602ff640000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000087a000000006602ff670000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000087b000000006602ff6a0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000087c000000006602ff6d0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000087d000000006602ff700000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000087e000000006602ff730000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000087f000000006602ff7700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000880000000006602ff7a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000881000000006602ff7d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000882000000006602ff8000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000883000000006602ff8300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000884000000006602ff8600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000885000000006602ff8a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000886000000006602ff8d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000887000000006602ff9000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000888000000006602ff9300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000889000000006602ff960000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000088a000000006602ff9a0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000088b000000006602ff9d0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000088c000000006602ffa00000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000088d000000006602ffa40000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000088e000000006602ffa70000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000088f000000006602ffaa00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000890000000006602ffad00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000891000000006602ffb000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000892000000006602ffb300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000893000000006602ffb600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000894000000006602ffba00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000895000000006602ffbd00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000896000000006602ffc000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000897000000006602ffc300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000898000000006602ffc600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000899000000006602ffc90000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000089a000000006602ffcc0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000089b000000006602ffd00000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000089c000000006602ffd30000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000089d000000006602ffd60000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000089e000000006602ffd90000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000089f000000006602ffdc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008a0000000006602ffdf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008a1000000006602ffe2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008a2000000006602ffe5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008a3000000006602ffe9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008a4000000006602ffec000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008a5000000006602ffef000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008a6000000006602fff2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008a7000000006602fff5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008a8000000006602fff8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008a9000000006602fffc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008aa000000006602ffff000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ab0000000066030002000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ac0000000066030005000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ad0000000066030008000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ae000000006603000b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008af000000006603000e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008b00000000066030011000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008b10000000066030014000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008b20000000066030018000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008b3000000006603001b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008b4000000006603001e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008b50000000066030021000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008b60000000066030024000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008b70000000066030027000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008b8000000006603002b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008b9000000006603002e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ba0000000066030031000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008bb00000000660300340000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b00000000000008bc0000000066030037000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008bd000000006603003a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008be000000006603003d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008bf0000000066030040000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008c00000000066030043000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008c10000000066030047000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008c2000000006603004a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008c3000000006603004d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008c40000000066030050000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008c50000000066030053000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008c60000000066030057000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008c7000000006603005a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008c8000000006603005d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008c90000000066030060000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ca0000000066030063000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008cb0000000066030067000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008cc000000006603006a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008cd000000006603006e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ce0000000066030071000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008cf0000000066030074000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008d00000000066030077000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008d1000000006603007a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008d2000000006603007d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008d30000000066030081000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008d40000000066030084000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008d50000000066030087000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008d6000000006603008a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008d7000000006603008d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008d80000000066030090000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008d90000000066030094000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008da0000000066030097000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008db000000006603009a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008dc000000006603009d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008dd00000000660300a0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008de00000000660300a4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008df00000000660300a7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008e000000000660300aa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008e100000000660300ad000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008e200000000660300b1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008e300000000660300b4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008e400000000660300b7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008e500000000660300ba000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008e600000000660300bd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008e700000000660300c0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008e800000000660300c4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008e900000000660300c7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ea00000000660300ca000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008eb00000000660300cd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ec00000000660300d0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ed00000000660300d3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ee00000000660300d6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ef00000000660300d9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008f000000000660300dc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008f100000000660300e0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008f200000000660300e4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008f300000000660300e7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008f400000000660300ea000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008f500000000660300ed000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008f600000000660300f0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008f700000000660300f4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008f800000000660300f7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008f900000000660300fa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008fa00000000660300fd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008fb0000000066030100000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008fc0000000066030103000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008fd0000000066030106000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008fe000000006603010a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000008ff000000006603010d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000900000000006603011000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000901000000006603011300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000902000000006603011700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000903000000006603011a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000904000000006603011d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000905000000006603012000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000906000000006603012300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000907000000006603012600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000908000000006603012a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000909000000006603012e0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000090a00000000660301310000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000090b00000000660301340000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000090c00000000660301370000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000090d000000006603013b0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000090e000000006603013e0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000090f000000006603014100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000910000000006603014400000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000911000000006603014700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000912000000006603014a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000913000000006603014d0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000091400000000660301500000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000091500000000660301530000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000091600000000660301560000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b0000000000000917000000006603015a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000918000000006603015d0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000091900000000660301600000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000091a00000000660301630000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000091b00000000660301660000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000091c00000000660301690000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000091d000000006603016c0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000091e000000006603016f0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000091f000000006603017300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000920000000006603017600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000921000000006603017a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000922000000006603017d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000923000000006603018000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000924000000006603018300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000925000000006603018600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000926000000006603018900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000927000000006603018c0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000092800000000660301900000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000092900000000660301930000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000092a00000000660301960000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000092b00000000660301990000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000092c000000006603019c0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000092d000000006603019f0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000092e00000000660301a30000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000092f00000000660301a60000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093000000000660301a90000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093100000000660301ac0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093200000000660301af0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093300000000660301b20000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093400000000660301b50000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093500000000660301b90000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093600000000660301bc0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093700000000660301bf0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093800000000660301c20000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093900000000660301c50000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093a00000000660301c80000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093b00000000660301cb0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093c00000000660301cf0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093d00000000660301d20000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093e00000000660301d50000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000093f00000000660301d80000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094000000000660301db0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094100000000660301de0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094200000000660301e10000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094300000000660301e40000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094400000000660301e80000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094500000000660301eb0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094600000000660301ee0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094700000000660301f10000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094800000000660301f40000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094900000000660301f80000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094a00000000660301fb0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094b00000000660301fe0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094c00000000660302010000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094d00000000660302040000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094e00000000660302070000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000094f000000006603020a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000950000000006603020d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000951000000006603021100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000952000000006603021400000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000953000000006603021700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000954000000006603021a00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000955000000006603021d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000956000000006603022100000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000957000000006603022400000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000958000000006603022700000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000959000000006603022a0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000095a000000006603022d0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000095b00000000660302300000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000095c00000000660302330000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000095d00000000660302370000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000095e000000006603023a0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000095f000000006603023d00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000960000000006603024000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000961000000006603024300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000962000000006603024600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000963000000006603024900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000964000000006603024c00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000965000000006603025000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000966000000006603025300000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000967000000006603025600000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000968000000006603025900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000969000000006603025c0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000096a000000006603025f0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000096b00000000660302630000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000096c00000000660302660000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000096d00000000660302690000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000096e000000006603026c0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000096f000000006603026f0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000097000000000660302720000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000097100000000660302750000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b0000000000000972000000006603027900000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000973000000006603027c00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000974000000006603027f00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000975000000006603028200000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000976000000006603028500000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000977000000006603028800000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000978000000006603028b00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000979000000006603028f0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000097a00000000660302920000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000097b00000000660302950000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000097c00000000660302980000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000097d000000006603029b0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000097e000000006603029e0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000097f00000000660302a10000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098000000000660302a40000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098100000000660302a70000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098200000000660302ab0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098300000000660302ae0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098400000000660302b10000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098500000000660302b40000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098600000000660302b70000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098700000000660302ba0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098800000000660302bd0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098900000000660302c00000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098a00000000660302c30000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098b00000000660302c70000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098c00000000660302ca0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098d00000000660302cd0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098e00000000660302d00000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000098f00000000660302d30000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099000000000660302d60000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099100000000660302d90000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099200000000660302dd0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099300000000660302e00000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099400000000660302e30000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099500000000660302e60000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099600000000660302e90000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099700000000660302ec0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099800000000660302ef0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099900000000660302f30000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099a00000000660302f60000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099b00000000660302f90000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099c00000000660302fc0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099d00000000660302ff0000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099e00000000660303020000000000000000000000000000000000000000000000000000000000000000000000000098968000010000000000000000099f0000000066030305000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009a00000000066030308000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009a1000000006603030c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009a2000000006603030f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009a30000000066030312000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009a40000000066030315000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009a50000000066030318000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009a6000000006603031b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009a7000000006603031f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009a80000000066030322000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009a90000000066030325000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009aa0000000066030328000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009ab000000006603032b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009ac000000006603032e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009ad0000000066030331000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009ae0000000066030334000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009af0000000066030338000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009b0000000006603033b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009b1000000006603033e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009b20000000066030341000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009b30000000066030344000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009b40000000066030347000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009b5000000006603034b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009b6000000006603034e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009b70000000066030351000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009b80000000066030354000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009b90000000066030357000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009ba000000006603035a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009bb000000006603035e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009bc0000000066030361000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009bd0000000066030364000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009be0000000066030367000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009bf000000006603036a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009c0000000006603036d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009c10000000066030370000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009c20000000066030373000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009c30000000066030377000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009c4000000006603037a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009c5000000006603037d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009c60000000066030380000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009c70000000066030383000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009c80000000066030386000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009c90000000066030389000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009ca000000006603038c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009cb0000000066030390000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000009cc0000000066030393000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x8", + "to": "0x475652655309fa7cb1397537bee9a7fbafdc11ca", + "transactionIndex": "0x0", + "value": "0x0", + "type": "0x3", + "accessList": [ + { + "address": "0x3d9a28f7692cb94740bb64f08cb5cd19aa5cd3dd", + "storageKeys": [] + } + ], + "chainId": "0x1b207", + "blobVersionedHashes": [ + "0x017896a992b0cfbf966e0e3bec1c9f7fbb40bf02ef6926d8daa52cd3f06b62eb" + ], + "v": "0x1", + "r": "0x19e791f54c7337548fa819dd0ef50f9bfc762ef83804f154144c9e3e18c7d07f", + "s": "0x2fe18775bf12877844bed3651d3fec73296222db390a5d5cddd515fc6938b7cc", + "yParity": "0x1" +} diff --git a/rollup/rollup_sync_service/testdata/commitBatch_input_codecv2.json b/rollup/rollup_sync_service/testdata/commitBatch_input_codecv2.json new file mode 100644 index 0000000000..f32c20dec8 --- /dev/null +++ b/rollup/rollup_sync_service/testdata/commitBatch_input_codecv2.json @@ -0,0 +1,31 @@ +{ + "blockHash": "0x3bfa6d98c4925d3b40613f7cd46ffb471735bcdd0c41c0756462ed72e2436c43", + "blockNumber": "0x812", + "from": "0xf472086186382fca55cd182de196520abd76f69d", + "gas": "0x1603be", + "gasPrice": "0x3b9aca07", + "maxFeePerGas": "0x3b9aca0e", + "maxPriorityFeePerGas": "0x3b9aca00", + "maxFeePerBlobGas": "0x2", + "hash": "0x17377279f654f557c71a2f518fe953c7c0c216a99bf547a534f7c39ebfb3ae69", + "input": "0x1325aca0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000c3e0000000000000000000000000000000000000000000000000000000000000007901000000000000000400000000000000000000000000000000ffa5ada7c54e9fbbe20058d9d2240992cb8811cc8da7896a184d8735e66a372901c0b8b6eeeb71d0dde63486ecd7f12e08745ff759309170a25d53dc57ccd8957b1fa86838e265da0b67f8a0b4fcdd5e9220aa5b1717065265e3f6c778bd0df8000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000016a00000000000000000000000000000000000000000000000000000000000002c2000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000057200000000000000000000000000000000000000000000000000000000000006ca0000000000000000000000000000000000000000000000000000000000000822000000000000000000000000000000000000000000000000000000000000097a0000000000000000000000000000000000000000000000000000000000000ad2000000000000000000000000000000000000000000000000000000000000015555b00000000000000c800000000664103eb0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000c900000000664103ee0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000ca00000000664103f10000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000cb00000000664103f40000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000cc00000000664103f70000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000cd00000000664103fa0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000ce00000000664103fd0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000cf00000000664104000000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000d000000000664104030000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000d100000000664104060000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000d200000000664104090000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000d3000000006641040c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000d4000000006641040f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000d500000000664104120000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000d600000000664104150000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000d700000000664104180000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000d8000000006641041b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000d9000000006641041e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000da00000000664104220000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000db00000000664104250000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000dc00000000664104280000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000dd000000006641042b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000de000000006641042e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000df00000000664104310000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000e000000000664104340000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000e100000000664104370000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000e2000000006641043a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000e3000000006641043d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000e400000000664104400000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000e500000000664104430000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000e600000000664104460000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000e700000000664104490000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000e8000000006641044c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000e9000000006641044f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000ea00000000664104520000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000eb00000000664104550000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000ec00000000664104580000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000ed000000006641045b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000ee000000006641045e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000ef00000000664104610000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000f000000000664104640000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000f100000000664104670000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000f2000000006641046a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000f3000000006641046d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000f400000000664104700000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000f500000000664104730000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000f600000000664104760000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000f700000000664104790000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000f8000000006641047c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000f9000000006641047f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000fa00000000664104820000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000fb00000000664104850000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000fc00000000664104880000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000fd000000006641048b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000fe000000006641048e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000ff00000000664104910000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010000000000664104940000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010100000000664104970000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000102000000006641049b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000103000000006641049e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010400000000664104a10000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010500000000664104a40000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010600000000664104a70000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010700000000664104aa0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010800000000664104ad0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010900000000664104b00000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010a00000000664104b30000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010b00000000664104b60000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010c00000000664104b90000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010d00000000664104bc0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010e00000000664104bf0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000010f00000000664104c20000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011000000000664104c50000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011100000000664104c80000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011200000000664104cb0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011300000000664104ce0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011400000000664104d10000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011500000000664104d40000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011600000000664104d70000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011700000000664104da0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011800000000664104dd0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011900000000664104e00000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011a00000000664104e30000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011b00000000664104e60000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011c00000000664104e90000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011d00000000664104ec0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011e00000000664104ef0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000011f00000000664104f20000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012000000000664104f50000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012100000000664104f80000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012200000000664104fb0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b000000000000012300000000664104fe0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012400000000664105020000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012500000000664105050000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012600000000664105080000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000127000000006641050b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000128000000006641050e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012900000000664105110000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012a00000000664105140000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012b00000000664105170000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012c000000006641051a0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012d000000006641051d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012e00000000664105200000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000012f00000000664105230000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013000000000664105260000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013100000000664105290000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000132000000006641052c0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000133000000006641052f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013400000000664105320000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013500000000664105350000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013600000000664105380000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000137000000006641053b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000138000000006641053e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013900000000664105410000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013a00000000664105440000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013b00000000664105470000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013c000000006641054a0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013d000000006641054d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013e00000000664105500000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000013f00000000664105530000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014000000000664105560000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014100000000664105590000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000142000000006641055c0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000143000000006641055f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014400000000664105620000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014500000000664105660000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014600000000664105690000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000147000000006641056c0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000148000000006641056f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014900000000664105720000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014a00000000664105750000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014b00000000664105780000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014c000000006641057b0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014d000000006641057e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014e00000000664105810000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000014f00000000664105840000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015000000000664105870000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000151000000006641058a0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000152000000006641058d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015300000000664105900000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015400000000664105930000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015500000000664105960000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015600000000664105990000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000157000000006641059c0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000158000000006641059f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015900000000664105a20000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015a00000000664105a50000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015b00000000664105a80000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015c00000000664105ab0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015d00000000664105ae0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015e00000000664105b10000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000015f00000000664105b40000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016000000000664105b70000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016100000000664105ba0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016200000000664105bd0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016300000000664105c00000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016400000000664105c30000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016500000000664105c60000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016600000000664105c90000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016700000000664105cc0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016800000000664105cf0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016900000000664105d20000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016a00000000664105d50000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016b00000000664105d80000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016c00000000664105db0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016d00000000664105de0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016e00000000664105e10000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000016f00000000664105e40000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017000000000664105e70000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017100000000664105eb0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017200000000664105ee0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017300000000664105f10000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017400000000664105f40000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017500000000664105f70000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017600000000664105fa0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017700000000664105fd0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017800000000664106000000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017900000000664106030000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017a00000000664106060000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017b00000000664106090000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017c000000006641060c0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017d000000006641060f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b000000000000017e00000000664106120000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000017f00000000664106150000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018000000000664106180000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000181000000006641061b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000182000000006641061e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018300000000664106210000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018400000000664106240000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018500000000664106270000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000186000000006641062a0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000187000000006641062d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018800000000664106300000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018900000000664106330000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018a00000000664106360000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018b00000000664106390000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018c000000006641063c0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018d000000006641063f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018e00000000664106420000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000018f00000000664106450000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019000000000664106480000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000191000000006641064b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000192000000006641064e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019300000000664106510000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019400000000664106540000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019500000000664106570000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000196000000006641065a0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000197000000006641065d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019800000000664106600000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019900000000664106630000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019a00000000664106660000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019b00000000664106690000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019c000000006641066d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019d00000000664106700000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019e00000000664106730000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000019f00000000664106760000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001a000000000664106790000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001a1000000006641067c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001a2000000006641067f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001a300000000664106820000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001a400000000664106850000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001a500000000664106880000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001a6000000006641068b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001a7000000006641068e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001a800000000664106910000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001a900000000664106940000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001aa00000000664106970000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ab000000006641069a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ac000000006641069d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ad00000000664106a00000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ae00000000664106a30000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001af00000000664106a60000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001b000000000664106a90000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001b100000000664106ac0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001b200000000664106af0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001b300000000664106b20000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001b400000000664106b50000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001b500000000664106b80000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001b600000000664106bb0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001b700000000664106be0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001b800000000664106c10000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001b900000000664106c40000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ba00000000664106c70000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001bb00000000664106ca0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001bc00000000664106cd0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001bd00000000664106d00000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001be00000000664106d30000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001bf00000000664106d60000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001c000000000664106d90000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001c100000000664106dc0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001c200000000664106df0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001c300000000664106e20000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001c400000000664106e50000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001c500000000664106e80000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001c600000000664106eb0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001c700000000664106ee0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001c800000000664106f20000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001c900000000664106f50000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ca00000000664106f80000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001cb00000000664106fb0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001cc00000000664106fe0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001cd00000000664107010000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ce00000000664107040000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001cf00000000664107070000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001d0000000006641070a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001d1000000006641070d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001d200000000664107100000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001d300000000664107130000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001d400000000664107160000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001d500000000664107190000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001d6000000006641071c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001d7000000006641071f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001d800000000664107220000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b00000000000001d900000000664107250000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001da00000000664107280000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001db000000006641072b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001dc000000006641072e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001dd00000000664107310000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001de00000000664107340000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001df00000000664107370000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001e0000000006641073a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001e1000000006641073d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001e200000000664107400000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001e300000000664107430000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001e400000000664107460000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001e500000000664107490000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001e6000000006641074c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001e7000000006641074f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001e800000000664107520000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001e900000000664107550000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ea00000000664107580000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001eb000000006641075b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ec000000006641075e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ed00000000664107610000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ee00000000664107640000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ef00000000664107670000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001f0000000006641076a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001f1000000006641076d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001f200000000664107700000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001f300000000664107730000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001f400000000664107760000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001f500000000664107790000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001f6000000006641077d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001f700000000664107800000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001f800000000664107830000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001f900000000664107860000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001fa00000000664107890000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001fb000000006641078c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001fc000000006641078f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001fd00000000664107920000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001fe00000000664107950000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000001ff00000000664107980000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000200000000006641079b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000201000000006641079e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020200000000664107a10000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020300000000664107a40000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020400000000664107a70000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020500000000664107aa0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020600000000664107ad0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020700000000664107b00000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020800000000664107b30000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020900000000664107b60000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020a00000000664107b90000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020b00000000664107bc0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020c00000000664107bf0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020d00000000664107c20000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020e00000000664107c50000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000020f00000000664107c80000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021000000000664107cb0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021100000000664107ce0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021200000000664107d10000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021300000000664107d40000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021400000000664107d70000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021500000000664107da0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021600000000664107dd0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021700000000664107e00000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021800000000664107e30000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021900000000664107e60000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021a00000000664107e90000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021b00000000664107ec0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021c00000000664107ef0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021d00000000664107f20000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021e00000000664107f50000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000021f00000000664107f80000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022000000000664107fc0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022100000000664107ff0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022200000000664108020000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022300000000664108050000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022400000000664108080000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000225000000006641080b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000226000000006641080e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022700000000664108110000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022800000000664108140000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022900000000664108170000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022a000000006641081a0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022b000000006641081d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022c00000000664108200000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022d00000000664108230000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022e00000000664108260000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000022f00000000664108290000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000230000000006641082c0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000231000000006641082f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023200000000664108320000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023300000000664108350000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b000000000000023400000000664108380000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000235000000006641083b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000236000000006641083e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023700000000664108410000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023800000000664108440000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023900000000664108470000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023a000000006641084a0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023b000000006641084d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023c00000000664108500000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023d00000000664108530000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023e00000000664108560000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000023f00000000664108590000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000240000000006641085c0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000241000000006641085f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024200000000664108620000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024300000000664108650000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024400000000664108680000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000245000000006641086b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000246000000006641086e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024700000000664108710000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024800000000664108740000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024900000000664108770000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024a000000006641087b0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024b000000006641087e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024c00000000664108810000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024d00000000664108840000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024e00000000664108870000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000024f000000006641088a0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000250000000006641088d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025100000000664108900000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025200000000664108930000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025300000000664108960000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025400000000664108990000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000255000000006641089c0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000256000000006641089f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025700000000664108a20000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025800000000664108a50000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025900000000664108a80000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025a00000000664108ab0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025b00000000664108ae0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025c00000000664108b10000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025d00000000664108b40000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025e00000000664108b70000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000025f00000000664108ba0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026000000000664108bd0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026100000000664108c00000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026200000000664108c30000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026300000000664108c60000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026400000000664108c90000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026500000000664108cc0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026600000000664108cf0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026700000000664108d20000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026800000000664108d50000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026900000000664108d80000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026a00000000664108db0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026b00000000664108de0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026c00000000664108e10000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026d00000000664108e40000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026e00000000664108e70000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000026f00000000664108ea0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027000000000664108ed0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027100000000664108f00000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027200000000664108f30000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027300000000664108f60000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027400000000664108f90000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027500000000664108fc0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027600000000664109000000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027700000000664109030000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027800000000664109060000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027900000000664109090000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027a000000006641090c0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027b000000006641090f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027c00000000664109120000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027d00000000664109150000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027e00000000664109180000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000027f000000006641091b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000280000000006641091e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028100000000664109210000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028200000000664109240000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028300000000664109270000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000284000000006641092a0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000285000000006641092d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028600000000664109300000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028700000000664109330000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028800000000664109360000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028900000000664109390000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028a000000006641093c0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028b000000006641093f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028c00000000664109420000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028d00000000664109450000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000028e00000000664109480000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b000000000000028f000000006641094b0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000290000000006641094e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029100000000664109510000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029200000000664109540000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029300000000664109570000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000294000000006641095a0000000000000000000000000000000000000000000000000000000008f0d1800000000000989680000100000000000000000295000000006641095d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029600000000664109600000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029700000000664109630000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029800000000664109660000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029900000000664109690000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029a000000006641096c0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029b000000006641096f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029c00000000664109720000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029d00000000664109750000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029e00000000664109780000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000029f000000006641097b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002a0000000006641097e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002a100000000664109820000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002a200000000664109850000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002a300000000664109880000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002a4000000006641098b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002a5000000006641098e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002a600000000664109910000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002a700000000664109940000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002a800000000664109970000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002a9000000006641099a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002aa000000006641099d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ab00000000664109a00000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ac00000000664109a30000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ad00000000664109a60000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ae00000000664109a90000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002af00000000664109ac0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002b000000000664109af0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002b100000000664109b20000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002b200000000664109b50000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002b300000000664109b80000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002b400000000664109bb0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002b500000000664109be0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002b600000000664109c10000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002b700000000664109c40000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002b800000000664109c70000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002b900000000664109ca0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ba00000000664109cd0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002bb00000000664109d00000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002bc00000000664109d30000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002bd00000000664109d60000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002be00000000664109d90000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002bf00000000664109dc0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002c000000000664109df0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002c100000000664109e20000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002c200000000664109e50000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002c300000000664109e80000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002c400000000664109eb0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002c500000000664109ee0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002c600000000664109f10000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002c700000000664109f40000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002c800000000664109f70000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002c900000000664109fb0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ca00000000664109fe0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002cb0000000066410a010000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002cc0000000066410a040000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002cd0000000066410a070000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ce0000000066410a0a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002cf0000000066410a0d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002d00000000066410a100000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002d10000000066410a130000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002d20000000066410a160000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002d30000000066410a190000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002d40000000066410a1c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002d50000000066410a1f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002d60000000066410a220000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002d70000000066410a250000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002d80000000066410a280000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002d90000000066410a2b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002da0000000066410a2e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002db0000000066410a310000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002dc0000000066410a340000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002dd0000000066410a370000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002de0000000066410a3a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002df0000000066410a3d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002e00000000066410a400000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002e10000000066410a430000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002e20000000066410a460000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002e30000000066410a490000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002e40000000066410a4c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002e50000000066410a4f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002e60000000066410a520000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002e70000000066410a550000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002e80000000066410a580000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002e90000000066410a5b0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b00000000000002ea0000000066410a5e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002eb0000000066410a610000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ec0000000066410a640000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ed0000000066410a670000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ee0000000066410a6a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ef0000000066410a6d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002f00000000066410a700000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002f10000000066410a740000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002f20000000066410a770000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002f30000000066410a7a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002f40000000066410a7d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002f50000000066410a800000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002f60000000066410a830000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002f70000000066410a860000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002f80000000066410a890000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002f90000000066410a8c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002fa0000000066410a8f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002fb0000000066410a920000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002fc0000000066410a950000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002fd0000000066410a980000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002fe0000000066410a9b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000002ff0000000066410a9e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003000000000066410aa10000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003010000000066410aa40000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003020000000066410aa70000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003030000000066410aaa0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003040000000066410aad0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003050000000066410ab00000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003060000000066410ab30000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003070000000066410ab60000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003080000000066410ab90000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003090000000066410abc0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000030a0000000066410abf0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000030b0000000066410ac20000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000030c0000000066410ac50000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000030d0000000066410ac80000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000030e0000000066410acb0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000030f0000000066410ace0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003100000000066410ad10000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003110000000066410ad40000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003120000000066410ad70000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003130000000066410ada0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003140000000066410add0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003150000000066410ae00000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003160000000066410ae30000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003170000000066410ae60000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003180000000066410aea0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003190000000066410aed0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000031a0000000066410af00000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000031b0000000066410af30000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000031c0000000066410af60000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000031d0000000066410af90000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000031e0000000066410afc0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000031f0000000066410aff0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003200000000066410b020000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003210000000066410b050000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003220000000066410b080000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003230000000066410b0b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003240000000066410b0e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003250000000066410b110000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003260000000066410b140000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003270000000066410b170000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003280000000066410b1a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003290000000066410b1d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000032a0000000066410b200000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000032b0000000066410b230000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000032c0000000066410b260000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000032d0000000066410b290000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000032e0000000066410b2c0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000032f0000000066410b2f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003300000000066410b320000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003310000000066410b350000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003320000000066410b380000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003330000000066410b3b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003340000000066410b3e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003350000000066410b410000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003360000000066410b440000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003370000000066410b470000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003380000000066410b4a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003390000000066410b4d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000033a0000000066410b500000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000033b0000000066410b530000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000033c0000000066410b570000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000033d0000000066410b5a0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000033e0000000066410b5d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000033f0000000066410b600000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003400000000066410b630000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003410000000066410b660000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003420000000066410b690000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003430000000066410b6c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003440000000066410b6f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b00000000000003450000000066410b720000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003460000000066410b750000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003470000000066410b780000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003480000000066410b7b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003490000000066410b7e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000034a0000000066410b810000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000034b0000000066410b840000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000034c0000000066410b870000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000034d0000000066410b8a0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000034e0000000066410b8d0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000034f0000000066410b900000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003500000000066410b930000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003510000000066410b960000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003520000000066410b990000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003530000000066410b9c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003540000000066410b9f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003550000000066410ba20000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003560000000066410ba50000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003570000000066410ba80000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003580000000066410bab0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003590000000066410bae0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000035a0000000066410bb10000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000035b0000000066410bb40000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000035c0000000066410bb70000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000035d0000000066410bbb0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000035e0000000066410bbe0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000035f0000000066410bc10000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003600000000066410bc40000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003610000000066410bc70000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003620000000066410bca0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003630000000066410bcd0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003640000000066410bd00000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003650000000066410bd30000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003660000000066410bd60000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003670000000066410bd90000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003680000000066410bdc0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003690000000066410bdf0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000036a0000000066410be20000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000036b0000000066410be50000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000036c0000000066410be80000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000036d0000000066410beb0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000036e0000000066410bee0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000036f0000000066410bf10000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003700000000066410bf40000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003710000000066410bf70000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003720000000066410bfa0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003730000000066410bfd0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003740000000066410c000000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003750000000066410c030000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003760000000066410c060000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003770000000066410c090000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003780000000066410c0c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003790000000066410c0f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000037a0000000066410c120000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000037b0000000066410c150000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000037c0000000066410c180000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000037d0000000066410c1b0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000037e0000000066410c1e0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000037f0000000066410c210000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003800000000066410c240000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003810000000066410c270000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003820000000066410c2a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003830000000066410c2d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003840000000066410c310000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003850000000066410c340000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003860000000066410c370000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003870000000066410c3a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003880000000066410c3d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003890000000066410c400000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000038a0000000066410c430000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000038b0000000066410c460000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000038c0000000066410c490000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000038d0000000066410c4c0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000038e0000000066410c4f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000038f0000000066410c520000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003900000000066410c550000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003910000000066410c580000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003920000000066410c5b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003930000000066410c5e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003940000000066410c610000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003950000000066410c640000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003960000000066410c670000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003970000000066410c6a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003980000000066410c6d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003990000000066410c700000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000039a0000000066410c730000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000039b0000000066410c760000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000039c0000000066410c790000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000039d0000000066410c7c0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000039e0000000066410c7f0000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000039f0000000066410c820000000000000000000000000000000000000000000000000000000008f0d180000000000098968000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000015555b00000000000003a00000000066410c850000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003a10000000066410c880000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003a20000000066410c8b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003a30000000066410c8e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003a40000000066410c910000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003a50000000066410c940000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003a60000000066410c970000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003a70000000066410c9a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003a80000000066410c9e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003a90000000066410ca10000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003aa0000000066410ca40000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ab0000000066410ca70000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ac0000000066410caa0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ad0000000066410cad0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ae0000000066410cb00000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003af0000000066410cb30000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003b00000000066410cb60000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003b10000000066410cb90000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003b20000000066410cbc0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003b30000000066410cbf0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003b40000000066410cc20000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003b50000000066410cc50000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003b60000000066410cc80000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003b70000000066410ccb0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003b80000000066410cce0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003b90000000066410cd10000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ba0000000066410cd40000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003bb0000000066410cd70000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003bc0000000066410cda0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003bd0000000066410cdd0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003be0000000066410ce00000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003bf0000000066410ce30000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003c00000000066410ce60000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003c10000000066410ce90000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003c20000000066410cec0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003c30000000066410cef0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003c40000000066410cf20000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003c50000000066410cf50000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003c60000000066410cf80000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003c70000000066410cfb0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003c80000000066410cfe0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003c90000000066410d010000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ca0000000066410d040000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003cb0000000066410d070000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003cc0000000066410d0b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003cd0000000066410d0e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ce0000000066410d110000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003cf0000000066410d140000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003d00000000066410d170000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003d10000000066410d1a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003d20000000066410d1d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003d30000000066410d200000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003d40000000066410d230000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003d50000000066410d260000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003d60000000066410d290000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003d70000000066410d2c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003d80000000066410d2f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003d90000000066410d320000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003da0000000066410d350000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003db0000000066410d380000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003dc0000000066410d3b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003dd0000000066410d3e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003de0000000066410d410000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003df0000000066410d440000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003e00000000066410d470000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003e10000000066410d4a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003e20000000066410d4d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003e30000000066410d500000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003e40000000066410d530000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003e50000000066410d560000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003e60000000066410d590000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003e70000000066410d5c0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003e80000000066410d5f0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003e90000000066410d620000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ea0000000066410d650000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003eb0000000066410d680000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ec0000000066410d6b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ed0000000066410d6e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ee0000000066410d710000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003ef0000000066410d740000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003f00000000066410d770000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003f10000000066410d7b0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003f20000000066410d7e0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003f30000000066410d810000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003f40000000066410d840000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003f50000000066410d870000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003f60000000066410d8a0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003f70000000066410d8d0000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003f80000000066410d900000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003f90000000066410d930000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000003fa0000000066410d960000000000000000000000000000000000000000000000000000000008f0d18000000000009896800001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x5", + "to": "0x475652655309fa7cb1397537bee9a7fbafdc11ca", + "transactionIndex": "0x0", + "value": "0x0", + "type": "0x3", + "accessList": [ + { + "address": "0x3d9a28f7692cb94740bb64f08cb5cd19aa5cd3dd", + "storageKeys": [] + } + ], + "chainId": "0x1b207", + "blobVersionedHashes": [ + "0x0138ec0ef36b96f09a9e0d1641acbccb7632ed91541049a3124b5fb0092aa5a9" + ], + "v": "0x0", + "r": "0x225ae50a31d44ef38e6e3bb4739718878d0a29dd591f7106ab5d17ff9761b5fc", + "s": "0x342bb7f264413342f17bfb62e97f080c4db525e723d89174567a6e35c8c02516", + "yParity": "0x0" +} diff --git a/rollup/rollup_sync_service/testdata/commit_batch_transaction.json b/rollup/rollup_sync_service/testdata/commit_batch_transaction.json deleted file mode 100644 index 60fbb16d09..0000000000 --- a/rollup/rollup_sync_service/testdata/commit_batch_transaction.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "calldata": "0x1325aca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000018a800000000000000000000000000000000000000000000000000000000000000059000000000000004694000000000000000000000000000725186d74e28d3de9082c4dc34a2c243d4bcc772404b3a6d6e4fa4c6036d01acacc7adf2fe7745a5317950129bdc5da5ddb535ee34d03da817d41d5f6d65a2e918fb1000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000008460000000000000000000000000000000000000000000000000000000000000c480000000000000000000000000000000000000000000000000000000000000de40000000000000000000000000000000000000000000000000000000000000f6200000000000000000000000000000000000000000000000000000000000013e6000000000000000000000000000000000000000000000000000000000000046d80800000000000520310000000064ef32be000000000000000000000000000000000000000000000000000000000000000000000000007a12000003000000000000000520320000000064ef32c1000000000000000000000000000000000000000000000000000000000000000000000000007a12000004000000000000000520330000000064ef32c4000000000000000000000000000000000000000000000000000000000000000000000000007a12000001000000000000000520340000000064ef32c7000000000000000000000000000000000000000000000000000000000000000000000000007a12000003000000000000000520350000000064ef32ca000000000000000000000000000000000000000000000000000000000000000000000000007a12000001000000000000000520360000000064ef32cd000000000000000000000000000000000000000000000000000000000000000000000000007a12000001000000000000000520370000000064ef32d0000000000000000000000000000000000000000000000000000000000000000000000000007a12000006000000000000000520380000000064ef32d3000000000000000000000000000000000000000000000000000000000000000000000000007a120000060000000002d8f902d508850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8706651728988000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b4000000000000000000000000000000000000000000000000000665172898800000000000000000000000000000000000000000000000000007cb1b48688424970000000000000000000000000000000000000000000000000006133c6690e000000000000000000000000000000000000000000000000000076759eb3017228000000000000000000000000014aa56aa6ad893a8296c2443772b054c9157aa830000000000000000000000000000000000000000000000000000000064ef363800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a012fcc3e3caaea891fa4b2b5d4130c2bb3477e5f8d2d51679a80b0269cd2ec0d9a0345462a5ba083e1640daf5a5fe665d39630edf15fa871f74b321270242aeb76c000003f1f903ee2a850ba43b7400830521a694bbad0e891922a8a4a7e9c39d4cc0559117016fec80b90384ac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000a40c49ccbe0000000000000000000000000000000000000000000000000000000000008717000000000000000000000000000000000000000000000008642d8cc50b5377f400000000000000000000000000000000000000000000000004c26f9c0df588b3000000000000000000000000000000000000000000000e128204e60b2085ced80000000000000000000000000000000000000000000000000000000064ef33db000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084fc6f78650000000000000000000000000000000000000000000000000000000000008717000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c00000000000000000000000000000000000000000000000004c7951a55fb5d9d000000000000000000000000ece5858ff6ac4bae6af42b483e84f9655a23b652000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064df2ab5bb000000000000000000000000690000ef01dece82d837b5faa2719ae47b156697000000000000000000000000000000000000000000000e231f5cd8ee1615ba33000000000000000000000000ece5858ff6ac4bae6af42b483e84f9655a23b6520000000000000000000000000000000000000000000000000000000083104ec1a04256aa1ade44f69215193312b91d66f5f855d00ed3bc80c4b342bde7613121fba05d1aa1cf8679c10925ef6998439ff09a738089eec679de113a3ae0ebb2ece67d00000075f87301850ba43b740082ca909453000000000000000000000000000000000000048801aa535d3d0c000084d0e30db083104ec2a01123959614fdc45dca47b62493ca3a48e4b59246f45f5515cf747483099e5441a01527faefaabbb05b5c6c80dc438229194706403a23a8de8a12b8f41caef2b3a8000002d8f902d508850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8703e871b540c000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000003e871b540c00000000000000000000000000000000000000000000000000004c33b81baaa30a70000000000000000000000000000000000000000000000000003b66c05ca500000000000000000000000000000000000000000000000000004864554d7bb47c0000000000000000000000000bcfbf5511d5cb462c20ccd7c186cf9d5f00660ad0000000000000000000000000000000000000000000000000000000064ef363d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a0a3646d98cf66c85efb80c78022ecf568c79edd25af014313f61ddbc4933cf673a0288635040cedf157e5d42516b6435c0bc525892eafc110983a909382ef56aa9900000073f87106850ba43b740082ca9094530000000000000000000000000000000000000486c7cfb233750b84d0e30db083104ec1a0e770b755fc5afc41d3179bd796bf7c2b82eb0e705b2fa56c9e1a1df2d9bb9d9ca0670e965c91ed311809987e58deecd77dba3f7cd4cd7a4d5e8941fe333d58093100000072f870821bc9850ba43b74008261a894d90bf40ef846c3513ae474a9fa42bab5d137c44f87470de4df8200008083104ec1a0a0530f15a1eef30e49a193586f83e22c6bc31fad7a1d471b887c09b9b8fc6cd5a01c727ddc32579d8008a1ecee361b87016371e8a90b8c9f26de94c98afcabb227000000aff8ad18850ba43b7400830110dd94c72e15551717923a7a7a162f4771de96c6e6f54680b844095ea7b3000000000000000000000000ce87dbc5176cf0e37cf54741faf30e3e489e1799fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83104ec2a020e5953a44ec49b768ce4e22ca7a0339992b2c8eaf4a73771d35eb9d483521c2a030d47d3a3cc2859c8938019fbe60c49db837e998ab132287126a96e74081ce4e000000b7f8b50f850ba43b740083044d58949ad3c5617ecaa556d6e166787a97081907171230880429d069189e0000b844c7cdea370000000000000000000000000000000000000000000000000429d069189e0000000000000000000000000000000000000000000000000000000000000000000083104ec2a08c673d0f28dc28fb8c5c4b9f97b4ea7195f68ea5bcba4fa69afd90cff8d36899a032def9531076b4a7697e9ab3ddc744df4d215f85a6154181cfc45791a0cacab400000070f86e01850ba43b740082520894ccdf5f933a2caf4fff8090e2aa1c9d02b02ffd20872386f26fc100008083104ec1a0ae4fce22ffcaa2863e961279ee6f611c7a8b48c8adfcc5c74eb77fe7a145df1ea013205baa60b2fd1c0e58e61f6662f0b1f4abefb551f0c81d63367da51d4e4c2c00000219f9021615850ba43b74008302a45a9417afd0263d6909ba1f9a8eac697f76532365fb95880429d069189e0000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef33db00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000006de40ee67a0eb6dc0b1378733359f2064f15ce610000000000000000000000000000000000000000000000000429d069189e0000000000000000000000000000000000000000000000000005114dc5700c81b11a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec1a031b26bb7c4a128abab486f6ae88dc8d50e4d6e998950885a36cb6202cb75aff2a050b47b53f217ad05f9fa1ac37f870106b5c6aee5187750369784ee9e49a2cf6000000219f9021605850ba43b74008302f6f19417afd0263d6909ba1f9a8eac697f76532365fb9588016345785d8a0000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef33e700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000008c25caf7e3873d1d5b4973ff7e13af004d7c98cc000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000001b080340166d4252c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec1a0ded58c0fd58331b26c5da9348242873b68806f91762e7777bfa305b1e2eaa801a076ae942a3e8c92b111225b5caf5dd03867b70ff89cc6ca44568d857cbf57fe4b000000aef8ac08850cce41660082c0a594d9692f1748afee00face2da35242417dd05a861580b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec0000000000000000000000000000000000000000000000008ac7230489e8000083104ec1a080d341f51667bdb43292b6cf129c82de0c4a9af8087d8efa1a38931ea0bc4c81a02b101f84ad1c3c7cb15b8fc29b17b5e1408e1d438e71f4d551c7b91b92536a13000000aef8ac08850cce41660082c0a594d9692f1748afee00face2da35242417dd05a861580b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec0000000000000000000000000000000000000000000000008ac7230489e8000083104ec2a0b7a31191d83054810613ce172e8f525c9219d0e26da593f98b4fc1cc31126161a019d3f6f15974096de7d45f134df6894e356f1f6e707835d4aae5439fa18af850000000d2f8d080850ba43b74008302ac328080b87b6066806015600039303360006000a2806000f350fe6000803560e01c60008114602e5760018114603a5760028114604657600381146052576101008114605e576063565b634cfc9f2d8283a16063565b635961ec688283a16063565b633f85c0e98283a16063565b636f4c5fd58283a16063565b308283a15b505083104ec2a087b9ab5bc2ae347870503ac3e97b123978db81aa99890101576a09fb1307e4c8a077f695e4c96ac0b6906df1b9bb86ce6dc37895c894acf755f0cc1b7fb6afa777000000d2f8d080850ba43b740083024f8e8080b87b6066806015600039303360006000a2806000f350fe6000803560e01c60008114602e5760018114603a5760028114604657600381146052576101008114605e576063565b632fb3c6c08283a16063565b63d1bb63188283a16063565b6338d8f8878283a16063565b6357c94dd38283a16063565b308283a15b505083104ec1a0a4c7cadb3a0cc42e0e95ccb8aa5dcac6e8801c4e88072ca626c80ffc2f531bdca0208a871501062b0eb1b2319c152d079a63050907fdf4ec4cabb4f541dd5b6aa7000001b1f901ae05850ba43b74008304faab943687ee3fb77c299e287d7a7fd4467623a4e49c4c80b90144ded9382a000000000000000000000000690000ef01dece82d837b5faa2719ae47b15669700000000000000000000000000000000000000000000000000ff68ff7bf0f9a00000000000000000000000000000000000000000000000015a7df7243317341e0000000000000000000000000000000000000000000000000000c2c65aaf92f60000000000000000000000008af20afecf5f4ee4fdab4c2349d764ed06f917280000000000000000000000000000000000000000000000000000000064ef377e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cb8365bb8fd8d9b81f468552ffd58f2a792be0997bac009c5b298abce7c6ce3f66bd0e72665dee544ed9ed24390a4d92c093e679c54f318ff633de0ffee3400d983104ec2a09c0f62d65bb3e97b1ccdba64a8492f820b65575f7191ad7073dc193b47fa3ba4a05d7c3ae98c872a87b082e45fc270df5c570d75e8a1e285aefc4f6fc34db39c12000000b7f8b507850ba43b7400830433c3949ad3c5617ecaa556d6e166787a970819071712308802c68af0bb140000b844c7cdea3700000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000000000000000000000000000000000000000000083104ec2a0b704d013792e65c071df7661a3c84713ae2ddb540f2d3772017a0efd22ae832ca0481081b54bff42285edbc6b1d0e504c3fb0c027621085f8df6814c0713315c6f000000aff8ad04850ba43b7400830119d794672f9e2237b1d6236654d181afc373e2bfb78fdb80b844a1448194000000000000000000000000f77b38ecf43ccc2bd1e2b0d626f2167162b008fc000000000000000000000000000000000000000000000000000000000000000183104ec2a043cb2df1be414967d7c14f60610fc22b95affe01d9254484a44c538df30d2e18a057da38986028b1679028efd7d76f032672dc69eb4878000eabf4eb3f2cf58bc60000008ef88c10850ba43b74008301687994ff355fc2b76c66323a8ae5e5b2df4c9c4fd1c89180a4a0712d68000000000000000000000000000000000000000000000000000000000000000383104ec2a05598114c4003815425512d35f2af917fe119c8919daf9e5192d9f174dc8d4c4aa008ebcd084b8a22dfaf2fac5ffc1d49569f05df45d8ed0ba5f34cb39a0acee257000000b6f8b480850ba43b740083044d58949ad3c5617ecaa556d6e166787a9708190717123087470de4df820000b844c7cdea3700000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000000083104ec2a02b037835b9488ab2a728c9267eab23b575634a74be26561a1a515541e4b92753a038cff403be500a71e9488189e15380534775816fb7a98f2a8504a262f52c95840000008df88b02850ba43b740082a9e6944ed8bb0cd040e7bb9fed7e0939fdc592811b2a7d80a43fb5c1cb00000000000000000000000000000000000000000000000000000000000000c683104ec2a04cc23af1ba840f61b2370c1211ae560df39c057cd698059dba7880b467c5bdb1a01c23bacb7a238d7387d1a7b04a32ae1bc6ae4ef3cc95072490a7c8726a99255e00002652f9264f02850ba43b7400831a3ea08080b925fa60806040523480156200001157600080fd5b506040516200251a3803806200251a8339818101604052810190620000379190620004ad565b828281600390816200004a919062000788565b5080600490816200005c919062000788565b5050506200007f620000736200009a60201b60201c565b620000a260201b60201c565b6200009133826200016860201b60201c565b5050506200098a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d190620008d0565b60405180910390fd5b620001ee60008383620002d560201b60201c565b806002600082825462000202919062000921565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002b591906200096d565b60405180910390a3620002d160008383620002da60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034882620002fd565b810181811067ffffffffffffffff821117156200036a57620003696200030e565b5b80604052505050565b60006200037f620002df565b90506200038d82826200033d565b919050565b600067ffffffffffffffff821115620003b057620003af6200030e565b5b620003bb82620002fd565b9050602081019050919050565b60005b83811015620003e8578082015181840152602081019050620003cb565b60008484015250505050565b60006200040b620004058462000392565b62000373565b9050828152602081018484840111156200042a5762000429620002f8565b5b62000437848285620003c8565b509392505050565b600082601f830112620004575762000456620002f3565b5b815162000469848260208601620003f4565b91505092915050565b6000819050919050565b620004878162000472565b81146200049357600080fd5b50565b600081519050620004a7816200047c565b92915050565b600080600060608486031215620004c957620004c8620002e9565b5b600084015167ffffffffffffffff811115620004ea57620004e9620002ee565b5b620004f8868287016200043f565b935050602084015167ffffffffffffffff8111156200051c576200051b620002ee565b5b6200052a868287016200043f565b92505060406200053d8682870162000496565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059a57607f821691505b602082108103620005b057620005af62000552565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200061a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005db565b620006268683620005db565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000669620006636200065d8462000472565b6200063e565b62000472565b9050919050565b6000819050919050565b620006858362000648565b6200069d620006948262000670565b848454620005e8565b825550505050565b600090565b620006b4620006a5565b620006c18184846200067a565b505050565b5b81811015620006e957620006dd600082620006aa565b600181019050620006c7565b5050565b601f82111562000738576200070281620005b6565b6200070d84620005cb565b810160208510156200071d578190505b620007356200072c85620005cb565b830182620006c6565b50505b505050565b600082821c905092915050565b60006200075d600019846008026200073d565b1980831691505092915050565b60006200077883836200074a565b9150826002028217905092915050565b620007938262000547565b67ffffffffffffffff811115620007af57620007ae6200030e565b5b620007bb825462000581565b620007c8828285620006ed565b600060209050601f831160018114620008005760008415620007eb578287015190505b620007f785826200076a565b86555062000867565b601f1984166200081086620005b6565b60005b828110156200083a5784890151825560018201915060208501945060208101905062000813565b868310156200085a578489015162000856601f8916826200074a565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620008b8601f836200086f565b9150620008c58262000880565b602082019050919050565b60006020820190508181036000830152620008eb81620008a9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200092e8262000472565b91506200093b8362000472565b9250828201905080821115620009565762000955620008f2565b5b92915050565b620009678162000472565b82525050565b60006020820190506200098460008301846200095c565b92915050565b611b80806200099a6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102a6578063a457c2d7146102c4578063a9059cbb146102f4578063dd62ed3e14610324578063f2fde38b146103545761010b565b806370a0823114610232578063715018a61461026257806379cc67901461026c5780638da5cb5b146102885761010b565b8063313ce567116100de578063313ce567146101ac57806339509351146101ca57806340c10f19146101fa57806342966c68146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610370565b6040516101259190611178565b60405180910390f35b61014860048036038101906101439190611233565b610402565b604051610155919061128e565b60405180910390f35b610166610425565b60405161017391906112b8565b60405180910390f35b610196600480360381019061019191906112d3565b61042f565b6040516101a3919061128e565b60405180910390f35b6101b461045e565b6040516101c19190611342565b60405180910390f35b6101e460048036038101906101df9190611233565b610467565b6040516101f1919061128e565b60405180910390f35b610214600480360381019061020f9190611233565b61049e565b005b610230600480360381019061022b919061135d565b6104b4565b005b61024c6004803603810190610247919061138a565b6104c8565b60405161025991906112b8565b60405180910390f35b61026a610510565b005b61028660048036038101906102819190611233565b610524565b005b610290610544565b60405161029d91906113c6565b60405180910390f35b6102ae61056e565b6040516102bb9190611178565b60405180910390f35b6102de60048036038101906102d99190611233565b610600565b6040516102eb919061128e565b60405180910390f35b61030e60048036038101906103099190611233565b610677565b60405161031b919061128e565b60405180910390f35b61033e600480360381019061033991906113e1565b61069a565b60405161034b91906112b8565b60405180910390f35b61036e6004803603810190610369919061138a565b610721565b005b60606003805461037f90611450565b80601f01602080910402602001604051908101604052809291908181526020018280546103ab90611450565b80156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b5050505050905090565b60008061040d6107a4565b905061041a8185856107ac565b600191505092915050565b6000600254905090565b60008061043a6107a4565b9050610447858285610975565b610452858585610a01565b60019150509392505050565b60006012905090565b6000806104726107a4565b9050610493818585610484858961069a565b61048e91906114b0565b6107ac565b600191505092915050565b6104a6610c77565b6104b08282610cf5565b5050565b6104c56104bf6107a4565b82610e4b565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610518610c77565b6105226000611018565b565b610536826105306107a4565b83610975565b6105408282610e4b565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461057d90611450565b80601f01602080910402602001604051908101604052809291908181526020018280546105a990611450565b80156105f65780601f106105cb576101008083540402835291602001916105f6565b820191906000526020600020905b8154815290600101906020018083116105d957829003601f168201915b5050505050905090565b60008061060b6107a4565b90506000610619828661069a565b90508381101561065e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065590611556565b60405180910390fd5b61066b82868684036107ac565b60019250505092915050565b6000806106826107a4565b905061068f818585610a01565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610729610c77565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f906115e8565b60405180910390fd5b6107a181611018565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361081b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108129061167a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361088a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108819061170c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161096891906112b8565b60405180910390a3505050565b6000610981848461069a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109fb57818110156109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490611778565b60405180910390fd5b6109fa84848484036107ac565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a679061180a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad69061189c565b60405180910390fd5b610aea8383836110de565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b679061192e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c5e91906112b8565b60405180910390a3610c718484846110e3565b50505050565b610c7f6107a4565b73ffffffffffffffffffffffffffffffffffffffff16610c9d610544565b73ffffffffffffffffffffffffffffffffffffffff1614610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea9061199a565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90611a06565b60405180910390fd5b610d70600083836110de565b8060026000828254610d8291906114b0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e3391906112b8565b60405180910390a3610e47600083836110e3565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190611a98565b60405180910390fd5b610ec6826000836110de565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390611b2a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fff91906112b8565b60405180910390a3611013836000846110e3565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611122578082015181840152602081019050611107565b60008484015250505050565b6000601f19601f8301169050919050565b600061114a826110e8565b61115481856110f3565b9350611164818560208601611104565b61116d8161112e565b840191505092915050565b60006020820190508181036000830152611192818461113f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111ca8261119f565b9050919050565b6111da816111bf565b81146111e557600080fd5b50565b6000813590506111f7816111d1565b92915050565b6000819050919050565b611210816111fd565b811461121b57600080fd5b50565b60008135905061122d81611207565b92915050565b6000806040838503121561124a5761124961119a565b5b6000611258858286016111e8565b92505060206112698582860161121e565b9150509250929050565b60008115159050919050565b61128881611273565b82525050565b60006020820190506112a3600083018461127f565b92915050565b6112b2816111fd565b82525050565b60006020820190506112cd60008301846112a9565b92915050565b6000806000606084860312156112ec576112eb61119a565b5b60006112fa868287016111e8565b935050602061130b868287016111e8565b925050604061131c8682870161121e565b9150509250925092565b600060ff82169050919050565b61133c81611326565b82525050565b60006020820190506113576000830184611333565b92915050565b6000602082840312156113735761137261119a565b5b60006113818482850161121e565b91505092915050565b6000602082840312156113a05761139f61119a565b5b60006113ae848285016111e8565b91505092915050565b6113c0816111bf565b82525050565b60006020820190506113db60008301846113b7565b92915050565b600080604083850312156113f8576113f761119a565b5b6000611406858286016111e8565b9250506020611417858286016111e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061146857607f821691505b60208210810361147b5761147a611421565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114bb826111fd565b91506114c6836111fd565b92508282019050808211156114de576114dd611481565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006115406025836110f3565b915061154b826114e4565b604082019050919050565b6000602082019050818103600083015261156f81611533565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006115d26026836110f3565b91506115dd82611576565b604082019050919050565b60006020820190508181036000830152611601816115c5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006116646024836110f3565b915061166f82611608565b604082019050919050565b6000602082019050818103600083015261169381611657565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006116f66022836110f3565b91506117018261169a565b604082019050919050565b60006020820190508181036000830152611725816116e9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611762601d836110f3565b915061176d8261172c565b602082019050919050565b6000602082019050818103600083015261179181611755565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006117f46025836110f3565b91506117ff82611798565b604082019050919050565b60006020820190508181036000830152611823816117e7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006118866023836110f3565b91506118918261182a565b604082019050919050565b600060208201905081810360008301526118b581611879565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006119186026836110f3565b9150611923826118bc565b604082019050919050565b600060208201905081810360008301526119478161190b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119846020836110f3565b915061198f8261194e565b602082019050919050565b600060208201905081810360008301526119b381611977565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006119f0601f836110f3565b91506119fb826119ba565b602082019050919050565b60006020820190508181036000830152611a1f816119e3565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a826021836110f3565b9150611a8d82611a26565b604082019050919050565b60006020820190508181036000830152611ab181611a75565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611b146022836110f3565b9150611b1f82611ab8565b604082019050919050565b60006020820190508181036000830152611b4381611b07565b905091905056fea26469706673582212204df6f0de305c90d5e7f095ff995f5884e7b51d307b600671a909171759701b0f64736f6c63430008120033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000115c000000000000000000000000000000000000000000000000000000000000000465656577000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002323200000000000000000000000000000000000000000000000000000000000083104ec29fe7a308a2e7365e476d40bcba87d70bdcd3f390b76a21530fbda4620dc2617ca002adcc34d12199c22c778c02445cac6b9416aab00bfd365149e786c0cbf80e3f0000008df88b07850ba43b740082a71b94530000000000000000000000000000000000000480a42e1a7d4d0000000000000000000000000000000000000000000000000000c7cfb233750b83104ec2a0d0bafb4cd5442c56b072a688c48315bc09fdfb6684704449020338ea5e46319ea06bbe8cf22c282cec7668d740da3092020964e159866696514cfe91a95df1c95400000218f902152b850ba43b74008302b72c9417afd0263d6909ba1f9a8eac697f76532365fb9588025bf6196bd10000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef33ea00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000ece5858ff6ac4bae6af42b483e84f9655a23b652000000000000000000000000000000000000000000000000025bf6196bd10000000000000000000000000000000000000000000000000002df3642efb456b17700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec1a0bae91ce5dc19445136098834317d1990b512e04bc17b4d673764bb18a9890c609fbfcf09c31bc6224ab8248546afbd0f46235bbb2bc0bb7edbeb899b3356ff9f000002b1f902ae4c850ba43b74008303efe89417afd0263d6909ba1f9a8eac697f76532365fb9580b902445ae401dc0000000000000000000000000000000000000000000000000000000064ef33d5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000ffd2ece82f7959ae184d10fe17865d27b4f0fb94000000000000000000000000530000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000008f0d1800000000000000000000000000000000000000000000000000142731bbbe7afff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c0000000000000000000000000000000000000000000000000142731bbbe7afff000000000000000000000000b7a973b36d1c39e5ce935f611613fc0bb58f86580000000000000000000000000000000000000000000000000000000083104ec2a014b20ed2c85a5c1a1b48b47534623db622cf4c6b9fa237603005f3c5e1f2adaca0382b0b2d098a0f7d4f19635d7a2dec55e887eb9611a3efac67fa5f304ca4f27e0000000000000000000000000000000000000000000000000000000000000000000000000000249d0500000000000520390000000064ef32d6000000000000000000000000000000000000000000000000000000000000000000000000007a120000040000000000000005203a0000000064ef32d9000000000000000000000000000000000000000000000000000000000000000000000000007a120000070000000000000005203b0000000064ef32dc000000000000000000000000000000000000000000000000000000000000000000000000007a120000030000000000000005203c0000000064ef32df000000000000000000000000000000000000000000000000000000000000000000000000007a120000040000000000000005203d0000000064ef32e2000000000000000000000000000000000000000000000000000000000000000000000000007a120000020000000002d8f902d509850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8704f94ae6af8000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000004f94ae6af8000000000000000000000000000000000000000000000000000060eccdd5c1d16390000000000000000000000000000000000000000000000000004b9a0c18d200000000000000000000000000000000000000000000000000005c1429f1782084000000000000000000000000093b988e7d596005bc71b4e09ffbe8175f11c894b0000000000000000000000000000000000000000000000000000000064ef365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a0a086095355da2b87258e33e428ebdc39bb3b5d1f60f96756aa5f84872645ecd5a0304759b9546ac3343a12db1a01bcbf44a85e1ac5ceb08511de72fbe5d292a4e4000000b6f8b403850ba43b7400830433c3949ad3c5617ecaa556d6e166787a9708190717123087038d7ea4c68000b844c7cdea3700000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000083104ec2a012074706a507210139a157b5e54f4a3df533e527059b112d676a5ba27bda8611a04565c4c90183d9f8071ce19c9b30c5e017fed20d6e2203bc457511eb7a008691000002d8f902d503850ba43b740083019f7694bbad0e891922a8a4a7e9c39d4cc0559117016fec8711b60f91caf056b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000011b60f91caf05600000000000000000000000000000000000000000000000015a6404b8c9b705a0000000000000000000000000000000000000000000000000011aac49b704653000000000000000000000000000000000000000000000000159860cf3886c23c000000000000000000000000342f6796d7b9d757e9355863c3dff3c5062158700000000000000000000000000000000000000000000000000000000064ef33de00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a045d119de9f101892b7c34b06b014cb764f032db0c51b0575e5b66ad3ff81143ca02cf20dcc2f56cff75867f655f92e0c044a416e9b40141a4bc757eb00e95cd0c100000218f9021580850ba43b740083026a729417afd0263d6909ba1f9a8eac697f76532365fb958717aeb11212a000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef33de00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000cca7589b2742e57ff55d04e4f6a96aaa5879a13d0000000000000000000000000000000000000000000000000017aeb11212a0000000000000000000000000000000000000000000000000001cd522d257fab3c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec2a0b75d90faed4ac37b661a26353ad653590ffca47ca3e09ded38f23df0fcec9f3da0563ce4e83c2b3041bc7fd3d87ac38b99a52e2e7ee7bc25f2520564a3c13e3a04000002d8f902d509850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8704f94ae6af8000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000004f94ae6af8000000000000000000000000000000000000000000000000000060e6598a3d0dd700000000000000000000000000000000000000000000000000004b9a0c18d200000000000000000000000000000000000000000000000000005c0e08435399f400000000000000000000000006c8da65e9d173fc186d7ff10020db95e4d58d2880000000000000000000000000000000000000000000000000000000064ef365500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a0f78b8fdfae61e082f30cbdf6e3dec9f6af8fcad01a666fdf2ce27546b4146562a0133fefdfd1c42cac10ec4541720d5a59608e45413044668e9f12ef7f51d079f1000002b1f902ae07850bdfd63e008304a2b69417afd0263d6909ba1f9a8eac697f76532365fb9580b902445ae401dc0000000000000000000000000000000000000000000000000000000064ef59e2000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000d9692f1748afee00face2da35242417dd05a8615000000000000000000000000530000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004bbbf918d40111000000000000000000000000000000000000000000000000000047f346a7119d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c000000000000000000000000000000000000000000000000000047f346a7119d000000000000000000000000260ca22885185b92bbcdac78dbb526b5ee6f6e7f0000000000000000000000000000000000000000000000000000000083104ec1a002e2f6a82286dcf705b20d1bb72d29a1fe6484a97f5ec69737a0c26a3b907448a01634a4a321d44fe0a7f517881a441fcb9f54bcc43bddf0d9200cc359a5a4100b00000072f8708204b3850ba43b7400825208947cb2b6cb6aa9bbdc4f8862f7b5b77050c580de9187038d7ea4c680008083104ec2a0b828bab67f24182d249ec2f61bbfbee7e86bbde28337f4b07b982d9b2de9b3c6a04ce458d587c4d04c307ad9d1e2b4731552e35986704601077e0db6a20ac4158b000000b6f8b403850ba43b7400830433c3949ad3c5617ecaa556d6e166787a9708190717123087b1a2bc2ec50000b844c7cdea3700000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000000000000000000083104ec1a0d7994ec8b85029473ce31d18495b13618be7b5544a7a79e17812c771a7e55fe0a06c425c09559902ca0997319461d2272fde2364c7209b34cc81a0287150c33d6500000072f870821bca850ba43b74008261a89456e45dd03c9edf80631a725554c9a8ac9970579087470de4df8200008083104ec2a068a1c6c91f27a303feb09e625f8deb92e53775d0c7cf71785b710a9c045615fba012d21972578604f795c90603516a25cec0a6e867528f068846c4666ab0bdecc600000172f9016f8182850ba43b7400830289fb943687ee3fb77c299e287d7a7fd4467623a4e49c4c80b9010418cbafe5000000000000000000000000000000000000000000000cb49b44ba602d80000000000000000000000000000000000000000000000000000005cfb9fbd4c04d1c00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000058d089cb9d224433e94060a33b3fecccc30e4ea60000000000000000000000000000000000000000000000000000000064ef377c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000690000ef01dece82d837b5faa2719ae47b156697000000000000000000000000530000000000000000000000000000000000000483104ec2a06435ba082446e56238936cdae25fb233a594dfc0178eee820a0315dfdb1d7f2fa01019d578b1581255f4082797fad42f4d858bce636339070199d1b5a9b7c95f2000000130f9012d19850ba43b74008302d58b94ce87dbc5176cf0e37cf54741faf30e3e489e179980b8c48f6bdeaa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000ebec21ee1da40000000000000000000000000000000000000000000000000000eb6d20760f03ea7b0000000000000000000000009ef3c073fbb1c77a065b76e92ae9d0d2a28cb6db0000000000000000000000000000000000000000000000000000000064ef33fa83104ec1a05dfadafbfbd7fc8ff2f6f926326fe71214cbc1be14df4cb6ba1e494d38cc129aa008a57480844c943e7032dbf9b98d2606711f7efb08bd051b542c9c7a66f9dffb000000aef8ac06850ba43b7400827ced94d9692f1748afee00face2da35242417dd05a861580b844095ea7b300000000000000000000000017afd0263d6909ba1f9a8eac697f76532365fb95000000000000000000000000000000000000000000000001b0bc0acfc83201a983104ec1a0e4d285b3912a407bb6e2a944a2e04823f95f7b3f45b7a34eb138748e31b68ef0a00a4c38390af30600ed51ff185deed774640bf5c9af926e5e452b83f5430b9b68000003f1f903ee23850ba43b740083051e5494bbad0e891922a8a4a7e9c39d4cc0559117016fec80b90384ac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000a40c49ccbe000000000000000000000000000000000000000000000000000000000000a2f000000000000000000000000000000000000000000000000017f9828a2e5c45df000000000000000000000000000000000000000000000000015169a1f8ffcea90000000000000000000000000000000000000000000000019ecf9e08edefec260000000000000000000000000000000000000000000000000000000064ef33cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084fc6f7865000000000000000000000000000000000000000000000000000000000000a2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c0000000000000000000000000000000000000000000000000156814b3ae51358000000000000000000000000547580a7a72fe75268a1315e601bddac5a9150af000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064df2ab5bb000000000000000000000000d9692f1748afee00face2da35242417dd05a8615000000000000000000000000000000000000000000000001a64c0a7a41f0d4b8000000000000000000000000547580a7a72fe75268a1315e601bddac5a9150af0000000000000000000000000000000000000000000000000000000083104ec1a00c9f0cccf1a84b6122f02d1151341873dbc8e85c0ee9d9540421086b557a1bafa03d20a9059ef463f16c89265575e613265158e3b3f2a604cdcb9957eed29d0ff2000000b1f8af820a46850ba43b740083013dc1946f1da9076f36000d5f9decdebd52402b1410b2c580b844468021b7000000000000000000000000e3f26a65d57548bb06e2de1ff24e881b41b583eb000000000000000000000000000000000000000000000000000000000000000083104ec1a09129a7f06182c9cb262365d9a96ffe6999c943867e7815f33aa20d133556cbcaa021116e937b78547580911c8110d9fcd5dea43731c6ec55035b2fa6792e867b38000000aef8ac2c850ba43b74008266d494b473160c57c7b2d228ba5a5f3c76ebc2e9668c6580b844095ea7b3000000000000000000000000837a9f1803d84a341a343f05be9705dec4b81f930000000000000000000000000000000000000000000000000b1d5f3c090b9eaf83104ec1a0624ba2c183727e9ca7fc2c3a8be3d9a462236667cd3c31e1d71b719b74606e54a034392e6224d768b41819a00fc67cdbe38b01eafd5577c7be6aa7a9c48d59061a000000aef8ac04850ba43b740082b4c094530000000000000000000000000000000000000480b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec000000000000000000000000000000000000000000000000008e1bc9bf04000083104ec2a0a27b079622f4398d66686f9b8a909c301b5880a6bd18ceb121ebc1d4b2cc7125a036c74beef024feb50f27ecfa7d0ca0157f59d3624300d76309d1e6d0de433c4a000003f1f903ee06850ba43b74008305292194bbad0e891922a8a4a7e9c39d4cc0559117016fec80b90384ac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000a40c49ccbe0000000000000000000000000000000000000000000000000000000000006ffb00000000000000000000000000000000000000000000000002be0f04c7b462bb00000000000000000000000000000000000000000000000000104fcefa78b54e0000000000000000000000000000000000000000000000002cb2d85a09455baf0000000000000000000000000000000000000000000000000000000064ef33f9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084fc6f78650000000000000000000000000000000000000000000000000000000000006ffb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c0000000000000000000000000000000000000000000000000011554e0cda318f000000000000000000000000548453631f70facef4e09697e0d2e5f4e149db73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064df2ab5bb000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000002e1853a465ed9f51000000000000000000000000548453631f70facef4e09697e0d2e5f4e149db730000000000000000000000000000000000000000000000000000000083104ec1a0b039e7ee7c3cac62dbbad4334e9115630ea77480e49c77e66ac65fed4361ac83a00adf32f7d6e5c5d9ccf4fc694b793bdc693884de263e8355794805cd89a499c5000002b3f902b0820f22850ba43b74008302e6fb94cbbc5da52ea2728279560dca8f4ec08d5f82998580b902446f888fa10000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000e0793d76b8a0c82d19f5829015799705b1c665cc955adf1d3e5c658525f4ee77cc1675a428039c82c3a8ffe6f3a7cb1621230c08444566077459300d8ee2403de2000000000000000000000000000000000000000000000000000000000000a427000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7363726f6c6c2d7365706f6c69610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000041402a8f05776a363cfbfa77f62c320234b0dea18eba182e5570609c87645a159636f686f7eb82f9b5c0419396a161b6403d4b01bc9a7191509974c1cb56a0ce8a1b0000000000000000000000000000000000000000000000000000000000000083104ec2a096da96cdde4dad6e5495fb73032063a5cbd8b521a4d136ae6db61237a48a2b25a03b12b04491b2dacbe8602d223217a0dfa0efd7f2f99c1808413fedf14fa166b5000002d8f902d506850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec87060a24181e4000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b400000000000000000000000000000000000000000000000000060a24181e4000000000000000000000000000000000000000000000000000075a9fd3e2ed5e9e0000000000000000000000000000000000000000000000000005bcd57d4ff00000000000000000000000000000000000000000000000000006fc7e3c7dfb19c0000000000000000000000000fd0e0c11bd40d7052cb86a76d6c645787dbfda520000000000000000000000000000000000000000000000000000000064ef365c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a0a17ccfa20b473ef89f96806bfcda65828ba5f3380371701a53f206c2c5cbbf7ca036e99a208d4f49ed094d8dcfcfefe3e2736b942020f20c493c477ce39957fb9e000000b5f8b345850ba43b7400830433c3949ad3c5617ecaa556d6e166787a97081907171230865af3107a4000b844c7cdea3700000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000000000000000000000000000000000000000000083104ec2a0ae0ae83ce8bf3f2eb648958a360dac3cf734467d0476b230ace81140520602fda014a2c94571cc914ef7db33df4f98e80f55ca155c869b507ac31602b043c96e4c000000000000000000000000000000000000000000000000000000000000000000176105000000000005203e0000000064ef32e5000000000000000000000000000000000000000000000000000000000000000000000000007a120000030000000000000005203f0000000064ef32e8000000000000000000000000000000000000000000000000000000000000000000000000007a12000005000000000000000520400000000064ef32eb000000000000000000000000000000000000000000000000000000000000000000000000007a12000001000000000000000520410000000064ef32ee000000000000000000000000000000000000000000000000000000000000000000000000007a12000002000000000000000520420000000064ef32f1000000000000000000000000000000000000000000000000000000000000000000000000007a120000030000000002d8f902d505850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec87038d7ea4c68000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000004536d3a18df52c3000000000000000000000000000000000000000000000000000360051c896000000000000000000000000000000000000000000000000000041c0e2a646dc1c0000000000000000000000000c47f3b8497d221999b9dc540ad5f21fa581e4f9a0000000000000000000000000000000000000000000000000000000064ef366200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a0108868a8dcb350044b75a6e3cffcf4acf3ba0f7a53d718c9865453bd6d455242a074c280fb40b57efa2e08b50b55aeeb30abf6e4e496e330643d7a69be3e3b11af00000171f9016e0c850ba43b7400830557309448914c788295b5db23af2b5f0b3be775c4ea944080b9010402c205f00000000000000000000000002c9678042d52b97d27f2bd2947f7111d93f3dd0d000000000000000000000000000000000000000000000000000000001dcd6500000000000000000000000000b4518a802a1a42050c4e27bcec1e7ae15149170300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064ef40d1000000000000000000000000000000000000000000000000000000000000001b2f5536d4f75c9c2c64630ede2158bda62aa96c17e7d3594e96405cc85aa8ded14cd7b67de417954cb2e9bb9dd491b863b5348e7f12d6bd85e34a65c5f9e5112283104ec2a00c8a89588e9949f419cc17ccb14fde31899a6c187c170a13bda53135bd6467b6a035ba5db429b2b45513e5fe3a4949044ea3641f1f1d7ac0a3522de6a74c6a025a000000aef8ac05850ba43b7400827ced94d9692f1748afee00face2da35242417dd05a861580b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec0000000000000000000000000000000000000000000000015a6d1a4a4139eb4e83104ec2a0d259cf5a8c5a9dea052c712740145069584add7ef738210f3fa0676ddc247c72a0345918f63e56cfdacb52eb6276e8fcb0ec621a0edeee754afefc21a5316eebd0000000b7f8b5038512a05f2000830433c3949ad3c5617ecaa556d6e166787a9708190717123088016345785d8a0000b844c7cdea37000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000000083104ec2a093cf39127cdb9019de1ef47f2c02d3a19dd39cba39149fdc02e81048b1e97a83a02caceb646a098c4c8877a3c6796ecdf9a8fc540e28a39f6306ffcb9df566928700000070f86e02850ba43b740082520894ccdf5f933a2caf4fff8090e2aa1c9d02b02ffd20872386f26fc100008083104ec2a09269f9104aece2de5fabc1bf08eb7607d5f6535d3a867fb0878d1aac36e123fda03538cffc4a7ce687420b3fd3f66a8509dcff2e0b0cd82533560c9a40a87a993300000072f870821bcb850ba43b74008261a8944c66467e6e84ff10c9bbf82059912fee08a36df787470de4df8200008083104ec1a0af1394538c0400fae2b8e24ce69d61f1e9dd44691de695dbb7a16964cce03eeba06d80e279c0915db15b71e1816500713ab9e40e65d2b76da2a303a9c27c61a00b000000aef8ac2c850ba43b740082973494d9692f1748afee00face2da35242417dd05a861580b844095ea7b300000000000000000000000017afd0263d6909ba1f9a8eac697f76532365fb95ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec2a0b74f8f74c67140fb7729de8b3460595d5737fb74077cb16cc78504fb71bf6ed6a066b8acce7c293676fa5d5b78abcf7cf702ac3a2dcb044f1d58ca09be07c96fe600000296f902931984773594008304288e9477132b63429718db2b6ad8d942ee13a198f6ab498609184e72a000b90224ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000001fa4a500f0b2d24a1b94c052ff058d0d745589d6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000354650dab54e0a0000000000000000000000000000000000000000000000000000000064ef3531000000000000000000000000000000000000000000000000000000000000002bfa6a407c4c49ea1d46569c1a4bcf71c3437be54c0007d0551197e6350936976dffb66b2c3bb15ddb72325000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a0ff31d88db9d3508a2edb68cf07c7a3ec428c2bb64142613a65476bb339d32abda046d9a11eac74cf01b09f7671803ad2ca68a1397fc6dc4d75c0a89e1ada09db62000002b1f902ae07850ba43b74008303005d9417afd0263d6909ba1f9a8eac697f76532365fb9580b902445ae401dc0000000000000000000000000000000000000000000000000000000064ef3408000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000d9692f1748afee00face2da35242417dd05a8615000000000000000000000000530000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000001b0bc0acfc83201a9000000000000000000000000000000000000000000000000019ec7954e4708ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c000000000000000000000000000000000000000000000000019ec7954e4708ad0000000000000000000000008c25caf7e3873d1d5b4973ff7e13af004d7c98cc0000000000000000000000000000000000000000000000000000000083104ec2a05c79dc543118060bb7d36201807128a92a1f4a069f7f005ad2582de77047f197a03552f6704ebb42287958479dcccc7cda74e5eae56c412a5e6e154b20bb28ce6d000002d8f902d506850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec87071afd498d0000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b400000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000008a6da05235ad30c0000000000000000000000000000000000000000000000000006c00a3912c00000000000000000000000000000000000000000000000000008381beb47fcae80000000000000000000000000d93dd9937f90791afd47cf1818524cd2eff4ca760000000000000000000000000000000000000000000000000000000064ef366900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a094b6380d5c72b504c9ce332faee04f88684b6fe0817945f60457f1c29245807da06113c48a1a92a1256346cbe5a74717304aa65c0df0c3f73644710c5e17280c7a000002b1f902ae048506fc23ac008302cffc9417afd0263d6909ba1f9a8eac697f76532365fb9580b902445ae401dc0000000000000000000000000000000000000000000000000000000064ef33e7000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000d9692f1748afee00face2da35242417dd05a8615000000000000000000000000530000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000006125527c1fd8d7a8000000000000000000000000000000000000000000000000005d20aeec27d756000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c000000000000000000000000000000000000000000000000005d20aeec27d7560000000000000000000000006d67f0f1593b060cd2ee397b7b66f6bfa98c504d0000000000000000000000000000000000000000000000000000000083104ec2a07383bfa659c417a5adfd012677512ce1708601dcbae48dce450d0fb5694c17bba0376c8e73977be61476a29bd1c3757a2b8f2d22aa5216113d2cfe2e15440478d4000000aff8ad1a850ba43b7400830110dd94fa94da175be505b915187edc8ae2f62f4ccbf84880b844095ea7b3000000000000000000000000ce87dbc5176cf0e37cf54741faf30e3e489e1799fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83104ec2a074524c2a7c0b1248b132e2d91d0cf430d755131da7397fc30e1ddf622ec7bddda0333ceb0426f2613ff83d032d656202851675ab6d45dc0c0e45bcfa5637feefea0000008ef88c10850ba43b7400830113e79435d02cafb57424828e3c56a2e06d1fbd1d9d9d5e80a4a0712d68000000000000000000000000000000000000000000000000000000000000000183104ec1a04062167b29bb2bd12d3f1911d8ff64fe07755a03037d7dc94b5aa198ead497e8a0085acaa868e531917bee517ea987d5acdc20ada756c9b2e0e0dad89b8af07e04000002b1f902ae2d850ba43b7400830376ba9417afd0263d6909ba1f9a8eac697f76532365fb9580b902445ae401dc0000000000000000000000000000000000000000000000000000000064ef3414000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000d9692f1748afee00face2da35242417dd05a8615000000000000000000000000530000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000000531ab7f93975a7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c0000000000000000000000000000000000000000000000000531ab7f93975a7c000000000000000000000000ece5858ff6ac4bae6af42b483e84f9655a23b6520000000000000000000000000000000000000000000000000000000083104ec2a0956f3fbcb30cc21fb015edc82d08559d135f88171c13c8d728837ffc5b6e0708a05ff5398d5edfddae49824c34a3d1a00ac1bd3e14045234cc8598d9d28d01b9d9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fe80400000000000520430000000064ef32f4000000000000000000000000000000000000000000000000000000000000000000000000007a12000007000000000000000520440000000064ef32f7000000000000000000000000000000000000000000000000000000000000000000000000007a12000005000000000000000520450000000064ef32fa000000000000000000000000000000000000000000000000000000000000000000000000007a12000004000000000000000520460000000064ef32fd000000000000000000000000000000000000000000000000000000000000000000000000007a120000060000000002d8f902d507850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8704f94ae6af8000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000004f94ae6af8000000000000000000000000000000000000000000000000000060e6598a3eee1b30000000000000000000000000000000000000000000000000004b9a0c18d200000000000000000000000000000000000000000000000000005c0e08435562340000000000000000000000000196540b2697bb289b5825f3a8b0172182188c23e0000000000000000000000000000000000000000000000000000000064ef366f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a02b0058eb3eae76335fd0f5b3f51dec8550714f81292105c918d559f91ebd47f0a0316f757f6f93369afcd4da925c71b9f0dd4f4f4d9775aa82ebde9e0df8367438000000aef8ac04850ba43b740082c0b194d9692f1748afee00face2da35242417dd05a861580b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec000000000000000000000000000000000000000000000001236efcbcbb34000083104ec2a0b797596263e28bdd397c087cf5a94c68c7a6d0de6b78a35744167cf21c4acd7ca03a434df1d2db3a021b2310ecbe1d6325d4d61ff7156f843f64f28f79fe5db203000002d3f902d082028f850ba43b74008307a120946654b9c2b98d2bc001fe8937d6636b1398c61ccb80b90264c9807539000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008009703b19ba1ef5d2183a2c61662d8400002dce060203010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000027d3f9bcf140000000000000000000000000000000000000000000000000000027d563ce9400000000000000000000000000000000000000000000000000000027d85be2a800000000000000000000000000000000000000000000000000000027d8da26e000000000000000000000000000000000000000000000000000000000000000002d2dc073eb930fcf451323edc2152b2d4a1e5300236226adfc378c32aa7331a18835d106847a1e560c2cb260cb7bec0e90a703adb24d9166a810d9372c43a8abe00000000000000000000000000000000000000000000000000000000000000027c759518700abee2a4a1b24c2a6b8841e88de97e6ac40de288931a67affa953f5e4eafd38f75570db91df133ce9e48bc3ce6042db7804162efc0cda72c4cd7e983104ec2a01819ed768910e8467b1d3bbd43a35f0726fe16213a909d18fb2a742e2f87891fa035e28043829f9d8f9463c3882ecaef3a1f07a29f2a07486532d176ce0452ff0100002653f9265002850ba43b7400831a3eb88080b925fa60806040523480156200001157600080fd5b506040516200251a3803806200251a8339818101604052810190620000379190620004ad565b828281600390816200004a919062000788565b5080600490816200005c919062000788565b5050506200007f620000736200009a60201b60201c565b620000a260201b60201c565b6200009133826200016860201b60201c565b5050506200098a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d190620008d0565b60405180910390fd5b620001ee60008383620002d560201b60201c565b806002600082825462000202919062000921565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002b591906200096d565b60405180910390a3620002d160008383620002da60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034882620002fd565b810181811067ffffffffffffffff821117156200036a57620003696200030e565b5b80604052505050565b60006200037f620002df565b90506200038d82826200033d565b919050565b600067ffffffffffffffff821115620003b057620003af6200030e565b5b620003bb82620002fd565b9050602081019050919050565b60005b83811015620003e8578082015181840152602081019050620003cb565b60008484015250505050565b60006200040b620004058462000392565b62000373565b9050828152602081018484840111156200042a5762000429620002f8565b5b62000437848285620003c8565b509392505050565b600082601f830112620004575762000456620002f3565b5b815162000469848260208601620003f4565b91505092915050565b6000819050919050565b620004878162000472565b81146200049357600080fd5b50565b600081519050620004a7816200047c565b92915050565b600080600060608486031215620004c957620004c8620002e9565b5b600084015167ffffffffffffffff811115620004ea57620004e9620002ee565b5b620004f8868287016200043f565b935050602084015167ffffffffffffffff8111156200051c576200051b620002ee565b5b6200052a868287016200043f565b92505060406200053d8682870162000496565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059a57607f821691505b602082108103620005b057620005af62000552565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200061a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005db565b620006268683620005db565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000669620006636200065d8462000472565b6200063e565b62000472565b9050919050565b6000819050919050565b620006858362000648565b6200069d620006948262000670565b848454620005e8565b825550505050565b600090565b620006b4620006a5565b620006c18184846200067a565b505050565b5b81811015620006e957620006dd600082620006aa565b600181019050620006c7565b5050565b601f82111562000738576200070281620005b6565b6200070d84620005cb565b810160208510156200071d578190505b620007356200072c85620005cb565b830182620006c6565b50505b505050565b600082821c905092915050565b60006200075d600019846008026200073d565b1980831691505092915050565b60006200077883836200074a565b9150826002028217905092915050565b620007938262000547565b67ffffffffffffffff811115620007af57620007ae6200030e565b5b620007bb825462000581565b620007c8828285620006ed565b600060209050601f831160018114620008005760008415620007eb578287015190505b620007f785826200076a565b86555062000867565b601f1984166200081086620005b6565b60005b828110156200083a5784890151825560018201915060208501945060208101905062000813565b868310156200085a578489015162000856601f8916826200074a565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620008b8601f836200086f565b9150620008c58262000880565b602082019050919050565b60006020820190508181036000830152620008eb81620008a9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200092e8262000472565b91506200093b8362000472565b9250828201905080821115620009565762000955620008f2565b5b92915050565b620009678162000472565b82525050565b60006020820190506200098460008301846200095c565b92915050565b611b80806200099a6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102a6578063a457c2d7146102c4578063a9059cbb146102f4578063dd62ed3e14610324578063f2fde38b146103545761010b565b806370a0823114610232578063715018a61461026257806379cc67901461026c5780638da5cb5b146102885761010b565b8063313ce567116100de578063313ce567146101ac57806339509351146101ca57806340c10f19146101fa57806342966c68146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610370565b6040516101259190611178565b60405180910390f35b61014860048036038101906101439190611233565b610402565b604051610155919061128e565b60405180910390f35b610166610425565b60405161017391906112b8565b60405180910390f35b610196600480360381019061019191906112d3565b61042f565b6040516101a3919061128e565b60405180910390f35b6101b461045e565b6040516101c19190611342565b60405180910390f35b6101e460048036038101906101df9190611233565b610467565b6040516101f1919061128e565b60405180910390f35b610214600480360381019061020f9190611233565b61049e565b005b610230600480360381019061022b919061135d565b6104b4565b005b61024c6004803603810190610247919061138a565b6104c8565b60405161025991906112b8565b60405180910390f35b61026a610510565b005b61028660048036038101906102819190611233565b610524565b005b610290610544565b60405161029d91906113c6565b60405180910390f35b6102ae61056e565b6040516102bb9190611178565b60405180910390f35b6102de60048036038101906102d99190611233565b610600565b6040516102eb919061128e565b60405180910390f35b61030e60048036038101906103099190611233565b610677565b60405161031b919061128e565b60405180910390f35b61033e600480360381019061033991906113e1565b61069a565b60405161034b91906112b8565b60405180910390f35b61036e6004803603810190610369919061138a565b610721565b005b60606003805461037f90611450565b80601f01602080910402602001604051908101604052809291908181526020018280546103ab90611450565b80156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b5050505050905090565b60008061040d6107a4565b905061041a8185856107ac565b600191505092915050565b6000600254905090565b60008061043a6107a4565b9050610447858285610975565b610452858585610a01565b60019150509392505050565b60006012905090565b6000806104726107a4565b9050610493818585610484858961069a565b61048e91906114b0565b6107ac565b600191505092915050565b6104a6610c77565b6104b08282610cf5565b5050565b6104c56104bf6107a4565b82610e4b565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610518610c77565b6105226000611018565b565b610536826105306107a4565b83610975565b6105408282610e4b565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461057d90611450565b80601f01602080910402602001604051908101604052809291908181526020018280546105a990611450565b80156105f65780601f106105cb576101008083540402835291602001916105f6565b820191906000526020600020905b8154815290600101906020018083116105d957829003601f168201915b5050505050905090565b60008061060b6107a4565b90506000610619828661069a565b90508381101561065e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065590611556565b60405180910390fd5b61066b82868684036107ac565b60019250505092915050565b6000806106826107a4565b905061068f818585610a01565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610729610c77565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f906115e8565b60405180910390fd5b6107a181611018565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361081b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108129061167a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361088a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108819061170c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161096891906112b8565b60405180910390a3505050565b6000610981848461069a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109fb57818110156109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490611778565b60405180910390fd5b6109fa84848484036107ac565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a679061180a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad69061189c565b60405180910390fd5b610aea8383836110de565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b679061192e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c5e91906112b8565b60405180910390a3610c718484846110e3565b50505050565b610c7f6107a4565b73ffffffffffffffffffffffffffffffffffffffff16610c9d610544565b73ffffffffffffffffffffffffffffffffffffffff1614610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea9061199a565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90611a06565b60405180910390fd5b610d70600083836110de565b8060026000828254610d8291906114b0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e3391906112b8565b60405180910390a3610e47600083836110e3565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190611a98565b60405180910390fd5b610ec6826000836110de565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390611b2a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fff91906112b8565b60405180910390a3611013836000846110e3565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611122578082015181840152602081019050611107565b60008484015250505050565b6000601f19601f8301169050919050565b600061114a826110e8565b61115481856110f3565b9350611164818560208601611104565b61116d8161112e565b840191505092915050565b60006020820190508181036000830152611192818461113f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111ca8261119f565b9050919050565b6111da816111bf565b81146111e557600080fd5b50565b6000813590506111f7816111d1565b92915050565b6000819050919050565b611210816111fd565b811461121b57600080fd5b50565b60008135905061122d81611207565b92915050565b6000806040838503121561124a5761124961119a565b5b6000611258858286016111e8565b92505060206112698582860161121e565b9150509250929050565b60008115159050919050565b61128881611273565b82525050565b60006020820190506112a3600083018461127f565b92915050565b6112b2816111fd565b82525050565b60006020820190506112cd60008301846112a9565b92915050565b6000806000606084860312156112ec576112eb61119a565b5b60006112fa868287016111e8565b935050602061130b868287016111e8565b925050604061131c8682870161121e565b9150509250925092565b600060ff82169050919050565b61133c81611326565b82525050565b60006020820190506113576000830184611333565b92915050565b6000602082840312156113735761137261119a565b5b60006113818482850161121e565b91505092915050565b6000602082840312156113a05761139f61119a565b5b60006113ae848285016111e8565b91505092915050565b6113c0816111bf565b82525050565b60006020820190506113db60008301846113b7565b92915050565b600080604083850312156113f8576113f761119a565b5b6000611406858286016111e8565b9250506020611417858286016111e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061146857607f821691505b60208210810361147b5761147a611421565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114bb826111fd565b91506114c6836111fd565b92508282019050808211156114de576114dd611481565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006115406025836110f3565b915061154b826114e4565b604082019050919050565b6000602082019050818103600083015261156f81611533565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006115d26026836110f3565b91506115dd82611576565b604082019050919050565b60006020820190508181036000830152611601816115c5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006116646024836110f3565b915061166f82611608565b604082019050919050565b6000602082019050818103600083015261169381611657565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006116f66022836110f3565b91506117018261169a565b604082019050919050565b60006020820190508181036000830152611725816116e9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611762601d836110f3565b915061176d8261172c565b602082019050919050565b6000602082019050818103600083015261179181611755565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006117f46025836110f3565b91506117ff82611798565b604082019050919050565b60006020820190508181036000830152611823816117e7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006118866023836110f3565b91506118918261182a565b604082019050919050565b600060208201905081810360008301526118b581611879565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006119186026836110f3565b9150611923826118bc565b604082019050919050565b600060208201905081810360008301526119478161190b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119846020836110f3565b915061198f8261194e565b602082019050919050565b600060208201905081810360008301526119b381611977565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006119f0601f836110f3565b91506119fb826119ba565b602082019050919050565b60006020820190508181036000830152611a1f816119e3565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a826021836110f3565b9150611a8d82611a26565b604082019050919050565b60006020820190508181036000830152611ab181611a75565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611b146022836110f3565b9150611b1f82611ab8565b604082019050919050565b60006020820190508181036000830152611b4381611b07565b905091905056fea26469706673582212204df6f0de305c90d5e7f095ff995f5884e7b51d307b600671a909171759701b0f64736f6c63430008120033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000c6aea155000000000000000000000000000000000000000000000000000000000000000272720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004656665650000000000000000000000000000000000000000000000000000000083104ec2a06c5bf08273c9572481612ebc6be5916246363d2ac4b31162683f3d8d8690b67aa05e9560c01e52cc196fad30c28c32cfdc5f9baf70b062db72c1be198890ea5320000001b1f901ae06850ba43b74008304b131943687ee3fb77c299e287d7a7fd4467623a4e49c4c80b90144ded9382a000000000000000000000000690000ef01dece82d837b5faa2719ae47b15669700000000000000000000000000000000000000000000000000bf8ebf9cf4bb380000000000000000000000000000000000000000000000012f5e21cb93e16c3d00000000000000000000000000000000000000000000000000007d308366a1ba0000000000000000000000008af20afecf5f4ee4fdab4c2349d764ed06f917280000000000000000000000000000000000000000000000000000000064ef37a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b2ac824ebc924643900ad018b366d583929b46ce3d27aeb15efecba6769b184ce465884873a68c5a1f968e2de490c5516d644a824798db12dcc7198f285b5913783104ec1a09c3b5a97ee7aa0010c42c9229b133457f075ccb3fc81cdce4f0bca01e7cba8b0a00869989f4f5f630f676aa7311a8c03a2f93665043c7c88b0a8653ecf348646190000008ef88c1a850ba43b74008301bd4194e62a60247d0b9c1d09193b0f60875bc49878f5df80a4e6be6c66000000000000000000000000000000000000000000000000000000000000311383104ec2a0b3aab19664bc4a6bde25832ff086c78f24a2e2b8a3574d23fbb260dc303bd8d0a0013f22bc43bdeaf038f4d6fd28ea98d6447360e41ca484da8ecb4b548ecf68ba00000074f87208850ba43b740082ca9094530000000000000000000000000000000000000487014d8ad652491b84d0e30db083104ec1a049db2c1ef445e222fe62cf04fb741fa40db8cad29041d4ec56cf3c47139d6791a01318af076b0be4692dbf2c9eedfd7b2c492309a5785ffee169cd7a3651ffa1e000000218f9021509850bdfd63e008304b4149417afd0263d6909ba1f9a8eac697f76532365fb958701f438daa06000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef59ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a861500000000000000000000000000000000000000000000000000000000000001f40000000000000000000000009e879eaaa79d228e4d371b49c8a0c6628c2a14a50000000000000000000000000000000000000000000000000001f438daa060000000000000000000000000000000000000000000000000000203c1364d3fb3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec1a002d951d3ad6fc72df865696c315ec7d95a09434d7c15ca57eebd4b1e4ad6a448a02d189e6c5bf3a8d2ed5076c23ac96e56e9ead865a3cf6385d2db70e28fbfe41200000218f9021501850ba43b74008302cfae9417afd0263d6909ba1f9a8eac697f76532365fb958717a93c16344000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef340200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000002710000000000000000000000000cca7589b2742e57ff55d04e4f6a96aaa5879a13d0000000000000000000000000000000000000000000000000017a93c163440000000000000000000000000000000000000000000000000001ccb69a0abf6cdd600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec2a087f2909a5db333b84fb65ecf1a3a60edae163965d5718b4e27f2f32596560a38a05b26a183721f7c2cf2c19831b8e3ec45288a530a76501602e1ac976001e416c200000075f87380850ba43b740082c2c09453000000000000000000000000000000000000048801aa535d3d0c000084d0e30db083104ec1a049a7cd2a9cf8da5026de077bae6ba45fc3687159fa90f19a4a918177ea21c6c8a04f16ce1faf346cbc3a03b5765436f4253fd171652934497b600ff11a535e07f8000000aef8ac09850ba43b740082b77a94affb188e9e098ac7d9ca3eca6284384e95d65f4380b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec000000000000000000000000000000000000000000000001ac7fc685306c98d783104ec2a08c16ca932639b0eec4e5c2fd5e9912a2756853434f17333ed8de6f0ce5b320cba0268b33542b72737242ee7a9f14285f2741b6694f233d12a9928a88eb1cb3d1b400000072f8708204b4850ba43b74008252089496346c9be6a7b3ca510f5b1e80ac8fb444bfc0d387038d7ea4c680008083104ec1a0be619b6aa2fd87505becb1cd0ab9060a95e3315b4c0faa2c4150ff7a9bef20a5a0088978180a1bc70ede21ce4c462f1fbab8075866c33694cdbde5356201adaba1000002d8f902d506850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8703e871b540c000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000003e871b540c00000000000000000000000000000000000000000000000000004c22b5366292fc80000000000000000000000000000000000000000000000000003b66c05ca5000000000000000000000000000000000000000000000000000048542c26dda53c000000000000000000000000086453d694fea978566d1531c75264304665ac05c0000000000000000000000000000000000000000000000000000000064ef367600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a075e3af69fe6d07225409dc53e867890dd7043a8e7e7d42c9850d7bf74316d568a00d31e015d2a7e868ed1137ef2b878bd7f1dfa128e116477ba3df779a46eed0730000008ef88c55850ba43b74008301224794e62a60247d0b9c1d09193b0f60875bc49878f5df80a43fc0287f000000000000000000000000000000000000000000000000000000000000060683104ec1a0dc3ad3c65251ce0c8f8ab864c2a03c54cacee1dbf1618c74eaa3aa8e13e35ce9a03d2afc4522d811058c9ec6fe881fcc1417165239d0638af4b28069e2c383750b000000b5f8b346850ba43b740083040abc949ad3c5617ecaa556d6e166787a97081907171230865af3107a4000b844c7cdea3700000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000000000000000000000000000000000000000000083104ec2a0d8211bbcf89cddfb8a005014325bbc368d8de98bed2ce378bfc843f2c39f1ebba03c5c01776911d569b6ae7ff0e16d6714e4fda24ed3f7994d61ab0f32ae3aa04200000072f870821bcc850ba43b74008261a894489e5ae86575d964b37319d3c03761ebbfe0ccb687470de4df8200008083104ec2a0d9e44af785cc9333ad21e02f8ef38dad904be1a5a6edccf2165838823576fa93a00623f8ae8712dd7a0f1bcab988e1acc4682ea7c262fba34a23d173213dfcb0d900000070f86e03850ba43b740082520894ccdf5f933a2caf4fff8090e2aa1c9d02b02ffd20872386f26fc100008083104ec1a0ed8b7022f02bf2a7aefb173f52f4abe8a9f26bc6f9a0f38e9f33611dbaf68786a0586e2bf2c50298745d6e4fc689a5a35ba2fe479de95c259eeb62493aee3e59f6000001b9f901b604850ba43b74008301e0818080b90160608060405234801561000f575f80fd5b506101438061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80632e64cec1146100385780636057361d14610056575b5f80fd5b610040610072565b60405161004d919061009b565b60405180910390f35b610070600480360381019061006b91906100e2565b61007a565b005b5f8054905090565b805f8190555050565b5f819050919050565b61009581610083565b82525050565b5f6020820190506100ae5f83018461008c565b92915050565b5f80fd5b6100c181610083565b81146100cb575f80fd5b50565b5f813590506100dc816100b8565b92915050565b5f602082840312156100f7576100f66100b4565b5b5f610104848285016100ce565b9150509291505056fea2646970667358221220b5c3075f2f2034d039a227fac6dd314b052ffb2b3da52c7b6f5bc374d528ed3664736f6c6343000814003383104ec1a0a563ff08b2be5ebcd48ce91e0dd86c7f2df812907fb8b0ea6815357b3154d002a07aff250448957f6e9fd610f6ce33e4e7d7fc79571218ba6046ee1ea8042b2e19000000d2f8d080850ba43b74008302bafa8080b87b6066806015600039303360006000a2806000f350fe6000803560e01c60008114602e5760018114603a5760028114604657600381146052576101008114605e576063565b6372cc7b018283a16063565b6378e86b638283a16063565b63c11557ea8283a16063565b63a93b43ad8283a16063565b308283a15b505083104ec1a0dad46eac2bd8095533a12aace7eeb950ba9a0716f281468ac106423681f39ff7a00b3a57f071ea2ce6f877904c7c8e7289f696d79259c8b5d8870052900770c443000000aff8ad2d850ba43b74008309660694837a9f1803d84a341a343f05be9705dec4b81f9380b844e2bbb15800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000b1d5f3c090b9eaf83104ec1a02cbf28f320f52c31d5e9fc2b3e4918af7473369ba566999e4261f441bff6623fa0437e4334549790cba9ea122399cbc130b6a67f6591381ad1ce1a9e7a9e70e7e30000008ef88c54850ba43b74008301224794e62a60247d0b9c1d09193b0f60875bc49878f5df80a43fc0287f000000000000000000000000000000000000000000000000000000000000060783104ec2a089091c9817db9704d756f806aeeb09ee56c626d0319ed5bf3ace7bc004b1b697a07e17b5a89e611e79c7e13d89aadc2a705c89172f5a6951262c474d1f8759a17d000000b6f8b405850ba43b7400830433c3949ad3c5617ecaa556d6e166787a9708190717123087038d7ea4c68000b844c7cdea3700000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000083104ec2a067dcfeb65edc1518257b749a6c7c042efa3c49c111078f2574b569618b0ada87a06f989bc2a89b1b1ada45c7a4860bda9249f711d13be9083cd7a38c56c9cd4faa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019920300000000000520470000000064ef3300000000000000000000000000000000000000000000000000000000000000000000000000007a12000007000000000000000520480000000064ef3303000000000000000000000000000000000000000000000000000000000000000000000000007a12000006000000000000000520490000000064ef3306000000000000000000000000000000000000000000000000000000000000000000000000007a120000020000000002d8f902d506850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8705543df729c000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000067d23ad800a561f00000000000000000000000000000000000000000000000000051007aace1000000000000000000000000000000000000000000000000000062a151806703800000000000000000000000000af69b50a2737ab31b1413c3909d192a12266fedf0000000000000000000000000000000000000000000000000000000064ef367b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a086909e983b0c23a44e4fff004f186f05dfe931670ef53214aa88a3ec5f054d96a068ae079571cf79cf257168709ad7d4042552e5b0bce76fdbd2edb5cb1480bf76000002b3f902b0820f23850ba43b74008302e6fb94cbbc5da52ea2728279560dca8f4ec08d5f82998580b902446f888fa10000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000e01675a428039c82c3a8ffe6f3a7cb1621230c08444566077459300d8ee2403de251306f4437c2b57b58dc21323f7803252e0c69fae9bfad82f5ebfa8f7b8c728b000000000000000000000000000000000000000000000000000000000000a42d000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7363726f6c6c2d7365706f6c69610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000041c047d485917fba7c01e81d84494412ba6294deb2368c50f93733ea63aff8a98b23c090845dd0f31ed2471360f26dde8352ef47b971ada379a4dcc7ddee8aeff61b0000000000000000000000000000000000000000000000000000000000000083104ec1a0a1cc97be360954a43ae9a62bdd494cc1bcb8221196d49ab8b1388251aaa89932a01df1a3c877db83834de89c4079ca1634c20ca94156a5b734df4d78272ca40249000000aef8ac0d850ba43b740082d23394efbb3810c4347f416d2a24ee37b09b466b6eac1580b844095ea7b3000000000000000000000000bf57ef344114bb5d443d916700c7bcefb6750e150000000000000000000000000000000000000000000000104e82fb07aa1c6a3f83104ec1a023e8dede9c57e77182b43ccfdd430f76daa57d6a3526d48cc463e496082b190aa019a33660d8158c874cb969edbdccf63f134a5e74d4a9218846ecfba9ac066dcd00000172f9016f8183850ba43b7400830289fb943687ee3fb77c299e287d7a7fd4467623a4e49c4c80b9010418cbafe5000000000000000000000000000000000000000000000ed2b525841adfc0000000000000000000000000000000000000000000000000000004fa49781e46f42000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000058d089cb9d224433e94060a33b3fecccc30e4ea60000000000000000000000000000000000000000000000000000000064ef37a50000000000000000000000000000000000000000000000000000000000000002000000000000000000000000690000ef01dece82d837b5faa2719ae47b156697000000000000000000000000530000000000000000000000000000000000000483104ec1a0429e2174755f06d1cb02a83cf630e91a2012a8873708e46892e57151dc1b69f3a07412d23975163b6d66127dd21bd9edd968bff39f0ebceca63f7d6d81c8ce170400000075f87307850ba43b740082ca9094530000000000000000000000000000000000000488016345785d8a000084d0e30db083104ec1a09be494b71fbdc7cd41858e6cbcd2905c19738c870690c90e019cd63edc128bd3a063c51d588d97755460da3da16c2ef3eefc0df23cbfe974d0d1f0d411890d824000000072f870821bcd850ba43b74008261a8948a3ef1c26b75191f4b7d450deabaa9a32d186a3587470de4df8200008083104ec2a04a14cca88084da9e537358f21ea0304eae12f32b8678003ee8ca4b6deee280eba05316b5cff04a15e7ba43f774655ee1935c0d82aa29b9063441aec1197b3a522c00000296f902931a84773594008304288e9477132b63429718db2b6ad8d942ee13a198f6ab498609184e72a000b90224ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000001fa4a500f0b2d24a1b94c052ff058d0d745589d6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000354650dab54e0a0000000000000000000000000000000000000000000000000000000064ef3543000000000000000000000000000000000000000000000000000000000000002bfa6a407c4c49ea1d46569c1a4bcf71c3437be54c0007d0551197e6350936976dffb66b2c3bb15ddb72325000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a00cedc69fd67702d8add5b883dd0c16e5d7f69c687fd36677b89a06bf092c35dfa05ff26dfdb45771aebe0760a7e62df7a25b65f2e80070b033736f22957fb8ff0400000211f9020e06850ba43b740083028d0c940e7432dffc781e74014e0bb6d9c20f117a3c77e080b901a484bb1e4200000000000000000000000077133e1e255586d871bf5e3119397df3bdd3281d000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec2a06e420347fba565829810afa1d3ab5e74d56b9b98bd39197f15dac73acd3b4ad5a066a61e8e880dc513b858551cfc6954996e2509ab5693d4b71c98a97205465eaa0000008df88b09850ba43b740082a72794530000000000000000000000000000000000000480a42e1a7d4d00000000000000000000000000000000000000000000000000014d8ad652491b83104ec2a06a874f363167a145592fab5674c82ef6081c50037c225f880d0545bea63578d5a074535ac352e426952311b1ddb582ba8412c7435426c4590ca74ab5aaafe8035b00000219f902162e850ba43b74008302b2329417afd0263d6909ba1f9a8eac697f76532365fb9588027f7d0bdb920000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef341d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000002710000000000000000000000000ece5858ff6ac4bae6af42b483e84f9655a23b652000000000000000000000000000000000000000000000000027f7d0bdb9200000000000000000000000000000000000000000000000000030a1c9dff7549432700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec1a09becdcf7064aa04914df53495249e1737486c9c47bdcac7bb78ddf628d3bd6a4a0275ae09627bd306f9284c8d35905a46e073bbd7458f8dcd2ce5a74325d01fdf5000000aef8ac0a850ba43b740082dd7794affb188e9e098ac7d9ca3eca6284384e95d65f4380b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec000000000000000000000000000000000000000000000001ac7fc685306c98d783104ec1a01178419cacb2f42cde8ea50b258b52e0b0e38406994f37974ba013c79c9af7b5a01ddea566b38184707b51d247ee6f89234f504579781163fcba7f0bb43828a9910000008ef88c57850ba43b74008301224794e62a60247d0b9c1d09193b0f60875bc49878f5df80a43fc0287f000000000000000000000000000000000000000000000000000000000000060883104ec2a0b958418dc8b0c7d47b42e750bf30276c374115192e2316ab44b8ef8784338b54a00b4bd4787feee5789d5762148315da76fb5260e8fb669d0378759e1d9c02444200000296f902931b84773594008304288e9477132b63429718db2b6ad8d942ee13a198f6ab498609184e72a000b90224ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000001fa4a500f0b2d24a1b94c052ff058d0d745589d6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000354650dab54e0a0000000000000000000000000000000000000000000000000000000064ef3544000000000000000000000000000000000000000000000000000000000000002bfa6a407c4c49ea1d46569c1a4bcf71c3437be54c0007d0551197e6350936976dffb66b2c3bb15ddb72325000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a038b399c757cf093c3a182eb2e995cf8ae70d2d35903ac42248e136ed5fb8061ea03bd2ac0f60229e6de4ab89d75202a4ab3e680541033a7ca2245b5b5bb4a70930000002d8f902d506850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8705543df729c000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000067d23ad8013bbb800000000000000000000000000000000000000000000000000051007aace1000000000000000000000000000000000000000000000000000062a1518067925800000000000000000000000007d93803d87a46022e4d072621b3e8ea0cfda45910000000000000000000000000000000000000000000000000000000064ef368200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a0b61ec3413c9065acdb15c4205866e58d82451d8177e89b52baa1d89b9390326ca03ee0103ce75d32b10f6018bc5581a57649f76082aaf193d75b753264283058f800000218f9021580850ba43b74008302f5579417afd0263d6909ba1f9a8eac697f76532365fb9587b1a2bc2ec50000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef342600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a861500000000000000000000000000000000000000000000000000000000000027100000000000000000000000004da5309c2d10289aff5236b3901478648e061d0c00000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000d82a24a0e1a6b47f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec2a093ad841a204c9b52e93f5bc137b88821b05acc46c28777bd593e54102b5b4b9fa0060293be878252cf16e5f17dfb34c99b5bb62f5541cf4a753fa48c7dfa853258000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017a704000000000005204a0000000064ef3309000000000000000000000000000000000000000000000000000000000000000000000000007a120000050000000000000005204b0000000064ef330c000000000000000000000000000000000000000000000000000000000000000000000000007a120000060000000000000005204c0000000064ef330f000000000000000000000000000000000000000000000000000000000000000000000000007a120000020000000000000005204d0000000064ef3312000000000000000000000000000000000000000000000000000000000000000000000000007a12000002000000000130f9012d1b850ba43b74008302d58b94ce87dbc5176cf0e37cf54741faf30e3e489e179980b8c48f6bdeaa00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000ebec21ee1da40000000000000000000000000000000000000000000000000000eb6d7fa9807099c30000000000000000000000009ef3c073fbb1c77a065b76e92ae9d0d2a28cb6db0000000000000000000000000000000000000000000000000000000064ef342883104ec2a034b9f505221a147d06bea1c4e4aea11520a3958d1b08c1220e16b817049c7b47a0667af8c9e559c663c461b29043131b5d0edb61f2607e98f37a377a984747582f00000231f9022e0b850ba43b740083065cf594d32548ea5911a6336c5a34061e814148c396ae6f80b901c43e5d877b00000000000000000000000000000000000000000000000000000000aff87bf30000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000004863ee7a6c4f9ca63ba655bacdf6f5bc0a7ea25d00000000000000000000000000000000000000000000000000000000000ea285000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000041c8bafe89384b180012ac8544c2bfda8b6e62ec86ac06ce1dce0944589037cd3f49bd60b340e3387f70dfb8b00fa527b030f089e52ef97f1a8ba6149213d44ccb1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec2a011103e29e30b240d50d49304ce4c7cfe222164ac4724d550b1efc939be4be534a0621e1fbfdbd666e11069e58f382488cae84bf1f57ad26e005f447cf3377261fa0000008ef88c54850ba43b74008301224794e62a60247d0b9c1d09193b0f60875bc49878f5df80a43fc0287f000000000000000000000000000000000000000000000000000000000000060983104ec1a06df44748084d0b10f0db4913f8e435723d940c5bb31436a6d6b1e81f69042ef3a03bb01d862b24827828bc06672d6a9369052c99bbc6237260e0a6149bb4cf6cef000000cff8cd07850ba43b74008315cd00949629deec040fef7a1ac0748f8bdfe0cb252e45ba80b8649944ba5d000000000000000000000000e310227a350ab8d67e4b15a9eee0f1368586b30b00000000000000000000000000000000000000000000000000000000000000008326065dbbfa9caa5e67cd9de021bb91c86fbf318f3c42aabf5287aa68fb679f83104ec1a057633d4475d99d2584068d6959a85fad640de218a613c15139f74a4b53f84860a048d59de2267c7c4e8af69a0bd94d3e402c6bfe0e3a1b599fe6db7aadb727c00900000296f902931c84773594008304288e9477132b63429718db2b6ad8d942ee13a198f6ab498609184e72a000b90224ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000001fa4a500f0b2d24a1b94c052ff058d0d745589d6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000354650dab54e0a0000000000000000000000000000000000000000000000000000000064ef3546000000000000000000000000000000000000000000000000000000000000002bfa6a407c4c49ea1d46569c1a4bcf71c3437be54c0007d0551197e6350936976dffb66b2c3bb15ddb72325000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a05650a3c99d6eb8a07aab72ab49c7dc898c7e1bfa275adc85de014792041ed809a0517d1640932aeae1a0b427f8756d92d9b6e116c1ce424ba12acb526c5c492208000002d8f902d507850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8705543df729c000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000067d23ad8013bbb800000000000000000000000000000000000000000000000000051007aace1000000000000000000000000000000000000000000000000000062a151806792580000000000000000000000000763b0a8bdd49de91783ee24938d2d1a423f3df7b0000000000000000000000000000000000000000000000000000000064ef368800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a066b4fa2cbc553375c716e587be3e63e943d5b3406298f69939ace5d8376541bca071bad274b3133594757217051414365044909e7fd3a454dc250af4170c281b3900000218f9021502850ba43b74008302e7d19417afd0263d6909ba1f9a8eac697f76532365fb958705f7f37b390000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef341a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000002710000000000000000000000000314067e7ca8360f5a7d6f8c3bbf7188462cd26f50000000000000000000000000000000000000000000000000005f7f37b390000000000000000000000000000000000000000000000000000074376b3a0b6a75800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec1a00bd58a4adbf5cb4352df81caf35c40709feefbb8e0a7bf180d14a3880af8debda0277b079d8167efd24e167e3029df2acf2aea543b2953ccab139ed12b1391914b000000b6f8b403850ba43b740083042452949ad3c5617ecaa556d6e166787a97081907171230872386f26fc10000b844c7cdea37000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000083104ec2a0c90a11b2e824e2997793ff9d4107e1b01a98d5cd8f7a9a191c0b5e27e328462ba07ab1ef30737a6e67539bb9bbe4dd0a2009d768aace669ef36ab575e249c3fc9900000075f87301850ba43b740082ca909453000000000000000000000000000000000000048801aa535d3d0c000084d0e30db083104ec2a0147ef8f1f7261e8ffd2c71eb2564aad6768c02eced9dd5304cc533dee3fae4f3a0092f51268e296c2a4efe29f69441b694ef36137c2054ea995f52dfe6a992bd1300000219f9021608850ba43b74008302f6de9417afd0263d6909ba1f9a8eac697f76532365fb95880de0b6b3a7640000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef342600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a861500000000000000000000000000000000000000000000000000000000000027100000000000000000000000008c25caf7e3873d1d5b4973ff7e13af004d7c98cc0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000010dfa3521294389f8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec1a02a798da0abed8ae611ad0efe5a7baba742d48ba23f2737161ddc5e14ea9d8256a03de5b082834573558eeafedee46149bb4fadfe9c0080575dda8aa099ba7424e5000000adf8ab04841dcd650082b74c94cae23aaa6ee04b3b70c2da30b75b3af912543a9e80b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec0000000000000000000000000000000000000000033b2e3c9fd0803ce800000083104ec1a03a549b0737b5d2e5fc6ec6fbcb2b969c8e95971c295a55fe15b7d0b100c3bcc3a03c20470c5787761ff2520482623f6d8e25c2bfd51a99c0d4644b6ed3b1bfcfc800000070f86e04850ba43b740082520894ccdf5f933a2caf4fff8090e2aa1c9d02b02ffd20872386f26fc100008083104ec1a068451bfec404d52f88c0fb46d92fce1629687a00f291ca7e3be7a90c62fa987fa026532afc5973f3ba2b6683b6f692cfc1646ee2458bbacc8aba49aa217dabf61400000296f902931d84773594008304288e9477132b63429718db2b6ad8d942ee13a198f6ab498609184e72a000b90224ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000001fa4a500f0b2d24a1b94c052ff058d0d745589d6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000354650dab54e0a0000000000000000000000000000000000000000000000000000000064ef3548000000000000000000000000000000000000000000000000000000000000002bfa6a407c4c49ea1d46569c1a4bcf71c3437be54c0007d0551197e6350936976dffb66b2c3bb15ddb72325000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a06e824a423c3a004149d9ee25715193b1d8f45ffab32eb2d17cccf96e124193c8a06fcba743571e103c2c8a28b9fd556dacd3fc0e4500e33ded57373e02afdf2c6a0000008ef88c0e850ba43b74008302268d94bf57ef344114bb5d443d916700c7bcefb6750e1580a4a3908e1b0000000000000000000000000000000000000000000000104e82fb07aa1c6a3f83104ec2a041b3310e9357d96c41758143fe3974b7bc96441ec8aacc624a0a9f1ea4e7fb47a02b93afa3079b9c9855a75e6ca412462d97c276cda894fa67c1457de73227ef74000002b1f902ae2f850ba43b74008303e5bf9417afd0263d6909ba1f9a8eac697f76532365fb9580b902445ae401dc0000000000000000000000000000000000000000000000000000000064ef342f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000d9692f1748afee00face2da35242417dd05a8615000000000000000000000000530000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000000052eea1a256ffecb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c000000000000000000000000000000000000000000000000052eea1a256ffecb000000000000000000000000ece5858ff6ac4bae6af42b483e84f9655a23b6520000000000000000000000000000000000000000000000000000000083104ec1a0df147078e16e74ee99ece68564a5d64c14e4ba1be4282629b75ba36b1c58dce2a028e08adb28d7c080e92f3cf6e66cd048a8e2077a758e3541dea510467c76da1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480c07000000000005204e0000000064ef3315000000000000000000000000000000000000000000000000000000000000000000000000007a120000040000000000000005204f0000000064ef3318000000000000000000000000000000000000000000000000000000000000000000000000007a12000007000000000000000520500000000064ef331b000000000000000000000000000000000000000000000000000000000000000000000000007a12000001000000000000000520510000000064ef331e000000000000000000000000000000000000000000000000000000000000000000000000007a12000003000000000000000520520000000064ef3321000000000000000000000000000000000000000000000000000000000000000000000000007a12000004000000000000000520530000000064ef3324000000000000000000000000000000000000000000000000000000000000000000000000007a12000002000000000000000520540000000064ef3327000000000000000000000000000000000000000000000000000000000000000000000000007a120000040000000002d8f902d506850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8706651728988000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b4000000000000000000000000000000000000000000000000000665172898800000000000000000000000000000000000000000000000000007c95de56a6a00dd0000000000000000000000000000000000000000000000000006133c6690e0000000000000000000000000000000000000000000000000000765b2cd2517e700000000000000000000000000e12f8341db316d99708a7645dbadcc8fe6dd7bb10000000000000000000000000000000000000000000000000000000064ef368f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a08bb3d5695fdba073187359f73a43d289767f90f05cddbdfcde556c144d26432da03fdb51048bd31f3540efc7067dff6b06161f68108d8e52a260f0ee7f53f2756c00000072f870821bce850ba43b74008261a894987e8b40b8f3154063bad183cf246099111f98ad87470de4df8200008083104ec1a084c12c57b6008779035924280a521e8262e0d519381b47525fd137ed77074b2ca043d422894d159a51675060c35a284cbde41fa4c030912900dd683208873e1b6f00002653f9265002850ba43b7400831a3ea08080b925fa60806040523480156200001157600080fd5b506040516200251a3803806200251a8339818101604052810190620000379190620004ad565b828281600390816200004a919062000788565b5080600490816200005c919062000788565b5050506200007f620000736200009a60201b60201c565b620000a260201b60201c565b6200009133826200016860201b60201c565b5050506200098a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d190620008d0565b60405180910390fd5b620001ee60008383620002d560201b60201c565b806002600082825462000202919062000921565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002b591906200096d565b60405180910390a3620002d160008383620002da60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034882620002fd565b810181811067ffffffffffffffff821117156200036a57620003696200030e565b5b80604052505050565b60006200037f620002df565b90506200038d82826200033d565b919050565b600067ffffffffffffffff821115620003b057620003af6200030e565b5b620003bb82620002fd565b9050602081019050919050565b60005b83811015620003e8578082015181840152602081019050620003cb565b60008484015250505050565b60006200040b620004058462000392565b62000373565b9050828152602081018484840111156200042a5762000429620002f8565b5b62000437848285620003c8565b509392505050565b600082601f830112620004575762000456620002f3565b5b815162000469848260208601620003f4565b91505092915050565b6000819050919050565b620004878162000472565b81146200049357600080fd5b50565b600081519050620004a7816200047c565b92915050565b600080600060608486031215620004c957620004c8620002e9565b5b600084015167ffffffffffffffff811115620004ea57620004e9620002ee565b5b620004f8868287016200043f565b935050602084015167ffffffffffffffff8111156200051c576200051b620002ee565b5b6200052a868287016200043f565b92505060406200053d8682870162000496565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059a57607f821691505b602082108103620005b057620005af62000552565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200061a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005db565b620006268683620005db565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000669620006636200065d8462000472565b6200063e565b62000472565b9050919050565b6000819050919050565b620006858362000648565b6200069d620006948262000670565b848454620005e8565b825550505050565b600090565b620006b4620006a5565b620006c18184846200067a565b505050565b5b81811015620006e957620006dd600082620006aa565b600181019050620006c7565b5050565b601f82111562000738576200070281620005b6565b6200070d84620005cb565b810160208510156200071d578190505b620007356200072c85620005cb565b830182620006c6565b50505b505050565b600082821c905092915050565b60006200075d600019846008026200073d565b1980831691505092915050565b60006200077883836200074a565b9150826002028217905092915050565b620007938262000547565b67ffffffffffffffff811115620007af57620007ae6200030e565b5b620007bb825462000581565b620007c8828285620006ed565b600060209050601f831160018114620008005760008415620007eb578287015190505b620007f785826200076a565b86555062000867565b601f1984166200081086620005b6565b60005b828110156200083a5784890151825560018201915060208501945060208101905062000813565b868310156200085a578489015162000856601f8916826200074a565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620008b8601f836200086f565b9150620008c58262000880565b602082019050919050565b60006020820190508181036000830152620008eb81620008a9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200092e8262000472565b91506200093b8362000472565b9250828201905080821115620009565762000955620008f2565b5b92915050565b620009678162000472565b82525050565b60006020820190506200098460008301846200095c565b92915050565b611b80806200099a6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102a6578063a457c2d7146102c4578063a9059cbb146102f4578063dd62ed3e14610324578063f2fde38b146103545761010b565b806370a0823114610232578063715018a61461026257806379cc67901461026c5780638da5cb5b146102885761010b565b8063313ce567116100de578063313ce567146101ac57806339509351146101ca57806340c10f19146101fa57806342966c68146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610370565b6040516101259190611178565b60405180910390f35b61014860048036038101906101439190611233565b610402565b604051610155919061128e565b60405180910390f35b610166610425565b60405161017391906112b8565b60405180910390f35b610196600480360381019061019191906112d3565b61042f565b6040516101a3919061128e565b60405180910390f35b6101b461045e565b6040516101c19190611342565b60405180910390f35b6101e460048036038101906101df9190611233565b610467565b6040516101f1919061128e565b60405180910390f35b610214600480360381019061020f9190611233565b61049e565b005b610230600480360381019061022b919061135d565b6104b4565b005b61024c6004803603810190610247919061138a565b6104c8565b60405161025991906112b8565b60405180910390f35b61026a610510565b005b61028660048036038101906102819190611233565b610524565b005b610290610544565b60405161029d91906113c6565b60405180910390f35b6102ae61056e565b6040516102bb9190611178565b60405180910390f35b6102de60048036038101906102d99190611233565b610600565b6040516102eb919061128e565b60405180910390f35b61030e60048036038101906103099190611233565b610677565b60405161031b919061128e565b60405180910390f35b61033e600480360381019061033991906113e1565b61069a565b60405161034b91906112b8565b60405180910390f35b61036e6004803603810190610369919061138a565b610721565b005b60606003805461037f90611450565b80601f01602080910402602001604051908101604052809291908181526020018280546103ab90611450565b80156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b5050505050905090565b60008061040d6107a4565b905061041a8185856107ac565b600191505092915050565b6000600254905090565b60008061043a6107a4565b9050610447858285610975565b610452858585610a01565b60019150509392505050565b60006012905090565b6000806104726107a4565b9050610493818585610484858961069a565b61048e91906114b0565b6107ac565b600191505092915050565b6104a6610c77565b6104b08282610cf5565b5050565b6104c56104bf6107a4565b82610e4b565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610518610c77565b6105226000611018565b565b610536826105306107a4565b83610975565b6105408282610e4b565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461057d90611450565b80601f01602080910402602001604051908101604052809291908181526020018280546105a990611450565b80156105f65780601f106105cb576101008083540402835291602001916105f6565b820191906000526020600020905b8154815290600101906020018083116105d957829003601f168201915b5050505050905090565b60008061060b6107a4565b90506000610619828661069a565b90508381101561065e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065590611556565b60405180910390fd5b61066b82868684036107ac565b60019250505092915050565b6000806106826107a4565b905061068f818585610a01565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610729610c77565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f906115e8565b60405180910390fd5b6107a181611018565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361081b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108129061167a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361088a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108819061170c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161096891906112b8565b60405180910390a3505050565b6000610981848461069a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109fb57818110156109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490611778565b60405180910390fd5b6109fa84848484036107ac565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a679061180a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad69061189c565b60405180910390fd5b610aea8383836110de565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b679061192e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c5e91906112b8565b60405180910390a3610c718484846110e3565b50505050565b610c7f6107a4565b73ffffffffffffffffffffffffffffffffffffffff16610c9d610544565b73ffffffffffffffffffffffffffffffffffffffff1614610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea9061199a565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90611a06565b60405180910390fd5b610d70600083836110de565b8060026000828254610d8291906114b0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e3391906112b8565b60405180910390a3610e47600083836110e3565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190611a98565b60405180910390fd5b610ec6826000836110de565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390611b2a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fff91906112b8565b60405180910390a3611013836000846110e3565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611122578082015181840152602081019050611107565b60008484015250505050565b6000601f19601f8301169050919050565b600061114a826110e8565b61115481856110f3565b9350611164818560208601611104565b61116d8161112e565b840191505092915050565b60006020820190508181036000830152611192818461113f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111ca8261119f565b9050919050565b6111da816111bf565b81146111e557600080fd5b50565b6000813590506111f7816111d1565b92915050565b6000819050919050565b611210816111fd565b811461121b57600080fd5b50565b60008135905061122d81611207565b92915050565b6000806040838503121561124a5761124961119a565b5b6000611258858286016111e8565b92505060206112698582860161121e565b9150509250929050565b60008115159050919050565b61128881611273565b82525050565b60006020820190506112a3600083018461127f565b92915050565b6112b2816111fd565b82525050565b60006020820190506112cd60008301846112a9565b92915050565b6000806000606084860312156112ec576112eb61119a565b5b60006112fa868287016111e8565b935050602061130b868287016111e8565b925050604061131c8682870161121e565b9150509250925092565b600060ff82169050919050565b61133c81611326565b82525050565b60006020820190506113576000830184611333565b92915050565b6000602082840312156113735761137261119a565b5b60006113818482850161121e565b91505092915050565b6000602082840312156113a05761139f61119a565b5b60006113ae848285016111e8565b91505092915050565b6113c0816111bf565b82525050565b60006020820190506113db60008301846113b7565b92915050565b600080604083850312156113f8576113f761119a565b5b6000611406858286016111e8565b9250506020611417858286016111e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061146857607f821691505b60208210810361147b5761147a611421565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114bb826111fd565b91506114c6836111fd565b92508282019050808211156114de576114dd611481565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006115406025836110f3565b915061154b826114e4565b604082019050919050565b6000602082019050818103600083015261156f81611533565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006115d26026836110f3565b91506115dd82611576565b604082019050919050565b60006020820190508181036000830152611601816115c5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006116646024836110f3565b915061166f82611608565b604082019050919050565b6000602082019050818103600083015261169381611657565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006116f66022836110f3565b91506117018261169a565b604082019050919050565b60006020820190508181036000830152611725816116e9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611762601d836110f3565b915061176d8261172c565b602082019050919050565b6000602082019050818103600083015261179181611755565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006117f46025836110f3565b91506117ff82611798565b604082019050919050565b60006020820190508181036000830152611823816117e7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006118866023836110f3565b91506118918261182a565b604082019050919050565b600060208201905081810360008301526118b581611879565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006119186026836110f3565b9150611923826118bc565b604082019050919050565b600060208201905081810360008301526119478161190b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119846020836110f3565b915061198f8261194e565b602082019050919050565b600060208201905081810360008301526119b381611977565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006119f0601f836110f3565b91506119fb826119ba565b602082019050919050565b60006020820190508181036000830152611a1f816119e3565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a826021836110f3565b9150611a8d82611a26565b604082019050919050565b60006020820190508181036000830152611ab181611a75565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611b146022836110f3565b9150611b1f82611ab8565b604082019050919050565b60006020820190508181036000830152611b4381611b07565b905091905056fea26469706673582212204df6f0de305c90d5e7f095ff995f5884e7b51d307b600671a909171759701b0f64736f6c63430008120033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000032dcd5000000000000000000000000000000000000000000000000000000000000000334353300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002657200000000000000000000000000000000000000000000000000000000000083104ec1a0ef9b07ba67e287a828d91e16ce542fb65365de4367e64edc2b9e1dfbe87b54c4a07de5e57772ebf86498393e4bffb27d0a1e5de974959dbc76261ccd608c4591e100000070f86e04850ba43b740082520894efddd3d3917cbce15aa53082339a9414de8f785787038d7ea4c680008083104ec2a07866395c018b454de69a43642c76edf86b6719dc7811f74a59666d45e7f1f59ba0644f70e9edceeaa0ae38d30b30db8fe9b147056c2fe230f6dc280d709fa5fa0100000218f9021505850df84758008302e6989417afd0263d6909ba1f9a8eac697f76532365fb958738d7ea4c680000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef369400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000c8e9dae10a06f48641d435be70136e84e392d6e40000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000003e4ac2d11f2b980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec1a0803cda4b7a4c4a1311d0333d4a8831bef88397a5c5bea3ac0c53f6b3d5ad8a88a0245a99131aa538568f9e2f65a4b9d84ba99fcd20e33ca28e065c9bc393e0ebed00000217f9021408850bdfd63e008304d7d69417afd0263d6909ba1f9a8eac697f76532365fb958648c273950000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef5a2100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a861500000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000260ca22885185b92bbcdac78dbb526b5ee6f6e7f000000000000000000000000000000000000000000000000000048c273950000000000000000000000000000000000000000000000000000004b1ec641c7a4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec2a015ac787e00d5dc28d477a2279f4f623acd8ea0bbf909b59214f41297c57f9902a063e6daf976f1fff9ef8fa82ba633448e915337cb7a964ed6f766282033c6bb73000000aff8ad01850bdfd63e00830183ba94d9692f1748afee00face2da35242417dd05a861580b844095ea7b300000000000000000000000017afd0263d6909ba1f9a8eac697f76532365fb95ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec2a069b2f72ab0c7e0930e82001dcd3cd10fa02dfc1739024195849752b62492ba69a042af83af4633e499464be99ab7d83b8e368b14e01533418065b13e7ac7aa4ba400000218f9021502850ba43b74008302e7df9417afd0263d6909ba1f9a8eac697f76532365fb95870aa87bee538000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef342600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a861500000000000000000000000000000000000000000000000000000000000027100000000000000000000000006394291f504a027de81308cf411ca485d20f0f2c000000000000000000000000000000000000000000000000000aa87bee5380000000000000000000000000000000000000000000000000000cf86d74b50a154400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec2a003832c87c434733391c4fd769541d6244f298262513b6800db2046f8b7749e05a06ae97f77b2cc05c68ceb9e9eace91d33590634cff870efa2aed292768c0b27ed00000178f9017507850ba43b740083032ff594d4d96b390f222a83004fe4d62c2a8abea8fbacf887470de4df820000b9010457965bfbe8b8e4e78892ad8036fd5c1bb6e5724863927eba9dd8fed45ad935a11c57031c000000000000000000000000000000000000000000000000000000000000001c53c7c5bff4bc0d799259640bd32b07feff9fec740b40ee47f7599debfb2365a2624da2a598ea92daf6de286fb6edaf4ba29eed2a01bf81b17b66f44783b5526500000000000000000000000080c8ec9cb3a1bd7d059ed4e2f1fc8b440b2ea41100000000000000000000000000000000000000000000000000000000000012e90000000000000000000000000000000000000000000000000000018a3e2c5322000000000000000000000000000000000000000000000000000000000000000083104ec2a007e2dad46159bb250819855f0d2d62292e13ea7052433cc4244dbec6391de147a01c0002db57b18627f6231f62f074f76f05440aeab6ab6a03684b36880dec586c000001b9f901b60e850ba43b74008301e0698080b90160608060405234801561000f575f80fd5b506101438061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80632e64cec1146100385780636057361d14610056575b5f80fd5b610040610072565b60405161004d919061009b565b60405180910390f35b610070600480360381019061006b91906100e2565b61007a565b005b5f8054905090565b805f8190555050565b5f819050919050565b61009581610083565b82525050565b5f6020820190506100ae5f83018461008c565b92915050565b5f80fd5b6100c181610083565b81146100cb575f80fd5b50565b5f813590506100dc816100b8565b92915050565b5f602082840312156100f7576100f66100b4565b5b5f610104848285016100ce565b9150509291505056fea2646970667358221220bfa7ddc6d937b635c7a8ad020080923800f04f6b0a685c47330306fd5267626b64736f6c6343000815003383104ec2a0decac70665a915b8152ccda6b9cebc6e1940c1fa5971cdc9cd4f590f245ecf54a0027ee12cfa410e7ff9a2df73f59c2c97289f104d50f999ff64b5cf3fdb6e4c5e00000072f8708204b5850ba43b740082520894dfa1b4dbec3f65ad1b66f04b567180169d1d3f1987038d7ea4c680008083104ec1a0432353ae95f0bcd70294a88e034438f3788ff4df465000a446de6808bcbf01eaa0036ba1364c90bafed8b8da9b0a85f30300d934a5e26975d9c534ed89b66275ee000000b6f8b480850ba43b740083042452949ad3c5617ecaa556d6e166787a97081907171230872386f26fc10000b844c7cdea37000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000083104ec1a02fc3ff21c2050905317e69c0bd6ee19e1387779a4d93fcb6263e4cf7197738d2a03cf397b36dcc1c4f624153cee95fd296108668de3d32127d5a76021fb5834ce6000002d8f902d505850ba43b74008307a87194bbad0e891922a8a4a7e9c39d4cc0559117016fec87eea0824967b607b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b400000000000000000000000000000000000000000000000000eea0824967b607000000000000000000000000000000000000000000000001236efcbcbb33ff3200000000000000000000000000000000000000000000000000ee085ba52d10fa00000000000000000000000000000000000000000000000122b43c6e1c20d89d000000000000000000000000410da7b2848a134eeda65a43619690bf04c614270000000000000000000000000000000000000000000000000000000064ef343500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a03108249184a140fa1bfaa8aea2aecbaafc78bcf731b28c87713e2a848232f50fa0577b11fb4bce9f3691ce0c61227b5f6035e81a0ff83d8076aa9ab466b5c2edc4000000aef8ac09850ba43b740082dd4194ab541dce85dcb3f6222439ba3ff45578caef6de680b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec1a01efd0c52a1c9d648dbc1054bd15ec2efc2a0219bdf546338e1c2f00fcd89da0ba04e69577c08761ef31ad4ec0a422e53239e112496f8bd8a51e162f5ed0831dabb000002b3f902b0820f24850ba43b74008302e6fb94cbbc5da52ea2728279560dca8f4ec08d5f82998580b902446f888fa10000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000e051306f4437c2b57b58dc21323f7803252e0c69fae9bfad82f5ebfa8f7b8c728b9d27d4fc1a186c49e1490154d89b4d98fae8e51f2921f9af9204b1bd1b091356000000000000000000000000000000000000000000000000000000000000a433000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7363726f6c6c2d7365706f6c69610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000041a42e5a95501bdb2f5f0c265415cf778a29c718d3bca4f9ec40f4b34ef5c775c86bf5b9ebe270f901fc46be508476991640cf3467ef607f855ca91953e5f4a1411c0000000000000000000000000000000000000000000000000000000000000083104ec2a04d6e96dfe570d170fef87a9af9cc2820c6bfa9c734e99bc28a8a807d38b65e22a0729d5195281e57a2a5ed67f1391a571269db695767f18f4fdb311d598a235025000002d8f902d505850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec87060a24181e4000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b400000000000000000000000000000000000000000000000000060a24181e4000000000000000000000000000000000000000000000000000075a94073b788f580000000000000000000000000000000000000000000000000005bcd57d4ff00000000000000000000000000000000000000000000000000006fc7306dee5bb400000000000000000000000000ef12d05fbd8b1db345efc4e886df729d46f16580000000000000000000000000000000000000000000000000000000064ef369b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a08649003c39a9974445fec44f39f20dbda9163cc8e8b89985f3e875603c2e9003a0656ae59aea94024ddb9247f4dc548ca1a86028bf658a3be6de87063c8695b93500000072f870821bcf850ba43b74008261a8943ea63c82148709e18fa0b4cf9219be3a505f7b0787470de4df8200008083104ec2a005185f1dcdc2f4bbb138cf5e80c00bda7d8be0c9eafcd361368aaffa0235bbb0a04fb1c60f38a92e8b3467e0abdf6a9d3f5b1ec2752fd6320bfdf51126ba74e99200000110f9010d1c850ba43b74008303a7e994ce87dbc5176cf0e37cf54741faf30e3e489e179980b8a45f4b9bde00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f5dd3700000000000000000000000000000000000000000000000564d2d67b6fa38cfb0000000000000000000000009ef3c073fbb1c77a065b76e92ae9d0d2a28cb6db0000000000000000000000000000000000000000000000000000000064ef37c683104ec1a0d998736d603eb8f3e91d4fe0da7fa37fae0dc70a94d260b851d244ef61203b31a02b7cfc1558d91c65788606433638a42760d504029a339bbd86a4c0fb7203c891000000b6f8b406850ba43b740083040abc949ad3c5617ecaa556d6e166787a9708190717123087038d7ea4c68000b844c7cdea3700000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000083104ec2a062d9d6ffda264bf77d99ef50152ba550b6fd2536af0fc552ac22a9bcb96415c4a06ca2c537937975e3b7078f19b60446408240eb2194aa005a74c7a8ba14ea72a1000000aef8ac06850cce41660082c0a594d9692f1748afee00face2da35242417dd05a861580b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec0000000000000000000000000000000000000000000000008ac7230489e8000083104ec1a01192c0a50136be8bfdedefc6483600ca3afde2fa26ebccb280fcd713831eb65aa058f9f9989f19d6587fe23cda4993c2b16a6a891c1a17504bf49f54ad0d5a246f000000aef8ac01850ba43b740082c0bd94d9692f1748afee00face2da35242417dd05a861580b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec000000000000000000000000000000000000000000000000d84fb9f010eb792d83104ec2a0fdfacce52d8f49969d09c352e982fe1632e93d0b671cccc0ce12beb64705cfb1a010930856a99a6f19c04f739269bdc5002fe6c2e8ccf0f9eb6c40f7945b977caf0000008ef88c56850ba43b74008301bd4194e62a60247d0b9c1d09193b0f60875bc49878f5df80a4e6be6c66000000000000000000000000000000000000000000000000000000000000060683104ec2a0f01de96d4e3ca9627fee0a7cc8b0dc32a3fc34f9ce18a604f69764e357932b79a00eb8872fe3ea56848a99402601c2a2e63a2bf1f226972d0f5c9a945cbc42bde0000000aef8ac02850ba43b740082c0bd94d9692f1748afee00face2da35242417dd05a861580b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fec0000000000000000000000000000000000000000000000001cd2c8b549df391a83104ec1a06a3cb09374612aa8369f55f77128f6ae5e5559dc254b2907fbad2a81c5d60e78a070b83836be3b80fd7fbf01be7d7c3a9b5be674c9e5d4935f9303829d534b2b56000000aef8ac4d850ba43b740082c0c994d9692f1748afee00face2da35242417dd05a861580b844095ea7b300000000000000000000000017afd0263d6909ba1f9a8eac697f76532365fb95000000000000000000000000000000000000000000000023b0e9e8cd3cfc2f7f83104ec1a0a6ab7185c8bd04969a5e204541254ae06ac853e15e0d6bda08909bd3b32cc311a064ac119b202322af9bc1ed6ff48390d5dcd165a682a4ebb3e278d893d774b8bf00000218f9021502850ba43b74008303082c9417afd0263d6909ba1f9a8eac697f76532365fb9587b1a2bc2ec50000b901a45ae401dc0000000000000000000000000000000000000000000000000000000064ef344100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000009f68f1262052f00affbd64536425957370ab582a00000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000d811f194415963f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec1a05b787411d2dbb2e5ca09ca02f53c42d57db09568bb0dbde9f04f61d26718bbb4a06ee3025cdc87d205c66f2ca57c13d231a02bfadda51e106623f805ad4d693eef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004acf0600000000000520550000000064ef332a000000000000000000000000000000000000000000000000000000000000000000000000007a12000006000000000000000520560000000064ef332d000000000000000000000000000000000000000000000000000000000000000000000000007a12000007000000000000000520570000000064ef3330000000000000000000000000000000000000000000000000000000000000000000000000007a12000006000000000000000520580000000064ef3333000000000000000000000000000000000000000000000000000000000000000000000000007a12000003000000000000000520590000000064ef3336000000000000000000000000000000000000000000000000000000000000000000000000007a120000030000000000000005205a0000000064ef3339000000000000000000000000000000000000000000000000000000000000000000000000007a120000030000000000aef8ac3d850ba43b740082b4d394551197e6350936976dffb66b2c3bb15ddb72325080b844095ea7b300000000000000000000000067a1f4a939b477a6b7c5bf94d97e45de87e608ef0000000000000000000000000000000000000000000000056bc75e2d6310000083104ec1a03dc3d5f4ac8437002963f1104e3a7881f38239c470aa32a3bf91e043e5ff422da02731716eb68b4dd0ed851987409cb80c54004ba6f40a9ce258fcfa43f98690a7000000d2f8d001850ba43b740083022e778080b87b6066806015600039303360006000a2806000f350fe6000803560e01c60008114602e5760018114603a5760028114604657600381146052576101008114605e576063565b6338f6dae68283a16063565b63cc6c4d6c8283a16063565b630cb75d708283a16063565b63ac1946258283a16063565b308283a15b505083104ec2a0052f24b2f9860132102f9ef23d4dafe0215ae793ce3f18cca987bd6d9865dba9a05eb023c2c083a7d002f4933705175f533158271ce5232e4004935545e67144a4000000b1f8af820a47850ba43b74008301a0f6946f1da9076f36000d5f9decdebd52402b1410b2c580b844468021b70000000000000000000000004f7906ab12e10b6eae797f43ca6cacb3484b090f000000000000000000000000000000000000000000000000000000000000000083104ec2a043d80fcb79c4ecdaeabd3a741c66f1db613b77ebf52b2e51bcdb498beb9d4c4ea0782e9a8819d50a1b60ac836e1d455c2519dd1f7101e94d3fca40165333a0a506000002d9f902d624850ba43b74008307878a94bbad0e891922a8a4a7e9c39d4cc0559117016fec88013bcaa2a655f5d1b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000002710fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766000000000000000000000000000000000000000000000000000000000000d89a0000000000000000000000000000000000000000000000000013bcaa2a655f5d10000000000000000000000000000000000000000000000018493fba64eefff11000000000000000000000000000000000000000000000000013b0148949e8ce2000000000000000000000000000000000000000000000001839afb3d7ad6764a000000000000000000000000547580a7a72fe75268a1315e601bddac5a9150af0000000000000000000000000000000000000000000000000000000064ef342000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec1a0e661dbf70421b5f33e347ed76cba4712db610ded1cd06abb637bcc7b36f98c00a0182e03191c02a26f9e0d0ba89b806d91ec1921d201ff49d318b493d10b9fede90000008ef88c10850ba43b7400830125ad9404dd9d9ac7c848705c2b2649b37b3c97d0560e7a80a4a0712d68000000000000000000000000000000000000000000000000000000000000000383104ec1a07e016df8a47a070b1093d60598a7e36f7687eb7b405e07428284ca3954440e46a06d9c5a30dc9aa0d96fc87e2e1f5690654b06ce56c4a150aa028fe058ba61c24400000074f8720a850ba43b740082ca90945300000000000000000000000000000000000004870177c70b58401984d0e30db083104ec2a0ff1f2edbea13a50b5780083a21887307ee110d69cb3dab36617fb8cde526813ea05d671d0afbe64e039b38ec13ea1d6163b2d5fa20408020c4b7cb1c5ad7696563000002d8f902d506850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8706c00a3912c000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000006c00a3912c00000000000000000000000000000000000000000000000000008380ec5d1494eb1000000000000000000000000000000000000000000000000000669a34fd1d00000000000000000000000000000000000000000000000000007cedad586d270c0000000000000000000000000a71f1d3d636a01f04d93b4a1a8f92f79a4b981a80000000000000000000000000000000000000000000000000000000064ef36a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a0ff07ac921dc77c82fd7246f1c816292261229323d700c01bc300f1ab20fe2bbda023c9199a93cd17a1964665dd0220e031c1a7762b94c9bd57ec1039be1c98a67d0000008ef88c55850ba43b74008301bd4194e62a60247d0b9c1d09193b0f60875bc49878f5df80a4e6be6c66000000000000000000000000000000000000000000000000000000000000060783104ec1a073278681a295301262dd89921c71ecddbb5200b10a84a1f80d5d2fd4d9fd76bda07f9d574a658b6a8be52c60c698411ce3a4983c31b0f8af6a4c5c553a48df94e9000000aef8ac09850ba43b740082b70594d9692f1748afee00face2da35242417dd05a861580b844095ea7b300000000000000000000000017afd0263d6909ba1f9a8eac697f76532365fb95000000000000000000000000000000000000000000000010e22cb541cab983a383104ec2a09da47185aff6697039533256d2da3ff359559053d2f60762f23de229a8d1e99ba0314ea3126bf2d3936733c2f407bbda398fbb089f55f303f0b78e36bf79d2cb8e000000b5f8b347850ba43b74008304577e949ad3c5617ecaa556d6e166787a97081907171230865af3107a4000b844c7cdea3700000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000000000000000000000000000000000000000000083104ec2a065ecae06efe1ec8e3ac9cc4b2a4d83847b1dd6975dfc773809e63b7f4090b396a0335994653697a08c381366194d44d9f423a52912d5da52e3b5cb8d88a1748ae7000002d9f902d630850ba43b7400830757cb94bbad0e891922a8a4a7e9c39d4cc0559117016fec880220a34f4a92aca2b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000002710fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2766000000000000000000000000000000000000000000000000000000000000d89a00000000000000000000000000000000000000000000000000220a34f4a92aca20000000000000000000000000000000000000000000000029cb1ff19496af921000000000000000000000000000000000000000000000000021f480b0ce802b50000000000000000000000000000000000000000000000029b057ec4cf350080000000000000000000000000ece5858ff6ac4bae6af42b483e84f9655a23b6520000000000000000000000000000000000000000000000000000000064ef345000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a08627805b0d3303254b25b282126b29fb1b6db57655bda5d1dd35e2c4390bb785a0640fecb2878a330d5dcf372e5aa0c4cca4355f23cf313d0eeddd3cd172739b5c00000074f87215850ba43b740082ca909453000000000000000000000000000000000000048711c37937e0800084d0e30db083104ec1a0e483fe2f6955c8ef3d9944023d0871dab877b9d8ecaf296514b0612ff7229981a016ee3bee10447cf6159934a0d93393bbdbddeac7fe16ec6635c035237f2371aa00000350f9034d05840ee6b280835e949d94bbad0e891922a8a4a7e9c39d4cc0559117016fec80b902e4ac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000008413ead5620000000000000000000000005300000000000000000000000000000000000004000000000000000000000000cae23aaa6ee04b3b70c2da30b75b3af912543a9e000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000003e7ffd4aefcd2cf2c91f36b6a74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000cae23aaa6ee04b3b70c2da30b75b3af912543a9e000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000214080000000000000000000000000000000000000000000000000000000000021b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013e9c16bcaa9c9fff40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013e9c16bcaa9c9fff40000000000000000000000005890aa503f0142f36ac0e51373a7111a626710aa0000000000000000000000000000000000000000000000000000000064ef34380000000000000000000000000000000000000000000000000000000083104ec2a0e152f9532ca16ce32f2c63ef3ffdbfaf06efe10b95c1977f648ac62ccf0a4b17a06c97934443c7318a5cf85d30ade2030d25ede2bf46b0e17d882df33fb7c5efeb000002d8f902d507850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8706c00a3912c000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000006c00a3912c0000000000000000000000000000000000000000000000000000837e5911784eeb1000000000000000000000000000000000000000000000000000669a34fd1d00000000000000000000000000000000000000000000000000007ceb3b03cbe48c0000000000000000000000000c8e9dae10a06f48641d435be70136e84e392d6e40000000000000000000000000000000000000000000000000000000064ef36ab00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a076d5753b4d8d3c771674b9d27e5e065ea357d3fe8dd3f1baf6e73f24aea1cdf6a0189ef18fa5e11809d67bbc82b6f9a79cd89afe75b6d3e41ee8de5b817d4ed19c00000277f9027402850ba43b74008302fd0c9417afd0263d6909ba1f9a8eac697f76532365fb95877217e846ef4161b902045ae401dc0000000000000000000000000000000000000000000000000000000064ef3447000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e45023b4df0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000003b01fd884b6bf6da722b7d96df7e13c75fe3b6790000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000007217e846ef4161000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec29ff03eed2a54611edc62815461b96f7f9314043b03e95bd9f230fba7457771f6a04f40df29b070fed2950fc6546208799e7bbb18b7895b54a7894aa73a0cb0aa74000000aef8ac0a850ba43b7400827ff994ab541dce85dcb3f6222439ba3ff45578caef6de680b844095ea7b3000000000000000000000000bbad0e891922a8a4a7e9c39d4cc0559117016fecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83104ec2a057b4bda72f5981d24ac90f52b5f7eeb9157f00e71880603904b4d062c352f27aa05d0158bd8b0efda60213353b91113ccf1fe27610238e95693a3dbb59aa492d22000000aff8ad08850ba43b740083012f909480c8ec9cb3a1bd7d059ed4e2f1fc8b440b2ea41180b844a22cb465000000000000000000000000d4d96b390f222a83004fe4d62c2a8abea8fbacf8000000000000000000000000000000000000000000000000000000000000000183104ec2a0b5fe9634078e11b9e2820f60283c371ff6b611d6894a706d34da9a1761746d4ca04c9187eac530de470b8d0043de7af664be3bbf14c6c6d5d83cde65ed48582c990000006df86b03850ba43b74008266c0944ed8bb0cd040e7bb9fed7e0939fdc592811b2a7d8084d09de08a83104ec2a01534e2268a1e4cf3906486699455de3b02520a89a90a2fc248acc6db40a25ecea0236d7da199585a02209517bbdc1570731fd8776c220f28b93cb5d9a42ceda4210000008ef88c58850ba43b74008301bd4194e62a60247d0b9c1d09193b0f60875bc49878f5df80a4e6be6c66000000000000000000000000000000000000000000000000000000000000060883104ec2a0bd965d6ccf52730056f6611634064cdafb07b496c933e10ee8d1da0acde3b60fa0730f48a38418a668b4e9286905f2bf703f3af7e03b0a3912610ea53d5870b17c00002653f9265002850ba43b7400831a3eb88080b925fa60806040523480156200001157600080fd5b506040516200251a3803806200251a8339818101604052810190620000379190620004ad565b828281600390816200004a919062000788565b5080600490816200005c919062000788565b5050506200007f620000736200009a60201b60201c565b620000a260201b60201c565b6200009133826200016860201b60201c565b5050506200098a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d190620008d0565b60405180910390fd5b620001ee60008383620002d560201b60201c565b806002600082825462000202919062000921565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002b591906200096d565b60405180910390a3620002d160008383620002da60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034882620002fd565b810181811067ffffffffffffffff821117156200036a57620003696200030e565b5b80604052505050565b60006200037f620002df565b90506200038d82826200033d565b919050565b600067ffffffffffffffff821115620003b057620003af6200030e565b5b620003bb82620002fd565b9050602081019050919050565b60005b83811015620003e8578082015181840152602081019050620003cb565b60008484015250505050565b60006200040b620004058462000392565b62000373565b9050828152602081018484840111156200042a5762000429620002f8565b5b62000437848285620003c8565b509392505050565b600082601f830112620004575762000456620002f3565b5b815162000469848260208601620003f4565b91505092915050565b6000819050919050565b620004878162000472565b81146200049357600080fd5b50565b600081519050620004a7816200047c565b92915050565b600080600060608486031215620004c957620004c8620002e9565b5b600084015167ffffffffffffffff811115620004ea57620004e9620002ee565b5b620004f8868287016200043f565b935050602084015167ffffffffffffffff8111156200051c576200051b620002ee565b5b6200052a868287016200043f565b92505060406200053d8682870162000496565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059a57607f821691505b602082108103620005b057620005af62000552565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200061a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005db565b620006268683620005db565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000669620006636200065d8462000472565b6200063e565b62000472565b9050919050565b6000819050919050565b620006858362000648565b6200069d620006948262000670565b848454620005e8565b825550505050565b600090565b620006b4620006a5565b620006c18184846200067a565b505050565b5b81811015620006e957620006dd600082620006aa565b600181019050620006c7565b5050565b601f82111562000738576200070281620005b6565b6200070d84620005cb565b810160208510156200071d578190505b620007356200072c85620005cb565b830182620006c6565b50505b505050565b600082821c905092915050565b60006200075d600019846008026200073d565b1980831691505092915050565b60006200077883836200074a565b9150826002028217905092915050565b620007938262000547565b67ffffffffffffffff811115620007af57620007ae6200030e565b5b620007bb825462000581565b620007c8828285620006ed565b600060209050601f831160018114620008005760008415620007eb578287015190505b620007f785826200076a565b86555062000867565b601f1984166200081086620005b6565b60005b828110156200083a5784890151825560018201915060208501945060208101905062000813565b868310156200085a578489015162000856601f8916826200074a565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620008b8601f836200086f565b9150620008c58262000880565b602082019050919050565b60006020820190508181036000830152620008eb81620008a9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200092e8262000472565b91506200093b8362000472565b9250828201905080821115620009565762000955620008f2565b5b92915050565b620009678162000472565b82525050565b60006020820190506200098460008301846200095c565b92915050565b611b80806200099a6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102a6578063a457c2d7146102c4578063a9059cbb146102f4578063dd62ed3e14610324578063f2fde38b146103545761010b565b806370a0823114610232578063715018a61461026257806379cc67901461026c5780638da5cb5b146102885761010b565b8063313ce567116100de578063313ce567146101ac57806339509351146101ca57806340c10f19146101fa57806342966c68146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610370565b6040516101259190611178565b60405180910390f35b61014860048036038101906101439190611233565b610402565b604051610155919061128e565b60405180910390f35b610166610425565b60405161017391906112b8565b60405180910390f35b610196600480360381019061019191906112d3565b61042f565b6040516101a3919061128e565b60405180910390f35b6101b461045e565b6040516101c19190611342565b60405180910390f35b6101e460048036038101906101df9190611233565b610467565b6040516101f1919061128e565b60405180910390f35b610214600480360381019061020f9190611233565b61049e565b005b610230600480360381019061022b919061135d565b6104b4565b005b61024c6004803603810190610247919061138a565b6104c8565b60405161025991906112b8565b60405180910390f35b61026a610510565b005b61028660048036038101906102819190611233565b610524565b005b610290610544565b60405161029d91906113c6565b60405180910390f35b6102ae61056e565b6040516102bb9190611178565b60405180910390f35b6102de60048036038101906102d99190611233565b610600565b6040516102eb919061128e565b60405180910390f35b61030e60048036038101906103099190611233565b610677565b60405161031b919061128e565b60405180910390f35b61033e600480360381019061033991906113e1565b61069a565b60405161034b91906112b8565b60405180910390f35b61036e6004803603810190610369919061138a565b610721565b005b60606003805461037f90611450565b80601f01602080910402602001604051908101604052809291908181526020018280546103ab90611450565b80156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b5050505050905090565b60008061040d6107a4565b905061041a8185856107ac565b600191505092915050565b6000600254905090565b60008061043a6107a4565b9050610447858285610975565b610452858585610a01565b60019150509392505050565b60006012905090565b6000806104726107a4565b9050610493818585610484858961069a565b61048e91906114b0565b6107ac565b600191505092915050565b6104a6610c77565b6104b08282610cf5565b5050565b6104c56104bf6107a4565b82610e4b565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610518610c77565b6105226000611018565b565b610536826105306107a4565b83610975565b6105408282610e4b565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461057d90611450565b80601f01602080910402602001604051908101604052809291908181526020018280546105a990611450565b80156105f65780601f106105cb576101008083540402835291602001916105f6565b820191906000526020600020905b8154815290600101906020018083116105d957829003601f168201915b5050505050905090565b60008061060b6107a4565b90506000610619828661069a565b90508381101561065e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065590611556565b60405180910390fd5b61066b82868684036107ac565b60019250505092915050565b6000806106826107a4565b905061068f818585610a01565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610729610c77565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f906115e8565b60405180910390fd5b6107a181611018565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361081b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108129061167a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361088a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108819061170c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161096891906112b8565b60405180910390a3505050565b6000610981848461069a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109fb57818110156109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490611778565b60405180910390fd5b6109fa84848484036107ac565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a679061180a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad69061189c565b60405180910390fd5b610aea8383836110de565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b679061192e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c5e91906112b8565b60405180910390a3610c718484846110e3565b50505050565b610c7f6107a4565b73ffffffffffffffffffffffffffffffffffffffff16610c9d610544565b73ffffffffffffffffffffffffffffffffffffffff1614610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea9061199a565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90611a06565b60405180910390fd5b610d70600083836110de565b8060026000828254610d8291906114b0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e3391906112b8565b60405180910390a3610e47600083836110e3565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190611a98565b60405180910390fd5b610ec6826000836110de565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390611b2a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fff91906112b8565b60405180910390a3611013836000846110e3565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611122578082015181840152602081019050611107565b60008484015250505050565b6000601f19601f8301169050919050565b600061114a826110e8565b61115481856110f3565b9350611164818560208601611104565b61116d8161112e565b840191505092915050565b60006020820190508181036000830152611192818461113f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111ca8261119f565b9050919050565b6111da816111bf565b81146111e557600080fd5b50565b6000813590506111f7816111d1565b92915050565b6000819050919050565b611210816111fd565b811461121b57600080fd5b50565b60008135905061122d81611207565b92915050565b6000806040838503121561124a5761124961119a565b5b6000611258858286016111e8565b92505060206112698582860161121e565b9150509250929050565b60008115159050919050565b61128881611273565b82525050565b60006020820190506112a3600083018461127f565b92915050565b6112b2816111fd565b82525050565b60006020820190506112cd60008301846112a9565b92915050565b6000806000606084860312156112ec576112eb61119a565b5b60006112fa868287016111e8565b935050602061130b868287016111e8565b925050604061131c8682870161121e565b9150509250925092565b600060ff82169050919050565b61133c81611326565b82525050565b60006020820190506113576000830184611333565b92915050565b6000602082840312156113735761137261119a565b5b60006113818482850161121e565b91505092915050565b6000602082840312156113a05761139f61119a565b5b60006113ae848285016111e8565b91505092915050565b6113c0816111bf565b82525050565b60006020820190506113db60008301846113b7565b92915050565b600080604083850312156113f8576113f761119a565b5b6000611406858286016111e8565b9250506020611417858286016111e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061146857607f821691505b60208210810361147b5761147a611421565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114bb826111fd565b91506114c6836111fd565b92508282019050808211156114de576114dd611481565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006115406025836110f3565b915061154b826114e4565b604082019050919050565b6000602082019050818103600083015261156f81611533565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006115d26026836110f3565b91506115dd82611576565b604082019050919050565b60006020820190508181036000830152611601816115c5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006116646024836110f3565b915061166f82611608565b604082019050919050565b6000602082019050818103600083015261169381611657565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006116f66022836110f3565b91506117018261169a565b604082019050919050565b60006020820190508181036000830152611725816116e9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611762601d836110f3565b915061176d8261172c565b602082019050919050565b6000602082019050818103600083015261179181611755565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006117f46025836110f3565b91506117ff82611798565b604082019050919050565b60006020820190508181036000830152611823816117e7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006118866023836110f3565b91506118918261182a565b604082019050919050565b600060208201905081810360008301526118b581611879565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006119186026836110f3565b9150611923826118bc565b604082019050919050565b600060208201905081810360008301526119478161190b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119846020836110f3565b915061198f8261194e565b602082019050919050565b600060208201905081810360008301526119b381611977565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006119f0601f836110f3565b91506119fb826119ba565b602082019050919050565b60006020820190508181036000830152611a1f816119e3565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a826021836110f3565b9150611a8d82611a26565b604082019050919050565b60006020820190508181036000830152611ab181611a75565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611b146022836110f3565b9150611b1f82611ab8565b604082019050919050565b60006020820190508181036000830152611b4381611b07565b905091905056fea26469706673582212204df6f0de305c90d5e7f095ff995f5884e7b51d307b600671a909171759701b0f64736f6c63430008120033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000087a23000000000000000000000000000000000000000000000000000000000000000435747936000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003747467000000000000000000000000000000000000000000000000000000000083104ec2a0b033b0e90cb66dd5ef2952003edecac053f9e763d78f0e2c2f0282ac98384b2ea04c651be2ab4d969952a5ee6b40f83d62f4d88e10450a0bc57f454a370f89178000000072f870821bd0850ba43b74008261a894ad395b804c8e91a4e6d59215e2f12419e959e1ae87470de4df8200008083104ec1a01f7fcfdbe5e79761fd30e476f458489dedb4e1e121f9590eefbce003be151b10a074bc8a43e91037cd3ac177c59d2eb43778befb6a66b36bbcaa0cbabb00ce136b00000075f8730285012a05f20082c2c094530000000000000000000000000000000000000488063eb89da4ed000084d0e30db083104ec2a08ce3f2e5fd234afeed447beb4bfd0777fc621ed7f07cb49d826e1fa54fd6d531a03bdd815558f8e2abe459fb971ecf58bb8f0e03fe8992c68426cb7f82d7191ff3000000b6f8b404850ba43b74008304577e949ad3c5617ecaa556d6e166787a97081907171230872386f26fc10000b844c7cdea37000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000083104ec2a0b02f8cced42dea51d6c4d95d9c851043cb61acc59652b125dab5c15b0c746baea00fb81dce565097ace45192525ee0a7568eca20431f30fa56753eea27ec9ae5e10000008ef88c55850ba43b74008301bd4194e62a60247d0b9c1d09193b0f60875bc49878f5df80a4e6be6c66000000000000000000000000000000000000000000000000000000000000060983104ec2a0c110ebd798580d7864c4693613d2e7fb38626b189c600c36f83db9a6dda47b2ea04abfdacd85dc5f43e113b741fe6f78ea6a94b21da8065226bbb6a2fa9bb927450000008df88b0b850ba43b740082a72794530000000000000000000000000000000000000480a42e1a7d4d000000000000000000000000000000000000000000000000000177c70b58401983104ec2a0ed05668033a74eb9b07285e0a8540c54b01fd3fa119e4cb193a6f854c80d9a85a0413818156a39ca5bcd5bc764f22b06588b900c179f9ef6ffef7f28eff72df1a1000002d8f902d506850df84758008308ac0e94bbad0e891922a8a4a7e9c39d4cc0559117016fec8705af3107a40000b90264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000164883164560000000000000000000000005300000000000000000000000000000000000004000000000000000000000000d9692f1748afee00face2da35242417dd05a86150000000000000000000000000000000000000000000000000000000000000bb8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c00000000000000000000000000000000000000000000000000000000000d89b40000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000000000000000000000000000006eb9daf6c6714520000000000000000000000000000000000000000000000000005666e940f00000000000000000000000000000000000000000000000000000693090040952000000000000000000000000000654aa3dde9580487fc65b063c397d4999dc4ae010000000000000000000000000000000000000000000000000000000064ef36b400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a0000000000000000000000000000000000000000000000000000000083104ec2a0252b5b29d8e2b3b3ffd69499d07d9ee16d13d0b8fbb60007bf526109b25c97aba0738b9a530befc131d24c8e6d2e8596e26258b6424c1d5325bfab8d793aa714ea000001c9f901c609850ba43b74008301eb058080b90170608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80632e64cec11461003b5780636057361d14610059575b600080fd5b610043610075565b60405161005091906100a1565b60405180910390f35b610073600480360381019061006e91906100ed565b61007e565b005b60008054905090565b8060008190555050565b6000819050919050565b61009b81610088565b82525050565b60006020820190506100b66000830184610092565b92915050565b600080fd5b6100ca81610088565b81146100d557600080fd5b50565b6000813590506100e7816100c1565b92915050565b600060208284031215610103576101026100bc565b5b6000610111848285016100d8565b9150509291505056fea2646970667358221220322c78243e61b783558509c9cc22cb8493dde6925aa5e89a08cdf6e22f279ef164736f6c6343000812003383104ec2a0e7a4a53f728b313e99f65e09c3506537baf7fa8c34dec301f1fe3609a26c93aaa043be096ddd804c6cc54937a3292a232e7eabb9571eb05f7cc04bef34aaa9ec2200000231f9022e10850ba43b740083065ce494d32548ea5911a6336c5a34061e814148c396ae6f80b901c43e5d877b00000000000000000000000000000000000000000000000000000001fdc1b5cb0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000b0a9d798f7c8028b0e467b913a02b547d0528c4a000000000000000000000000000000000000000000000000000000000000f88c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000041bbd932f6795a087a941c37cfd91fa2d61b9a720e657761768de55ad81f008e1426d69cd55a0a85e5c7d375e523e2924fbaf3a58631966802fe0410706e54b2431b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec2a06e0c2d9af4a883d92a15584fcbfc9840b98cae58c2d7e22a271de8bfeaaa8fa0a042ff5570cee0c385a236380fbb31d53abcf4cdf3a10f624348b8fb4912ec135000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" -} \ No newline at end of file