From f93266bb4b81e5d457f618a8276a768004bb606e Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Fri, 23 Sep 2022 16:10:36 -0400 Subject: [PATCH 01/38] wip: write data length to first compact share --- pkg/appconsts/appconsts.go | 15 +++++ pkg/shares/parse_compact_shares.go | 5 +- pkg/shares/split_compact_shares.go | 89 +++++++++++++++++++++++++++--- 3 files changed, 99 insertions(+), 10 deletions(-) diff --git a/pkg/appconsts/appconsts.go b/pkg/appconsts/appconsts.go index 39a798d593..a311a009d0 100644 --- a/pkg/appconsts/appconsts.go +++ b/pkg/appconsts/appconsts.go @@ -2,6 +2,7 @@ package appconsts import ( "bytes" + "encoding/binary" "github.com/celestiaorg/nmt/namespace" "github.com/celestiaorg/rsmt2d" @@ -113,4 +114,18 @@ var ( // that the next message starts at an index that conforms to non-interactive // defaults. NameSpacedPaddedShareBytes = bytes.Repeat([]byte{0}, SparseShareContentSize) + + // CompactShareDataLengthBytes is the number of bytes reserved for the total + // data length that is stored in the first compact share of a reserved + // namespace. This value is the maximum number of bytes required to store + // the data length of a block that only contains compact shares of one type. + // For example, if a block contains only evidence then it could contain: + // MaxSquareSize * MaxSquareSize * ShareSize bytes of evidence. + // + // Assuming MaxSquareSize is 128 and ShareSize is 256, this is 4194304 bytes + // of evidence. It takes 4 bytes to store a varint of 4194304. + // + // https://go.dev/play/p/MynwcDHQ_me + buf = make([]byte, binary.MaxVarintLen64) + CompactShareDataLengthBytes = binary.PutUvarint(buf, MaxSquareSize*MaxSquareSize*ShareSize) ) diff --git a/pkg/shares/parse_compact_shares.go b/pkg/shares/parse_compact_shares.go index 674758e611..13db705061 100644 --- a/pkg/shares/parse_compact_shares.go +++ b/pkg/shares/parse_compact_shares.go @@ -9,7 +9,8 @@ import ( // parseCompactShares takes raw shares and extracts out transactions, // intermediate state roots, or evidence. The returned [][]byte do not have -// namespaces, info bytes, or length delimiters and are ready to be unmarshalled +// namespaces, info bytes, data length delimiter, or unit length +// delimiters and are ready to be unmarshalled func parseCompactShares(shares [][]byte) (data [][]byte, err error) { if len(shares) == 0 { return nil, nil @@ -44,7 +45,7 @@ func (ss *shareStack) resolve() ([][]byte, error) { if !infoByte.IsMessageStart() { return nil, errors.New("first share is not a message start") } - err = ss.peel(ss.shares[0][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareReservedBytes:], true) + err = ss.peel(ss.shares[0][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareDataLengthBytes+appconsts.CompactShareReservedBytes:], true) return ss.data, err } diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 055cbd2b8f..317483e0fa 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -29,8 +29,10 @@ func NewCompactShareSplitter(ns namespace.ID, version uint8) *CompactShareSplitt if err != nil { panic(err) } + placeholderDataLength := make([]byte, appconsts.CompactShareDataLengthBytes) pendingShare.Share = append(pendingShare.Share, ns...) pendingShare.Share = append(pendingShare.Share, byte(infoByte)) + pendingShare.Share = append(pendingShare.Share, placeholderDataLength...) return &CompactShareSplitter{pendingShare: pendingShare, namespace: ns} } @@ -57,10 +59,11 @@ func (css *CompactShareSplitter) WriteEvidence(evd coretypes.Evidence) error { // WriteBytes adds the delimited data to the underlying compact shares. func (css *CompactShareSplitter) WriteBytes(rawData []byte) { - // if this is the first time writing to a pending share, we must add the - // reserved bytes - if len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes { - css.pendingShare.Share = append(css.pendingShare.Share, 0) + // if this is the first time writing to a pending share, we must add a + // placeholder for the reserved bytes + if css.isEmptyPendingShare() { + reservedBytesPlaceholder := make([]byte, appconsts.CompactShareReservedBytes) + css.pendingShare.Share = append(css.pendingShare.Share, reservedBytesPlaceholder...) } txCursor := len(rawData) @@ -126,14 +129,24 @@ func (css *CompactShareSplitter) stackPending() { // Export finalizes and returns the underlying compact shares. func (css *CompactShareSplitter) Export() NamespacedShares { + dataLengthVarint := css.dataLengthVarint() + // add the pending share to the current shares before returning if len(css.pendingShare.Share) > appconsts.NamespaceSize+appconsts.ShareInfoBytes { css.pendingShare.Share = zeroPadIfNecessary(css.pendingShare.Share, appconsts.ShareSize) css.shares = append(css.shares, css.pendingShare) } - // force the last share to have a reserve byte of zero + + css.writeDataLengthVarintToFirstShare(dataLengthVarint) + css.forceLastShareReserveByteToZero() + return css.shares +} + +// forceLastShareReserveByteToZero overwrites the reserve byte of the last share +// with zero. See https://github.com/celestiaorg/celestia-app/issues/779 +func (css *CompactShareSplitter) forceLastShareReserveByteToZero() { if len(css.shares) == 0 { - return css.shares + return } lastShare := css.shares[len(css.shares)-1] rawLastShare := lastShare.Data() @@ -143,7 +156,11 @@ func (css *CompactShareSplitter) Export() NamespacedShares { // confusion for light clients parsing these shares, as the rest of the // data after transaction is padding. See // https://github.com/celestiaorg/celestia-specs/blob/master/src/specs/data_structures.md#share - rawLastShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+i] = byte(0) + if len(css.shares) == 1 { + rawLastShare[appconsts.NamespaceSize+appconsts.CompactShareDataLengthBytes+appconsts.ShareInfoBytes+i] = byte(0) + } else { + rawLastShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+i] = byte(0) + } } newLastShare := NamespacedShare{ @@ -151,7 +168,63 @@ func (css *CompactShareSplitter) Export() NamespacedShares { ID: lastShare.NamespaceID(), } css.shares[len(css.shares)-1] = newLastShare - return css.shares +} + +func (css *CompactShareSplitter) dataLengthVarint() []byte { + if len(css.shares) == 0 && css.isEmptyPendingShare() { + return []byte{} + } + + // declare and initialize the data length + dataLengthVarint := make([]byte, appconsts.CompactShareDataLengthBytes) + binary.PutUvarint(dataLengthVarint, css.dataLength()) + zeroPadIfNecessary(dataLengthVarint, appconsts.CompactShareDataLengthBytes) + + return dataLengthVarint +} + +func (css *CompactShareSplitter) writeDataLengthVarintToFirstShare(dataLengthVarint []byte) { + if len(css.shares) == 0 && css.isEmptyPendingShare() { + return + } + + // write the data length varint to the first share + firstShare := css.shares[0] + rawFirstShare := firstShare.Data() + for i := 0; i < appconsts.CompactShareDataLengthBytes; i++ { + rawFirstShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+i] = dataLengthVarint[i] + } + + // replace existing first share with new first share + newFirstShare := NamespacedShare{ + Share: rawFirstShare, + ID: firstShare.NamespaceID(), + } + css.shares[0] = newFirstShare +} + +// dataLength returns the total length in bytes of all units (transactions, +// intermediate state roots, or evidence) written to this splitter. +// dataLength does not include the # of bytes occupied by the namespace ID or +// the share info byte in each share. dataLength does include the reserved +// byte in each share and the unit length delimiter prefixed to each unit. +func (css *CompactShareSplitter) dataLength() uint64 { + length := uint64(len(css.shares)) * appconsts.CompactShareContentSize + length += uint64(len(css.shares)) * appconsts.CompactShareReservedBytes + if !css.isEmptyPendingShare() { + length += css.pendingShareDataLength() + } + return length +} + +// isEmptyPendingShare returns true if the pending share is empty, false otherwise. +func (css *CompactShareSplitter) isEmptyPendingShare() bool { + return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes +} + +// pendingShareDataLength returns the length of the data in the pending share. +func (css *CompactShareSplitter) pendingShareDataLength() uint64 { + return uint64(len(css.pendingShare.Share) - appconsts.NamespaceSize - appconsts.ShareInfoBytes) } // Count returns the current number of shares that will be made if exporting. From e9848f28eae9072a6a82395bb9e4d440dded421c Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 26 Sep 2022 10:36:01 -0400 Subject: [PATCH 02/38] refactor: extract NumberOfBytesVarint --- pkg/appconsts/appconsts.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/appconsts/appconsts.go b/pkg/appconsts/appconsts.go index a311a009d0..9cac3f2755 100644 --- a/pkg/appconsts/appconsts.go +++ b/pkg/appconsts/appconsts.go @@ -126,6 +126,11 @@ var ( // of evidence. It takes 4 bytes to store a varint of 4194304. // // https://go.dev/play/p/MynwcDHQ_me - buf = make([]byte, binary.MaxVarintLen64) - CompactShareDataLengthBytes = binary.PutUvarint(buf, MaxSquareSize*MaxSquareSize*ShareSize) + CompactShareDataLengthBytes = NumberOfBytesVarint(MaxSquareSize * MaxSquareSize * ShareSize) ) + +// NumberOfBytesVarint calculates the number of bytes needed to write a varint of n +func NumberOfBytesVarint(n uint64) (numberOfBytes int) { + buf := make([]byte, binary.MaxVarintLen64) + return binary.PutUvarint(buf, n) +} From 6f879fe7478e80de5f95a6db4a9b11d67753dab2 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 26 Sep 2022 10:36:28 -0400 Subject: [PATCH 03/38] fix: TestCompactShareWriter --- pkg/shares/split_compact_shares.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 317483e0fa..164faeae26 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -219,7 +219,7 @@ func (css *CompactShareSplitter) dataLength() uint64 { // isEmptyPendingShare returns true if the pending share is empty, false otherwise. func (css *CompactShareSplitter) isEmptyPendingShare() bool { - return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes + return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareDataLengthBytes } // pendingShareDataLength returns the length of the data in the pending share. From a15cff401616d47b54ae0da05880d14ad2f4cee1 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 26 Sep 2022 10:39:48 -0400 Subject: [PATCH 04/38] rename: txLen to unitLen. improve docs --- pkg/shares/parse_compact_shares.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/pkg/shares/parse_compact_shares.go b/pkg/shares/parse_compact_shares.go index 13db705061..251bdaa616 100644 --- a/pkg/shares/parse_compact_shares.go +++ b/pkg/shares/parse_compact_shares.go @@ -49,19 +49,22 @@ func (ss *shareStack) resolve() ([][]byte, error) { return ss.data, err } -// peel recursively parses each chunk of data (either a transaction, -// intermediate state root, or evidence) and adds it to the underlying slice of data. +// peel recursively parses each unit of data (either a transaction, intermediate +// state root, or evidence) and adds it to the underlying slice of data. +// delimited should be `true` if this is the start of the next unit of data (in +// other words the data contains a unitLen delimiter prefixed to the unit). +// delimited should be `false` if calling peel on an in-progress unit. func (ss *shareStack) peel(share []byte, delimited bool) (err error) { if delimited { - var txLen uint64 - share, txLen, err = ParseDelimiter(share) + var unitLen uint64 + share, unitLen, err = ParseDelimiter(share) if err != nil { return err } - if txLen == 0 { + if unitLen == 0 { return nil } - ss.dataLen = txLen + ss.dataLen = unitLen } // safeLen describes the point in the share where it can be safely split. If // split beyond this point, it is possible to break apart a length From 1ce5bad911547ff4aa7b5e61a340e8698b16868a Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 26 Sep 2022 10:58:27 -0400 Subject: [PATCH 05/38] fix: TestCount --- pkg/shares/split_compact_shares.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 164faeae26..294ef7eb5d 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -129,6 +129,10 @@ func (css *CompactShareSplitter) stackPending() { // Export finalizes and returns the underlying compact shares. func (css *CompactShareSplitter) Export() NamespacedShares { + if len(css.shares) == 0 && css.isEmptyPendingShare() { + return []NamespacedShare{} + } + dataLengthVarint := css.dataLengthVarint() // add the pending share to the current shares before returning @@ -229,6 +233,10 @@ func (css *CompactShareSplitter) pendingShareDataLength() uint64 { // Count returns the current number of shares that will be made if exporting. func (css *CompactShareSplitter) Count() (shareCount int) { + if len(css.shares) == 0 && css.isEmptyPendingShare() { + return 0 + } + if len(css.pendingShare.Share) > appconsts.NamespaceSize+appconsts.ShareInfoBytes { // pending share is non-empty, so we must add one to the count return len(css.shares) + 1 From b287b3fde67136d15887b4f36f2640da619ec8e4 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 26 Sep 2022 11:41:38 -0400 Subject: [PATCH 06/38] feat: introduce CompactStartShareContentSize --- app/estimate_square_size.go | 10 +++++----- pkg/appconsts/appconsts.go | 8 ++++++-- pkg/shares/compact_shares_test.go | 18 +++++++++--------- pkg/shares/split_compact_shares.go | 2 +- pkg/shares/split_compact_shares_test.go | 4 ++-- 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/app/estimate_square_size.go b/app/estimate_square_size.go index d13fd89785..8a1832746b 100644 --- a/app/estimate_square_size.go +++ b/app/estimate_square_size.go @@ -34,9 +34,9 @@ func prune(txConf client.TxConfig, txs []*parsedTx, currentShareCount, squareSiz // inorder to tally total contiguous shares removed adjustContigCursor := func(l int) { contigBytesCursor += l + shares.DelimLen(uint64(l)) - if contigBytesCursor >= appconsts.CompactShareContentSize { - removedContiguousShares += (contigBytesCursor / appconsts.CompactShareContentSize) - contigBytesCursor = contigBytesCursor % appconsts.CompactShareContentSize + if contigBytesCursor >= appconsts.CompactContinuationShareContentSize { + removedContiguousShares += (contigBytesCursor / appconsts.CompactContinuationShareContentSize) + contigBytesCursor = contigBytesCursor % appconsts.CompactContinuationShareContentSize } } @@ -175,7 +175,7 @@ func rawShareCount(txs []*parsedTx, evd core.EvidenceList) (txShares, evdShares msgSummaries = append(msgSummaries, msgSummary{shares.MsgSharesUsed(int(pTx.msg.MessageSize)), pTx.msg.MessageNameSpaceId}) } - txShares = txBytes / appconsts.CompactShareContentSize + txShares = txBytes / appconsts.CompactContinuationShareContentSize if txBytes > 0 { txShares++ // add one to round up } @@ -194,7 +194,7 @@ func rawShareCount(txs []*parsedTx, evd core.EvidenceList) (txShares, evdShares evdBytes += e.Size() + shares.DelimLen(uint64(e.Size())) } - evdShares = evdBytes / appconsts.CompactShareContentSize + evdShares = evdBytes / appconsts.CompactContinuationShareContentSize if evdBytes > 0 { evdShares++ // add one to round up } diff --git a/pkg/appconsts/appconsts.go b/pkg/appconsts/appconsts.go index 9cac3f2755..65a4d64415 100644 --- a/pkg/appconsts/appconsts.go +++ b/pkg/appconsts/appconsts.go @@ -32,9 +32,9 @@ const ( // the first unit (transaction, ISR, evidence) in a compact share. CompactShareReservedBytes = 1 - // CompactShareContentSize is the number of bytes usable for data in a compact + // CompactContinuationShareContentSize is the number of bytes usable for data in a continuation compact // (i.e. transactions, ISRs, evidence) share. - CompactShareContentSize = ShareSize - NamespaceSize - ShareInfoBytes - CompactShareReservedBytes + CompactContinuationShareContentSize = ShareSize - NamespaceSize - ShareInfoBytes - CompactShareReservedBytes // SparseShareContentSize is the number of bytes usable for data in a sparse (i.e. // message) share. @@ -127,6 +127,10 @@ var ( // // https://go.dev/play/p/MynwcDHQ_me CompactShareDataLengthBytes = NumberOfBytesVarint(MaxSquareSize * MaxSquareSize * ShareSize) + + // CompactStartShareContentSize is the number of bytes usable for data in a + // compact message start (i.e. transactions, ISRs, evidence) share. + CompactStartShareContentSize = ShareSize - NamespaceSize - ShareInfoBytes - CompactShareDataLengthBytes - CompactShareReservedBytes ) // NumberOfBytesVarint calculates the number of bytes needed to write a varint of n diff --git a/pkg/shares/compact_shares_test.go b/pkg/shares/compact_shares_test.go index c1ab8940bd..d404ddc9e5 100644 --- a/pkg/shares/compact_shares_test.go +++ b/pkg/shares/compact_shares_test.go @@ -62,10 +62,10 @@ func TestFuzz_processCompactShares(t *testing.T) { func Test_processCompactShares(t *testing.T) { // exactTxShareSize is the length of tx that will fit exactly into a single - // share, accounting for namespace id and the length delimiter prepended to + // share, accounting for the tx length delimiter prepended to // each tx. Note that the length delimiter can be 1 to 10 bytes (varint) but // this test assumes it is 1 byte. - const exactTxShareSize = appconsts.CompactShareContentSize - 1 + const exactTxShareSize = appconsts.CompactContinuationShareContentSize - 1 type test struct { name string @@ -76,10 +76,10 @@ func Test_processCompactShares(t *testing.T) { // each test is ran twice, once using txSize as an exact size, and again // using it as a cap for randomly sized txs tests := []test{ - {"single small tx", appconsts.CompactShareContentSize / 8, 1}, - {"many small txs", appconsts.CompactShareContentSize / 8, 10}, - {"single big tx", appconsts.CompactShareContentSize * 4, 1}, - {"many big txs", appconsts.CompactShareContentSize * 4, 10}, + {"single small tx", appconsts.CompactContinuationShareContentSize / 8, 1}, + {"many small txs", appconsts.CompactContinuationShareContentSize / 8, 10}, + {"single big tx", appconsts.CompactContinuationShareContentSize * 4, 1}, + {"many big txs", appconsts.CompactContinuationShareContentSize * 4, 10}, {"single exact size tx", exactTxShareSize, 1}, {"many exact size txs", exactTxShareSize, 10}, } @@ -125,7 +125,7 @@ func Test_processCompactShares(t *testing.T) { func TestCompactShareContainsInfoByte(t *testing.T) { css := NewCompactShareSplitter(appconsts.TxNamespaceID, appconsts.ShareVersion) - txs := generateRandomTransaction(1, appconsts.CompactShareContentSize/4) + txs := generateRandomTransaction(1, appconsts.CompactContinuationShareContentSize/4) for _, tx := range txs { css.WriteTx(tx) @@ -145,7 +145,7 @@ func TestCompactShareContainsInfoByte(t *testing.T) { func TestContiguousCompactShareContainsInfoByte(t *testing.T) { css := NewCompactShareSplitter(appconsts.TxNamespaceID, appconsts.ShareVersion) - txs := generateRandomTransaction(1, appconsts.CompactShareContentSize*4) + txs := generateRandomTransaction(1, appconsts.CompactContinuationShareContentSize*4) for _, tx := range txs { css.WriteTx(tx) @@ -164,7 +164,7 @@ func TestContiguousCompactShareContainsInfoByte(t *testing.T) { } func Test_parseCompactSharesReturnsErrForShareWithStartIndicatorFalse(t *testing.T) { - txs := generateRandomTransaction(2, appconsts.CompactShareContentSize*4) + txs := generateRandomTransaction(2, appconsts.CompactContinuationShareContentSize*4) shares := SplitTxs(txs) _, err := parseCompactShares(shares[1:]) // the second share has the message start indicator set to false assert.Error(t, err) diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 294ef7eb5d..9cc35611b2 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -213,7 +213,7 @@ func (css *CompactShareSplitter) writeDataLengthVarintToFirstShare(dataLengthVar // the share info byte in each share. dataLength does include the reserved // byte in each share and the unit length delimiter prefixed to each unit. func (css *CompactShareSplitter) dataLength() uint64 { - length := uint64(len(css.shares)) * appconsts.CompactShareContentSize + length := uint64(len(css.shares)) * appconsts.CompactContinuationShareContentSize length += uint64(len(css.shares)) * appconsts.CompactShareReservedBytes if !css.isEmptyPendingShare() { length += css.pendingShareDataLength() diff --git a/pkg/shares/split_compact_shares_test.go b/pkg/shares/split_compact_shares_test.go index 78694f43e0..2153c568f9 100644 --- a/pkg/shares/split_compact_shares_test.go +++ b/pkg/shares/split_compact_shares_test.go @@ -17,8 +17,8 @@ func TestCount(t *testing.T) { {transactions: []coretypes.Tx{}, wantShareCount: 0}, {transactions: []coretypes.Tx{[]byte{0}}, wantShareCount: 1}, {transactions: []coretypes.Tx{bytes.Repeat([]byte{0}, 100)}, wantShareCount: 1}, - {transactions: []coretypes.Tx{bytes.Repeat([]byte{0}, appconsts.CompactShareContentSize+1)}, wantShareCount: 2}, - {transactions: []coretypes.Tx{bytes.Repeat([]byte{0}, appconsts.CompactShareContentSize*2+1)}, wantShareCount: 3}, + {transactions: []coretypes.Tx{bytes.Repeat([]byte{0}, appconsts.CompactContinuationShareContentSize+1)}, wantShareCount: 2}, + {transactions: []coretypes.Tx{bytes.Repeat([]byte{0}, appconsts.CompactContinuationShareContentSize*2+1)}, wantShareCount: 3}, } for _, tc := range testCases { css := NewCompactShareSplitter(appconsts.TxNamespaceID, appconsts.ShareVersion) From 55dd4125ea35e6f25d4f25dad07b980ce0db9ace Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 26 Sep 2022 13:03:19 -0400 Subject: [PATCH 07/38] fix: all tests cases of TestTxSharePosition but one --- pkg/prove/proof.go | 28 +++++++++++++++++++++++----- pkg/prove/proof_test.go | 38 ++++++++++++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/pkg/prove/proof.go b/pkg/prove/proof.go index 763b525961..1993b7dfef 100644 --- a/pkg/prove/proof.go +++ b/pkg/prove/proof.go @@ -97,20 +97,38 @@ func txSharePosition(txs types.Txs, txIndex uint64) (startSharePos, endSharePos return startSharePos, endSharePos, errors.New("transaction index is greater than the number of txs") } - totalLen := 0 + prevTxTotalLen := 0 for i := uint64(0); i < txIndex; i++ { txLen := len(txs[i]) - totalLen += (shares.DelimLen(uint64(txLen)) + txLen) + prevTxTotalLen += (shares.DelimLen(uint64(txLen)) + txLen) } - txLen := len(txs[txIndex]) + currentTxLen := len(txs[txIndex]) + currentTxTotalLen := currentTxLen + shares.DelimLen(uint64(currentTxLen)) - startSharePos = uint64((totalLen) / appconsts.CompactShareContentSize) - endSharePos = uint64((totalLen + txLen + shares.DelimLen(uint64(txLen))) / appconsts.CompactShareContentSize) + startSharePos = txShareIndex(prevTxTotalLen) + endSharePos = txShareIndex(prevTxTotalLen + currentTxTotalLen) return startSharePos, endSharePos, nil } +// txShareIndex returns the index of the compact share that would contain +// transactions with totalTxLen +func txShareIndex(totalTxLen int) (index uint64) { + if totalTxLen <= appconsts.CompactStartShareContentSize { + return 0 + } + + index++ + totalTxLen -= appconsts.CompactStartShareContentSize + + for totalTxLen > appconsts.CompactContinuationShareContentSize { + index++ + totalTxLen -= appconsts.CompactContinuationShareContentSize + } + return index +} + // genRowShares progessively generates data square rows from block data func genRowShares(codec rsmt2d.Codec, data types.Data, startRow, endRow uint64) ([][][]byte, error) { if endRow > data.OriginalSquareSize { diff --git a/pkg/prove/proof_test.go b/pkg/prove/proof_test.go index c017b8ecae..b635e8570c 100644 --- a/pkg/prove/proof_test.go +++ b/pkg/prove/proof_test.go @@ -29,7 +29,7 @@ func TestTxInclusion(t *testing.T) { overlappingRowsBlockData := types.Data{ Txs: types.ToTxs( [][]byte{ - tmrand.Bytes(appconsts.CompactShareContentSize*overlappingSquareSize + 1), + tmrand.Bytes(appconsts.CompactContinuationShareContentSize*overlappingSquareSize + 1), tmrand.Bytes(10000), }, ), @@ -38,7 +38,7 @@ func TestTxInclusion(t *testing.T) { overlappingRowsBlockDataWithMessages := types.Data{ Txs: types.ToTxs( [][]byte{ - tmrand.Bytes(appconsts.CompactShareContentSize*overlappingSquareSize + 1), + tmrand.Bytes(appconsts.CompactContinuationShareContentSize*overlappingSquareSize + 1), tmrand.Bytes(10000), }, ), @@ -96,10 +96,10 @@ func TestTxSharePosition(t *testing.T) { name: "one large tx", txs: generateRandomlySizedTxs(1, 2000), }, - { - name: "many large txs", - txs: generateRandomlySizedTxs(100, 2000), - }, + // { + // name: "many large txs", + // txs: generateRandomlySizedTxs(100, 2000), + // }, } type startEndPoints struct { @@ -133,6 +133,32 @@ func TestTxSharePosition(t *testing.T) { } } +func TestTxShareIndex(t *testing.T) { + type testCase struct { + totalTxLen int + wantIndex uint64 + } + + tests := []testCase{ + {0, 0}, + {10, 0}, + {100, 0}, + {appconsts.CompactStartShareContentSize, 0}, + {appconsts.CompactStartShareContentSize + 1, 1}, + {appconsts.CompactStartShareContentSize + appconsts.CompactContinuationShareContentSize, 1}, + {appconsts.CompactStartShareContentSize + appconsts.CompactContinuationShareContentSize + 1, 2}, + {appconsts.CompactStartShareContentSize + (appconsts.CompactContinuationShareContentSize * 2), 2}, + {appconsts.CompactStartShareContentSize + (appconsts.CompactContinuationShareContentSize * 2) + 1, 3}, + } + + for _, tt := range tests { + got := txShareIndex(tt.totalTxLen) + if got != tt.wantIndex { + t.Errorf("txShareIndex(%d) got %d, want %d", tt.totalTxLen, got, tt.wantIndex) + } + } +} + // TODO: Uncomment/fix this test after we've adjusted tx inclusion proofs to // work using non-interactive defaults // func Test_genRowShares(t *testing.T) { From 11027e93e8af86ccc691208d396bb97b51734c00 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 26 Sep 2022 14:53:41 -0400 Subject: [PATCH 08/38] fix: joinByteSlice impl --- pkg/prove/proof_test.go | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/pkg/prove/proof_test.go b/pkg/prove/proof_test.go index c017b8ecae..73a15b8831 100644 --- a/pkg/prove/proof_test.go +++ b/pkg/prove/proof_test.go @@ -3,7 +3,6 @@ package prove import ( "bytes" "math/rand" - "strings" "testing" "github.com/celestiaorg/celestia-app/pkg/appconsts" @@ -117,18 +116,16 @@ func TestTxSharePosition(t *testing.T) { shares := shares.SplitTxs(tt.txs) for i, pos := range positions { - if pos.start == pos.end { - assert.Contains(t, string(shares[pos.start]), string(tt.txs[i]), tt.name, i, pos) - } else { - assert.Contains( - t, - joinByteSlices(shares[pos.start:pos.end+1]...), - string(tt.txs[i]), - tt.name, - pos, - len(tt.txs[i]), - ) - } + rawTx := []byte(tt.txs[i]) + rawTxDataForRange := stripCompactShares(shares, pos.start, pos.end) + assert.Contains( + t, + string(rawTxDataForRange), + string(rawTx), + tt.name, + pos, + len(tt.txs[i]), + ) } } } @@ -188,13 +185,14 @@ func TestTxSharePosition(t *testing.T) { // assert.Equal(t, rawShares, genShares) // } -func joinByteSlices(s ...[]byte) string { - out := make([]string, len(s)) - for i, sl := range s { - sl, _, _ := shares.ParseDelimiter(sl) - out[i] = string(sl[appconsts.NamespaceSize+appconsts.ShareInfoBytes:]) +// stripCompactShares strips the universal prefix (namespace, info byte) and +// reserved byte from a list of compact shares and joins them into a single byte +// slice. +func stripCompactShares(compactShares [][]byte, start uint64, end uint64) (result []byte) { + for i := start; i <= end; i++ { + result = append(result, compactShares[i][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareReservedBytes:]...) } - return strings.Join(out, "") + return result } func generateRandomlySizedTxs(count, max int) types.Txs { From d88a0c1a1aa08b08cf997c20bf9558a79678f638 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 26 Sep 2022 15:07:16 -0400 Subject: [PATCH 09/38] bug: some tests fail b/c last byte of tx is not included in tx range --- pkg/prove/proof_test.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pkg/prove/proof_test.go b/pkg/prove/proof_test.go index 7e609b1626..6e5d36dbeb 100644 --- a/pkg/prove/proof_test.go +++ b/pkg/prove/proof_test.go @@ -95,10 +95,10 @@ func TestTxSharePosition(t *testing.T) { name: "one large tx", txs: generateRandomlySizedTxs(1, 2000), }, - // { - // name: "many large txs", - // txs: generateRandomlySizedTxs(100, 2000), - // }, + { + name: "many large txs", + txs: generateRandomlySizedTxs(100, 2000), + }, } type startEndPoints struct { @@ -216,7 +216,12 @@ func TestTxShareIndex(t *testing.T) { // slice. func stripCompactShares(compactShares [][]byte, start uint64, end uint64) (result []byte) { for i := start; i <= end; i++ { - result = append(result, compactShares[i][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareReservedBytes:]...) + if i == 0 { + // the first transaction share includes a total data length varint + result = append(result, compactShares[i][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareDataLengthBytes+appconsts.CompactShareReservedBytes:]...) + } else { + result = append(result, compactShares[i][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareReservedBytes:]...) + } } return result } From d9c507fc77eaa4fe44fcda252f978f31fc6a9d94 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 26 Sep 2022 15:15:41 -0400 Subject: [PATCH 10/38] rename: ContinuationCompactShareContentSize --- app/estimate_square_size.go | 10 +++++----- pkg/appconsts/appconsts.go | 20 ++++++++++++-------- pkg/prove/proof.go | 8 ++++---- pkg/prove/proof_test.go | 18 +++++++++--------- pkg/shares/compact_shares_test.go | 16 ++++++++-------- pkg/shares/parse_compact_shares.go | 2 +- pkg/shares/split_compact_shares.go | 14 +++++++------- pkg/shares/split_compact_shares_test.go | 4 ++-- 8 files changed, 48 insertions(+), 44 deletions(-) diff --git a/app/estimate_square_size.go b/app/estimate_square_size.go index 4aab77d533..7b4cb22887 100644 --- a/app/estimate_square_size.go +++ b/app/estimate_square_size.go @@ -34,9 +34,9 @@ func prune(txConf client.TxConfig, txs []*parsedTx, currentShareCount, squareSiz // inorder to tally total contiguous shares removed adjustContigCursor := func(l int) { contigBytesCursor += l + shares.DelimLen(uint64(l)) - if contigBytesCursor >= appconsts.CompactContinuationShareContentSize { - removedContiguousShares += (contigBytesCursor / appconsts.CompactContinuationShareContentSize) - contigBytesCursor = contigBytesCursor % appconsts.CompactContinuationShareContentSize + if contigBytesCursor >= appconsts.ContinuationCompactShareContentSize { + removedContiguousShares += (contigBytesCursor / appconsts.ContinuationCompactShareContentSize) + contigBytesCursor = contigBytesCursor % appconsts.ContinuationCompactShareContentSize } } @@ -175,7 +175,7 @@ func rawShareCount(txs []*parsedTx, evd core.EvidenceList) (txShares, evdShares msgSummaries = append(msgSummaries, msgSummary{shares.MsgSharesUsed(int(pTx.msg.MessageSize)), pTx.msg.MessageNamespaceId}) } - txShares = txBytes / appconsts.CompactContinuationShareContentSize + txShares = txBytes / appconsts.ContinuationCompactShareContentSize if txBytes > 0 { txShares++ // add one to round up } @@ -194,7 +194,7 @@ func rawShareCount(txs []*parsedTx, evd core.EvidenceList) (txShares, evdShares evdBytes += e.Size() + shares.DelimLen(uint64(e.Size())) } - evdShares = evdBytes / appconsts.CompactContinuationShareContentSize + evdShares = evdBytes / appconsts.ContinuationCompactShareContentSize if evdBytes > 0 { evdShares++ // add one to round up } diff --git a/pkg/appconsts/appconsts.go b/pkg/appconsts/appconsts.go index 65a4d64415..d84eff2d23 100644 --- a/pkg/appconsts/appconsts.go +++ b/pkg/appconsts/appconsts.go @@ -32,9 +32,11 @@ const ( // the first unit (transaction, ISR, evidence) in a compact share. CompactShareReservedBytes = 1 - // CompactContinuationShareContentSize is the number of bytes usable for data in a continuation compact - // (i.e. transactions, ISRs, evidence) share. - CompactContinuationShareContentSize = ShareSize - NamespaceSize - ShareInfoBytes - CompactShareReservedBytes + // ContinuationCompactShareContentSize is the number of bytes usable for + // data in a continuation compact share. A continuation share is any + // share in a reserved namespace that isn't the first share in that + // namespace. + ContinuationCompactShareContentSize = ShareSize - NamespaceSize - ShareInfoBytes - CompactShareReservedBytes // SparseShareContentSize is the number of bytes usable for data in a sparse (i.e. // message) share. @@ -115,7 +117,7 @@ var ( // defaults. NameSpacedPaddedShareBytes = bytes.Repeat([]byte{0}, SparseShareContentSize) - // CompactShareDataLengthBytes is the number of bytes reserved for the total + // FirstCompactShareDataLengthBytes is the number of bytes reserved for the total // data length that is stored in the first compact share of a reserved // namespace. This value is the maximum number of bytes required to store // the data length of a block that only contains compact shares of one type. @@ -126,11 +128,13 @@ var ( // of evidence. It takes 4 bytes to store a varint of 4194304. // // https://go.dev/play/p/MynwcDHQ_me - CompactShareDataLengthBytes = NumberOfBytesVarint(MaxSquareSize * MaxSquareSize * ShareSize) + FirstCompactShareDataLengthBytes = NumberOfBytesVarint(MaxSquareSize * MaxSquareSize * ShareSize) - // CompactStartShareContentSize is the number of bytes usable for data in a - // compact message start (i.e. transactions, ISRs, evidence) share. - CompactStartShareContentSize = ShareSize - NamespaceSize - ShareInfoBytes - CompactShareDataLengthBytes - CompactShareReservedBytes + // FirstCompactShareContentSize is the number of bytes usable for data in + // the first compact share of a reserved namespace. This type of share + // contains less space for data than a ContinuationCompactShare because the + // first compact share includes a total data length varint. + FirstCompactShareContentSize = ContinuationCompactShareContentSize - FirstCompactShareDataLengthBytes ) // NumberOfBytesVarint calculates the number of bytes needed to write a varint of n diff --git a/pkg/prove/proof.go b/pkg/prove/proof.go index 1993b7dfef..37a6cc4c89 100644 --- a/pkg/prove/proof.go +++ b/pkg/prove/proof.go @@ -115,16 +115,16 @@ func txSharePosition(txs types.Txs, txIndex uint64) (startSharePos, endSharePos // txShareIndex returns the index of the compact share that would contain // transactions with totalTxLen func txShareIndex(totalTxLen int) (index uint64) { - if totalTxLen <= appconsts.CompactStartShareContentSize { + if totalTxLen <= appconsts.FirstCompactShareContentSize { return 0 } index++ - totalTxLen -= appconsts.CompactStartShareContentSize + totalTxLen -= appconsts.FirstCompactShareContentSize - for totalTxLen > appconsts.CompactContinuationShareContentSize { + for totalTxLen > appconsts.ContinuationCompactShareContentSize { index++ - totalTxLen -= appconsts.CompactContinuationShareContentSize + totalTxLen -= appconsts.ContinuationCompactShareContentSize } return index } diff --git a/pkg/prove/proof_test.go b/pkg/prove/proof_test.go index 6e5d36dbeb..b040567398 100644 --- a/pkg/prove/proof_test.go +++ b/pkg/prove/proof_test.go @@ -28,7 +28,7 @@ func TestTxInclusion(t *testing.T) { overlappingRowsBlockData := types.Data{ Txs: types.ToTxs( [][]byte{ - tmrand.Bytes(appconsts.CompactContinuationShareContentSize*overlappingSquareSize + 1), + tmrand.Bytes(appconsts.ContinuationCompactShareContentSize*overlappingSquareSize + 1), tmrand.Bytes(10000), }, ), @@ -37,7 +37,7 @@ func TestTxInclusion(t *testing.T) { overlappingRowsBlockDataWithMessages := types.Data{ Txs: types.ToTxs( [][]byte{ - tmrand.Bytes(appconsts.CompactContinuationShareContentSize*overlappingSquareSize + 1), + tmrand.Bytes(appconsts.ContinuationCompactShareContentSize*overlappingSquareSize + 1), tmrand.Bytes(10000), }, ), @@ -140,12 +140,12 @@ func TestTxShareIndex(t *testing.T) { {0, 0}, {10, 0}, {100, 0}, - {appconsts.CompactStartShareContentSize, 0}, - {appconsts.CompactStartShareContentSize + 1, 1}, - {appconsts.CompactStartShareContentSize + appconsts.CompactContinuationShareContentSize, 1}, - {appconsts.CompactStartShareContentSize + appconsts.CompactContinuationShareContentSize + 1, 2}, - {appconsts.CompactStartShareContentSize + (appconsts.CompactContinuationShareContentSize * 2), 2}, - {appconsts.CompactStartShareContentSize + (appconsts.CompactContinuationShareContentSize * 2) + 1, 3}, + {appconsts.FirstCompactShareContentSize, 0}, + {appconsts.FirstCompactShareContentSize + 1, 1}, + {appconsts.FirstCompactShareContentSize + appconsts.ContinuationCompactShareContentSize, 1}, + {appconsts.FirstCompactShareContentSize + appconsts.ContinuationCompactShareContentSize + 1, 2}, + {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 2), 2}, + {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 2) + 1, 3}, } for _, tt := range tests { @@ -218,7 +218,7 @@ func stripCompactShares(compactShares [][]byte, start uint64, end uint64) (resul for i := start; i <= end; i++ { if i == 0 { // the first transaction share includes a total data length varint - result = append(result, compactShares[i][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareDataLengthBytes+appconsts.CompactShareReservedBytes:]...) + result = append(result, compactShares[i][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes+appconsts.CompactShareReservedBytes:]...) } else { result = append(result, compactShares[i][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareReservedBytes:]...) } diff --git a/pkg/shares/compact_shares_test.go b/pkg/shares/compact_shares_test.go index d404ddc9e5..d92fbd7c0c 100644 --- a/pkg/shares/compact_shares_test.go +++ b/pkg/shares/compact_shares_test.go @@ -65,7 +65,7 @@ func Test_processCompactShares(t *testing.T) { // share, accounting for the tx length delimiter prepended to // each tx. Note that the length delimiter can be 1 to 10 bytes (varint) but // this test assumes it is 1 byte. - const exactTxShareSize = appconsts.CompactContinuationShareContentSize - 1 + const exactTxShareSize = appconsts.ContinuationCompactShareContentSize - 1 type test struct { name string @@ -76,10 +76,10 @@ func Test_processCompactShares(t *testing.T) { // each test is ran twice, once using txSize as an exact size, and again // using it as a cap for randomly sized txs tests := []test{ - {"single small tx", appconsts.CompactContinuationShareContentSize / 8, 1}, - {"many small txs", appconsts.CompactContinuationShareContentSize / 8, 10}, - {"single big tx", appconsts.CompactContinuationShareContentSize * 4, 1}, - {"many big txs", appconsts.CompactContinuationShareContentSize * 4, 10}, + {"single small tx", appconsts.ContinuationCompactShareContentSize / 8, 1}, + {"many small txs", appconsts.ContinuationCompactShareContentSize / 8, 10}, + {"single big tx", appconsts.ContinuationCompactShareContentSize * 4, 1}, + {"many big txs", appconsts.ContinuationCompactShareContentSize * 4, 10}, {"single exact size tx", exactTxShareSize, 1}, {"many exact size txs", exactTxShareSize, 10}, } @@ -125,7 +125,7 @@ func Test_processCompactShares(t *testing.T) { func TestCompactShareContainsInfoByte(t *testing.T) { css := NewCompactShareSplitter(appconsts.TxNamespaceID, appconsts.ShareVersion) - txs := generateRandomTransaction(1, appconsts.CompactContinuationShareContentSize/4) + txs := generateRandomTransaction(1, appconsts.ContinuationCompactShareContentSize/4) for _, tx := range txs { css.WriteTx(tx) @@ -145,7 +145,7 @@ func TestCompactShareContainsInfoByte(t *testing.T) { func TestContiguousCompactShareContainsInfoByte(t *testing.T) { css := NewCompactShareSplitter(appconsts.TxNamespaceID, appconsts.ShareVersion) - txs := generateRandomTransaction(1, appconsts.CompactContinuationShareContentSize*4) + txs := generateRandomTransaction(1, appconsts.ContinuationCompactShareContentSize*4) for _, tx := range txs { css.WriteTx(tx) @@ -164,7 +164,7 @@ func TestContiguousCompactShareContainsInfoByte(t *testing.T) { } func Test_parseCompactSharesReturnsErrForShareWithStartIndicatorFalse(t *testing.T) { - txs := generateRandomTransaction(2, appconsts.CompactContinuationShareContentSize*4) + txs := generateRandomTransaction(2, appconsts.ContinuationCompactShareContentSize*4) shares := SplitTxs(txs) _, err := parseCompactShares(shares[1:]) // the second share has the message start indicator set to false assert.Error(t, err) diff --git a/pkg/shares/parse_compact_shares.go b/pkg/shares/parse_compact_shares.go index 251bdaa616..18c48dee41 100644 --- a/pkg/shares/parse_compact_shares.go +++ b/pkg/shares/parse_compact_shares.go @@ -45,7 +45,7 @@ func (ss *shareStack) resolve() ([][]byte, error) { if !infoByte.IsMessageStart() { return nil, errors.New("first share is not a message start") } - err = ss.peel(ss.shares[0][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareDataLengthBytes+appconsts.CompactShareReservedBytes:], true) + err = ss.peel(ss.shares[0][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes+appconsts.CompactShareReservedBytes:], true) return ss.data, err } diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 9cc35611b2..4ab68e4d47 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -29,7 +29,7 @@ func NewCompactShareSplitter(ns namespace.ID, version uint8) *CompactShareSplitt if err != nil { panic(err) } - placeholderDataLength := make([]byte, appconsts.CompactShareDataLengthBytes) + placeholderDataLength := make([]byte, appconsts.FirstCompactShareDataLengthBytes) pendingShare.Share = append(pendingShare.Share, ns...) pendingShare.Share = append(pendingShare.Share, byte(infoByte)) pendingShare.Share = append(pendingShare.Share, placeholderDataLength...) @@ -161,7 +161,7 @@ func (css *CompactShareSplitter) forceLastShareReserveByteToZero() { // data after transaction is padding. See // https://github.com/celestiaorg/celestia-specs/blob/master/src/specs/data_structures.md#share if len(css.shares) == 1 { - rawLastShare[appconsts.NamespaceSize+appconsts.CompactShareDataLengthBytes+appconsts.ShareInfoBytes+i] = byte(0) + rawLastShare[appconsts.NamespaceSize+appconsts.FirstCompactShareDataLengthBytes+appconsts.ShareInfoBytes+i] = byte(0) } else { rawLastShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+i] = byte(0) } @@ -180,9 +180,9 @@ func (css *CompactShareSplitter) dataLengthVarint() []byte { } // declare and initialize the data length - dataLengthVarint := make([]byte, appconsts.CompactShareDataLengthBytes) + dataLengthVarint := make([]byte, appconsts.FirstCompactShareDataLengthBytes) binary.PutUvarint(dataLengthVarint, css.dataLength()) - zeroPadIfNecessary(dataLengthVarint, appconsts.CompactShareDataLengthBytes) + zeroPadIfNecessary(dataLengthVarint, appconsts.FirstCompactShareDataLengthBytes) return dataLengthVarint } @@ -195,7 +195,7 @@ func (css *CompactShareSplitter) writeDataLengthVarintToFirstShare(dataLengthVar // write the data length varint to the first share firstShare := css.shares[0] rawFirstShare := firstShare.Data() - for i := 0; i < appconsts.CompactShareDataLengthBytes; i++ { + for i := 0; i < appconsts.FirstCompactShareDataLengthBytes; i++ { rawFirstShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+i] = dataLengthVarint[i] } @@ -213,7 +213,7 @@ func (css *CompactShareSplitter) writeDataLengthVarintToFirstShare(dataLengthVar // the share info byte in each share. dataLength does include the reserved // byte in each share and the unit length delimiter prefixed to each unit. func (css *CompactShareSplitter) dataLength() uint64 { - length := uint64(len(css.shares)) * appconsts.CompactContinuationShareContentSize + length := uint64(len(css.shares)) * appconsts.ContinuationCompactShareContentSize length += uint64(len(css.shares)) * appconsts.CompactShareReservedBytes if !css.isEmptyPendingShare() { length += css.pendingShareDataLength() @@ -223,7 +223,7 @@ func (css *CompactShareSplitter) dataLength() uint64 { // isEmptyPendingShare returns true if the pending share is empty, false otherwise. func (css *CompactShareSplitter) isEmptyPendingShare() bool { - return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareDataLengthBytes + return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes } // pendingShareDataLength returns the length of the data in the pending share. diff --git a/pkg/shares/split_compact_shares_test.go b/pkg/shares/split_compact_shares_test.go index 2153c568f9..710da283de 100644 --- a/pkg/shares/split_compact_shares_test.go +++ b/pkg/shares/split_compact_shares_test.go @@ -17,8 +17,8 @@ func TestCount(t *testing.T) { {transactions: []coretypes.Tx{}, wantShareCount: 0}, {transactions: []coretypes.Tx{[]byte{0}}, wantShareCount: 1}, {transactions: []coretypes.Tx{bytes.Repeat([]byte{0}, 100)}, wantShareCount: 1}, - {transactions: []coretypes.Tx{bytes.Repeat([]byte{0}, appconsts.CompactContinuationShareContentSize+1)}, wantShareCount: 2}, - {transactions: []coretypes.Tx{bytes.Repeat([]byte{0}, appconsts.CompactContinuationShareContentSize*2+1)}, wantShareCount: 3}, + {transactions: []coretypes.Tx{bytes.Repeat([]byte{0}, appconsts.ContinuationCompactShareContentSize+1)}, wantShareCount: 2}, + {transactions: []coretypes.Tx{bytes.Repeat([]byte{0}, appconsts.ContinuationCompactShareContentSize*2+1)}, wantShareCount: 3}, } for _, tc := range testCases { css := NewCompactShareSplitter(appconsts.TxNamespaceID, appconsts.ShareVersion) From bbcfd1677050f3700f918c021f78e2d37220b2cb Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Tue, 27 Sep 2022 12:18:23 -0400 Subject: [PATCH 11/38] chore: more test cases for TestTxShareIndex --- pkg/prove/proof_test.go | 167 +++++++++++++++++++++++----------------- 1 file changed, 96 insertions(+), 71 deletions(-) diff --git a/pkg/prove/proof_test.go b/pkg/prove/proof_test.go index b040567398..9be63406ce 100644 --- a/pkg/prove/proof_test.go +++ b/pkg/prove/proof_test.go @@ -2,7 +2,9 @@ package prove import ( "bytes" + "fmt" "math/rand" + "strings" "testing" "github.com/celestiaorg/celestia-app/pkg/appconsts" @@ -14,63 +16,63 @@ import ( "github.com/tendermint/tendermint/types" ) -func TestTxInclusion(t *testing.T) { - typicalBlockData := types.Data{ - Txs: generateRandomlySizedTxs(100, 500), - Messages: generateRandomlySizedMessages(40, 16000), - OriginalSquareSize: 64, - } - lotsOfTxsNoMessages := types.Data{ - Txs: generateRandomlySizedTxs(1000, 500), - OriginalSquareSize: 64, - } - overlappingSquareSize := 16 - overlappingRowsBlockData := types.Data{ - Txs: types.ToTxs( - [][]byte{ - tmrand.Bytes(appconsts.ContinuationCompactShareContentSize*overlappingSquareSize + 1), - tmrand.Bytes(10000), - }, - ), - OriginalSquareSize: uint64(overlappingSquareSize), - } - overlappingRowsBlockDataWithMessages := types.Data{ - Txs: types.ToTxs( - [][]byte{ - tmrand.Bytes(appconsts.ContinuationCompactShareContentSize*overlappingSquareSize + 1), - tmrand.Bytes(10000), - }, - ), - Messages: generateRandomlySizedMessages(8, 400), - OriginalSquareSize: uint64(overlappingSquareSize), - } +// func TestTxInclusion(t *testing.T) { +// typicalBlockData := types.Data{ +// Txs: generateRandomlySizedTxs(100, 500), +// Messages: generateRandomlySizedMessages(40, 16000), +// OriginalSquareSize: 64, +// } +// lotsOfTxsNoMessages := types.Data{ +// Txs: generateRandomlySizedTxs(1000, 500), +// OriginalSquareSize: 64, +// } +// overlappingSquareSize := 16 +// overlappingRowsBlockData := types.Data{ +// Txs: types.ToTxs( +// [][]byte{ +// tmrand.Bytes(appconsts.ContinuationCompactShareContentSize*overlappingSquareSize + 1), +// tmrand.Bytes(10000), +// }, +// ), +// OriginalSquareSize: uint64(overlappingSquareSize), +// } +// overlappingRowsBlockDataWithMessages := types.Data{ +// Txs: types.ToTxs( +// [][]byte{ +// tmrand.Bytes(appconsts.ContinuationCompactShareContentSize*overlappingSquareSize + 1), +// tmrand.Bytes(10000), +// }, +// ), +// Messages: generateRandomlySizedMessages(8, 400), +// OriginalSquareSize: uint64(overlappingSquareSize), +// } - type test struct { - data types.Data - } - tests := []test{ - { - typicalBlockData, - }, - { - lotsOfTxsNoMessages, - }, - { - overlappingRowsBlockData, - }, - { - overlappingRowsBlockDataWithMessages, - }, - } +// type test struct { +// data types.Data +// } +// tests := []test{ +// { +// typicalBlockData, +// }, +// { +// lotsOfTxsNoMessages, +// }, +// { +// overlappingRowsBlockData, +// }, +// { +// overlappingRowsBlockDataWithMessages, +// }, +// } - for _, tt := range tests { - for i := 0; i < len(tt.data.Txs); i++ { - txProof, err := TxInclusion(appconsts.DefaultCodec(), tt.data, uint64(i)) - require.NoError(t, err) - assert.True(t, txProof.VerifyProof()) - } - } -} +// for _, tt := range tests { +// for i := 0; i < len(tt.data.Txs); i++ { +// txProof, err := TxInclusion(appconsts.DefaultCodec(), tt.data, uint64(i)) +// require.NoError(t, err) +// assert.True(t, txProof.VerifyProof()) +// } +// } +// } func TestTxSharePosition(t *testing.T) { type test struct { @@ -79,26 +81,35 @@ func TestTxSharePosition(t *testing.T) { } tests := []test{ - { - name: "typical", - txs: generateRandomlySizedTxs(44, 200), - }, + // { + // name: "typical", + // txs: generateRandomlySizedTxs(44, 200), + // }, { name: "many small tx", txs: generateRandomlySizedTxs(444, 100), }, - { - name: "one small tx", - txs: generateRandomlySizedTxs(1, 200), - }, - { - name: "one large tx", - txs: generateRandomlySizedTxs(1, 2000), - }, - { - name: "many large txs", - txs: generateRandomlySizedTxs(100, 2000), - }, + // { + // name: "many small tx (without randomness)", + // txs: types.Txs{types.Tx([]byte(`Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. orem ipsum dolor sit amet, consectetur adipiscing elit. Sed condimentum orci eu purus tristique tempor. Donec tincidunt dignissim vestibulum. In hac habitasse platea dictumst. Fusce fringilla, purus et eleifend elementum, ex mi volutpat erat, non sodales quam nisl id lacus. Sed at enim nec nunc imperdiet rutrum ac sit amet neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed fringilla laoreet faucibus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque faucibus, nisi ac gravida consectetur, eros nulla ornare lorem, id scelerisque sapien arcu nec risus. Aliquam consequat, leo sit amet scelerisque egestas, orci sem fringilla nisi, ac sodales tellus justo et lorem. Fusce accumsan, lacus eu imperdiet faucibus, dui est aliquet diam, semper malesuada elit nulla quis arcu. Proin elementum tristique ultricies. Nam luctus lorem sit amet odio eleifend sagittis. Donec hendrerit enim vel est faucibus, nec aliquam ligula lobortis. Fusce elementum, felis id pulvinar fringilla, nisl ipsum ullamcorper felis, in vulputate elit lacus ut nisi. Fusce placerat sit amet diam ac sodales. + // Aliquam eu consequat leo. Integer lacinia mattis nisi nec commodo. Maecenas interdum leo quam, mattis tempus ligula molestie vitae. Proin ut nisl felis. Donec vestibulum a sapien cursus euismod. Vestibulum efficitur non velit vitae venenatis. Donec quis condimentum risus. Morbi leo nibh, luctus ac nisl ornare, interdum facilisis nibh. Fusce lacinia justo felis, vitae venenatis libero pretium ac. + // Cras non lectus vulputate orci pretium mattis id eu nulla. Ut egestas auctor magna, non malesuada erat finibus eu. Proin luctus sapien nec velit tristique, eget molestie enim consequat. Vivamus vel feugiat neque. Aenean vel finibus turpis. Mauris sed nibh purus. Sed vestibulum sed sapien quis posuere. Praesent ornare porttitor laoreet. Nulla facilisi. Sed in tellus hendrerit, euismod velit vitae, elementum ex. Morbi feugiat nisl et lacus tincidunt, vel laoreet velit ultricies. + // Sed ac magna ut mi ornare rutrum ac sit amet sem. In a dolor ut justo imperdiet facilisis nec vitae arcu. Integer sed sapien sed turpis consequat placerat. Cras posuere vel velit ac aliquet. Fusce volutpat sit amet libero et bibendum. Mauris rhoncus enim ipsum, sit amet posuere nibh mollis a. Aliquam tincidunt felis id mauris sagittis, id ultricies ante maximus. Nulla sodales neque vitae convallis rhoncus. Vestibulum facilisis, sem quis iaculis commodo, turpis est mollis justo, faucibus sollicitudin mauris tortor sed quam. + // Nulla in mauris ut ex consequat ultricies non id ipsum. Duis elementum suscipit lorem id tempor. Mauris ultrices justo dui, sed dignissim nisl porta sit amet. Sed auctor felis mauris. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer eu nunc lacus. Duis posuere lobortis eros. Curabitur aliquam massa et enim auctor, eget faucibus est vehicula. + // `)), types.Tx([]byte("bar")), types.Tx([]byte("buzz"))}, + // }, + // { + // name: "one small tx", + // txs: generateRandomlySizedTxs(1, 200), + // }, + // { + // name: "one large tx", + // txs: generateRandomlySizedTxs(1, 2000), + // }, + // { + // name: "many large txs", + // txs: generateRandomlySizedTxs(100, 2000), + // }, } type startEndPoints struct { @@ -118,6 +129,12 @@ func TestTxSharePosition(t *testing.T) { for i, pos := range positions { rawTx := []byte(tt.txs[i]) rawTxDataForRange := stripCompactShares(shares, pos.start, pos.end) + if !strings.Contains(string(rawTxDataForRange), string(rawTx)) { + fmt.Printf("txs: %+v\n", tt.txs) + fmt.Printf("shares: %+v\n", shares) + fmt.Printf("rawTx: %+v\n", rawTx) + fmt.Printf("rawTxDataForRange: %+v\n", rawTxDataForRange) + } assert.Contains( t, string(rawTxDataForRange), @@ -146,6 +163,14 @@ func TestTxShareIndex(t *testing.T) { {appconsts.FirstCompactShareContentSize + appconsts.ContinuationCompactShareContentSize + 1, 2}, {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 2), 2}, {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 2) + 1, 3}, + // 81 compact shares + partially filled out last share + {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 80) + 160, 81}, + // 81 compact shares + full last share + {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 80) + 246, 81}, + // 82 compact shares + one byte in last share + {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 80) + 247, 82}, + // 82 compact shares + two bytes in last share + {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 80) + 248, 82}, } for _, tt := range tests { From 1229433d94216656bc16bb796865740947250d5c Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Tue, 27 Sep 2022 14:24:37 -0400 Subject: [PATCH 12/38] discovered bug in compact share splitting --- pkg/prove/proof.go | 8 +++++--- pkg/prove/proof_test.go | 28 +++++++++++++--------------- pkg/shares/compact_shares_test.go | 1 + 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/pkg/prove/proof.go b/pkg/prove/proof.go index 37a6cc4c89..1c7d9b3e5e 100644 --- a/pkg/prove/proof.go +++ b/pkg/prove/proof.go @@ -2,6 +2,7 @@ package prove import ( "errors" + "fmt" "github.com/celestiaorg/celestia-app/pkg/appconsts" "github.com/celestiaorg/celestia-app/pkg/shares" @@ -104,11 +105,12 @@ func txSharePosition(txs types.Txs, txIndex uint64) (startSharePos, endSharePos } currentTxLen := len(txs[txIndex]) - currentTxTotalLen := currentTxLen + shares.DelimLen(uint64(currentTxLen)) + currentTxTotalLen := shares.DelimLen(uint64(currentTxLen)) + currentTxLen + endOfCurrentTxLen := prevTxTotalLen + currentTxTotalLen startSharePos = txShareIndex(prevTxTotalLen) - endSharePos = txShareIndex(prevTxTotalLen + currentTxTotalLen) - + endSharePos = txShareIndex(endOfCurrentTxLen) + fmt.Printf("prevTxTotalLen: %d, endOfCurrentTxLen: %d, startSharePos: %d, endSharePos %d, currentTxTotalLen %d\n", prevTxTotalLen, endOfCurrentTxLen, startSharePos, endSharePos, currentTxTotalLen) return startSharePos, endSharePos, nil } diff --git a/pkg/prove/proof_test.go b/pkg/prove/proof_test.go index 9be63406ce..8acccd6766 100644 --- a/pkg/prove/proof_test.go +++ b/pkg/prove/proof_test.go @@ -85,19 +85,14 @@ func TestTxSharePosition(t *testing.T) { // name: "typical", // txs: generateRandomlySizedTxs(44, 200), // }, - { - name: "many small tx", - txs: generateRandomlySizedTxs(444, 100), - }, // { - // name: "many small tx (without randomness)", - // txs: types.Txs{types.Tx([]byte(`Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. orem ipsum dolor sit amet, consectetur adipiscing elit. Sed condimentum orci eu purus tristique tempor. Donec tincidunt dignissim vestibulum. In hac habitasse platea dictumst. Fusce fringilla, purus et eleifend elementum, ex mi volutpat erat, non sodales quam nisl id lacus. Sed at enim nec nunc imperdiet rutrum ac sit amet neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed fringilla laoreet faucibus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque faucibus, nisi ac gravida consectetur, eros nulla ornare lorem, id scelerisque sapien arcu nec risus. Aliquam consequat, leo sit amet scelerisque egestas, orci sem fringilla nisi, ac sodales tellus justo et lorem. Fusce accumsan, lacus eu imperdiet faucibus, dui est aliquet diam, semper malesuada elit nulla quis arcu. Proin elementum tristique ultricies. Nam luctus lorem sit amet odio eleifend sagittis. Donec hendrerit enim vel est faucibus, nec aliquam ligula lobortis. Fusce elementum, felis id pulvinar fringilla, nisl ipsum ullamcorper felis, in vulputate elit lacus ut nisi. Fusce placerat sit amet diam ac sodales. - // Aliquam eu consequat leo. Integer lacinia mattis nisi nec commodo. Maecenas interdum leo quam, mattis tempus ligula molestie vitae. Proin ut nisl felis. Donec vestibulum a sapien cursus euismod. Vestibulum efficitur non velit vitae venenatis. Donec quis condimentum risus. Morbi leo nibh, luctus ac nisl ornare, interdum facilisis nibh. Fusce lacinia justo felis, vitae venenatis libero pretium ac. - // Cras non lectus vulputate orci pretium mattis id eu nulla. Ut egestas auctor magna, non malesuada erat finibus eu. Proin luctus sapien nec velit tristique, eget molestie enim consequat. Vivamus vel feugiat neque. Aenean vel finibus turpis. Mauris sed nibh purus. Sed vestibulum sed sapien quis posuere. Praesent ornare porttitor laoreet. Nulla facilisi. Sed in tellus hendrerit, euismod velit vitae, elementum ex. Morbi feugiat nisl et lacus tincidunt, vel laoreet velit ultricies. - // Sed ac magna ut mi ornare rutrum ac sit amet sem. In a dolor ut justo imperdiet facilisis nec vitae arcu. Integer sed sapien sed turpis consequat placerat. Cras posuere vel velit ac aliquet. Fusce volutpat sit amet libero et bibendum. Mauris rhoncus enim ipsum, sit amet posuere nibh mollis a. Aliquam tincidunt felis id mauris sagittis, id ultricies ante maximus. Nulla sodales neque vitae convallis rhoncus. Vestibulum facilisis, sem quis iaculis commodo, turpis est mollis justo, faucibus sollicitudin mauris tortor sed quam. - // Nulla in mauris ut ex consequat ultricies non id ipsum. Duis elementum suscipit lorem id tempor. Mauris ultrices justo dui, sed dignissim nisl porta sit amet. Sed auctor felis mauris. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer eu nunc lacus. Duis posuere lobortis eros. Curabitur aliquam massa et enim auctor, eget faucibus est vehicula. - // `)), types.Tx([]byte("bar")), types.Tx([]byte("buzz"))}, + // name: "many small tx", + // txs: generateRandomlySizedTxs(444, 100), // }, + { + name: "many small tx (without randomness)", + txs: types.Txs{types.Tx{0x49, 0x88, 0x8b, 0x74, 0xd9, 0x88, 0xfc, 0x10, 0x3c, 0x61, 0x53, 0xe1, 0xf, 0x1b, 0x7e, 0xc7, 0x8d, 0xd6, 0x18, 0x62, 0xc5, 0x93, 0x72, 0x85, 0x29, 0x82, 0xc, 0xad, 0x70, 0xcd, 0x5e, 0x38, 0xb4, 0x22, 0x1a, 0x96, 0x5f, 0x51, 0xbc, 0x67, 0x82, 0xab, 0x17, 0xd1, 0x6a, 0xb8, 0xc4, 0x18, 0xe, 0xd, 0xd4, 0xb, 0xf8, 0xe0, 0x94, 0x6a, 0xcd, 0x72, 0x33, 0xde, 0x6, 0x49, 0x24, 0xda, 0x69, 0x19, 0x88, 0x21, 0xe4, 0xe5, 0x5c, 0x1f, 0xe9, 0xfc, 0x4f, 0xf2, 0x85, 0xaa, 0x4e, 0x6c, 0xba, 0x99, 0xf, 0xd3, 0x12, 0x4c}, types.Tx{0xcc, 0x35, 0x13, 0x1f, 0xf6, 0x61, 0x4c, 0xed, 0x2d, 0xd5, 0x20, 0x34, 0x8b, 0x42, 0xdb, 0x18, 0xe9, 0x92, 0x57, 0x5a, 0xb, 0xf6, 0x18, 0x94, 0x9c, 0x6f, 0x19, 0x13, 0x86, 0x43, 0xc2, 0x9b, 0xc5, 0x41, 0x1d, 0xf8, 0x22}, types.Tx{0xf9, 0x68, 0x5a, 0x7e, 0x16, 0x72, 0x7c, 0x41, 0x64, 0xf2, 0x2f, 0x4d, 0x5f, 0x6b, 0x4, 0x52, 0x7e, 0xd1, 0xf4, 0x70, 0x5, 0x5b}, types.Tx{0xa8, 0xc8, 0x5b, 0xd5, 0xd2, 0x7a, 0xd2, 0xdb, 0xb4, 0x1b, 0x3e, 0x69, 0x8f, 0x2a, 0x78, 0x9f, 0x16, 0xdc, 0x6f, 0xb3, 0xab, 0xd4, 0x7d, 0xd, 0xdc, 0x3, 0xf5, 0x2f, 0xb6, 0x65, 0xfa, 0x94, 0xb3, 0x69, 0x57, 0x65, 0xd1, 0x6c, 0x2, 0xaf, 0xab, 0x67, 0xcc, 0x6e, 0x82, 0x30, 0xf, 0x20, 0x55, 0x49, 0x63, 0xdd, 0xa9, 0x38, 0x13, 0x8b, 0x5a, 0x3, 0xec}, types.Tx{0x2, 0x46, 0x8a, 0x37, 0xc0, 0x60, 0x28, 0x5b, 0xcf, 0xad, 0x78, 0xdb}, types.Tx{0xb9, 0x9c, 0xe0, 0x5f, 0x2b, 0x65, 0x5e, 0xa9, 0x5d, 0x54, 0x9, 0xe3, 0xa2, 0xd5, 0x2f, 0x59, 0x36, 0x9f, 0x7f, 0x5d, 0x5, 0x74, 0xa7, 0xeb, 0x8f, 0x6d, 0x3d, 0x4c, 0xf8, 0xc0}, types.Tx{0x17, 0x7, 0x63, 0xcf, 0xf3, 0x39, 0x6d, 0x4a, 0x44, 0xf9, 0x21, 0x6b, 0x39, 0xde, 0x1c, 0xea, 0x70, 0xe, 0x4b, 0x68, 0x66, 0xd1, 0x37, 0xfe, 0xd3, 0xba, 0xc7, 0xd1, 0x78, 0xa5, 0x8a, 0xc3, 0x3b, 0x44, 0x30, 0x89, 0x41, 0xa0, 0xe4, 0x3f, 0xa6, 0xc7, 0x2a, 0x5b, 0x75, 0x37, 0x44, 0x19, 0xd8, 0x71, 0x9b, 0x2a, 0xac, 0x2b, 0x7b, 0xa6, 0xe6}, types.Tx{0x99, 0xcf, 0x86, 0x5d, 0xb1, 0x30, 0x2, 0xc8, 0x8f, 0x10, 0xb4, 0xfb, 0xb9, 0x7d, 0x70, 0x8a, 0x16, 0xd2, 0x6b, 0x71, 0x49, 0x48, 0x5f, 0x83, 0x77, 0xeb, 0x97, 0xbc, 0x3c, 0xa2, 0x91, 0x9c, 0x61, 0x16, 0x3a, 0x56, 0x40, 0xa2, 0x2d, 0xde, 0x6f, 0x33, 0x76, 0x5f, 0x4d, 0xe0, 0xe8, 0x50, 0xd6, 0x4a, 0x92, 0x42, 0xaf, 0x8f, 0x36, 0xc9, 0x17, 0x5d, 0x38, 0xac, 0x33, 0xeb, 0x4, 0xb6, 0x29, 0x78, 0x33, 0x70, 0x4b, 0x25, 0x1, 0xb, 0x2d, 0x8c, 0xb5, 0xd8, 0x80}, types.Tx{0xe8, 0x2f, 0x64, 0x0, 0xea, 0xcb, 0xc3, 0x9e, 0x2d, 0x6e, 0xf, 0x98, 0x57, 0xa8, 0x64, 0x8c, 0xd8, 0x1c, 0x5e, 0x4b, 0xf9, 0xd, 0x48, 0xbd, 0x92, 0x3d, 0xd0, 0x9a, 0x5a, 0x59, 0x14, 0x2, 0x38, 0x81, 0xf4, 0xc2, 0x13, 0x26, 0x8d, 0x78, 0xaf, 0xd7, 0xf4, 0x86, 0x1f, 0xb8, 0x72, 0x58, 0xfc, 0x64, 0x62, 0xb4, 0x11, 0x17, 0x14, 0xff, 0xde, 0x88, 0x4b, 0x82}, types.Tx{0x32, 0x58, 0x9a, 0x8f, 0x76, 0xd3, 0xbf, 0x1b, 0x11, 0x23, 0x6d, 0xcf, 0xca, 0x80, 0x68, 0x6f, 0xae, 0x9e, 0xa1, 0xdd, 0x87}, types.Tx{0x4e, 0xdb, 0x6a, 0x8c, 0x3, 0x37, 0xed, 0xfb, 0xf1, 0x25, 0x88, 0x3d, 0x42, 0x94, 0xeb, 0x32, 0xc1, 0x87, 0x1e, 0xc5, 0xb, 0xcd, 0xaf, 0x68, 0x3c, 0x47, 0xdc, 0x54, 0x87, 0xad, 0xda, 0x72, 0xf0, 0x33, 0x51, 0x88, 0xc, 0x4b, 0xf, 0x11, 0xea, 0x18, 0xec, 0xb4, 0xce, 0x4f, 0x77, 0x4f, 0x40, 0xd1, 0x7e, 0x97, 0xf7}, types.Tx{0xad, 0xfd, 0x92, 0x9e, 0x8b, 0x8b, 0xd8, 0x58, 0x54, 0xe6, 0x20, 0x4a, 0x88, 0x3e, 0xd6, 0x7e, 0x5, 0x34, 0x1a, 0xd6, 0x30, 0xd0, 0x91, 0x7d, 0x63}, types.Tx{0xad, 0xea, 0xcc, 0x67, 0x42, 0xff, 0xd5, 0x13, 0xf, 0x3d, 0xca, 0x1a, 0x11, 0x41, 0x45, 0x50, 0x86, 0xe9, 0xf2, 0xdf, 0xe7, 0x9e, 0xe4, 0x16, 0x26, 0x8, 0xd7, 0x59}, types.Tx{0x74, 0x12, 0x43, 0x55, 0xc4, 0x40, 0xd0, 0xa4, 0x3e, 0x27, 0x14, 0x94}, types.Tx{0x6e, 0x33, 0xb3, 0xa8, 0xad, 0x8, 0x6d, 0xd2, 0x73, 0x17, 0xbf, 0x68, 0x6b, 0x58, 0xb, 0xc1, 0xd, 0x7f, 0x7f, 0x22}, types.Tx{0xdb, 0x18, 0x94, 0xc8, 0x5e, 0x5a, 0xe4, 0x89, 0x43, 0x58, 0x1e, 0xb4, 0x87, 0x1f, 0xc, 0x8d, 0x15, 0x32}, types.Tx{0x77, 0xc, 0xfd, 0xd0, 0x59, 0x76, 0xc6, 0xe5, 0xfe, 0x70, 0x41, 0x90, 0x44, 0x26, 0x81, 0xe2, 0xa9, 0x75, 0x92, 0x63, 0x3f, 0x68, 0x4c, 0x15, 0xf6, 0x63, 0xc0, 0x82, 0xb5, 0x85, 0xa4, 0x17, 0x5e, 0xf, 0x79, 0x60, 0x1a, 0x3a, 0x34, 0x63, 0x3e, 0xe8, 0x27, 0x2c, 0xab, 0xf, 0xa6, 0x8b, 0xea, 0x8a, 0x7b, 0x57, 0x35, 0xdb, 0x13, 0x5b, 0xa4, 0xbe, 0xaf, 0x7c, 0x49, 0x6f, 0xdc, 0xd9, 0x3a, 0x1b, 0x76, 0xf4, 0x71, 0x33, 0xbe, 0x6c, 0xae, 0x3a, 0xec, 0x4f, 0x67, 0xdc, 0x0, 0x9b, 0x7e, 0xe1, 0xa3, 0x28, 0x2, 0x4d, 0x47, 0x5e, 0x9b, 0x98, 0x33, 0xe7, 0x99, 0x9c, 0x6b, 0xdd, 0x38}, types.Tx{0xc3, 0x25, 0x38, 0xf3, 0x8, 0xdb, 0xb5, 0xbf, 0x90, 0x70, 0xac, 0x3, 0xd3, 0x85, 0x26}, types.Tx{0x16, 0xfa, 0x1e, 0x7a, 0xa4, 0x25, 0x6b, 0x3f, 0x15, 0xff, 0x3d, 0x24, 0x52, 0xe5, 0x6a, 0x4e, 0x81, 0x8d, 0xc4, 0x16, 0xd4, 0xe6, 0x26, 0x5e, 0x45, 0x10, 0x91, 0xf9, 0x56, 0xfa, 0xb1, 0x57, 0x22, 0xdf, 0x11, 0x92, 0xb3, 0x5e}, types.Tx{0xa2, 0xd9, 0x10, 0x65, 0x47, 0x96, 0xa3, 0xd7, 0x12, 0x2a, 0xee, 0x1, 0x5f, 0x8, 0xab, 0x35, 0xc0, 0xbf, 0xb6, 0x86, 0xc8, 0xe7, 0x39, 0xfa, 0xf4, 0xfa, 0x8d, 0x21, 0x9, 0xc1, 0xcc, 0x47, 0x32, 0xf8, 0xf0, 0x31, 0xd5, 0x81, 0x73, 0x1c, 0xae, 0x2a, 0x90}, types.Tx{0x62, 0xf7, 0xf6, 0x2f}, types.Tx{0x41, 0xa4, 0x29, 0xfc, 0x7f, 0x9d, 0x43, 0xc7, 0x25, 0x2, 0xe8, 0xff, 0x92, 0xe5, 0x94, 0x89, 0x15, 0x80, 0xc9, 0x21, 0x8b, 0xdc, 0x8d, 0xd, 0xfe, 0x9, 0x52, 0x3b, 0x2e, 0x14, 0x43, 0x6d, 0x33, 0xa3, 0x5c, 0x95, 0x7c, 0x9, 0x18, 0x1e, 0x95, 0x24, 0xb9, 0x18, 0x60, 0x97, 0xa0, 0xd5, 0x3b, 0xa5, 0x8, 0xc5, 0x87, 0x97, 0x7a, 0xb7, 0x2f, 0x19, 0x62, 0xe3, 0xfa, 0x95, 0xb7}, types.Tx{0xc0, 0xf4, 0xd1, 0xb9, 0xfc, 0x6, 0x4f, 0x70, 0xd3, 0x15, 0x12, 0x8, 0xd0, 0x54, 0x8e, 0x79, 0x89, 0xe9, 0x4b, 0xee, 0xe2, 0xf0, 0x92, 0x63, 0x47, 0x94, 0x66, 0xb4, 0x47, 0xb, 0xcf, 0x19, 0xf8, 0x17, 0x81, 0xc0, 0x9f, 0xed, 0x57, 0xfc, 0xc6, 0x5c, 0x11, 0x34, 0x98, 0x27, 0x17, 0x96, 0x8c, 0x56, 0xc0, 0xce, 0x13, 0x7f, 0x3a, 0x1e, 0xa6, 0x31, 0x77, 0x29, 0x17, 0xfe, 0xef, 0x52, 0x6e, 0x5b, 0x26, 0x1c, 0xa3, 0xa0, 0x9a, 0xf8, 0x5b, 0x6b, 0xf6, 0x38, 0x65, 0x65, 0xbe, 0xb3, 0xef, 0x9, 0xb7, 0x35, 0x72, 0x61, 0x55, 0xc4, 0x6b, 0xef, 0x6e, 0xa9, 0xed, 0x4f, 0xc9, 0x46}, types.Tx{0xc3, 0xe3, 0x65, 0x33, 0x85, 0xd3, 0xb6, 0x98, 0x3f, 0xdd, 0x89, 0xca, 0xcd, 0x12, 0xa1, 0x91, 0xe0, 0xba, 0xef, 0x9a, 0x37, 0xed, 0x0, 0xd5, 0x8c, 0xf7, 0x97, 0xc0, 0x6e, 0x84, 0x94, 0x7, 0x1a, 0x10, 0xa, 0xc5, 0x28, 0x8a, 0x6d, 0x86, 0xa5, 0x1f, 0x95, 0x10, 0xeb, 0xa0, 0x3a, 0x56, 0xe2, 0x5, 0x5a, 0x44, 0x63, 0xdc, 0x53, 0xa0, 0x4a, 0xbb, 0xb, 0x14, 0x8e, 0x9b, 0x83, 0x87, 0x1, 0x35, 0xf4, 0xda, 0x81, 0xb, 0xaa, 0xd6, 0xd9, 0x64, 0x1a, 0x59, 0x7a}, types.Tx{0xda, 0x6d, 0x41, 0xec, 0xcc}, types.Tx{0x4f, 0x91, 0xbf, 0x7c, 0x49, 0x7, 0xdf, 0xb5, 0xee, 0xa9, 0xeb, 0x8e, 0x46, 0x1b, 0x21, 0xbb, 0x17, 0x8, 0xbd, 0x4, 0x11, 0xf1, 0x8f, 0xf3, 0x27, 0x35, 0x5d, 0x7e, 0x86, 0xc7, 0xd, 0xeb, 0x4c, 0x4, 0xb4, 0x93, 0x41, 0x89, 0x27}, types.Tx{0xe3, 0x2e}, types.Tx{0x1d, 0xf1, 0x2f, 0x38, 0x54, 0xcb, 0xf8, 0x4b, 0x2f, 0x88, 0xe7, 0x3a, 0xee, 0x26, 0xd5, 0xe6, 0x90, 0x1b, 0x8c, 0xf, 0x7d, 0x2d, 0x3f}, types.Tx{0x29, 0x2a, 0x6e, 0xaf}, types.Tx{0xe5, 0xb3, 0x82, 0xd2, 0xf2, 0x11}, types.Tx{0x4a, 0xa1, 0x90, 0xff, 0xd7, 0x85, 0xb7, 0x80, 0x85, 0xb9, 0xa8, 0xc, 0x1e, 0xd7, 0x4f, 0x8d, 0x94, 0xa7, 0xa3, 0xdc, 0xf7, 0x78, 0xe1, 0x64, 0x13, 0x2f, 0xbe, 0x45, 0x6, 0x0, 0x7, 0x73, 0xe4, 0xd1, 0xe8, 0x2f, 0x76, 0x60, 0x53, 0x61, 0x9d, 0xea}, types.Tx{0x93, 0xb0, 0x3a, 0x89, 0x9f, 0x53, 0x4d, 0x6e, 0xf8, 0xe4, 0x65, 0x6f, 0x68, 0x8a, 0x99, 0xc0, 0x47, 0x33, 0x30, 0x75, 0x39, 0x96, 0x46, 0x53, 0x27, 0x28, 0xda, 0xb2, 0x56, 0xc0, 0x87, 0xe7, 0x12, 0xd2, 0x49, 0x51, 0x28, 0xbb, 0x29, 0x43, 0x70, 0xd1, 0x67, 0xdd, 0xae, 0x65, 0xfd, 0xa8, 0xaf, 0xff, 0x41, 0x14, 0x57, 0x65, 0xce, 0x9e, 0x83, 0xe1, 0xa1, 0x1e, 0xae, 0x72, 0x2a, 0x28, 0xbe, 0xbc, 0xb7, 0x5f, 0x9e, 0x38, 0x5b, 0x1e, 0x2b, 0x17, 0xf7, 0x69, 0xbf, 0x1c, 0x88, 0xbb, 0x1, 0x92, 0x5e, 0x57, 0x66, 0x6d, 0xbe, 0x88}, types.Tx{0x49, 0xf1, 0x75, 0x5d, 0xe, 0x57, 0x90, 0xd, 0xfd, 0x65, 0x75, 0xaf, 0xa9, 0x3b, 0xe8, 0xa2, 0x1a, 0x4f, 0x8b, 0x9b, 0xf8}, types.Tx{0xe5, 0xcd, 0xf, 0x9f, 0xa9, 0x8c, 0xe9, 0xe1, 0xc9}, types.Tx{0xaa, 0x34, 0x7f, 0x47, 0x2b, 0x71, 0xdb, 0xb3, 0x72, 0x3f, 0x71, 0x86, 0x10, 0xbf, 0xca, 0x1e, 0x9d, 0x9f, 0xea, 0x73, 0x69, 0xf3, 0x8, 0x66, 0xb7, 0xd1}, types.Tx{0x82, 0xd4}, types.Tx{0x5d, 0x54, 0x86, 0x27, 0xd7, 0x7e, 0x40, 0xe7, 0xd1, 0x1a, 0x95, 0x62, 0x69, 0x38, 0xa6, 0x6b, 0xb8, 0x8d, 0xe8, 0xe5, 0x92, 0x4a, 0xd3, 0xab, 0xdc, 0x4, 0x82}, types.Tx{0xda, 0xa, 0x40, 0x3d, 0x50, 0xf5, 0x1a, 0xe4, 0xc8, 0xd3, 0xe6, 0x16, 0x59, 0xdd, 0xee, 0xb4, 0xb0, 0x6b, 0xaf, 0xfd, 0x5, 0x16, 0xbe, 0x19, 0x10, 0x39, 0xef, 0x5, 0xe8, 0xd3, 0x8e, 0x40, 0x92, 0xc0, 0xd3, 0xb7, 0xba, 0x68, 0x3d, 0xb, 0x14, 0x33, 0xb4, 0x71, 0x27, 0xc8, 0xfd, 0xd1, 0xc2, 0x92, 0x31, 0x16, 0x99, 0xe8, 0x1e, 0x54, 0x18, 0xc9, 0x68, 0xef, 0x66, 0x27, 0x7d, 0xf9, 0x85, 0x8d, 0xae, 0x8f, 0x1a, 0xaf, 0x98, 0x2b, 0x89, 0xba, 0xa0, 0xe4, 0x9d, 0xb4, 0x62, 0xf7, 0xc4, 0x5e, 0x75, 0xd0, 0xe8, 0x96, 0x61, 0x51, 0x66, 0xc0, 0xd3, 0x47}, types.Tx{0x82, 0x3b}, types.Tx{0x2f, 0x3b, 0x89, 0xcd, 0xd, 0x9c, 0x99, 0x78, 0x30, 0x71, 0x4b, 0x2d}, types.Tx{0x99, 0xff, 0x89, 0x11, 0x8c, 0xa7, 0x97, 0x9d, 0x5b, 0x2e, 0xc8, 0x37, 0xd6, 0x93, 0xc3, 0xeb, 0xd5, 0xdd, 0x35, 0x28, 0x3e, 0x15, 0x62, 0x83, 0x5, 0xaa, 0x9b, 0xb1, 0xb, 0xa3, 0xd3, 0x7e, 0xa4, 0x77, 0x7, 0x76, 0xe9, 0x17, 0x79, 0xb9, 0xda, 0xe5, 0xf3, 0xc5, 0x5f, 0xdf, 0x4e, 0x5d, 0xde}, types.Tx{0xd, 0xa7, 0xc4, 0xf4, 0xa9, 0x87, 0xa1, 0x34, 0xa1, 0x49, 0x59, 0x1d, 0x88, 0x58, 0xfc, 0xa6, 0x4a, 0xe3, 0xd2, 0x5b, 0xf8, 0xb5, 0xf, 0x99, 0x45, 0x4e, 0x37, 0xfc, 0x89, 0xb1, 0x2b, 0xdc, 0xfc, 0x5a, 0x27, 0xf2, 0xd9, 0x30, 0x6f, 0x7d, 0x3b, 0xe2, 0xc3, 0xd0, 0x10, 0xbb, 0xb0, 0xde, 0x41, 0xe2, 0x71, 0x1c, 0x3, 0xa6, 0x11, 0x15, 0x2f, 0xcd, 0xb, 0x31, 0xdf, 0x33, 0xff, 0xe5, 0x63, 0xb6, 0x8f, 0x3, 0x53, 0x86, 0xa0, 0x1b, 0x7b, 0xac, 0xd1, 0x9c, 0x7b, 0x41, 0x50, 0x9c, 0x51, 0x75}, types.Tx{0x3a, 0xcf, 0xc4, 0xa1, 0x27, 0xad, 0xe0, 0x5b, 0x43, 0x3f, 0x45, 0x6d, 0x9d, 0x15, 0x8a, 0xf4, 0x29, 0xea, 0x30, 0x5b, 0x29, 0xad, 0x34, 0x8e, 0x54, 0x8c, 0xcb, 0xfc, 0x13, 0xa6}, types.Tx{0x98, 0x8, 0x38, 0x2b, 0x50, 0xfd, 0x2, 0x65, 0x2f, 0x2c, 0xcc, 0x45, 0x96, 0xd8, 0xa6, 0x7f, 0xab, 0xf8, 0xca, 0xb9, 0x38, 0x6e, 0x96, 0xd3, 0x14, 0xe8, 0x8c, 0x69, 0x2f}, types.Tx{0x93, 0x96, 0xe7}, types.Tx{0x15, 0x95, 0x69, 0xea, 0x57, 0xc, 0xc3, 0x2a, 0x10, 0x7c, 0xec, 0x4, 0xb0, 0xdb, 0x9a, 0x2c, 0xdd, 0xd4, 0x3f, 0x7d, 0xe5, 0x37, 0xa4, 0x4f, 0xde, 0xaf, 0xf9, 0x9e, 0x83, 0x8b, 0x11, 0xd8, 0x6f, 0xcf, 0xb9, 0xea, 0xb6, 0x8f, 0x27, 0x6a, 0x9a, 0x1f, 0x79, 0x34, 0xad, 0x5, 0xa1, 0x58, 0x4e, 0x21, 0x54, 0xa5, 0xd2, 0xdf, 0x91, 0xc5, 0x50, 0xcf, 0xd5, 0x82, 0x64, 0x7c, 0x7d, 0xc6, 0xc4, 0x92, 0xfe, 0xbd, 0x11, 0x42, 0x95, 0x20, 0xb0, 0x12, 0x25, 0x4, 0x2f, 0x9c, 0xff, 0x54, 0x9d, 0xe1, 0x5e, 0xf8, 0x21, 0x96, 0xcc, 0x63, 0x3a, 0x6, 0x9}, types.Tx{0x54, 0x98, 0xa4, 0x53, 0x23, 0x50, 0xe7, 0xb1, 0x51, 0xc9, 0x40, 0xf0, 0x4a, 0x83, 0xb0, 0x62, 0x91}, types.Tx{0xbe, 0xc9, 0x74, 0x70, 0x2d, 0xae}, types.Tx{0xb8, 0xa3, 0x21, 0x4c, 0x83, 0x44, 0x87, 0xb8, 0x2b, 0x10, 0x82, 0x91, 0xd7, 0xb, 0xd2, 0x10, 0xf6, 0x96, 0x46, 0xef, 0x73, 0x16, 0x89, 0x16, 0xc2, 0x77, 0x75, 0x88, 0x93, 0xda, 0xa2, 0xd4, 0x3e, 0xc4, 0xe4, 0xea, 0x1d, 0x81, 0x18, 0xfc, 0x7d, 0x7, 0x94, 0xdc, 0x2c, 0xd5, 0xc, 0x7c, 0xf8, 0x9d, 0xb, 0x99, 0x41, 0xae, 0x67, 0xcd, 0x88}, types.Tx{0x5a, 0xa2, 0xe2, 0x31, 0x4f, 0xc0, 0x77, 0x7, 0x26, 0xbf, 0x5f, 0x1d, 0xc7, 0xfe, 0x7a, 0x2e, 0xd4, 0xc8, 0x4d, 0x58, 0x90, 0x2f, 0xbf, 0x95, 0xe6, 0xbf, 0xb9, 0x44, 0xd, 0x7f, 0x2d}, types.Tx{0xfd, 0xc7, 0x1e, 0x52, 0x42, 0xe3, 0xf, 0xdc, 0x98, 0xe, 0x8b, 0x51, 0x11, 0x21, 0x89, 0xfc, 0x63, 0x9, 0xcc, 0xf0, 0x82, 0x5d, 0xbb, 0xe2, 0x18, 0xc, 0xc2, 0x9, 0xa4, 0x23, 0x89, 0xbf, 0xab, 0x50, 0x26, 0xa8, 0x42, 0xc1, 0xff, 0xdd, 0x2f, 0x5a, 0xa4, 0x3, 0x8f}, types.Tx{0x4b, 0xb8, 0x87, 0xd1, 0x8d, 0x5c, 0x4d, 0xe1, 0x82, 0x50, 0x94, 0x5b, 0xdc, 0x63, 0xc2, 0xd1, 0x79, 0x66, 0x17, 0xda, 0xf0, 0x6d, 0xb9, 0x7d, 0xb6, 0x7c, 0xac, 0xe7, 0x24, 0x5f, 0x34, 0x81, 0xdb, 0xaf, 0x60, 0x94, 0x14, 0x8d, 0x84, 0xd5, 0xb7, 0x0, 0x8d, 0xa5, 0x54, 0xa3, 0x32, 0x19, 0xe3, 0x7d, 0x33, 0x2f, 0x7f, 0xf, 0x18, 0xc4, 0xa6, 0x9e, 0x24, 0x30, 0xf7, 0x1c, 0x5c, 0xe2, 0xf1, 0xbd, 0x60, 0x48, 0xf8, 0xa8, 0x6f, 0xb4, 0xc4, 0xcb, 0x8e, 0x14, 0xd, 0x6f, 0xfb, 0xa}, types.Tx{0x40, 0x4d, 0x29, 0x4d, 0x8c, 0x3f, 0x1c, 0xcc, 0x73, 0x2f, 0x88, 0x9d, 0xa9, 0x33, 0xbd, 0xf3, 0xbf, 0x7e, 0x53, 0x36, 0xa, 0x33, 0x1f, 0x1c, 0x5a, 0x52, 0x7f, 0xed, 0x67, 0x1e, 0x21, 0x8, 0x8c, 0x18, 0xa0, 0xf2, 0x85, 0x7d, 0xd7, 0xcc, 0x77, 0xf, 0x43, 0x30, 0x1e, 0x1b, 0xa0, 0xfa, 0xd6, 0xc, 0xf, 0xa1, 0x6, 0xa9, 0xf6, 0xe5, 0xfb, 0xc0, 0x84, 0xa4, 0xd4, 0x7b, 0xa6, 0x73, 0x15, 0x62, 0x53, 0xe8, 0x61, 0x9f, 0x7c, 0xda, 0x35, 0x32, 0x44, 0xa6, 0xfe, 0x94, 0x3e, 0x8f, 0xe8, 0x1, 0xae, 0x9c, 0x43, 0xa, 0x72, 0x87, 0xcb, 0xe5, 0x75, 0xfc, 0x61, 0x81, 0x26, 0x26, 0x74, 0x45}, types.Tx{0xbc, 0x9, 0x42, 0xd4, 0x50, 0xe9, 0x2, 0x2d, 0xca, 0xf1, 0xe7, 0xa8, 0xc8, 0x13, 0x32, 0x13, 0x7c, 0x7f, 0x64, 0x87, 0x11, 0x5d, 0x51, 0xaa, 0xa0, 0x1e, 0xdc, 0x4e, 0xf8, 0xe2, 0xfd, 0xa8, 0xab, 0x4c, 0x6d, 0xc6, 0x93, 0xa, 0x14, 0x5e, 0x62, 0x56, 0x4d, 0x12, 0x43, 0x80, 0x0, 0x4f, 0x35, 0xcf, 0xf6, 0x3d, 0x3d, 0xcc, 0xda, 0xc4, 0x3b, 0x1f, 0xdd, 0xc5, 0x49, 0x54, 0xb3, 0xed, 0xe9, 0x45, 0xd4, 0x90, 0xc5, 0x9e, 0x55, 0x58, 0xcb, 0x79, 0xfd, 0xa3, 0x33, 0x3f, 0xa5, 0x21, 0xa8, 0xf3, 0x20, 0x30, 0x77, 0x31, 0x6d, 0x12, 0x55, 0x13, 0xf9, 0x4b, 0xec, 0x5a, 0xbb, 0x5c, 0xd, 0x92}, types.Tx{0xb8, 0x5d, 0x3d, 0xe3, 0xd0, 0x32, 0x5, 0xa9, 0x8e, 0x16, 0xd7, 0xff, 0xa1, 0xed, 0xa5, 0x6, 0x7a, 0xbf, 0xdd, 0x9b, 0xdb, 0x2, 0xd3, 0x5d, 0xf1, 0x9e, 0xfd, 0xda, 0x62}, types.Tx{0x97, 0x93, 0xf5, 0xca, 0x2, 0x7f, 0xfb, 0xab, 0xc4, 0x3, 0x15, 0x11, 0xce, 0xa5, 0x56, 0x35, 0x3, 0x6d, 0xea, 0x35, 0x49, 0x48, 0x2c, 0x8c, 0x3a, 0xfd, 0x59, 0x24, 0xd3, 0xd6, 0x12, 0x5d, 0x31, 0x3d, 0x93, 0x3d, 0x3, 0xb, 0x3e, 0x5f, 0x47, 0x21, 0xe5, 0x3a, 0xc3, 0xa6, 0x8c, 0x57, 0xa7, 0x9, 0x88, 0x81, 0x44, 0xb5, 0x6e, 0x75, 0xbb, 0xc4, 0x21, 0xdf, 0x3b, 0x3b, 0x40, 0xb4, 0xe2, 0x4c, 0x85, 0x91, 0x9, 0xdb, 0x68, 0x33, 0x76, 0x83, 0xea, 0xe7, 0xea, 0xea, 0x82, 0xc7, 0xe4}, types.Tx{0xce, 0xb2, 0x3c, 0x14, 0xa4, 0xe6, 0x2a, 0x6d, 0x74, 0x7d, 0x2c, 0x96, 0xeb, 0x88, 0xdf, 0x41, 0xd3, 0x4a, 0xd3, 0xb2, 0xc8, 0x1b, 0x12, 0xdf, 0x76, 0x6b, 0xe6, 0xbb, 0xaf, 0x87, 0xa4, 0xea, 0xbd, 0xcd, 0x4a, 0x46, 0xbc, 0xc1, 0xb8, 0x31, 0xeb, 0x18, 0xc9, 0xef}, types.Tx{0x6c, 0x0, 0x84, 0x8c, 0x9b, 0x82, 0x86, 0x88, 0xb, 0x9d, 0xd7, 0xca, 0x26, 0xa4, 0x8f, 0xa7, 0x3c, 0x59, 0xe8, 0x17, 0x30, 0xc1, 0x7d, 0x2b, 0xe8, 0x8e, 0x88, 0x32, 0x13, 0xa6, 0x5d, 0x9d, 0x65, 0x27, 0x38, 0x1c, 0x21, 0xc3, 0x25, 0x66, 0xb1, 0xb2, 0xc5, 0xdc, 0xaa, 0xab, 0x70, 0x9d, 0x40, 0x47, 0x8e, 0xa8, 0xd5, 0x1c, 0x94, 0x49, 0x4c, 0x6f, 0x20, 0x92, 0xe3, 0x26, 0xc5, 0x8e, 0xd3, 0x1b, 0x6a, 0xc5, 0xaf, 0x25, 0x29, 0x16, 0x13, 0x8, 0xff, 0x90, 0x89, 0xbc, 0x56, 0x5e, 0xd8, 0xfe, 0xe4, 0x8, 0x19, 0x8a}, types.Tx{0x25, 0x75, 0x77, 0xa, 0x29, 0x10, 0x2a, 0xcc, 0xd5, 0xdb, 0xba, 0xcd, 0x67, 0x3f, 0xd0, 0x93, 0x3e, 0xb7, 0x8c, 0x2, 0x46, 0x1b, 0x65, 0x9b, 0xe, 0x72, 0xfa, 0xc4, 0xfa, 0x22, 0xc4, 0xec, 0xd6, 0x66}, types.Tx{0xa3, 0x1e, 0x32, 0xa6, 0x9e, 0x17, 0x6b, 0x1a}, types.Tx{0x9f, 0xc0, 0x29, 0x43, 0x51, 0xc0, 0x1d, 0x76, 0xa6, 0x9e, 0x9c, 0xb0, 0x5d, 0xc9, 0xb1, 0x8e, 0xc4, 0x9f, 0xc4, 0xcf, 0xe1, 0x3f, 0x39, 0xbe, 0x89, 0x23, 0x4c, 0x88, 0x6c, 0x59, 0xe1, 0x8a, 0x36, 0x17, 0xc2, 0xaa, 0x23, 0x7a, 0x73, 0xf, 0xb5, 0x47, 0x93, 0xda, 0x2a, 0x98, 0xa, 0x74, 0x0, 0x7c, 0x87, 0xb4, 0x4e, 0xca, 0x9e, 0x97, 0xe7, 0x7f, 0x7e, 0xc0, 0x10, 0x5b, 0xbb, 0x93, 0xbd, 0x5b, 0xf2, 0x36, 0x9b, 0x5a, 0xb7, 0xf2, 0x37, 0x58, 0xef, 0x10, 0x10, 0x6b, 0x89, 0x6d, 0xb6, 0x14}, types.Tx{0xa6, 0xe0, 0xa6, 0x9a, 0x77, 0xee, 0xf4, 0xd9, 0x57, 0x3a, 0xdf, 0x5c, 0x8f, 0x98, 0x8d, 0x55, 0x76, 0x16, 0xc4, 0xc1, 0x75, 0x88, 0x89, 0x9b, 0xa7, 0x1f, 0x85, 0xad, 0xea, 0xe3, 0x1, 0xc7, 0xd, 0xf0, 0xd1, 0x69, 0x5c, 0xf9, 0x17, 0x7f, 0xb6, 0x2a, 0xe9, 0xb1, 0x19, 0x74, 0x81, 0x55, 0xcb, 0xc9, 0xf2, 0x8e, 0x44, 0x6c, 0xdf, 0x1d}, types.Tx{0xde, 0xb9, 0xb9, 0xed, 0x92, 0xc1, 0x33, 0x4e, 0xbb, 0x95, 0x5e, 0xd0, 0x55, 0x64, 0xc7, 0xdf, 0x3, 0x7c, 0xc, 0x79, 0x82, 0xe, 0xb0, 0xcf, 0xfe, 0xb4, 0x9c, 0x4f, 0xc7, 0x2e, 0xae, 0x9, 0xea, 0xaf, 0x9, 0xae, 0xba, 0x5d, 0xab, 0xc0, 0xce, 0x37, 0xa5, 0x25, 0x9f, 0xbb, 0xae, 0xc4, 0xd1, 0x11, 0xf7, 0x77, 0x6b, 0xed, 0xa8, 0xf0, 0x9f, 0x93, 0x6c, 0x94, 0x14, 0x87, 0xc2, 0x2c, 0x23, 0xa1, 0x50, 0xe, 0xab, 0xc6}, types.Tx{0xfa, 0x16, 0x15, 0x1, 0xb4, 0x16, 0x7b, 0x76, 0x3c, 0x8d, 0x71, 0xa2, 0x6c, 0x6d, 0xad, 0xb7, 0x5b, 0xfd, 0x40, 0x80, 0x3e, 0xc, 0x96, 0xc1, 0x8d, 0xb9, 0xf8, 0x6c, 0x26, 0x3, 0xed, 0xd4, 0xbe, 0x2d, 0x6b, 0x79, 0x63, 0x8a, 0xae, 0x3a, 0x87, 0xb1, 0xa6, 0xe6, 0x99, 0x6e, 0x14, 0x69, 0x5d, 0xba, 0xe4, 0xcf, 0x5b, 0x3a, 0x41, 0x3c, 0xe9, 0xde, 0x49, 0xab, 0x1f, 0x13, 0x72, 0x28, 0xab, 0x1f, 0xd9, 0x55, 0x91, 0x9b, 0x58, 0xfc, 0x5f, 0x45, 0x13, 0x3b, 0x80, 0x7d, 0xcf, 0xf2, 0xca, 0xc, 0x7f, 0x96, 0xff, 0xe4, 0x60, 0x32, 0xd4, 0xf3, 0x2a, 0x14, 0xa, 0xc0, 0x93}, types.Tx{0x5e, 0x20, 0xd3, 0x96, 0xc9, 0x25, 0x6d, 0x45, 0x31, 0x56, 0xbc, 0x63, 0x75, 0xd1, 0xe8, 0xa8, 0x21, 0x3a, 0xa2, 0x93, 0x2b, 0x7f, 0xd0, 0xce, 0x72, 0xe, 0xbc, 0x32, 0x35, 0xf5, 0x25, 0x75, 0xf3, 0x63, 0x54, 0xb4, 0x6a, 0xdf, 0xee, 0x38, 0x59, 0x5b, 0x7c, 0x11, 0x7e, 0x6, 0x41, 0xdb, 0x41, 0x95, 0x2d, 0x6b, 0x38, 0xb9, 0xab}, types.Tx{0x2a, 0x59, 0x90, 0x29, 0x36}, types.Tx{0x76, 0x58, 0xe7, 0x60, 0xd9, 0x8, 0x69, 0xa0, 0xb4, 0x80, 0x83, 0xc2, 0x6e, 0xc1, 0x90, 0x1c, 0xd3, 0x8, 0xef, 0x5b, 0xc, 0x5b, 0x82, 0xeb, 0x94, 0xd4, 0xe5, 0x49, 0x10, 0x74, 0x5a, 0x92, 0x72, 0x1f, 0x19, 0x60, 0x51, 0xde, 0x9d, 0x93, 0x84, 0x3, 0x1c, 0xab, 0x14, 0xe0, 0x11, 0xd6, 0x1d, 0x41, 0x7e, 0x18, 0xf6, 0x2f, 0x89, 0xc2, 0x5, 0x76, 0x9e, 0x2d, 0x5f, 0x43, 0xc4, 0xd4, 0x7a, 0x9f, 0x32, 0x14, 0xcc, 0xf7, 0xb2, 0x5d, 0xd6, 0xa5, 0x74, 0xcf, 0xd5, 0x16, 0xf8, 0x9b, 0x1a, 0xd8, 0x5, 0x44}, types.Tx{0x80, 0xde, 0x58, 0xc1, 0x7e, 0xe6, 0x56, 0x4d, 0x44, 0x78, 0x30, 0xcd, 0x62, 0x9e, 0x96, 0x6, 0xf2, 0x92, 0x9b, 0x26}, types.Tx{0xcc, 0x63, 0xa2, 0xcd, 0xfb, 0xfa, 0xa4, 0x32, 0xd6, 0x91, 0x7d, 0x83, 0x61, 0x63, 0x8d, 0x2c, 0x89, 0xda, 0xa0, 0x4a, 0x8c, 0x9a, 0xa, 0x0, 0xa0, 0x68, 0xa, 0x93, 0xf7, 0x8a, 0x33, 0x1f, 0x88, 0x6e, 0xc8, 0xce, 0x2c, 0x60, 0x13, 0x53, 0x6f, 0x12, 0x9f, 0xe2, 0xb, 0xc1, 0xf, 0x23, 0x8e, 0xd7, 0xf4, 0x36, 0xf6, 0x62, 0xa9, 0x1a, 0x91, 0x6b, 0x50, 0xed, 0xf6, 0x4d, 0x45, 0x99, 0x6f, 0xaa, 0x58, 0x5d, 0x34, 0x14, 0xf1, 0x76, 0xf6, 0x8b, 0xc3, 0x90, 0x44, 0x74, 0xca, 0x3f, 0xa5, 0xdf, 0xed, 0x5e, 0x7d, 0x3d, 0xb7, 0xe9}, types.Tx{0xfa, 0x67, 0x5, 0x39, 0x8, 0x4a, 0x3, 0x5d, 0x30, 0xb8, 0x95, 0x53, 0x92, 0xa7, 0x3f, 0x15, 0xbc, 0x8d, 0xe9, 0xd4}, types.Tx{0x28, 0x90, 0xe1, 0xc5, 0xe2, 0x70, 0x2d, 0x98}, types.Tx{0x6c, 0x44, 0xe3, 0x6d, 0x9a, 0xcc}, types.Tx{0x76, 0x18, 0x87, 0xbc, 0xdd, 0xad, 0x39, 0x1a, 0x15, 0x27, 0xed, 0x47, 0xf3, 0xea, 0x7c, 0x4b, 0x21, 0xa7, 0x1a, 0x10, 0xd2, 0xfb, 0x1, 0x43, 0x5e, 0x4f, 0x3f, 0x64, 0x8c, 0xd4, 0x88, 0xf1, 0x61, 0x5d, 0xc2, 0x64, 0xe, 0xbe, 0x63, 0xb2, 0xa9, 0x68, 0x88, 0x17, 0x2, 0x86, 0x9, 0x1e, 0x18, 0x97, 0xe7, 0xa5, 0xa7, 0xb2, 0xed, 0xc0, 0x2f, 0x33, 0x46, 0xbe, 0xbd}, types.Tx{0x32, 0x4d, 0x45, 0xc1, 0xb7, 0x41, 0x8, 0xc4, 0x4d, 0xc3, 0x15, 0x8, 0xb5, 0x86, 0x20, 0x2d, 0xe, 0x80, 0xe7, 0xf9, 0x6a, 0xc7, 0xab, 0xdd, 0x5d, 0xa8, 0x63, 0x72, 0x2, 0x78, 0xf2, 0x6d, 0xde, 0xa0, 0xfc, 0x17, 0xa2, 0xa7, 0x68, 0x8, 0xe7, 0x7f, 0xc8, 0xc, 0x6e, 0xd8, 0xea, 0x7f, 0xd3, 0x2b, 0xfe, 0xa5, 0x8a, 0xb8, 0xf2, 0xa8, 0x54, 0x5f, 0x1c, 0x2d, 0xde, 0xc1, 0xfd, 0xcb, 0xa3, 0x60, 0x37, 0xeb, 0x15, 0xdf, 0x3e, 0xc1, 0x93, 0x6d, 0xb0, 0xcc, 0xb, 0xa, 0x4b, 0x36, 0xfa, 0xa6, 0x3c, 0xbf, 0x68, 0xb8, 0x68, 0xd, 0xd8, 0x7a}, types.Tx{0x6e, 0x13, 0x15, 0x7d, 0xc3}, types.Tx{0x22, 0x59, 0xec, 0x94, 0xd7, 0xab, 0xd6, 0xdd, 0x2e, 0x3c, 0x12, 0x4b, 0x2d, 0xea, 0xbe, 0x46, 0x18, 0xdd, 0x7c, 0x70, 0x44, 0xb1, 0x32, 0x7b, 0xda, 0x48, 0xca, 0x40, 0x95, 0x10, 0x70, 0x7d, 0x6d, 0xf0, 0x14, 0x89, 0x5e, 0xe9, 0x5d, 0xfe, 0x53, 0x6c, 0x7f, 0x1f, 0xbd, 0xb2, 0x2e, 0x2c, 0x6e, 0xdb, 0xef, 0x5b, 0x55, 0x8, 0xc2, 0x91, 0xdc, 0x93, 0x7c, 0x6b, 0x18, 0xbe, 0xf9, 0x27, 0xe5, 0x3a, 0xec, 0x4f, 0x5b, 0xdb, 0x97, 0x55, 0x2, 0xf3}, types.Tx{0x4c, 0xd2, 0x2a, 0xe1, 0x9, 0x14, 0xb1, 0xf5, 0xff, 0xeb, 0x7b, 0x19, 0x66, 0x30, 0x3b, 0xd6, 0xd8, 0x84, 0x40, 0x56, 0x7e, 0x80, 0x11, 0x56, 0xb2, 0xbc, 0x2a, 0xf0, 0x2a, 0x1e, 0x6f, 0x25, 0x51, 0x7d, 0x7b, 0x3b, 0x51, 0x89, 0x79, 0xb5, 0x7f, 0x6e, 0x50, 0xbd, 0x2d, 0xfd, 0xb, 0xa7, 0x6f, 0xc1, 0xeb, 0xb5, 0x44, 0x14, 0xd4, 0x20, 0xd5, 0xe0, 0x98, 0x1d, 0x5a, 0xc1, 0x9e, 0x73, 0xca, 0xa0, 0xbe, 0xe3, 0x54, 0x37, 0xe1, 0x52, 0xed, 0x6e, 0xb3, 0x67, 0x40, 0xf7, 0x3e, 0xae, 0x20, 0x37, 0xad, 0x2e, 0x1e}, types.Tx{0xbe, 0xf0, 0x53, 0xd1, 0x7e, 0x71, 0x60, 0x61, 0xbc, 0xd1, 0xe5, 0xd8, 0x71, 0xe7, 0x73, 0x1d, 0xfb, 0xa0, 0x17, 0xa, 0x43, 0xc2, 0x31, 0x51, 0xff, 0xde, 0x45, 0xd7, 0x7a, 0x98, 0xad, 0xdd, 0x40, 0xe3, 0x16, 0x60, 0x2d, 0xf3, 0x22, 0x3f, 0xf9, 0xef, 0x13, 0x45, 0xe6, 0x6b, 0x6, 0x54, 0xb7, 0xff, 0xbe, 0xd, 0x41, 0x1d, 0x63, 0xc2, 0xf5, 0x6a, 0x8b, 0xc0, 0x2, 0x74, 0xbb, 0xd3, 0xcb, 0xd7, 0xe1, 0xfc, 0x27, 0x33, 0x34, 0x67, 0x16, 0x7d, 0x46, 0x58, 0xd7, 0x2a, 0x4c, 0x6f, 0xb8, 0x6, 0x3f, 0xe1, 0xb3, 0xe4, 0x89, 0xa0, 0xbc, 0xb2, 0x77, 0x40, 0x8, 0x59, 0x80, 0x93, 0xde, 0x5d}, types.Tx{0x2c, 0xb2, 0xf0, 0x7b, 0x2, 0xc1, 0x9a, 0x45, 0x78, 0x8a, 0xe4, 0xd8, 0x2f, 0x17, 0xbb, 0xb, 0x96, 0xd4, 0x2d, 0x99, 0xc9, 0xa5, 0x18, 0x3d, 0x92, 0x74, 0x50, 0x87, 0x1e, 0xd6, 0x72, 0x8b, 0x8f, 0xba, 0xe1, 0x30, 0xc8, 0xaf, 0x14, 0x8e, 0x13, 0x29, 0xf5, 0x7f, 0x27, 0xf7, 0x16, 0xd4, 0xfe, 0xfd, 0x55, 0xa8, 0xf6, 0x8a, 0xbc, 0x1f, 0xf0, 0xde, 0xcf, 0x97, 0x4e, 0x2b}, types.Tx{0x70, 0x18, 0x60, 0x49, 0x9d, 0x1a, 0xb7, 0xcb, 0x4e, 0xe1, 0x62, 0x3f, 0xa0, 0x35, 0x1e, 0x9e, 0xdd, 0x76, 0xa1, 0x15, 0xf4, 0x49, 0xad, 0xc, 0xea, 0xec, 0x9f, 0xa2, 0xd6, 0x29, 0x66, 0x8b, 0xe9, 0x52, 0x2a, 0x3b, 0x7f, 0xc9, 0x10, 0x3b, 0x63}, types.Tx{0x4e, 0xaf, 0x18, 0x23, 0x68, 0x65, 0xdb, 0x0, 0x20, 0xef, 0xbf, 0xb8, 0xa7, 0x9e, 0xd5, 0xc9, 0x9c, 0x4, 0x82, 0xee, 0x6d, 0x9c, 0x3c, 0xe6, 0xe5, 0x5b, 0x4a, 0xa9, 0xd9, 0x0, 0xa2, 0xea, 0x84, 0x9, 0x5b}, types.Tx{0x27, 0xb8, 0xe2, 0xf6, 0xfb, 0x59, 0xa1, 0x30, 0x97, 0x5d, 0x97, 0x25, 0x6f, 0x3a, 0xe0, 0xee, 0xa3, 0xb0, 0xd7, 0x3b, 0xe1, 0x76, 0xd4, 0xba, 0x26, 0x35, 0xc4, 0x76, 0x39}, types.Tx{0x21, 0x32, 0x34, 0x23, 0xd7, 0x33, 0x2e, 0x54, 0x18, 0xe2, 0x4, 0x4a, 0xe0, 0x46, 0x47, 0xe5, 0x37, 0xb4, 0x2, 0xc6, 0x97, 0x53, 0x46, 0x42, 0x91, 0x92, 0xb4, 0x89, 0xea, 0x25, 0x7, 0x7a, 0x37, 0x48, 0x31, 0xcd, 0x7b, 0xb1, 0x98, 0x1b, 0xc7, 0x38, 0xf3, 0xe1, 0xe2, 0x6e, 0xae, 0xc2, 0xe9, 0x30, 0x41, 0xad, 0xb5, 0xbd, 0xb7, 0xd1, 0x3c, 0xef, 0xf8, 0x2b, 0xcf, 0x7, 0x3a, 0xb7, 0x84, 0xae, 0xe5}, types.Tx{0x94, 0x10, 0xd5, 0x7e, 0x1f, 0xe6, 0xf1, 0x72, 0x91, 0xa0, 0x2d, 0xb5, 0xfc, 0xe5, 0xfe, 0x2a, 0x3a, 0x9f, 0xf1, 0x62, 0xd7, 0x60, 0xff, 0x97, 0xa0, 0xc6, 0xb7, 0xcb, 0x41, 0xc5, 0xd3, 0xb9, 0x14, 0xb6, 0xca, 0xf1, 0xf3, 0xa1, 0x18, 0xf, 0xa2, 0xee, 0xd9, 0x51, 0x1c, 0xab, 0x77, 0xc2, 0xcb, 0xb8, 0x4, 0xfc, 0x19, 0x18, 0xa1, 0xc5, 0xe7, 0x91, 0x8e, 0x81, 0x6e, 0xac, 0xfc, 0x8, 0xfe, 0xa3, 0x81, 0x5a, 0xde, 0x31, 0x42, 0x32, 0x75, 0xc4, 0x32, 0xad, 0xa1, 0x6e, 0xdb}, types.Tx{0x61, 0x62, 0x8, 0xdc, 0x2b, 0xde, 0x45, 0xb3, 0x83, 0x3f, 0x3, 0xd4, 0x9, 0x4b, 0xa7, 0x18, 0xef, 0x7d, 0x9a}, types.Tx{0x97, 0xa0}, types.Tx{0x13, 0x72, 0x6e, 0xdc, 0x78, 0xc8, 0xc9, 0x53, 0xa7, 0x72, 0x30, 0x9c, 0x94, 0x3a, 0xfb, 0x8f, 0xbb, 0x9d, 0xcf, 0x35, 0x41, 0x7a, 0xfa, 0xcb, 0x4e, 0xb2, 0x1e, 0x55, 0x60, 0xed, 0x9c, 0xec, 0x9a, 0x71, 0xd0, 0x2a, 0xa6, 0x2e, 0x19, 0xe2, 0x9c, 0xce, 0xcf, 0x99, 0x47, 0xa, 0xfd, 0x9f, 0x2a, 0xdd, 0x41, 0x90, 0x62, 0xef, 0xfc, 0x40, 0x1c, 0x10, 0x21, 0x57, 0xa2, 0x45, 0x22}, types.Tx{0xb5, 0x9, 0x52, 0x53, 0x63, 0x14, 0xc9, 0xe3, 0x5f, 0x3a, 0xdd, 0x4b, 0x26, 0xb9, 0x91, 0xd4, 0xc2, 0xc9, 0x9e, 0x21, 0x8d, 0xa, 0x71, 0x5c, 0xbc, 0xc7, 0x43, 0xec, 0x6c, 0x63, 0xdb, 0xe3, 0x75, 0xcc, 0x9d, 0xf4, 0x6e, 0xaf, 0x67, 0xe3, 0xde, 0x26, 0x11, 0x81, 0x1f, 0x76, 0x8, 0xcd, 0x5, 0xcd, 0x93, 0xac, 0xca, 0x3e, 0x3f, 0x2c, 0xeb, 0x1, 0xbc, 0x93, 0x33, 0xf9, 0xa3, 0x30, 0xdb, 0x86, 0x4, 0x1d}, types.Tx{0xcd, 0x0, 0x7b, 0x87, 0x86, 0x9f, 0xc, 0x39, 0x2c, 0xed, 0x7b, 0xbb, 0xb1, 0xff, 0xb2, 0x6e, 0xdd, 0x2f, 0x5b, 0xbd, 0x58, 0x25, 0xb1, 0xc2, 0x2d, 0xb5, 0xeb, 0x62, 0x41, 0xd9, 0x3c, 0xed, 0x3d, 0x55, 0x63, 0x8d, 0x75, 0xae, 0xbd, 0xb, 0x15, 0x58, 0xf4, 0xdc, 0xf8, 0x12, 0x35, 0xb3, 0x20, 0x34, 0x63, 0x68, 0xe8, 0xff, 0x2, 0xdf, 0xf, 0xa8, 0xd8, 0xc1, 0x66, 0x2f, 0xc6, 0xdb, 0xa2, 0xd1, 0xe1, 0x8e, 0x5e, 0xe0, 0x8f, 0x58, 0x46, 0xc8, 0x97, 0xec, 0xb1, 0x4f, 0x34, 0xfb, 0x71, 0xc9, 0x4, 0xc4, 0x2c, 0x4c}, types.Tx{0xcf, 0x85, 0x18, 0xba, 0x77, 0x23, 0xc0, 0xce, 0x20, 0xee, 0xb1, 0xbc, 0xdc, 0xc8, 0xad, 0xca, 0xb5, 0x3a, 0x5a, 0x1a, 0xef, 0xf4, 0x1c, 0x42, 0x39, 0xee, 0x7a, 0x53, 0xc0, 0xda, 0x77, 0xc5, 0x51, 0x4a, 0x70, 0xde, 0x9, 0xd1, 0x50, 0x2c}, types.Tx{0xee, 0x45, 0x99}, types.Tx{0xd2, 0x6a, 0x48, 0x82, 0x52, 0x27, 0xea, 0x20, 0x7c, 0xaf, 0xea, 0x63, 0xbc, 0x41, 0x2a, 0x2, 0x1d, 0x58, 0x8a, 0xb5, 0xee, 0x2f, 0x66, 0x4a, 0x8a}, types.Tx{0x97, 0x4, 0x14, 0x4e, 0x3b, 0x81, 0x24, 0xf1, 0xe1, 0xf9, 0xb2, 0xed, 0x26, 0xe2, 0x1d, 0x97, 0x49, 0x84, 0x48, 0x34, 0xb7, 0x32, 0xca, 0xf3, 0xe1, 0xaa, 0x52, 0xb6, 0x6b, 0x8b, 0x91, 0x9d, 0x97, 0xf3, 0xa8, 0x1, 0x71, 0x98, 0xb8, 0x98, 0xdb, 0x9a, 0x2c, 0xb6, 0xb, 0xf0, 0x1c, 0xb6, 0xf5, 0x1d, 0xd2, 0x75, 0x9e, 0x9a, 0x15, 0x4d, 0xb6, 0xc, 0xf8}, types.Tx{0x80, 0xf5, 0xaf, 0x70, 0x7e, 0x30, 0x1e, 0x63, 0xa2, 0x90, 0xc2, 0x38, 0x9b, 0xb, 0x45, 0x7a, 0xf7, 0x60, 0x4c, 0xee, 0xa6, 0x4a, 0x6, 0x6e, 0xf2, 0x5f, 0x93, 0x64, 0xc0, 0xe0, 0x8e, 0x65, 0xa9, 0x7, 0xf6, 0xfb, 0xab, 0x86, 0xbe, 0x1e, 0xc6, 0x31, 0xab, 0xc6, 0xdf, 0x66, 0x5a, 0xeb, 0x4f, 0xbc}, types.Tx{0x58, 0x33, 0xe6, 0xc1, 0x4c, 0x95, 0x25, 0x5c, 0xe7}, types.Tx{0x7d, 0xf, 0xf4, 0xae, 0x70, 0xbd, 0x87, 0x8c, 0x45, 0x76, 0x72, 0x1c, 0x4e, 0xc3, 0xd9, 0xed, 0xa5, 0xb9, 0x27, 0xab, 0xf2, 0x37, 0x75, 0xa0, 0xd3, 0x39, 0xb5, 0x70, 0x9e, 0xd5, 0x57, 0x70, 0x87, 0x57, 0x9, 0x12, 0xfc, 0x71, 0x7c, 0x7a, 0x8f, 0xbe, 0x69, 0xc4, 0x10, 0xec, 0xd8, 0x20, 0x82, 0x2, 0x15, 0xbf, 0x20, 0xbe, 0x84, 0xdd, 0x5, 0x63, 0xd, 0x40, 0x59, 0x44, 0x26, 0x94, 0xf2, 0xdd, 0x86, 0xbd, 0x3f, 0xf, 0x3e, 0x56, 0x1f, 0xfe, 0x32, 0x99, 0x35, 0x6a, 0xe0, 0xf7, 0xd8}, types.Tx{0xa0, 0x1f, 0xde, 0xd4, 0xe3, 0xe9, 0xba, 0x1, 0xca, 0x88, 0x8e, 0xb8, 0x59, 0x58, 0xe7, 0x92, 0x7d, 0xfb, 0xa9, 0xab, 0xb8, 0xf1, 0x61, 0x8, 0x64, 0x91, 0xcd, 0xc6, 0xea, 0xc0, 0xf2, 0x45, 0x44, 0xa2, 0xf6, 0x7c, 0x32, 0x86, 0x52, 0x27, 0x2d, 0x6f, 0xd0, 0xe1, 0xb3, 0x8e, 0xef, 0x10, 0xd5, 0xfc, 0xd8, 0x3a, 0x8, 0xa5, 0xd6, 0x98, 0x33, 0xb4, 0x4d, 0x13, 0x13, 0x10, 0xd, 0xe}, types.Tx{0xf, 0x5e, 0xc3, 0xb8, 0x49, 0x3c, 0xf0, 0xaf, 0x8a, 0x94, 0x99, 0x58, 0xc7, 0x1, 0x89, 0x2b, 0xb}, types.Tx{0xba, 0x63, 0xcb, 0x36, 0x44, 0x9b, 0x7, 0xa6, 0x94, 0xd9, 0x7e, 0x20, 0x6e, 0x45, 0x1e, 0x55, 0x21, 0x85, 0xbe, 0x7b, 0x45, 0x5e, 0x55, 0x63, 0xb0, 0xff, 0x62, 0x43, 0x89, 0x30, 0x3d, 0xe4, 0x43, 0x53, 0xfa, 0xb, 0xc5, 0x16, 0xfc, 0x11, 0x19, 0xb7, 0xd3, 0x4b, 0x5, 0xee, 0x7a, 0xb3, 0x19, 0x8c, 0x82, 0x84, 0xcd, 0x80, 0xcc, 0xf, 0x7, 0xac, 0xe8}, types.Tx{0x42, 0xb7, 0xc9, 0x1b, 0x66, 0x39, 0xf5, 0x97, 0x3, 0x7d, 0xb, 0x4d, 0xb, 0xea, 0x49, 0xbf, 0x2a, 0x9c, 0xa4, 0x3d, 0xf1, 0x39, 0xe8, 0xbc, 0x8f, 0x48, 0x98, 0xe7, 0xa3, 0xbc, 0x78, 0x27, 0xc9, 0x24, 0x66, 0xde, 0x11, 0x47, 0x87, 0xd9, 0xd3, 0x95, 0x56, 0x57, 0x99, 0x61, 0xf7, 0x9b, 0x85, 0x32, 0x6c, 0xe1, 0x58, 0x14, 0xaa, 0x18, 0xed, 0x6b, 0x83, 0x2f, 0xca, 0x40, 0x64, 0xe0, 0xea}, types.Tx{0x18, 0x47, 0xb0, 0xfe, 0x5d, 0x5, 0x1b, 0xd2, 0xd7, 0x18, 0x8b}, types.Tx{0x17, 0x6c, 0xfc, 0xe6, 0x70, 0x57, 0x19, 0xd0, 0x7e, 0xca, 0xff, 0x1e, 0x9d, 0xb0}, types.Tx{0x84, 0x70, 0xda, 0x2f, 0xb6}, types.Tx{0xe6, 0x3e, 0x62, 0x2b, 0xde, 0x1, 0x9d, 0xb2, 0xab, 0x4e, 0x7c, 0x22, 0x48, 0x6b, 0xb7, 0xd6, 0x48, 0xe3, 0xd1, 0xd0, 0xbb, 0xd8, 0x40, 0xde, 0x92, 0xbd, 0xc7, 0x38, 0x85, 0x10, 0x13, 0xf4, 0x76, 0x7b, 0xb0, 0x74, 0xde, 0xdb, 0x7f, 0x33, 0x95, 0x8f, 0x35, 0x5d, 0xe2, 0x70, 0x58, 0x3f, 0xb7, 0x69, 0x83, 0x6b, 0x73, 0xfd, 0xf7, 0xbf, 0xa, 0x6, 0x9, 0xfd, 0x74, 0x37, 0x1c, 0xd3, 0x71, 0xac, 0x18, 0xfa, 0x62, 0xf0, 0xb4, 0x45, 0xed, 0x1d, 0x57, 0xde, 0x62, 0x79, 0xfc, 0x95, 0xe9, 0x61, 0x62, 0xaf, 0xec, 0x3d, 0xa5, 0xaa, 0x75, 0x9b, 0xe2, 0x23, 0x2d}, types.Tx{0x1a, 0x27, 0xb7, 0xfe, 0x96, 0xe9, 0xb7, 0x59, 0x46, 0x9e, 0xc2, 0x8c, 0x6e, 0x0, 0xa4, 0x89, 0x2a}, types.Tx{0x51, 0x5f, 0x65, 0xd, 0x3e, 0xa1, 0xec, 0x9b, 0xe, 0x80, 0x4f, 0x1f, 0x3f, 0xf7, 0xad, 0x83, 0xb7, 0xfa, 0xc4, 0x6e, 0xc4, 0x4c, 0xa3, 0xbd, 0xde, 0xc6, 0xbf, 0xd2, 0x86, 0x74, 0xaa, 0xa7, 0x4f, 0x4, 0x44, 0x41, 0xc2, 0xf8, 0xdf, 0xa6, 0x8a, 0xa0, 0x93, 0xa7, 0xe2, 0xc2, 0xd2, 0xae, 0xa3, 0x79, 0xfa, 0xd4, 0x9f, 0xb6, 0xe4, 0x3a, 0x4a, 0x31, 0x8d, 0x22, 0x4b, 0x29, 0x68, 0xae, 0x99, 0x50, 0x95, 0x3, 0xe4, 0x32, 0x55, 0xa, 0x50, 0x50, 0xf7, 0x47, 0x71, 0xc7, 0x24, 0x9f, 0xbb, 0xee, 0x83, 0x7a, 0x72, 0x9e, 0x27, 0xd1, 0x76, 0x30, 0xcf, 0x42, 0xe8, 0xd1, 0xcf, 0x84}, types.Tx{0x7a, 0xbb, 0x9d, 0x4e, 0x57, 0xf3, 0x9d, 0x92, 0x94, 0xef, 0x94, 0x2e, 0x34, 0xc0, 0xa4, 0x3f, 0x4, 0x2c, 0x44, 0xdd, 0x54, 0x7, 0x1e, 0x17, 0xab, 0xcd, 0x49, 0x7e, 0xb3, 0x1d, 0x94, 0x5, 0x3b, 0x69, 0x3c, 0x77, 0x53, 0xb8, 0xa9, 0xf2, 0xf8, 0xc4, 0x89, 0x43, 0x2f, 0xa, 0x43, 0xe, 0x2f, 0x9, 0x27, 0xdb, 0xcd, 0xdc, 0xf, 0x6c, 0x46, 0xf7, 0x40, 0x31, 0xb, 0xc2, 0xe6, 0xf2, 0x3e}, types.Tx{0x44, 0xb2, 0xbd, 0xda, 0xbc, 0x11, 0xa4, 0x19, 0xa, 0x34, 0x87, 0x8c, 0x1e, 0x3e, 0xb8, 0x3b, 0xc5, 0x63, 0x13, 0xda, 0x65, 0x45, 0xe3, 0x51, 0x99, 0xd7, 0x5e, 0x83, 0x89, 0x6a, 0xb0, 0x79, 0x45, 0xe1, 0xd0, 0x92, 0x76, 0x96, 0x65, 0x7c, 0x27, 0x2a, 0x7c, 0xfd, 0x2b, 0xf1, 0x19, 0x7b, 0xc8, 0x8f, 0x22, 0x4d, 0x8b, 0x15, 0xe1, 0xee, 0x1f, 0xf0, 0xb, 0x9f, 0x5c, 0xb0, 0x96, 0x53, 0x2a, 0x60, 0x49, 0x33, 0xc0, 0x6b, 0xf3, 0x67, 0x4d, 0x91, 0xc3, 0xf3, 0x42, 0x18, 0x7e, 0x8c, 0x4c, 0xfd, 0x5f, 0xc, 0xea, 0xcf, 0xf3, 0x4f, 0x78, 0xd5, 0x41, 0xeb, 0x4f, 0xd3, 0x17, 0x58}, types.Tx{0x93, 0xa2, 0x7f, 0x3d, 0xba, 0xf3, 0x76, 0x96, 0xd0, 0x58, 0x11, 0x87, 0xa7, 0x56, 0xd4, 0xcc, 0x3d, 0xc, 0xb5, 0x10, 0xc2, 0xe1, 0xdf, 0xac, 0x3b, 0xcc, 0x3b, 0x22, 0x7b, 0xfa, 0xb5, 0xce, 0xa6, 0xb6, 0xd0, 0x94, 0x18, 0xef, 0x3b, 0xb5, 0xa9, 0xe5, 0xe5, 0x66, 0x3e, 0xc9, 0x70, 0xe5, 0x6d}, types.Tx{0x6d, 0xbf, 0x3a, 0x8c, 0x93, 0xbe, 0x7f, 0x6f, 0x23, 0xc8, 0xc6, 0x68, 0x1c, 0x8e, 0x6d, 0x9, 0x4e, 0xc2, 0x7d, 0xc0, 0xaf, 0xb9, 0xaa, 0xd3, 0xc7, 0x0, 0xd1, 0xd2, 0x63, 0xc9, 0x94, 0xa0, 0x26, 0x9c, 0x6c}, types.Tx{0xc3, 0x1f, 0xca, 0xfa, 0x9d, 0x64, 0xd5, 0x4e, 0x5, 0x9d, 0x43, 0xfa, 0x20, 0x1d, 0xba, 0x2b, 0x6c, 0x8b, 0xc6, 0x2c, 0x25, 0x76, 0x39, 0x2c, 0x94, 0x4, 0xb}, types.Tx{0xa, 0x58, 0xc3, 0x8b, 0x4, 0x36, 0x43, 0xc9, 0xbe, 0xc2, 0x62, 0xc8, 0x8e, 0x40, 0xe6, 0xdd, 0x1b, 0x19, 0x33, 0xa2, 0x4b, 0xa5, 0xc, 0xc4, 0xc8, 0x22, 0x26, 0xa7, 0xb1, 0x7d, 0x4f, 0x6d, 0xeb, 0x55, 0x4a, 0xce, 0x8, 0x32, 0x5a, 0x47, 0xda, 0xe4, 0x28, 0xd7, 0x64, 0x7b, 0xcf, 0xe, 0xa6, 0x9b, 0xf9, 0xde, 0xb0, 0x1f, 0x30, 0x30, 0x45, 0xe9, 0x10, 0xd2, 0x4b, 0x74, 0xf1}, types.Tx{0x8d, 0x39, 0xe4, 0xd0, 0x53, 0x49, 0xf9, 0x70, 0xfe, 0x45, 0xc0, 0x3d, 0xf6, 0xea, 0xd5, 0xf3, 0x95, 0x1f, 0xf1, 0xab, 0x43, 0xa4, 0xc4, 0xe7, 0x9c, 0x97, 0xc9, 0xf4, 0x46, 0xb7, 0x10, 0x4f, 0x54, 0x94, 0xe9, 0x8a, 0x14, 0xb1, 0xba, 0x8c, 0x92, 0x68, 0xd7, 0x30, 0x3a, 0x7d, 0xd4, 0x96, 0x56, 0x91, 0xc6, 0x30, 0x34, 0x43, 0x47, 0x47, 0xd1, 0xa1, 0x87, 0x9c, 0x44, 0x9, 0xfa, 0xbd, 0x8b, 0x73, 0xbc, 0xca, 0xa7, 0x5b, 0xdc, 0x2e, 0xef, 0x44, 0x22, 0x92, 0x9b, 0xa9, 0x53, 0x9e, 0xfe, 0xe0, 0x32, 0x84, 0xbc}, types.Tx{0x31, 0x6a, 0xa4, 0xc1, 0x5d, 0xe8, 0x39, 0xad, 0x43, 0xcd, 0x9f, 0x89, 0x39, 0xaf, 0xfc, 0xee, 0xbe, 0x9, 0xed, 0xe0, 0x20, 0xa1, 0x4, 0x10, 0x32, 0x50, 0xbd, 0x4e, 0x6b, 0x7a, 0x73, 0x61, 0xb9, 0xdb, 0x46, 0xbc, 0x5b, 0x32, 0xc8, 0x3e, 0xa5, 0xa7, 0xa8, 0xbd, 0xec, 0x6b, 0x31, 0xc7, 0x5b, 0x5a, 0x74, 0x7a, 0x62, 0xd, 0x88, 0x89, 0x43, 0xd2, 0x1f, 0xb0, 0x7a, 0xf0, 0xdf, 0x57, 0xf6, 0x78}, types.Tx{0x0, 0x9b, 0xce, 0xfd, 0x7e, 0xd5, 0x4a, 0xff, 0x4e, 0x23, 0xa8, 0x80, 0xc5, 0x17, 0x97, 0x8c, 0x26, 0xa9, 0xdf, 0xf6, 0xd0, 0x86, 0x24, 0x7b, 0xc7, 0xc2, 0x19, 0xa, 0x1b, 0x15, 0xc3, 0xab, 0xfd, 0x75, 0x1, 0x76, 0xc, 0xa0, 0xf5, 0x92, 0x4d, 0x77, 0x2d, 0x2, 0xdd, 0xbe, 0x72, 0x24, 0xa6, 0xb6, 0x8f, 0xb7, 0xf5, 0x59, 0x6e, 0x3e, 0x58, 0xf1, 0xf3, 0xbc, 0xd2, 0xfd, 0xe2, 0x3a, 0x19, 0xf4, 0x6c, 0x74, 0x3b, 0x9e, 0x8e, 0x2a, 0x95, 0xb6, 0xb4, 0x3d, 0x1e, 0xee, 0x33, 0xd2, 0x9f, 0x14, 0x99, 0x79, 0xe9, 0x3f, 0x4b, 0x9b, 0x9e, 0x82, 0xf2, 0xb9, 0xad, 0xfd, 0x79, 0x7a, 0xcc}, types.Tx{0x3b, 0x64, 0x91, 0x82, 0x6a, 0x24, 0x85, 0xba, 0xc3, 0xf2, 0xae, 0xda, 0x25, 0xb5, 0x5d, 0x46, 0x9a, 0x7c, 0x98, 0xbc, 0x1f, 0x7, 0x79, 0xa4, 0xed, 0x44, 0x8b, 0x29, 0x31, 0xc7, 0x5c, 0x57, 0x42, 0xca, 0x81, 0x4a, 0xb9, 0x7c, 0xb5, 0xce, 0xe2, 0x5, 0xa6, 0xc2, 0x5, 0xf8, 0x93}, types.Tx{0x2c, 0x55, 0x53, 0x4e, 0xc6, 0xef, 0xfc, 0xc7, 0x87, 0x4c, 0x2c, 0xdc, 0xec, 0x44, 0x7, 0x82, 0xb1, 0x4a, 0xc4, 0x3c, 0xa1, 0x13, 0x30, 0xaa, 0xa4, 0x17, 0xb5, 0x30, 0x48, 0xd9, 0x1e, 0x60, 0x9, 0x65, 0xb5, 0x15, 0x42, 0x66, 0x15, 0x92, 0xc1, 0x21}, types.Tx{0x12, 0x6b, 0x4c, 0x2c, 0x15, 0x82, 0xf2, 0xce, 0xa9, 0x1f, 0xb5, 0x49, 0x0, 0x65, 0x42, 0x1f, 0x1e, 0xdb, 0xde, 0x1, 0xf8, 0x45, 0xa4, 0x9f, 0xa0, 0xf8, 0x81, 0xe1, 0x50, 0xbc, 0xf0, 0xa3, 0x97, 0x8b, 0x2d, 0x4, 0xfa, 0xbd, 0xd4, 0x78, 0xcd, 0x5d, 0x6b, 0x11, 0x6e, 0x59, 0xac, 0xcc, 0x94, 0x3d, 0x67, 0x5a, 0xa7, 0xf, 0x34, 0xb0, 0xfe, 0x65, 0x89, 0xb5, 0xe3, 0xde, 0x43, 0xb2, 0xd7, 0xb1, 0xae, 0x42, 0xc2, 0x30, 0x49, 0x4, 0x96, 0xd2, 0xc7, 0x5c, 0xe9, 0xad, 0xf, 0x2e, 0xad, 0xbc, 0xa4, 0x42, 0xe1, 0x65, 0xb5, 0x96, 0x28, 0x7a, 0xd4, 0xfa}, types.Tx{0xe2, 0x5f, 0x47, 0xfe, 0x32, 0x7b, 0xfb, 0xa, 0xd5, 0xef, 0xb7, 0x8a, 0xe2, 0x40, 0xd, 0x67, 0x10, 0x26, 0x8c, 0xfd, 0xaa, 0x2e, 0xe0, 0x70, 0xe8, 0xc9, 0xd0, 0x6a, 0x8, 0x2f, 0x62, 0xc8, 0xb9, 0xca, 0xd3, 0xdc, 0xd1, 0x85, 0xbe, 0x1a, 0x53, 0xc, 0xaf, 0x9b, 0x6, 0x19, 0x54, 0x91, 0x85, 0x17, 0x1b, 0x1b, 0xd, 0xc3, 0xad, 0xe7, 0x2c, 0x29, 0xb3, 0x3b, 0xb9, 0xfb, 0x5e, 0x82, 0xe8, 0xed}, types.Tx{0x4e, 0xc0, 0xae, 0x23, 0x1f, 0xc8, 0x69, 0xa7, 0xd1, 0x8d, 0x51, 0xca, 0x5d, 0x7b, 0x4e, 0x62, 0x17, 0xed, 0x54, 0x5a, 0xd3, 0xdc, 0x2d, 0x1b, 0xca, 0xa8, 0x6c, 0xd0, 0x6e, 0x80, 0x26, 0x1e, 0xbf, 0x15, 0x1f, 0xf6, 0x30, 0x8e, 0xd0, 0xdf, 0xed, 0xf, 0xf3, 0xc4, 0x2c, 0xb0, 0x73, 0xc9, 0xb9, 0x6d, 0x0}, types.Tx{0xb4, 0x9a, 0x40, 0x49, 0x2a, 0x4c, 0x2e, 0x78}, types.Tx{0x4e, 0xa5, 0xf1, 0x4e, 0x1c, 0x3c, 0xc9, 0x13, 0xca, 0x3c, 0x51, 0xc4, 0x8f, 0x66, 0x2b, 0xbf, 0xc6, 0x24, 0x16, 0x34, 0x20, 0xe8, 0x97, 0x4, 0x6f, 0x3, 0xe3, 0xe0, 0x10, 0xc7, 0x14}, types.Tx{0xf, 0xde, 0x9b, 0x56, 0x15, 0xc4, 0xfe, 0xd8, 0xbb, 0x34, 0xf6, 0x5, 0x49, 0xa8, 0x99, 0x88, 0xa7, 0xb5, 0x1d, 0xb4, 0x10, 0x49, 0x2c, 0x37, 0x2d, 0xbd, 0xf2, 0x20, 0xb2, 0x9, 0xbf, 0x5d, 0xa2, 0x88, 0x5a, 0x6b, 0xcd, 0xea, 0x77, 0x1d, 0xb1, 0x29, 0x23, 0x61, 0xcd, 0xaa, 0xb2, 0xb7, 0x1e, 0x27, 0xc5, 0x50, 0x59, 0x3c, 0x19, 0x47, 0x1d, 0x78, 0x63, 0x1, 0x39, 0xd1, 0x2f, 0xf0, 0xb, 0x48, 0xbd, 0xe2, 0x79, 0xe1, 0xf8, 0x3e, 0x1f, 0xec, 0x38, 0x9e, 0x1b, 0xe0, 0x38, 0xb4, 0x8, 0xd2, 0x20, 0x35, 0x6, 0xf, 0x3c, 0x6d}, types.Tx{0xee, 0x5e, 0x15, 0x4, 0xe6, 0x13, 0x2, 0x5f, 0xae, 0xd5, 0x5d, 0x45, 0x43, 0x66, 0x1, 0xf3, 0xe5, 0x2b, 0x86, 0xe4, 0xdd, 0xdf, 0xfa, 0x2, 0x21, 0x6e, 0xef, 0x60, 0x46, 0x5c, 0x6f, 0xd7, 0x77, 0x1d, 0xd, 0x50, 0x6e, 0xd6, 0xa2, 0x37, 0xf7, 0x99, 0x6d, 0xed, 0x9b, 0xf7, 0x72, 0xb5, 0xce, 0x6c, 0x56, 0x21, 0x1f, 0xc8, 0xee, 0x8, 0x53, 0xf4, 0xcf, 0xd8, 0x3, 0x93, 0xa, 0x8, 0xed, 0x8, 0x33, 0xd9, 0x3d, 0x9, 0x43, 0xfe, 0x3a, 0x18, 0xb, 0x8, 0x6c}, types.Tx{0x47, 0x81, 0xdd, 0x48, 0xc9, 0xf9, 0x15, 0x62, 0xa4, 0x81, 0xdb, 0x93, 0xce, 0xd7, 0x1f, 0xc1, 0x3b, 0xc1, 0xfb, 0xc8, 0x1, 0x4d, 0x8f, 0xfc, 0x32, 0x79, 0xeb, 0x8d, 0xc2, 0xc9, 0x0, 0x5a, 0x81, 0x5d, 0xe8, 0x54, 0x8a, 0x39, 0x8b, 0x4c}, types.Tx{0xcd, 0x1e, 0xf4, 0xa6, 0x8c, 0xce, 0xae, 0x8b, 0x47, 0xbd, 0x89, 0x3a, 0xb2, 0x16, 0xce, 0x89, 0x5, 0xc0, 0xe4, 0x20, 0x75, 0x13, 0x44, 0xee, 0x46, 0xe0, 0xb5, 0x8f, 0xba, 0x46, 0xf9, 0x95, 0xff, 0xc0, 0x86, 0x88, 0xb4, 0x7e, 0x63, 0x21, 0x27, 0x65, 0x8e, 0xd4, 0x6a, 0x30, 0x78, 0x43, 0xae, 0x49, 0x7, 0x68, 0x8d, 0x7f, 0x84, 0x61, 0x26}, types.Tx{0x34, 0x89, 0x60, 0x18, 0xed, 0xe6, 0xf1, 0xa5, 0x81, 0x66, 0x4f, 0x45, 0x7, 0x59, 0x31, 0x43, 0xf2, 0xd5, 0x0, 0x5f, 0xaa, 0x3f, 0xc4, 0x3a, 0xda, 0x44, 0x1, 0x1b, 0xb, 0x90, 0x66, 0xbe, 0xb, 0xb2, 0xb6, 0xf2, 0x52, 0xe0, 0x5f, 0x9e, 0xf0, 0xc1, 0xf3, 0x1b, 0x76, 0x7c, 0x3, 0x3e, 0x70, 0xd7, 0xfc, 0xbe, 0xe1, 0xae, 0xef, 0xcd, 0x2, 0x50, 0x35, 0xda, 0x40, 0xd5, 0x1a, 0xaa, 0xf6, 0x9c, 0x4a, 0x7b, 0xae, 0x9d, 0x2f, 0xc0, 0x64, 0x17, 0x6b, 0xd2, 0x2}, types.Tx{0x5c, 0xd7, 0xdc, 0xe5, 0xbf}, types.Tx{0xf5, 0xec, 0x95, 0x2b, 0x25, 0xaf, 0xf0, 0xe8, 0x74, 0xd0, 0x72, 0x42, 0x37, 0xfb, 0xb2, 0x17, 0xb2, 0x40, 0x54, 0x65, 0x8e, 0x62, 0x6d, 0x23, 0xb2, 0x2e, 0x39, 0x20, 0xf9, 0xeb, 0x3d, 0x2f, 0x4f, 0xbe, 0xf2, 0x8c, 0xc1, 0x83, 0xb5, 0x7b, 0x32, 0xe2, 0xc5, 0x4c, 0x21, 0xe1, 0x9d, 0x49, 0xb9, 0x91, 0x37, 0x6d, 0x17, 0xf7, 0x57, 0xe4, 0x9, 0x2e, 0x9d, 0x86, 0x9b, 0x13, 0x74, 0xdb, 0x2b}, types.Tx{0x12, 0x7, 0x88, 0xd0, 0x4c, 0xb3, 0x7a, 0x6a, 0xf3, 0x11, 0xe6, 0x4d, 0x62, 0x56, 0x92, 0xaf, 0xb, 0x87, 0xe, 0xe, 0xc2, 0x21, 0x93, 0xeb, 0x9d, 0x0, 0x45, 0x73, 0xa0, 0x34, 0x8c, 0xfe, 0xc5, 0xf, 0xb9, 0x48, 0x81, 0x1b, 0x1e, 0x21, 0xb0, 0x54, 0xbe, 0x38}, types.Tx{0x6b, 0x1, 0xcf, 0x3, 0xd, 0x83, 0x2a, 0x1e, 0x32, 0x37, 0x3f, 0xc8, 0x9, 0xf6, 0xdd, 0x60, 0xbb, 0xd7, 0xf8, 0x60, 0xec, 0x62, 0x3a, 0xb9, 0xa6, 0x80, 0x83, 0x3f, 0xd9, 0x99, 0x9f, 0x96, 0x57, 0x59, 0x69, 0x51, 0xe, 0xc3, 0x69, 0xcc, 0xc4, 0x54, 0x52, 0x82, 0x3f, 0x6e, 0xc1, 0xfd, 0xb6, 0xc4, 0x77, 0xb8, 0x52, 0xe1}, types.Tx{0xbc, 0xa2, 0x5a, 0x99, 0x91, 0x25, 0x6a, 0x59, 0x57, 0xe1, 0x58, 0x63, 0x3d, 0xba, 0x42, 0xb9, 0x41, 0x5f, 0xea, 0x97, 0xa8, 0xa3, 0xb0, 0x7e, 0x57, 0xfe}, types.Tx{0x3c, 0x1, 0xa4, 0xff, 0x3d, 0x96, 0xc4, 0xef, 0xf1, 0xba, 0x5e, 0x6a, 0x79, 0xc8, 0x67, 0x96, 0xdb, 0x8a, 0x2e, 0x8d, 0xf, 0x6f, 0x84, 0xea, 0x86, 0xef, 0x9e, 0x50, 0x73, 0x79, 0x32, 0x55, 0xc, 0x31, 0xc, 0x27, 0x58, 0xdf, 0xe6, 0x80, 0xce, 0x52, 0x97, 0x9c, 0x2b, 0xea, 0x6c, 0xf5, 0x18}, types.Tx{0xde, 0x5c, 0x13, 0xe8, 0x7b, 0x29, 0xf6, 0xed, 0xed, 0xa, 0x8d, 0xf5, 0x4a, 0x2f, 0xe8, 0xf5, 0x25, 0x25, 0x98, 0xf2, 0xd0, 0x8f, 0x84, 0x13, 0x70, 0xfe, 0x2f, 0xff, 0x3e, 0x7d, 0x73, 0x66, 0xb3, 0x13, 0x50, 0x46, 0xb8, 0x9d, 0x3, 0x16, 0x9b, 0xa9, 0xa0, 0x1e, 0xc6, 0x2a, 0xf0, 0x2f, 0x18, 0xfa}, types.Tx{0x16, 0x19, 0xb7, 0xe4, 0x78, 0xdf, 0xd5, 0x83, 0x64, 0xc3, 0xf1, 0x55, 0x51, 0x6e, 0xd6, 0xed, 0x23, 0x41, 0xbf, 0x3e, 0x85, 0xcb, 0xfa, 0x20, 0x8c, 0x5f, 0xa4, 0x99, 0xb5, 0xa3, 0x7b, 0x7e, 0x87, 0x2c, 0x4b, 0xb9, 0x86, 0x28, 0x7e, 0xc, 0x87, 0xbb, 0x21, 0xb6, 0x3f, 0xb6, 0x41, 0x43, 0x99, 0xe9, 0x55, 0xa2, 0x9e, 0xd2, 0xb4}, types.Tx{0x30, 0xd7, 0x30, 0x65, 0x52, 0x1e, 0xd0, 0xb2, 0x3e, 0x8b, 0xf8, 0xe4, 0x40, 0x45, 0xeb, 0x48, 0x80, 0x3, 0x23, 0x1d, 0xf9, 0x21, 0xa6, 0xa6, 0xc2, 0x4e, 0x93, 0xed, 0x2c, 0xb6, 0xff, 0xd3, 0x42, 0xf6, 0x5e, 0x48, 0xa7, 0xd5, 0x38, 0xaa, 0x7d, 0x57, 0xec, 0x70, 0x8d, 0xb, 0x4f, 0x3a, 0xc9, 0xc, 0x45, 0xdc, 0x83, 0xf6, 0xf8, 0xf5, 0x5e, 0x34, 0x42, 0xa0, 0xd3, 0x9b, 0x42, 0x41, 0x35, 0x97, 0x50, 0xc7, 0x69, 0x91, 0x12, 0x7d, 0x1a, 0xe8, 0xc1, 0xd5, 0xcf, 0x65}, types.Tx{0xb6, 0x5, 0x45, 0xd0, 0xf6, 0xfe, 0x4c, 0x46, 0xc1, 0xf4, 0x6b, 0x42, 0xf5, 0x5e, 0x7f, 0x40, 0xd5, 0xb8, 0xde, 0xce, 0x95, 0xff, 0x33, 0x53, 0x22, 0xa9, 0x8d, 0x9b, 0x5a, 0xc3, 0x91, 0x14, 0xc3, 0x59, 0xaf, 0x56, 0xb8, 0x91, 0xcc, 0x51, 0x32, 0x7f, 0xf0, 0x64, 0x4c, 0x8c, 0xa8, 0x6e, 0x98, 0x23, 0x21, 0x46, 0xaf, 0xf2, 0xea, 0x2e, 0xe2, 0xa3}, types.Tx{0x28, 0x0, 0x31, 0x5f, 0x78}, types.Tx{0x68, 0x68, 0xe4, 0x9, 0x51, 0x31, 0x54, 0xda, 0xa1, 0x6e, 0x3c, 0x7d, 0x55, 0x6f, 0x75, 0x5e, 0xd1, 0x37, 0x78, 0x2a, 0x7, 0x1e, 0x56, 0x11, 0x1c, 0xca, 0x7, 0xfd, 0x6f, 0xbf, 0xff, 0xd2, 0x8a, 0x14, 0xa8, 0x55, 0x3b, 0xd3, 0x54, 0x72, 0x13, 0xd2, 0xb3, 0xe7, 0x74, 0xfc, 0x11, 0x47, 0x65, 0xd8, 0x8a, 0xe3, 0x5c, 0xb1, 0xf2, 0x51, 0x66, 0xd, 0xde, 0x1c, 0x44, 0x8d, 0x2c, 0x7a, 0x4e, 0x3a, 0x4a, 0x9c, 0x1, 0x8a, 0xa5, 0x9d, 0x8b, 0xd8, 0xe8, 0x57, 0xcb, 0x81, 0xec, 0x6b, 0x96, 0x4c, 0xf8, 0x76, 0xc7, 0x39, 0x48, 0x55, 0xad, 0x28, 0xbe, 0x99, 0x7d, 0xa3, 0x5a}, types.Tx{0x74, 0x75, 0x14, 0xea, 0x5d, 0x3c, 0xe2, 0x18, 0xce, 0xf7, 0x23, 0x86, 0xaf, 0x75, 0x88, 0x2c, 0x16, 0x0, 0xd2, 0x18, 0xbc, 0xed, 0xe5, 0x6c, 0xf1, 0x66, 0x48, 0x27, 0xd0, 0x7e, 0xd4, 0x29, 0x22, 0x32, 0xbe, 0x4a, 0xcf, 0x50, 0x3f, 0x3e, 0x26, 0xf, 0x96, 0xe0, 0x7c, 0xd4, 0x11, 0x12, 0x31, 0xe5, 0x6b, 0x3e, 0x6c, 0xeb, 0x5b, 0x5, 0x6c, 0x28, 0xb4, 0xa9}, types.Tx{0x42, 0xca, 0x95, 0xe0, 0x0, 0x63, 0x94, 0x96, 0x67, 0xbf, 0xe2, 0x9e, 0x6e, 0x60, 0xe, 0xfa, 0x66, 0xf7, 0xc1, 0x26, 0x4f, 0x49, 0x97, 0x3, 0x95, 0x46, 0xe7, 0x27, 0x20, 0xa7, 0x41, 0xc5, 0x6d, 0x89, 0x3a, 0x3, 0xfc, 0x83, 0xdd, 0x6e, 0xa6, 0x9f, 0x52, 0xf7, 0x2a, 0xba, 0x7a, 0x26, 0xce, 0x7, 0xf0, 0xd2, 0x98, 0x3e, 0x9f, 0x53, 0xf3, 0x4b, 0xa9, 0xef, 0xec, 0x29, 0xba, 0x51, 0xff, 0x13, 0xcd, 0xde, 0x90, 0xa5, 0x14, 0x48, 0x43, 0x64, 0x17, 0x3e, 0x48, 0x87, 0x8b}, types.Tx{0xe2, 0x13, 0x73, 0xfe, 0x11, 0xf6, 0xe8, 0xdc, 0x28, 0x56, 0x30, 0x23, 0x9a, 0x42, 0xba, 0x2b, 0xcc, 0x40, 0x38, 0x1d, 0xcd}, types.Tx{0x3c, 0x64, 0x39, 0x9b, 0xe3, 0x3d, 0xcd, 0xf0, 0x3e, 0x60, 0x53, 0x1a, 0x66, 0x38, 0x84, 0x90, 0xd, 0x8f, 0xad, 0x82, 0xa0, 0xfa, 0xcc, 0xb3, 0x79, 0x2a, 0x96, 0xfb, 0xd1, 0x4a, 0xa1, 0xc5, 0xde, 0xa1, 0x83, 0xe7, 0x2d, 0x84, 0x1, 0x8f, 0xc4, 0x90, 0xed, 0xff, 0x52, 0xb2, 0x78, 0xbf, 0xc7, 0xbe, 0xaf, 0xd2, 0x71, 0x26, 0x15, 0x66, 0x39, 0xcf, 0xab, 0x7d, 0xf, 0xfb, 0xe4, 0xa8, 0xbb, 0x98, 0x77, 0x57, 0x25, 0xf1, 0xdf, 0xb2, 0xb9, 0x58, 0x24, 0xce, 0xfc, 0xb0, 0x95, 0x5b, 0x53, 0x34, 0x3f, 0xbf, 0xe0, 0x27}, types.Tx{0xbb, 0xc4, 0xd5, 0x54, 0x75, 0xf0, 0x7, 0xec, 0x4e, 0x76, 0xec, 0x0, 0xeb, 0x46, 0x65, 0xf0, 0xea, 0xe8, 0xb7, 0x2a, 0xd3, 0x69, 0x24, 0xe6, 0x19, 0x83, 0x27, 0x80, 0xce, 0xd5, 0x39, 0x69, 0x99, 0xf2, 0xbb, 0xc3, 0xe3, 0xf1, 0x57, 0xc5, 0xda, 0xb4, 0x45, 0x31, 0xec, 0x9c, 0xbc, 0x1e, 0xf2, 0x4f, 0xab, 0x9e, 0x53, 0x0, 0x2, 0xcb, 0xbc, 0x2a, 0x69, 0xee, 0xb8, 0xbf, 0x34, 0x19, 0xfb, 0xe3, 0xa, 0x9, 0x1f, 0x48, 0xd0, 0xf3, 0x2b, 0xc8, 0xd5, 0xcb, 0x6c, 0x53, 0x2b, 0x32, 0x23, 0x5, 0x52, 0xd8, 0xa, 0x71, 0xfa, 0x8b, 0xbb, 0xc4, 0x8d, 0x8e, 0x1b, 0xed, 0xf7, 0xf9, 0x9d, 0xe1}, types.Tx{0x8, 0x82, 0x4e, 0xc6, 0x7c, 0x7b, 0xd5, 0xb7, 0x41, 0xcc, 0xfc, 0xdf, 0xe1, 0x44, 0x75, 0x4e, 0x24, 0x75, 0x82, 0x57, 0x8, 0x72, 0x3a, 0x5a, 0x6, 0x83, 0xad, 0x77, 0xcb, 0xe1, 0xce, 0xb5, 0x48, 0xac, 0xfb, 0x1c, 0x49, 0x5f, 0x5e, 0x4a, 0xb6, 0x84, 0x5, 0x7d, 0x4b, 0xd2, 0x34, 0x37, 0xd3, 0xc0, 0x5c, 0xcf, 0x46, 0x6e, 0xeb, 0x1, 0x7b, 0x4a, 0xe0, 0x51, 0x12, 0x3f, 0xc5, 0x8d, 0x3f, 0x37, 0xa9, 0x4b, 0xe7}, types.Tx{0x74, 0x6c, 0x59, 0xd1, 0xc8, 0x90, 0x9, 0xbe, 0x9a, 0x72, 0xc6, 0x75, 0xe6, 0x4c, 0x33, 0x4f, 0xbe, 0x6d, 0xf7, 0xe7, 0xbc, 0x50}, types.Tx{0xed, 0xef, 0x6b, 0xc8, 0x52, 0xb1, 0x28, 0x9f, 0xe2, 0xa, 0x30, 0x2d, 0x77, 0xef, 0x22}, types.Tx{0x2e}, types.Tx{0xf9, 0x3}, types.Tx{0x2e, 0xd8, 0xd0, 0xa3, 0xf, 0xc, 0x45, 0x11, 0x8f, 0x3}, types.Tx{0x79, 0x1c, 0xb5, 0xe5, 0x47, 0x99, 0xa2, 0xde, 0x98, 0x17, 0x35, 0x31, 0xa0, 0x20, 0x70, 0x15, 0xba, 0x1c, 0x4e, 0x81, 0x33, 0x1e, 0xcd, 0x34, 0x9f, 0x98, 0x96, 0x4c, 0x5d, 0x15, 0xc, 0x25, 0xd6, 0x2d, 0x1c, 0x5a, 0xa6, 0x95, 0x42, 0xba, 0x1c, 0x57, 0xc5, 0x16, 0x23, 0x56, 0x85, 0x35, 0xed, 0xea, 0xf8, 0xd6, 0x29, 0xaf, 0xfc, 0xc, 0x24, 0xfd, 0x67, 0xa5, 0x39, 0x5e, 0xcc, 0xfb, 0x15, 0xaf, 0x26, 0x63, 0x62, 0x90, 0xf4, 0xc9, 0x0, 0x53}, types.Tx{0x64, 0x5b, 0x7a, 0xa6, 0x5e, 0xa6, 0xcf, 0x52, 0x85, 0x8b, 0x54, 0x4d, 0xe4, 0x9e, 0x80, 0x29, 0x8c, 0xf8, 0xe, 0x13, 0xf6, 0xd5, 0xe0, 0x21, 0x63, 0xc1, 0x1f, 0x27, 0xc8, 0x37, 0xdf, 0xa1, 0x65, 0x1, 0x2a, 0x38, 0x18, 0xdb, 0xb8, 0x33, 0x63, 0x3d, 0x64, 0xf, 0xed, 0xba, 0xfd, 0xc1, 0xa5, 0xa3, 0x5b, 0x20, 0x22, 0xe9}, types.Tx{0x7c, 0x48, 0x63, 0xb5, 0x6b, 0x6b, 0xb7, 0x90, 0x5a, 0xd2, 0x35, 0x21, 0x5f, 0x70, 0x91, 0x21, 0x21, 0xc1, 0x4b, 0x9a, 0xc6, 0x48, 0xb0, 0x21, 0x6f, 0xe8, 0xc9, 0x68, 0x5d, 0xaf, 0xc7, 0x34, 0xe1, 0x52, 0x44, 0xbc}, types.Tx{0x8b, 0xa6, 0xf4, 0x13, 0x91, 0xfd, 0x2c, 0xc1, 0x9c, 0xd2, 0x26, 0xb1, 0xe1, 0xf0, 0x46, 0xb0}, types.Tx{0xd2, 0x41, 0xf0, 0xcd, 0x2d, 0x4c, 0x5f, 0xb, 0xaf, 0xed, 0xcb, 0x2b, 0x36, 0x4c, 0x14, 0x48, 0x91, 0x9e, 0xe8, 0x61, 0x4f, 0xc8}, types.Tx{0xb3, 0x23, 0x45, 0xed, 0xd3, 0xb3, 0xd1, 0xb9, 0x99, 0x7c, 0x7e, 0x9e, 0x8e, 0xd7, 0x75, 0x68, 0x93, 0x4b, 0x45, 0x9b, 0x2e, 0xcf, 0x72, 0x32, 0x65, 0x62, 0xce, 0x11, 0xa7, 0x30, 0xf, 0x16, 0xa8, 0x97, 0xc1, 0x30, 0x4d, 0xa5, 0xd9, 0xb9, 0x70, 0x6a, 0xaf, 0xb5, 0x35, 0x81, 0xa2, 0xc4, 0x4d, 0xaf, 0xc3, 0xea, 0xf0, 0x76, 0x57, 0xe4, 0x15, 0x76, 0x6b, 0x9f, 0x95, 0xc2, 0xe2, 0x5f, 0xb9, 0x29, 0x6b, 0x67, 0x4b, 0xae, 0x86, 0xdd, 0xbd, 0xd2, 0xf5, 0xb1, 0x34, 0x9, 0xf1, 0xf1, 0x50, 0x7d, 0x4c, 0xad}, types.Tx{0xfa, 0x6a, 0x28, 0x45, 0x30, 0x3b, 0xc8, 0xa0, 0xdd, 0x34, 0x9e, 0xd0, 0xbd, 0x2b, 0x9f, 0x95, 0xe2, 0x48, 0xe6, 0xb4, 0x11, 0xa8, 0x6e, 0x9b, 0x71, 0xd, 0xab, 0x96, 0xd1, 0x89, 0x45, 0xa0, 0xd4, 0x76, 0x43, 0x81, 0xa0, 0x91, 0x61, 0xb1, 0x7c, 0x8d, 0xcc, 0xcc, 0x2c}, types.Tx{0xb1, 0x51, 0x90, 0x31}, types.Tx{0x29, 0x22, 0xc2, 0x43, 0x48, 0x35, 0xc0, 0x23, 0x8a, 0xd1, 0xd3, 0x75, 0x22, 0xc4, 0x22, 0x5a, 0x70, 0xfc, 0x39, 0x9f, 0x9c, 0xe6, 0x9e, 0x2a, 0x3, 0xa6, 0x10, 0xc0, 0xa2, 0x96, 0xa7, 0x48, 0xd0, 0x1e, 0xa0, 0xc2, 0xb9, 0xa3, 0xcb, 0xd3, 0x9b, 0x9d}, types.Tx{0xce, 0x89, 0x14, 0x4b, 0xa0, 0xad, 0x94, 0xd4, 0x1e, 0x6, 0xf9, 0x98, 0xc4, 0x7b, 0x55, 0xc9, 0xea, 0xae, 0xad, 0x7d, 0x23, 0xd3, 0x88, 0x36, 0x22, 0xd4, 0xc, 0xdf, 0xfe, 0xce, 0xd3, 0xb4, 0x66, 0xc, 0x1d, 0xd9, 0xea, 0x9, 0xb4, 0xdc, 0xc, 0x9, 0x86, 0xa3, 0xf5, 0x86, 0xac, 0x20, 0xfc, 0xaa, 0x21}, types.Tx{0xb3, 0x8f, 0x25, 0xeb, 0xe1, 0xd8, 0x14, 0xe8, 0x97, 0x65, 0xc8, 0xef, 0x89, 0x45, 0xd2}, types.Tx{0xf7, 0xb9, 0xe3, 0xf3, 0xe8, 0x62, 0x6a, 0xa4, 0x63, 0x2a, 0xa1, 0xe0, 0x15, 0x7d, 0x38, 0xc, 0x24, 0xd2, 0xdc, 0x85, 0x5f, 0xa3, 0x9b, 0xd7, 0xc9, 0x3c, 0x5f, 0x56, 0x18, 0xc6, 0xd9, 0xe8, 0xd9, 0x82}, types.Tx{0xf5, 0xeb, 0xb, 0x96, 0xd6, 0xcd, 0x95, 0xda, 0xfa, 0xfb, 0x77, 0x2e, 0xc1, 0x99, 0x3d, 0xdd, 0x97, 0x95, 0xb9, 0x10, 0x52, 0x24, 0xf5, 0x41, 0x88, 0x51, 0x9d, 0x90, 0xbc, 0xc9, 0x2e, 0x78, 0x2f, 0x70, 0xd9, 0x83, 0xe3, 0x34, 0x57, 0xcd, 0x64, 0xde, 0x1f, 0x1a, 0x32, 0xe, 0xbc, 0x98, 0x66, 0xfe, 0xf4, 0x3, 0x2a}, types.Tx{0xad, 0x85, 0xaa, 0x15, 0x18, 0x81, 0x91, 0x87, 0xa6, 0xe7, 0x4c, 0x7b, 0xe6, 0xb2, 0x0, 0xa8, 0x65, 0x97, 0xa8, 0x76, 0xcd, 0x8c, 0x2d, 0xa8, 0x15, 0xe4, 0xee, 0xef, 0xa0, 0x9b, 0x57, 0xd8, 0x6f, 0x84, 0x26, 0xa3, 0x29, 0x3d, 0x12, 0x4f, 0xfe, 0x8c, 0xd2, 0x38, 0xcb, 0x81, 0x5c, 0x44, 0x5f, 0x9a, 0xc5, 0x24, 0xbc, 0x6b, 0xf7, 0xbe, 0xe4, 0x41, 0x24, 0xb4, 0x41, 0xbb, 0x77, 0xbc, 0xc0, 0x83, 0x7b, 0xa3, 0xfc, 0x53, 0x11, 0xe2, 0xa9, 0x11, 0x2f, 0x47, 0xcd, 0x67, 0xac, 0x5, 0x37, 0xb2, 0xbe, 0xb2, 0x63, 0xea, 0xdc, 0xc2, 0xed, 0x10, 0x39, 0xa1, 0xba, 0xd1, 0x3f}, types.Tx{0x51, 0x52, 0xed, 0xfd, 0xe8, 0xfa, 0x65, 0x86, 0x8f, 0x6f, 0xaf, 0x22, 0xe7, 0x87, 0x1e, 0xe6, 0xdf, 0xe3, 0x24, 0x83, 0x3a, 0xc5, 0x7a, 0x1c, 0x8d, 0x13, 0x56, 0x1a, 0x37, 0x32, 0x72, 0x87, 0x47, 0x3a, 0xba, 0x29, 0x1a, 0xf3, 0xd2, 0xfc, 0xd9, 0xc5, 0x9a, 0xd5, 0xff, 0xf6, 0x5a, 0xc3, 0x19, 0xd6, 0x75, 0x47, 0x2, 0x43, 0x3a, 0xb7, 0xce, 0xe3, 0xb5, 0xca, 0x52, 0x7, 0x5c, 0x9b, 0x88, 0xcf, 0x1f, 0xbd, 0xfe, 0x2, 0xaf, 0x65, 0x64, 0xdb, 0xea, 0x11, 0x8f, 0xa2, 0x61, 0xb2, 0x62}, types.Tx{0x11, 0x21, 0x46, 0x8e, 0xa5, 0x54, 0x7a, 0xb0, 0x82, 0xec, 0x81, 0xf6, 0x4b, 0xd1, 0x58, 0x7b}, types.Tx{0xca, 0x43, 0xb3, 0xf3, 0xda, 0x7, 0xf4, 0x8, 0x6, 0x9, 0x33, 0xef, 0x82, 0x63, 0x2d, 0xe, 0xa3, 0xec, 0x73, 0x12, 0x92, 0x8b}, types.Tx{0xc9, 0x6a, 0x11, 0x44, 0xe2, 0x21, 0xe9, 0x7e, 0x43, 0x89, 0xcd, 0xbd, 0xad, 0xcd, 0x88, 0x6, 0x7e, 0x54, 0x9f, 0x97, 0xf8, 0x76, 0xec, 0xe5, 0x2a, 0xc2, 0x42, 0xea, 0xe5, 0xd0, 0x2c, 0x0, 0x15, 0xec, 0x45, 0x5f, 0xbe, 0xf0, 0x95, 0x1a, 0xb6, 0x16, 0x4c, 0x53, 0x9, 0xcf, 0x7f, 0x45, 0x5b, 0x51, 0x8c, 0x3d, 0x8a, 0x93, 0xa1, 0xca, 0x72, 0x97, 0x91, 0x29, 0xaa, 0xb4, 0xa8, 0x8c, 0x35, 0x46, 0x9}, types.Tx{0x19, 0x5d, 0x33, 0xda, 0xe6, 0x4e, 0x87, 0x2f, 0xbe, 0x85, 0x68, 0x51, 0x28, 0xc9, 0xa2, 0x5c, 0x25, 0x91, 0xe2, 0x15, 0x63, 0x19, 0xed, 0xd5}, types.Tx{0x45, 0x17, 0x49, 0x23, 0x5f, 0x15, 0xd0, 0x37, 0x37, 0x2f, 0xe7, 0xec, 0x79, 0x2a, 0x4b, 0xba, 0xb4, 0x1d, 0x2e, 0x19, 0x36, 0x8b, 0x3b, 0xa8, 0x5c, 0xb8, 0x5b, 0x97, 0xf5, 0x0, 0x88, 0xa1, 0xd1, 0xed, 0x6, 0xbc, 0x57, 0xd0, 0x5e, 0xd2, 0x37, 0xea, 0x6f, 0x63, 0x2c, 0x57, 0x63, 0xe5, 0x0, 0xca, 0x8, 0x7, 0x51}, types.Tx{0xeb, 0x22, 0xf8, 0x58, 0x88, 0xc7, 0x3, 0xb2, 0xf8, 0x27, 0xfe, 0xa7}, types.Tx{0xd3, 0x32, 0x3c, 0xb9, 0xc3, 0x29, 0x1e, 0xea, 0x9c, 0x48, 0x89, 0xe3, 0x76, 0xc1, 0x5c, 0xf6, 0x2f, 0xdd, 0x5a, 0x23, 0x6b, 0xa7, 0xe3, 0x68, 0xb6, 0x95, 0x27, 0x20, 0xf5, 0xd, 0x46, 0x96, 0xf, 0xca, 0x72, 0x0, 0x9f, 0x8e, 0x89, 0xd0, 0xe0, 0xd6, 0xfd, 0x3a, 0x1f, 0x49, 0xfc, 0xf6, 0x95, 0xfb, 0xe2, 0xf8, 0x48, 0x23, 0xb5, 0xb7, 0x7c, 0x61, 0x2e, 0xe1, 0x9c, 0xcd, 0x8, 0x97, 0xeb, 0x53, 0x3a, 0x93, 0x36, 0x64, 0x83, 0x46, 0xeb, 0xc5, 0x87, 0x2, 0x94}, types.Tx{0xc3, 0x18, 0x1c, 0x7c, 0xe5, 0xf, 0x58, 0xba, 0xd5, 0x73, 0x5a, 0xf2, 0x52, 0x8e, 0x29, 0xc, 0x86, 0xbb, 0x7d, 0x3e, 0x54, 0xf5, 0xf, 0x2d, 0xf, 0x51, 0xe7, 0xd2, 0xff, 0x28, 0x7f, 0x48, 0x86, 0x61, 0xb1, 0x70, 0xb5, 0x4f, 0xd1, 0x30, 0x46, 0x6c, 0x4c, 0xa0, 0xa4, 0x99, 0xb7, 0x53, 0xb3, 0x1b, 0x76, 0x23, 0xe3, 0x78, 0xc6, 0x12, 0x3c, 0xd8, 0xab, 0x6f, 0x13, 0xc0, 0xd7, 0xb8, 0xe0, 0x23, 0x76, 0xe2, 0xf6, 0x31, 0xe4, 0x1b, 0xcd, 0x89, 0xf8, 0xd7, 0x7, 0xd6, 0x41, 0xa, 0xda, 0x4f, 0x63, 0xff, 0xef, 0xc3, 0xbd, 0x2a, 0xc7, 0x30, 0x43, 0xc7, 0x58}, types.Tx{0x5e, 0x61, 0x55, 0xeb, 0x91, 0xd1, 0x4a, 0x24, 0xb4, 0xf6, 0x78, 0x84, 0xf6, 0xae, 0x55, 0x2e, 0xb8, 0x12, 0xe1, 0xb6, 0x32, 0xa2, 0x17, 0xc1, 0xfb, 0xf0, 0x24, 0x12, 0x4a, 0x16, 0x4c, 0xb4, 0x6d, 0x93, 0xb7, 0x7, 0x86}, types.Tx{0x17, 0xc2, 0x3a, 0xa1, 0xf4, 0x77, 0x5f, 0x94, 0xa8, 0xe2, 0x13, 0xef, 0x41, 0x46, 0x6d, 0x57, 0x4b, 0xa8, 0x1f, 0x47, 0x13, 0x4a, 0x7b, 0xa9, 0x48, 0x92, 0xb5}, types.Tx{0xb0, 0x4c, 0x93, 0x2c, 0x17, 0xb9, 0x8a, 0x6e, 0x2e, 0xfd, 0xf0, 0xc1, 0x6e, 0xf8, 0x79, 0x2b, 0x3a, 0xa3, 0x34, 0x74, 0xdd, 0xee, 0x23, 0x16, 0xd4, 0x6c, 0xb6, 0x7d, 0x5a, 0x9e, 0x4f, 0xb6, 0x78, 0x44, 0x6c, 0x87, 0x95, 0xc2, 0x50, 0x4b, 0x81, 0x65, 0x3f, 0x27, 0xc6, 0x97, 0xd6, 0x61, 0x37, 0xce, 0x7d, 0x8, 0x7, 0xa8, 0x75, 0x46, 0x4d, 0x2d, 0x75, 0x75, 0x5a, 0x92, 0x20, 0x1f, 0x93, 0x14, 0x29, 0xa8, 0xde, 0xff, 0x3e, 0x4f, 0x3d, 0x56, 0x2d, 0x40, 0x88, 0x4b, 0xb3, 0xb0, 0x56, 0xce, 0x7, 0xf5, 0xae, 0x42}, types.Tx{0x89, 0x28, 0x6b, 0x9c, 0x7b, 0x48, 0x6a, 0xcc, 0x6f, 0x51, 0xed, 0x97, 0x7d, 0x2f, 0x80, 0x60, 0x8e, 0x53, 0x2d, 0xd7, 0xf5, 0x42, 0x34, 0x3e, 0xd7, 0x3c, 0xe4, 0x8c, 0xea, 0x20, 0x63, 0xcc, 0xd8, 0xf9, 0xa8, 0x41, 0xca, 0xbe, 0xc, 0x5c, 0xb1, 0xd7, 0x72, 0x72, 0xe6, 0xf2, 0x77, 0x2e, 0xa4, 0xbd, 0xf0, 0x6a, 0xbf, 0x36, 0x79, 0x90, 0xd2, 0xb4, 0xa, 0x1, 0x8d, 0x6, 0xf2, 0x2d, 0x29, 0xa4, 0xb6, 0xfc, 0x89, 0x5c, 0xac, 0xaf, 0x14, 0x7e, 0x40, 0x5f, 0x5b, 0xe5, 0x3f, 0x14, 0x82, 0x98, 0xdd, 0x9f, 0xca, 0x9d, 0xd9, 0x34, 0xfb, 0xed, 0x8b, 0x91, 0x98, 0xf5, 0x1e}, types.Tx{0x8b, 0xcf, 0x4d, 0xe7, 0x6b, 0x6f, 0xfa, 0x62, 0xae, 0x27}, types.Tx{0x0, 0xe1, 0xa7, 0x0, 0x7, 0x97, 0x6, 0xed, 0x6, 0x19, 0xba, 0xdb, 0x19, 0x59, 0xf3, 0xea, 0xe3, 0xa6, 0xc7, 0xda, 0xc0, 0x87, 0x3c, 0xc}, types.Tx{0x34, 0x12, 0xbd, 0x52, 0xde, 0x2, 0x8c, 0xc3, 0xc5, 0xd4, 0xfd, 0xc1, 0xb5, 0x3c, 0xc8, 0xd1, 0xcf, 0x87, 0x8d, 0x29, 0x2a, 0x9b, 0x60, 0x5b, 0x5c, 0xed, 0x68, 0xa9, 0x75, 0xc4, 0x9b, 0x9a, 0x7e, 0x58, 0x67, 0x22, 0x78, 0xb5, 0x8e, 0xb1, 0xf, 0xb9, 0x55, 0xae, 0xec, 0x2, 0xe, 0xc3, 0xab, 0xf1, 0x4, 0xdd, 0xc1, 0x76, 0xc, 0xad, 0xaa, 0x96, 0xd0, 0x1c, 0xcb, 0xe9, 0x67, 0x23}, types.Tx{0x2e, 0x37, 0x9f, 0x28, 0x9c, 0x63, 0xab, 0x35, 0xe4, 0x44, 0x6, 0xc8, 0x39, 0x9c, 0xc5, 0x9, 0x1c, 0xc9, 0xf2, 0x6c, 0x36, 0xa1}, types.Tx{0x0, 0x25, 0x76, 0x71, 0x7, 0x9, 0x5e, 0x10, 0xbe, 0x34, 0x67, 0x6a, 0x48, 0x67, 0x6f, 0x5f, 0x4f, 0x56, 0xfa, 0x7a, 0x38, 0x78, 0xc8, 0x32, 0x2e, 0x22, 0x36, 0xeb, 0xcd, 0x26, 0x0, 0x87, 0xce, 0x1, 0x90, 0x13, 0xe, 0xfc, 0x8, 0x2, 0x16, 0x33, 0x81}, types.Tx{0xb6, 0x60, 0x3a, 0xc6, 0xc9, 0xdd, 0x7a, 0x3f, 0x45, 0x5f, 0x1a, 0xc3, 0x61, 0xda, 0x27, 0xb3, 0x54, 0xf3, 0x9, 0x25, 0x8f, 0xf0, 0x95, 0x36, 0xdf, 0xb7, 0x1d, 0xee, 0xc2, 0x93, 0x63, 0x19, 0x48, 0x17, 0xf9, 0xcb, 0x66, 0x3d, 0xda, 0x6e, 0x74, 0x7f, 0x18, 0xb4}, types.Tx{0x42, 0xf7, 0x43, 0x65, 0xda, 0x8e, 0x57, 0x12, 0xc0, 0xd0, 0x64, 0x65, 0x5a, 0xc3, 0xd1, 0x32, 0xee, 0x5b, 0x9c, 0x9a, 0xa3, 0x39, 0x43, 0x19, 0x6b, 0x33, 0x2f, 0x60, 0x79, 0x3b, 0xef, 0x13, 0x9b, 0xd5, 0xab, 0x5b, 0xa9, 0xc2, 0x6e, 0xd5, 0x70, 0x9b, 0x4a, 0x9, 0x79, 0xbe, 0x10, 0x30, 0xe7, 0x9e, 0xf6, 0x4c, 0x97, 0x86, 0xd3, 0x42, 0x47, 0xa5, 0xe1, 0x44, 0xcb, 0xf9, 0x2a, 0x20, 0xe1, 0xb7, 0xcd, 0x7d, 0xe0, 0x78, 0x1f, 0xd3, 0x37, 0x46, 0xb9, 0x2f, 0xfb, 0x3e, 0x71, 0xe9, 0x6a, 0xd6, 0x3e, 0x2, 0x98, 0x61, 0x47, 0xe9, 0x1d, 0x65, 0x24, 0xc8, 0x7b, 0xd5, 0x3f, 0x29, 0xa5}, types.Tx{0x15, 0xae, 0xa9, 0x20, 0x7, 0x4c, 0x3a, 0x44, 0x34, 0x9a, 0x36, 0x2a, 0xaf, 0xc1, 0xb7, 0x83, 0x43, 0x1, 0xc9, 0x67, 0xf2, 0x44, 0xbf, 0x47, 0x8e, 0x5a, 0x21, 0x30, 0x1a, 0xe5, 0x85, 0x77, 0x53, 0x10, 0x23, 0x39, 0x49, 0x91, 0xa1, 0x65, 0x44, 0x36, 0xa8, 0xb1, 0x7, 0x21, 0x4e, 0x4c, 0x9c, 0x88, 0xd4, 0x2a, 0x4b, 0xf6, 0xcd, 0xa4, 0xaa, 0x50, 0x95, 0x9e, 0x3f, 0x22, 0x93}, types.Tx{0x38, 0x52, 0xc4, 0xba, 0x5f, 0xb2, 0xd1}, types.Tx{0x3f}, types.Tx{0xa9, 0x78, 0xdf, 0xb9, 0x8d, 0xa5, 0x63, 0x3c, 0x62, 0x51, 0x6, 0x1e, 0x9b, 0x22, 0xcf, 0xbb, 0xc0, 0xd5, 0x46, 0x23, 0xf, 0x57, 0xb6, 0xad, 0x39, 0xe7, 0x6b, 0xf9, 0xf4, 0x6b, 0x94, 0xea, 0x3b, 0xa4, 0xe5, 0x7b, 0x2d, 0x3, 0x13, 0xe5, 0x60, 0x51, 0x3d, 0x5d, 0x3a, 0x2b, 0xc6, 0x8e, 0xd6, 0x14, 0x3b, 0x96, 0x5d, 0xa0, 0xc1, 0xd5, 0x2c, 0x9a, 0x6a, 0xfe, 0x30, 0xe0, 0xc, 0xd1, 0xe, 0xc5, 0xf2, 0xb6, 0xa, 0x19, 0x98, 0xc6, 0x7d, 0x9f, 0xdf, 0x5b}, types.Tx{0xec, 0xff, 0x28, 0xf7, 0x89, 0x52, 0xc7, 0xb6, 0xec, 0x5a, 0x6c, 0x6f, 0x76, 0x7d, 0x66, 0xd3, 0xc9, 0x67, 0xe6, 0xab, 0x72, 0x98, 0x7a, 0x93, 0xef, 0xe8, 0x3f, 0x4e, 0xe7, 0xeb, 0x98, 0x66, 0x55, 0xa2, 0xb7, 0xd8, 0xf2, 0xc2, 0x48, 0xe8, 0xde, 0xcf, 0x42, 0x6e, 0xac, 0xe2, 0xa4, 0x94, 0x10, 0xb9, 0x8b, 0xf5, 0x23, 0x26, 0x75, 0xd6, 0x57, 0x35, 0x5b, 0xc5, 0xb6, 0x7e, 0xbb, 0x33, 0x65, 0x67, 0xb7, 0x85, 0xa1, 0x6f, 0xb4, 0x80, 0xcd, 0x3c, 0xcb, 0x72, 0x3f, 0xd9, 0x80}, types.Tx{0xe1, 0x8f, 0x7d, 0x6a, 0xc7, 0x30, 0x8a, 0x0, 0x10, 0xbf, 0x1f, 0x1c, 0xe9, 0x84, 0xb7, 0x8e, 0xbb, 0xf2, 0x57, 0xc4, 0xa8, 0xb, 0x24, 0xe6, 0xeb, 0x83, 0x92, 0x7b, 0xb4, 0x2, 0x26, 0xf, 0xa6, 0x43, 0xa2, 0xd, 0x46, 0x34, 0xfc, 0x89, 0x6, 0x28, 0xd1, 0xa9, 0x95, 0x18, 0xe, 0x3c, 0x25, 0xf2, 0x24, 0x48, 0x73, 0xcd, 0x33, 0x60, 0x23, 0x86, 0x18, 0x6b, 0x9c, 0x1, 0x7a, 0x15, 0x97, 0x7b, 0x4c}, types.Tx{0xf4, 0xfc, 0x61, 0xa3, 0x44, 0x80, 0x4a, 0xf, 0x6c, 0x3e, 0x19, 0xfe, 0x1f, 0x91, 0x80, 0x62, 0x41, 0xbf, 0x58, 0x61, 0x2f, 0x36, 0xb, 0x5d, 0xdd, 0xfb, 0xfd, 0xa, 0xc0, 0xaf, 0xb4, 0x23, 0x59, 0xaf, 0xa7, 0x81, 0x8, 0x73, 0xa5, 0x1b, 0x39, 0xc3, 0x19, 0x39, 0xed, 0xd1, 0x6c, 0xe2, 0xf5, 0x46, 0x86, 0x31, 0xaf, 0x3, 0x3f, 0x6c, 0x5f, 0x33, 0x87, 0x71, 0x69, 0xbd}, types.Tx{0x83, 0x16, 0x1b, 0x86, 0x49, 0x19, 0xc4, 0x43, 0xf3, 0x9d, 0x4e, 0xf0, 0xf, 0xbd, 0x4}, types.Tx{0x23, 0xe4, 0x1b, 0xf7, 0x6e, 0xd, 0xe, 0x8f, 0x33, 0x62, 0xb5, 0xe6, 0x86, 0x68, 0x5c, 0xc0, 0xe0, 0x3c, 0xd6, 0x6e, 0x1d, 0xb3, 0xfb, 0x99, 0xc0, 0xe9, 0x54, 0x51, 0x2e, 0x2b, 0xb8, 0xec, 0x45, 0x6d, 0x13, 0xed, 0xb1, 0x8, 0x81, 0xa2, 0x8c, 0x61, 0x30, 0xfb, 0x39, 0x2c, 0x4f, 0xba, 0x93, 0xaa, 0x97, 0x85}, types.Tx{0x62, 0x25, 0x1b, 0xb6, 0xf0, 0x37, 0xe5, 0xbf, 0xf9, 0x45, 0x5c, 0xdf, 0x31, 0x54, 0xc0, 0xc4, 0x7e, 0xc3, 0x1d, 0xae, 0xc9, 0xc, 0x55, 0x74, 0x29, 0xf4, 0x13, 0x63, 0x92, 0x65, 0x39, 0x9e, 0xc8, 0xe3}, types.Tx{0xf5, 0x1e, 0x88, 0x25, 0x17, 0x1f, 0x36, 0xcf, 0xda, 0xb2, 0xa5, 0x58, 0x3f, 0x87, 0x11, 0x62, 0x1b, 0xc9, 0xfc, 0x91, 0x91, 0x1d, 0x33, 0x1a, 0x9d, 0x84, 0xbc, 0x8e, 0x49, 0x3b, 0x9e, 0xc9, 0xb8, 0x7f, 0x23, 0x93, 0xcc, 0xe9, 0x47, 0x1a, 0x4b, 0xc5, 0x17, 0x4e, 0x10, 0xce, 0x66, 0x82, 0xcd, 0xe1, 0x20, 0x5b, 0x43, 0xa, 0x7a, 0xd8, 0x13, 0x28, 0x7, 0x6a}, types.Tx{0xcb, 0x60, 0x17, 0x50, 0x20, 0xce, 0xd2, 0x31, 0x1e, 0x75, 0xaf, 0x86, 0xf8, 0x7, 0x30, 0xb2, 0x90, 0x4e}, types.Tx{0x90, 0xb9, 0x2d, 0xdd, 0xd8, 0x2d}, types.Tx{0x77, 0x90, 0xc4, 0xe5, 0x41, 0xdc, 0x7f, 0x24, 0xc8, 0x5e, 0x4, 0xa1, 0xe2, 0x55, 0x2c, 0x22, 0x5e, 0x50, 0x4a, 0x6c, 0xad, 0x5, 0xc1, 0xd5, 0x93, 0x40, 0xe8, 0xd3, 0xfc, 0xe1, 0x98}, types.Tx{0x6a, 0xec, 0xbc, 0xf, 0x57, 0x4f, 0x8, 0x96, 0xf7, 0xf0, 0xf5, 0x6f, 0x78, 0xb4, 0xcf, 0x9a, 0x88, 0x34, 0xe2, 0x10, 0x83, 0x90, 0x53, 0xe6, 0x68, 0x25, 0x4b, 0x67, 0x14, 0xe6, 0xcc, 0x81, 0x11, 0x12, 0xc0, 0x63, 0xc1, 0x7f, 0x41, 0x12, 0x77, 0x6d, 0x87, 0xb8, 0x60, 0xb1, 0x15, 0x79, 0x27, 0x93, 0x9e, 0x5e, 0x8a, 0x5f, 0x29, 0x43, 0x32, 0xf5}, types.Tx{0x2a, 0xec, 0x1d, 0x47, 0x9c, 0xae, 0x93, 0x6e, 0x68, 0x29, 0x3, 0x85, 0xab, 0x63, 0x7f, 0x2f, 0xfb, 0x1b, 0x7c, 0xd0, 0x68, 0xef, 0xeb, 0xd5, 0x4c, 0xa4, 0x33, 0x7, 0xf, 0x1c, 0x89, 0xc2, 0x6f, 0xa0, 0x84, 0xef, 0xde, 0x7a, 0x0, 0x51, 0x40, 0x4c, 0x3e, 0xdd, 0x86, 0x0}, types.Tx{0xc8, 0x25, 0x4c, 0x2a, 0x16, 0xf6, 0xc7, 0x7b, 0x29, 0xf2, 0x3d, 0xa8, 0x5b, 0x2c, 0x54, 0x28, 0x65, 0xf8}, types.Tx{0xd2, 0x88, 0x8, 0x97, 0xfb, 0xb2, 0x81, 0xcf, 0xcb, 0x4, 0x40, 0x3, 0x5d, 0xa2, 0x7d, 0x2b, 0x64, 0xb6, 0x53, 0x83, 0xe3, 0x5, 0x11, 0x72, 0xbd, 0x73, 0xb9, 0x65, 0x5a, 0xe6, 0x71, 0xa8, 0x17, 0x6a, 0xd0, 0x99, 0xdd, 0x81, 0x8c, 0x14, 0x35, 0xf0, 0x6f, 0xc, 0x64, 0x1a, 0x30, 0x48, 0xb, 0xdf, 0xfe, 0x54, 0x1d, 0x9f, 0x95, 0xe0, 0x96, 0x70, 0x8d, 0x4b, 0xe0, 0x72, 0xf8, 0xc9, 0xb3, 0x2d, 0x4b, 0x3a, 0x74, 0x9, 0x63, 0x9f, 0x8c, 0x4b, 0x56, 0x9d, 0xb7, 0x14}, types.Tx{0x4c, 0x50, 0xcd, 0x42, 0x8b, 0x26, 0x94, 0x89, 0xda, 0xd2, 0x27, 0x96, 0x71, 0xdd, 0x6c, 0x81, 0x72, 0x59, 0x35, 0x15, 0x3b, 0xdc, 0x12, 0x37, 0xc8, 0x4d, 0x6f, 0x63, 0x21, 0x68, 0xc8, 0xc0, 0xce, 0x3b, 0x78, 0x67, 0xc4, 0xb0, 0xe, 0x6f, 0x70, 0x94, 0xf9, 0x35, 0x99, 0x98, 0xe5, 0x21, 0xdd, 0x6a, 0x99, 0xed, 0xb0, 0xe3, 0xb8, 0x14, 0x8d, 0x5c, 0xec, 0x3b, 0xd5, 0xde, 0x3a, 0x5c, 0x5c, 0xc3, 0x4f, 0x1e, 0x5f, 0xe4, 0x96, 0x45, 0x77, 0x9c, 0xd4, 0xa3, 0xb0, 0xa0, 0xd4, 0x27, 0xe5, 0xcc, 0xb3}, types.Tx{0x94, 0xa1, 0xfe, 0x57, 0x4f, 0xa8, 0xe5, 0xa1, 0xdc, 0xb0, 0x2b, 0xb1, 0x99, 0x19, 0x37, 0x29, 0x47, 0x8a, 0xde, 0x1d, 0x21, 0x5a, 0xe4, 0x62, 0xf2, 0x15, 0x20, 0x4f, 0x31, 0xa5, 0x97, 0xcb, 0xe1, 0xd6, 0x26, 0xe6, 0xe5, 0x9d, 0xad, 0x98, 0xa0, 0x1c, 0x5, 0x56, 0xf0, 0xe0, 0x48, 0x62, 0x88, 0x96, 0xb2, 0xa8, 0xc4, 0xba, 0xe7, 0xe4, 0x16, 0x83, 0x65, 0xe6, 0xf2, 0xd, 0xae, 0xc3, 0x8a, 0x8d, 0x61, 0xb6, 0xe, 0x7c, 0xcf, 0x9b, 0xbe, 0xa5, 0xb2}, types.Tx{0xed, 0x79, 0x2a, 0xaa, 0x85, 0xb4, 0xc, 0x4a, 0x5d, 0xe7, 0x5c, 0x92, 0xa2, 0xfa, 0x6a, 0x5e, 0x5c, 0x7c, 0x2f}, types.Tx{0x91, 0x31, 0x7d, 0x89, 0x24, 0xdc, 0x5c}, types.Tx{0x93, 0x54, 0xa6, 0xaa, 0x1b, 0xc4, 0x9f, 0xe8, 0x5, 0xde, 0xb9, 0xcd, 0xaa, 0x6b, 0x1e, 0x43, 0xfb, 0x96, 0x42, 0x2b, 0x85, 0x74, 0x4, 0xa2, 0xc1, 0x80, 0x65, 0x52, 0x7f, 0xee, 0x27, 0xc1, 0xa2, 0xca, 0x18, 0xb1, 0x9b, 0x4c, 0x3a, 0x67, 0x6d, 0xf7, 0xa1, 0xda, 0xf7, 0x12, 0x83, 0xba, 0xcc, 0x96, 0x8, 0x22, 0x72, 0xe8, 0xb2, 0x8d, 0x88, 0x9e, 0xb5, 0x41, 0xd4, 0x93, 0x43, 0xab, 0x2, 0x31, 0x5a, 0x5, 0xf0, 0x6f, 0xee, 0x13, 0xa0, 0x43}, types.Tx{0x9e, 0xef, 0xa4, 0x73, 0x2f, 0xb5, 0xe3, 0x1f, 0x2c, 0x54, 0x31, 0x35, 0xac, 0x66, 0xb3, 0x24, 0x67, 0x52, 0x64, 0xa, 0x4, 0xff, 0x84, 0x3f, 0x7d, 0xe4, 0xd6, 0xe8, 0xce, 0xd4, 0x22, 0xe4, 0x88, 0xf1, 0x29, 0x32, 0xaa, 0x7b, 0xef, 0x62, 0x8c, 0x44, 0x15, 0x37, 0xd0, 0xf1, 0x55, 0xc5, 0x3e, 0x13, 0x34, 0x1d, 0x76, 0xf5, 0x28, 0xa5, 0xf7, 0x44, 0xcf, 0xd7, 0x7b, 0x5a, 0xec, 0x24, 0xcf, 0x6a, 0xb7, 0xe0, 0xfd, 0xd3, 0x3, 0x1a, 0xaa, 0x7d, 0xfe, 0x0, 0x1c, 0xa6, 0x41, 0xf6, 0x4b, 0x8e, 0x77, 0x7a, 0xab, 0xad, 0xba, 0x6a, 0x44, 0xaf, 0xb7, 0x41, 0x24, 0xbe, 0xf8, 0x46, 0x86, 0xab, 0x7}, types.Tx{0xa8, 0x2a, 0x3b, 0x54, 0xf4, 0xc7, 0xcb, 0x29, 0x37, 0x4e, 0xc0, 0x38, 0x71, 0x50, 0xaf, 0x5c, 0x7d, 0x4b, 0xe5, 0x4f, 0xc1, 0xf0, 0xac, 0x1a, 0x4a, 0x28, 0xd6, 0x57, 0x65, 0xdb, 0xa8, 0x4f, 0x78, 0x9a, 0x4e, 0x94, 0x97, 0xd2, 0xd8, 0x1a, 0x6c, 0xa1, 0x43, 0xff, 0x51, 0x7c, 0xff, 0x13, 0xd8, 0xce, 0xe7, 0xf8, 0xe0, 0xb2, 0xe0, 0xd2, 0x2, 0xb1, 0xe3, 0xc3, 0x73, 0xb6, 0x5f, 0xf1, 0x60, 0x8f, 0xb1, 0xe2, 0x88, 0xd, 0xcd, 0xcd, 0x7d, 0x2, 0x27, 0x81, 0xde, 0xad, 0xfd, 0x58, 0x3e, 0xe6, 0xd, 0x27, 0xc3, 0xd6, 0xce}, types.Tx{0x76, 0x80, 0x49, 0x80, 0x2d, 0x31, 0x86, 0xcb, 0x71, 0x2d, 0x6b, 0xf4, 0xfb, 0xff, 0xbc, 0x3d, 0x64, 0xc7, 0x3b, 0x7f, 0xd3, 0x5c, 0x82, 0xaf, 0x71, 0x55, 0xa7, 0xb3, 0xdc, 0x11, 0x1d, 0x67, 0x30, 0xb8, 0xfc, 0x99, 0xe7, 0xfa, 0xaa, 0x4, 0x32, 0xd, 0x8d, 0x4e, 0xbe, 0xc1, 0x40, 0xb3, 0x2f, 0x27, 0x9c, 0x26, 0x2a, 0x89, 0x23, 0x14, 0x26, 0xbb, 0x69, 0xe1, 0x7, 0x9e, 0x82, 0xce, 0x87, 0x52, 0x5, 0xb0, 0x55, 0x9, 0x71, 0x61, 0x48, 0x29, 0x83, 0xbb, 0x4, 0x58, 0xa4, 0x5, 0x78, 0x37, 0x76, 0xcf, 0x56, 0xcd, 0xe3}, types.Tx{0x30, 0x3f, 0x88, 0x64, 0xcb, 0xca, 0x38, 0xc6, 0xdd, 0x2e, 0xb, 0x8c, 0xb0, 0x16, 0xf0, 0xe5, 0x4c, 0xa6, 0x8b, 0x7e, 0xea, 0x75, 0x8e, 0x6d, 0xd5, 0xd1, 0x22, 0x31, 0xf1, 0x7a, 0x34, 0xf1, 0xbc, 0x1e, 0xec, 0x44, 0x42, 0xc, 0xb5, 0xa1, 0x5c, 0x44, 0xc4, 0x3c, 0xcb, 0x62, 0xb9, 0x3e, 0x31, 0x69, 0xa4, 0xd7, 0x73, 0xee, 0x2e, 0xe, 0xa1, 0x8b, 0xfc, 0x75, 0xba, 0x2c, 0x11, 0x5d, 0x93, 0x15, 0xab, 0xea, 0x73, 0xe7, 0x9c, 0xf, 0x5a, 0x69, 0xbc, 0xb2, 0x79, 0x2d, 0x3e, 0x97, 0x78, 0x6f, 0x35, 0xe3, 0x21, 0x97, 0x10, 0x37, 0x18, 0x43, 0x6, 0xfc, 0xef, 0x49, 0x9f, 0xd9, 0x4b}, types.Tx{0x37, 0xc4, 0x37, 0x48, 0xf9, 0xe5, 0xaa, 0x73, 0xc6, 0xc7, 0x4, 0x19, 0x53, 0x2, 0x3e, 0x27, 0x83, 0x23, 0x72, 0x21, 0x18, 0xce, 0x5a, 0xd, 0x4e, 0x12, 0x59, 0xc2, 0x2a, 0x78, 0xb5, 0xf, 0xb, 0xc8, 0x2e, 0xd0, 0x34, 0xff, 0x62, 0x45, 0xde, 0xb2, 0x48, 0x5e, 0xf6, 0xb4, 0xc4, 0xfe, 0x64, 0xa7, 0xc3, 0x34, 0xea, 0x18, 0x71, 0xab, 0xed, 0xe5, 0x51, 0x59, 0x29, 0x4a, 0x2f, 0x44, 0x43, 0x5a, 0xfb, 0xb8, 0x6e, 0x6e, 0xd4, 0xf3, 0x26, 0x95, 0x6c, 0x6c, 0xa0, 0x82, 0x81}, types.Tx{0xef, 0x66, 0x7f, 0xec, 0xa0, 0x77, 0x3a, 0x14, 0x57, 0x17, 0x78, 0xd9, 0xa3, 0x85, 0x8, 0xe, 0x55, 0xa4, 0xd8, 0xb1, 0xc8, 0x26, 0xbf, 0x58, 0x4a, 0x8e, 0xc0, 0xd0, 0x34, 0xaa, 0x44, 0xcf, 0x71, 0x42, 0xaa, 0xf9, 0x98, 0xd5, 0xaf, 0x42, 0x3d, 0x25, 0xcc, 0xb6, 0xd4, 0xf, 0xde, 0xf7, 0x72, 0x77, 0x40, 0x2a, 0x2b}, types.Tx{0x63, 0xf7, 0x14, 0xd2, 0xf6, 0x1, 0xc1, 0x72, 0x86, 0x64, 0x71, 0xa7, 0x52, 0x87, 0xed, 0x41, 0xa0, 0xf0, 0xd6, 0x4a, 0x60, 0xa0, 0x3c, 0x1e, 0x4d, 0x34, 0x6, 0x5b, 0xd0, 0xae, 0xba, 0xbd, 0xeb, 0xfa, 0xd9, 0x4, 0x2f, 0xd1, 0xaa, 0x4, 0x26, 0xef, 0x96, 0xed, 0x5, 0xf6, 0xde}, types.Tx{0x8a, 0xa8, 0x2, 0x6b, 0xe9, 0x9e, 0x4e, 0x6b, 0x86, 0xc6, 0x7d, 0x8c, 0xcd, 0x6b, 0x69, 0x77, 0x15, 0x8b, 0x16, 0x25, 0xd5, 0x60, 0xa9, 0x67, 0xbb, 0xd1, 0x60, 0xfa, 0x1a, 0x1, 0x67, 0xe4, 0x68, 0x6f, 0xbd, 0xc6, 0x44, 0xf4, 0x65, 0x25, 0x26, 0xae, 0xaf, 0xb7, 0x2b, 0xa6, 0x27, 0xb3, 0x83, 0x44, 0xc1, 0xc3, 0x93, 0x45, 0xd9, 0x4c, 0x1d, 0xe3, 0x4a, 0x85, 0x85, 0xa8, 0x36, 0xa2, 0xa, 0x3a, 0xc, 0x68, 0x97, 0x32, 0x2f, 0xb0, 0x54, 0xcb}, types.Tx{0x66, 0xcd, 0xf9, 0x73, 0xbb, 0x63, 0x4d, 0x6a, 0x86, 0x1b, 0x5f, 0x16, 0x38, 0x4, 0x25, 0x61, 0xa3, 0xa7, 0xb5, 0xa5, 0x8f, 0x41, 0xd6, 0x87, 0x56, 0x7f, 0xfe, 0xe1, 0xf8, 0xd9, 0x8d, 0x6, 0x25, 0x95, 0xe3}, types.Tx{0x81, 0x99, 0x7a, 0x2f, 0x18, 0xd, 0x5e, 0x75, 0xeb, 0x64, 0xcc, 0xa, 0xb0, 0x24, 0x4c, 0x1a, 0xaa, 0xc0, 0xab, 0x6, 0x61, 0xa5, 0xcd, 0x41}, types.Tx{0xf5, 0x51, 0xe3, 0x56, 0x69, 0x2e, 0x38, 0xe3, 0x2a, 0xb2, 0xbf, 0xe2, 0xb4, 0x3, 0xa5, 0x2b, 0xbb, 0x42, 0x28, 0x27, 0x21, 0x76, 0xb0, 0x48, 0xcb, 0x78, 0x58, 0x85, 0x71, 0xd8, 0x60, 0x32, 0x8c, 0x45, 0x36, 0x75, 0x7c, 0xe8, 0x5, 0xa1, 0x93, 0xc3, 0xce, 0x2c, 0x91, 0x62, 0xe5, 0xbd, 0x28, 0x7d, 0xac, 0x81, 0xfe, 0xa4, 0xa8, 0xb9, 0xd3, 0xbb}, types.Tx{0xd1, 0xda, 0xea, 0x1, 0x4a, 0x2e}, types.Tx{0x2f, 0x74, 0xcb, 0x45, 0x69, 0x83, 0xea, 0x9d, 0x20, 0x7, 0xdd, 0x32, 0x1d, 0x1f, 0xa2, 0xb7, 0x92, 0xbb, 0x1b, 0xfa, 0xf3, 0x51, 0x45, 0xb4, 0x6b, 0xa3, 0x95, 0xbe, 0xbb, 0xd3, 0x1d, 0x84, 0x97, 0xdb, 0x90, 0x2a, 0x54, 0x3b, 0x0, 0xc3, 0x95, 0x3c, 0x49, 0xd2, 0xa5, 0xeb, 0x72, 0x91, 0xac, 0x20, 0x3b, 0xc, 0xa8, 0x5c, 0x56, 0x6b, 0x9f, 0x32, 0xe, 0x65, 0xbf, 0xf2, 0x6c, 0xaa, 0x7c, 0x51, 0xcd, 0xf6, 0x8e, 0x30, 0x59, 0xfe, 0x44, 0xc6, 0xe7, 0x3e, 0x15, 0x2b, 0xf, 0xf5}, types.Tx{0xbd, 0xf8, 0x8f, 0xa0, 0x7e, 0x9b, 0xa1, 0x1b, 0x2b, 0x57, 0x47}, types.Tx{0x7d, 0x5d, 0x7c, 0xae, 0x47, 0x21, 0xd3, 0xac, 0x80, 0x5f, 0x2f, 0x78, 0xf5, 0xe, 0x6d, 0xda, 0xc6, 0x42, 0x1e, 0x12, 0xf0, 0x89, 0xe8, 0xdf, 0x19, 0x7f, 0xea, 0xde, 0x5, 0x70, 0x45, 0xee, 0xe9, 0x66, 0x2f, 0x87, 0x36, 0x23, 0xcb, 0xd8, 0x22, 0xf1, 0xc3, 0xd5, 0x88, 0x53, 0x98, 0x9d, 0xae, 0x6f, 0xba, 0x72, 0xcf, 0xdd, 0x0, 0x12, 0x8a, 0xdc}, types.Tx{0x46, 0x52, 0x73, 0x14, 0x43, 0x2e, 0xbc}, types.Tx{0x77, 0xbe, 0x43, 0x12, 0x98, 0xc, 0x7, 0xfb, 0x0, 0xb4, 0x8c, 0x6e, 0x23, 0xa7, 0x29, 0x29, 0x1d, 0xeb, 0xc2, 0x29, 0x7c, 0x4f, 0x82, 0x26, 0x84, 0x68, 0x62, 0x90, 0xa9, 0xc0, 0x77, 0x91, 0x12, 0x51, 0x4, 0x36, 0xc9, 0x5e, 0xcf, 0x11, 0xc, 0xc2, 0x10, 0xcc, 0xc0}, types.Tx{0x9c, 0xab, 0x97, 0x5c, 0x62}, types.Tx{0x31, 0xf7, 0x27, 0xb2, 0x82, 0x10, 0x3d}, types.Tx{0xfb, 0x86, 0x13, 0x7, 0x3b, 0x3e, 0x64, 0x19, 0x3f, 0xe3, 0xab, 0xa7, 0x83, 0x86, 0xbd, 0xda, 0xfa, 0xea, 0xb3, 0xd8, 0xb8, 0x4, 0x50, 0x70, 0xd4, 0xc5, 0x30, 0x91, 0x5, 0x3, 0x58, 0xb4, 0xdf, 0xf2}, types.Tx{0x4d}, types.Tx{0x83, 0x1e, 0xf6, 0x1, 0x7d, 0x6b, 0xab, 0xa2, 0x71, 0x49, 0x20, 0x36, 0xad, 0x71, 0x3e, 0x92, 0xe2, 0x5d, 0x76, 0x8b, 0x8a, 0xb9, 0xe4, 0x10, 0xb4, 0x6f, 0xbe, 0x3c, 0x24, 0xcb, 0x9a, 0x6e, 0x61, 0xb0, 0xe0, 0x84, 0xed, 0xb8, 0x12, 0xed, 0x5b, 0xf, 0x1a, 0x7f, 0xaf, 0x7a, 0x5d, 0x5, 0x40, 0x7}, types.Tx{0x7f, 0xb1, 0x20, 0x42, 0xdb, 0x70, 0x1, 0x4c, 0xa9, 0xbe, 0xbd, 0x94, 0x89, 0x4f, 0x1a, 0xf0, 0x99, 0x66, 0xcc, 0xf4, 0xeb, 0x70, 0xe, 0x46, 0xb2, 0xe1, 0xea, 0xe2, 0x68, 0xa4, 0xeb, 0xc0, 0x86, 0x9, 0x20, 0x88, 0x68, 0x93, 0x55, 0xf8, 0x6e, 0x79, 0x38, 0xab, 0x37, 0x14, 0x3c, 0xa7, 0x39, 0x74, 0xa3, 0xbd, 0x12, 0x2, 0x18, 0xd, 0xf9, 0x89, 0xaf, 0xb2, 0x7c, 0x3c, 0xef, 0xb6, 0x9b, 0x79, 0x95}, types.Tx{0xf8, 0xa7, 0x40, 0x44, 0x91, 0x3c, 0x61, 0xce, 0xd1, 0xce, 0x34, 0x30, 0x45, 0xc2, 0xc0, 0xa9, 0x6b, 0xe7, 0xa0, 0x95, 0x59, 0xbb}, types.Tx{0xcf, 0xb1, 0x80, 0xfd, 0xe7, 0x8b, 0x2e, 0x22, 0x37, 0x77, 0x9e, 0xe1, 0x6d, 0xd6, 0x7, 0x67, 0xf6, 0x58, 0xe6, 0xad, 0xea, 0x51, 0xd8, 0xec, 0xea, 0x7, 0xf5, 0xea, 0xaf, 0x52, 0xf4, 0xbd, 0xce, 0xc2, 0x80, 0x7, 0x9e, 0x40, 0x45, 0x70, 0x59, 0xfc, 0xb8, 0x5d, 0x1a, 0xa, 0x65, 0x31, 0x5a, 0x2f, 0xb8, 0xf4, 0x62, 0xfa, 0x6, 0xa1, 0x4c, 0x11, 0x46, 0xe9, 0x1f, 0x50, 0x3b, 0xa9, 0x9e, 0xdc, 0x43, 0xcd, 0x38, 0x14, 0xd5, 0xa, 0xb5, 0x88, 0xa, 0x75, 0x93, 0x2c, 0x90, 0x88, 0xe9, 0xbf, 0x22, 0x8a, 0x45, 0xbf, 0xff, 0xdc, 0x50, 0x35, 0x42, 0x2c, 0x99}, types.Tx{0xd3, 0x28}, types.Tx{0x87, 0x11, 0x8b, 0x56}, types.Tx{0x62, 0x2e, 0x5e, 0xd4, 0xab, 0x52, 0x1e, 0x2a, 0x74, 0xc6, 0x35, 0x3b, 0xdc, 0xa5, 0x9e, 0xe9, 0x85, 0x6c, 0xcc, 0x41, 0xd3, 0x6, 0xa6, 0xdc, 0x14, 0xec, 0x8e, 0xa7, 0x6a, 0xbc, 0x6a, 0x7b, 0xcd, 0xab, 0x3d, 0xbe, 0x8e, 0xe2, 0xca, 0x7d, 0x6, 0xa1, 0xcd, 0x8b, 0xd1, 0x96, 0x52, 0x94, 0x8e, 0x45, 0xa3, 0xb2, 0x3d, 0x1, 0xb6, 0x94, 0xc5, 0x8f, 0xbc, 0xe, 0xe3, 0xbc, 0x44, 0x9d}, types.Tx{0x2b, 0x57, 0x35, 0x56, 0xc2, 0xa9, 0x7c, 0x1c, 0xc2, 0xaa, 0x85, 0x5, 0x54, 0x81, 0x5d, 0xe5, 0x1c, 0x70, 0xe9, 0x5b, 0x25, 0xfc, 0x78, 0xb0, 0x32, 0xe3, 0x2f, 0xf9, 0xd8, 0x78, 0x1, 0x23, 0xd0, 0x20, 0x18, 0xb9, 0x70, 0xc3, 0x5b, 0x2b, 0xc, 0xf3, 0x7b, 0x43, 0x5f, 0x9c, 0x90, 0xb6, 0x6d, 0x9c, 0xc1, 0x6b, 0xa2, 0xf2, 0x84, 0xc6, 0x11, 0x18, 0xc8, 0xfb, 0xf1, 0x7e, 0x77, 0x1e, 0x1d, 0x54, 0x45, 0x43, 0xab, 0xfa, 0xba, 0xe7, 0xeb, 0x98, 0xa, 0x62, 0xfb, 0x8e, 0xfd, 0x19, 0xe1, 0x1}, types.Tx{0x1d, 0x21, 0x5e, 0xe4, 0x4e, 0xc8, 0xb7, 0xa2, 0xda, 0xb8, 0xd, 0x2, 0x48, 0x17, 0x7, 0xd8, 0x8, 0x62, 0xb, 0x5e, 0xfe, 0xda, 0x36}, types.Tx{0x15, 0x64, 0x98, 0x23, 0x99, 0x42, 0x45}, types.Tx{0x1c, 0xf8, 0x72, 0xea, 0x4f, 0x15, 0xa9, 0x40, 0x1c, 0x10, 0x28, 0xbf, 0x29, 0x86, 0x7c, 0xca, 0xae, 0x5c, 0x5f, 0x8a, 0x58, 0xd4, 0x15, 0x5d, 0x95, 0xed, 0x41, 0x71, 0x0, 0x88, 0x2c, 0x64, 0x38, 0x5b, 0x43, 0xa7, 0xb2, 0xbc, 0x6b, 0x6e, 0x58, 0xff, 0x3e, 0xa5, 0xcc, 0xaf, 0xb2, 0x8c, 0xc9, 0xf3, 0x68, 0x9, 0x15, 0xc0}, types.Tx{0xe8, 0xee, 0x38, 0x65, 0x73, 0x47, 0xf6, 0x56, 0x40, 0xc6, 0xc2, 0x9d, 0xe2, 0xb0, 0x77, 0xa1, 0x9, 0x3, 0xb5, 0x29, 0xc1, 0x1b, 0x78, 0x23, 0xc6, 0x47, 0xd9, 0xed, 0xb7, 0x99, 0x96, 0x93, 0x2a, 0x11, 0xa7, 0xef, 0x37, 0x76, 0x2a, 0x7e, 0xc7, 0x80, 0x8b, 0xfe, 0x47, 0x8c, 0x93, 0xf6, 0x35, 0xcc, 0x69, 0xb1}, types.Tx{0x74, 0x77, 0xd5, 0xff, 0x72, 0x1d, 0x1c, 0xc9, 0xc9, 0x22, 0xe5, 0x7d, 0x82, 0xbe, 0xe1, 0xd1, 0xa7, 0xaf, 0xda, 0xbd, 0xa6, 0xfb, 0xbc, 0xc0, 0xa3, 0x88, 0xbe, 0x86, 0x4, 0x90, 0x77, 0xa8, 0xb9, 0xac, 0x33, 0x53, 0x5f, 0xc3, 0x3f, 0x9e, 0x1f, 0xec, 0xad, 0x3e, 0x0, 0x37, 0x44, 0x1c, 0xec, 0xfd, 0xe3, 0x7c, 0x23, 0xe1, 0xca, 0x91, 0xe9, 0x6f, 0x5f, 0x49, 0x7e, 0x76, 0xae, 0x3d, 0x4d, 0xca, 0xe3, 0x87, 0x19, 0xe0, 0x93, 0xce, 0x2d, 0xb7, 0xb8, 0x93, 0x24, 0x26, 0x84, 0xcf, 0x82, 0x8e, 0x4e, 0x86, 0xfc, 0x8a}, types.Tx{0x3e, 0xb6, 0x37, 0x4b, 0xd9, 0x38, 0xab, 0x70, 0xa3, 0xac, 0x26, 0x1a, 0x74, 0x15, 0xa0, 0xf9, 0x99, 0xf0, 0xe9, 0x78, 0x22, 0x18, 0x65, 0xd3, 0xf1, 0xc8, 0xa4, 0x83, 0xd4, 0x17, 0xbc, 0xc3, 0xb1, 0x56, 0x3c, 0xa0, 0x1c, 0xcf, 0xee, 0xb1, 0x8a, 0x7b, 0x4a, 0x46, 0x26, 0x2a, 0x6e, 0x4, 0x45, 0x5f, 0x39, 0xbd, 0x77, 0x90, 0x96, 0xbc, 0xe4, 0xda, 0x6b, 0x34, 0x37, 0x3c, 0x56, 0xc0, 0xa5, 0x7a, 0x50, 0xae, 0x4c, 0x59, 0xec, 0x18, 0x9e, 0xea, 0xfe, 0xdd, 0x14, 0xea, 0x86, 0x23, 0x71, 0x7e, 0x6, 0xdd, 0x83, 0xa9, 0x88, 0x54, 0xe2, 0x54, 0x50, 0x4d, 0x5, 0x6a, 0x85, 0x14, 0xae}, types.Tx{0x2c, 0x7, 0xbe, 0x70, 0xed, 0xba, 0x97, 0x7c, 0x76, 0xe2, 0x5e, 0x4c, 0x69, 0x42, 0x79, 0x9d, 0xff, 0xf8, 0x3c, 0x4e, 0x10, 0x49, 0xf2, 0x2, 0x6b, 0x92, 0x1a, 0xce, 0xce, 0xd6, 0x1d, 0x6, 0xfb, 0x44, 0xb1, 0xb9, 0x23, 0x38, 0x8b, 0xd2, 0xfd, 0x5f, 0x48, 0x51, 0x8, 0x78, 0x41, 0xca, 0xc5, 0x6b, 0x4b, 0x76, 0x7d, 0x5a, 0x13, 0x1e, 0x46, 0x2f, 0xc1, 0x46}, types.Tx{0xe4}, types.Tx{0x85, 0x7e, 0xb5, 0x4, 0x77, 0xb4, 0x4d, 0x20, 0x82, 0x1f, 0x19, 0xb4, 0x3b, 0x94, 0x62, 0xb0, 0x2a, 0x86, 0xa2, 0xce, 0x21, 0x34, 0x9f, 0xf5, 0x51, 0x1c, 0xdf, 0x5d, 0x6e, 0xe, 0x98, 0xd2, 0xdb, 0xc7, 0x5c, 0x37, 0x83, 0x46, 0xeb, 0xac, 0xf7, 0x6a, 0xae, 0x21, 0x16, 0x0, 0xd7, 0xe3, 0xcf, 0x44, 0xf8, 0x3c, 0xc3, 0xd4, 0xc9, 0x51}, types.Tx{0x46, 0xde, 0xe3, 0x50, 0x7a, 0x81, 0x84, 0xb9, 0xb2, 0xa8, 0xc4, 0x69, 0x6b, 0xc4, 0x7e, 0x29}, types.Tx{0x59, 0x53, 0xd2, 0x53, 0x86, 0x81, 0xcc, 0x66, 0x56, 0x3, 0x37, 0x5b, 0x85, 0x6e, 0x10, 0x5f, 0x13, 0xf8, 0xdd, 0x8b, 0x8c, 0x29, 0x67, 0xf2, 0xc, 0x54, 0x71, 0xc5, 0xdc, 0x75, 0xdf, 0xe2, 0x4b, 0x3c, 0x5e, 0x8a, 0x4e, 0x71, 0x39, 0xf, 0xf7, 0x6, 0x84, 0xc9, 0xa5, 0x80, 0x13, 0x56, 0x5a, 0xd6, 0x2f, 0xab}, types.Tx{0xe3, 0x52, 0x23, 0xf8, 0x15, 0x7, 0x38, 0xf, 0x6a, 0x5, 0xe7, 0xa5, 0x2d, 0x9d, 0x22, 0x3d, 0xe7, 0x84, 0xf0, 0x5d, 0xdb, 0x72, 0x74, 0x3d, 0x6f, 0x22, 0x86, 0xbd, 0x3b, 0x3, 0x73, 0x1e, 0x2c, 0xf, 0x29, 0x7b, 0x26, 0x40, 0x53, 0x6e, 0x59, 0x1, 0x7c, 0x9c, 0x9e, 0x58, 0xc3, 0x9d, 0x2, 0x23, 0x36, 0x41, 0x5a, 0x62, 0xef, 0x95, 0x17, 0xba, 0xee, 0x53, 0xf7, 0x76, 0xa1, 0xe2, 0xce, 0x16, 0x95, 0x47, 0x54, 0x4a, 0xe1, 0x3, 0xf0, 0xfb, 0xf4, 0x6e, 0x17, 0x14, 0x43, 0xea, 0xe4, 0x70, 0xce, 0xbb, 0x71, 0x52, 0x3c, 0x9e, 0x95, 0xf5, 0xf7, 0xf4}, types.Tx{0x92, 0xc2, 0x58, 0x6c, 0xea, 0x9, 0x6c, 0x80, 0xfe, 0xbc, 0x8e, 0x53, 0x2a, 0x7d, 0xc4, 0x2f, 0x4f, 0x77, 0x2, 0x49, 0x89, 0xf7, 0xb0, 0x97, 0x17, 0xfe, 0xbe, 0xb3, 0x2, 0x6e, 0xd, 0x72, 0x37, 0x8c, 0x2, 0xf3, 0x85, 0x44, 0x82, 0xd2, 0x94}, types.Tx{0x5a, 0x79, 0xef, 0xdf, 0xe4, 0x39, 0xe5, 0x6, 0xfd, 0x2b, 0x87, 0x5f}, types.Tx{0x3e, 0xc8, 0xc5, 0x29, 0x17, 0x11, 0x2b, 0x75, 0x3e, 0x10, 0x88, 0xd, 0xc9, 0xe0, 0x3b, 0x89, 0xc2, 0x87, 0x8d, 0x8b, 0x51, 0x64, 0x6e, 0xc6, 0x9c, 0x4a, 0xa9, 0xd4, 0x2b, 0x74, 0xf8, 0xaa, 0x7, 0xe9, 0x41, 0xf0, 0xf3, 0x73, 0x47, 0x3, 0xc9, 0xde, 0x99, 0x0, 0x75, 0x89, 0xc6, 0x47, 0x59, 0x13, 0x8, 0x8c, 0x47, 0xda, 0xb0}, types.Tx{0xe2, 0x8f, 0x83, 0xfb, 0x47, 0x2, 0x1e, 0x60, 0x10, 0x17, 0x5a, 0x31, 0x46, 0x3b, 0x33, 0x45, 0x63, 0x9c, 0x5d, 0x10, 0xe4}, types.Tx{0x96, 0xae, 0xb2, 0x1, 0x2c, 0x26, 0x71, 0x9d, 0x2d, 0xd3, 0x97, 0x95, 0x8b, 0xa7, 0xc2, 0x6f, 0xba, 0xda, 0x6a, 0x52, 0x87, 0x1f, 0x34, 0x92, 0xee, 0xeb, 0xfb, 0x36, 0xd9, 0x80, 0x91, 0xaf, 0x27, 0xb3, 0xaa, 0x57, 0xdc, 0x2, 0x9d}, types.Tx{0x32, 0x52, 0x3a, 0xa, 0x8f, 0x73, 0x59, 0x62, 0x2b, 0x87, 0xd5, 0x7d, 0xe1, 0x97, 0xa4, 0xd7, 0xd5, 0xfa, 0xd2, 0x2f, 0x43, 0x63, 0xa0, 0xfe, 0xe9, 0x1b, 0x4b, 0x9c, 0x28, 0xf6, 0xac, 0x45, 0x36, 0xaa, 0x37, 0x81, 0x9f, 0x26, 0x1d, 0x5e, 0xb3, 0xb7, 0x7c, 0xcb, 0xf8, 0xd9, 0xb8, 0xaf, 0xb8, 0x66}, types.Tx{0xf4, 0x2c, 0xd8, 0x6f, 0x8f, 0xb6, 0x50, 0xc8, 0x9, 0xd5, 0x86, 0x56, 0xdf, 0xe7, 0x34, 0x66, 0xd1, 0x7e, 0xc1, 0x82, 0xb8, 0x25, 0x35, 0xb, 0xb1, 0x7b, 0xfb, 0xe7, 0x76, 0xf9, 0x30, 0x1d, 0x6b, 0xcd, 0xed, 0x4a, 0x59, 0xa6, 0xf8, 0x91, 0x11, 0x4e, 0xe0, 0xf4, 0x92, 0x29, 0x98, 0xb2, 0xfa, 0x1d, 0x90, 0x34, 0x2b, 0x59, 0x9f, 0x7c}, types.Tx{0xc0, 0x81, 0x97, 0x55, 0x43, 0xc3, 0xdb, 0x48, 0xc7, 0x7b, 0xb0, 0x12, 0x90, 0xf3, 0xae, 0xd3, 0x60, 0x16, 0x6d, 0xbf, 0x8d, 0xe5, 0xe, 0x44, 0x31, 0xee, 0xf9, 0xd, 0x46, 0xd8, 0x43, 0x17, 0x7c, 0x11, 0x79, 0x3a, 0x1b, 0x5a, 0x52, 0x6c, 0xd9, 0xc4, 0xcd, 0xba, 0xa7, 0xf5, 0xe4, 0x0, 0xd1, 0xba, 0xdd, 0xfb, 0xf0, 0x6, 0x7, 0xb7, 0xb5, 0x22, 0xd9, 0x66, 0x61, 0xfc, 0xbe, 0x8c, 0x90, 0xb3, 0x23, 0x35, 0x5, 0x63, 0xbe, 0xab, 0xb4, 0x88, 0x5c, 0xe7, 0x3b, 0xe3, 0x26, 0x7c, 0x75, 0x5d, 0xfc, 0x8e, 0x92, 0xdc}, types.Tx{0x99, 0x27, 0x3c, 0x1c, 0x8f, 0x64, 0x35, 0xf8, 0x48, 0x26}, types.Tx{0x6b, 0x43, 0xf6, 0x2b, 0x94, 0x7, 0xb8, 0x53, 0x88, 0xff, 0xa2, 0xb9, 0x61, 0x17, 0x91, 0x59, 0x75, 0x97, 0x77, 0xf, 0x30, 0x26, 0xa5, 0x89, 0x8a, 0x54, 0x92, 0xd1, 0x47, 0xfd, 0x9b, 0x3d, 0xb6, 0x76, 0x5c, 0x4d, 0x30, 0xc, 0x63, 0xe8, 0xa, 0x8e, 0x24, 0x39, 0x54, 0xe0, 0x21, 0xc9, 0xed, 0x24, 0xcf, 0xb0, 0x8f, 0x1e, 0xb0, 0xdd, 0x59, 0xbb, 0x35, 0x3d, 0x6e, 0xa6, 0xd6, 0x3e, 0x70, 0x82, 0x86, 0xb7, 0x17, 0x1a}, types.Tx{0xb2, 0x2d, 0x59, 0x5, 0x2c, 0x8b, 0xaf, 0x97, 0xed, 0x2b, 0x3e, 0xb2, 0xd, 0x6e, 0x40, 0x6a, 0xcb, 0xf8, 0xce, 0x98, 0xf0, 0x9a, 0x59, 0x6c, 0xf, 0xc1, 0x4d, 0x1f, 0x11, 0x73, 0x82, 0x9d, 0x5e, 0xaf, 0x59, 0x13, 0x44, 0x3, 0x3b, 0xdb, 0xef, 0xce, 0x61, 0x91, 0xd1, 0xa5, 0x38, 0x59, 0x46, 0x94, 0xe6, 0x94, 0xdb, 0xf6, 0x8e, 0x7, 0xf6, 0xb0, 0x9b, 0xf2, 0x4b, 0xb4, 0x7f, 0xe6, 0x21, 0xf3, 0x90, 0xe3, 0x42, 0x67, 0x98, 0x77, 0x3a}, types.Tx{0x3a, 0x3, 0xb9, 0x98, 0xf2, 0x82, 0xb9, 0xfc, 0x17, 0xcb, 0xea, 0x84, 0x77, 0x85, 0x7c, 0x38, 0xf1, 0x57, 0x3f, 0x69, 0xd5, 0xe4, 0x59, 0x3e, 0xe8, 0xd, 0x21}, types.Tx{0x18, 0xf0, 0xf2, 0x53, 0xe9, 0x96, 0x4f, 0xa1, 0x9f, 0xc4, 0xa2, 0x3b, 0x29, 0x30, 0x18, 0xf2, 0x52, 0x99, 0x4b, 0x2f, 0x96, 0x1e, 0x35, 0x18, 0xce, 0x86, 0x92, 0xed, 0x12, 0x2e, 0x6, 0x90, 0x96, 0x9f, 0x71, 0x98, 0x7c, 0xd8, 0xb7, 0xf1, 0xc1, 0xb, 0xfc, 0xf1, 0x4f, 0x2a, 0xf5, 0xbd, 0x94, 0x17, 0xa5, 0xb6, 0x3a, 0xa0, 0xf5, 0x8f, 0x5a, 0xc5, 0x31, 0x9e, 0xfb, 0x67, 0x36, 0x69, 0xc, 0x75}, types.Tx{0x28, 0xb3, 0xe2, 0x70, 0x8f, 0x8f, 0xe2, 0x70, 0x27, 0x6b, 0x8f, 0x92, 0x57, 0x8a, 0xe4, 0x58, 0xe4, 0x69, 0x7e, 0xdf, 0xc4, 0x2, 0x90, 0x91, 0x91, 0x70, 0x42, 0xf4, 0x70, 0xe7, 0x54, 0x16, 0x17, 0xd0, 0x74, 0xf1, 0xe5, 0xad, 0x96, 0xd1, 0x60, 0x9, 0x41, 0x79, 0xe, 0xbf, 0x58, 0x9, 0x54, 0xd2, 0xc4, 0x37, 0x5c, 0x86, 0x88, 0x8d, 0xec, 0x4e, 0x80, 0xe8, 0xfa, 0xdb, 0xa2, 0x81, 0x56, 0x99, 0x7d, 0x6f, 0x43, 0xc, 0xc, 0xea, 0xc0, 0x0, 0x42, 0xc9}, types.Tx{0x9d, 0x4a, 0xc9, 0x8c, 0x85, 0xb6, 0x52, 0xa2, 0x4d, 0x1b, 0xb8, 0x65, 0x92, 0x17}, types.Tx{0xcd, 0xc9, 0x43, 0x6b, 0xdf, 0xc8, 0x7c, 0x94, 0xa0, 0x3a, 0x4c, 0x71, 0x68, 0x53, 0xb5, 0x38, 0x26, 0x2f, 0x69, 0x8a, 0xe1, 0xfc, 0xbb, 0xd1, 0x10, 0x9f, 0xd2, 0x3d, 0x8a, 0x40, 0x6c, 0x32, 0x53, 0xc8, 0x40}, types.Tx{0x1c, 0xc3, 0x49, 0x76, 0xaf, 0x30, 0xdb, 0x6b, 0x38, 0xa9, 0x15}, types.Tx{0xac, 0x9c, 0xdb, 0x65, 0xf3, 0xc7, 0xd0, 0xd2, 0xb2, 0xd2, 0x0, 0x12, 0x94, 0xbc, 0x22, 0x12, 0x84, 0x25, 0x9, 0xf1, 0xc9, 0x7c, 0xa9, 0x96, 0x84, 0xfd, 0x56, 0x4b, 0x52, 0x44, 0x23, 0x17, 0xce, 0xc9, 0x4c, 0x9d, 0xb0, 0x5, 0xf, 0x19, 0x20, 0xb3, 0x2f, 0xc8, 0x44, 0x70, 0x88, 0xc3, 0x5f, 0xfe, 0xd, 0x51, 0x27, 0xcf, 0xdf, 0x13, 0x3a, 0x39, 0x1, 0x11, 0x18, 0xb5, 0x2a, 0x75, 0x18, 0xbe, 0x3f, 0x74, 0xb3, 0x32, 0x20, 0x72, 0x8d, 0x7f, 0xed, 0x86, 0x38, 0x42, 0xfc, 0xdb, 0x2b, 0xb7, 0x5b, 0x91, 0x87, 0xad, 0x3a, 0xef, 0xcd, 0x33, 0x69, 0xf8}, types.Tx{0xda, 0x64, 0x5f, 0xd, 0xb6, 0x63, 0x53, 0xf6, 0x83, 0x94, 0xa8, 0x94, 0x31, 0x7f, 0xce, 0x12, 0xff, 0x7e, 0x3d, 0x77, 0x9, 0xe1, 0x17, 0x3b, 0x32, 0xf7, 0x84, 0x4, 0x14, 0xe, 0xd8, 0x3f, 0xa8, 0x2b, 0xf6, 0x94, 0x9d, 0x54, 0x1a, 0x9a, 0x7d, 0x9f, 0xe0, 0xfa, 0x60, 0x5c, 0x43, 0x4, 0xea, 0x38, 0xab, 0x68, 0x38, 0x1a, 0x79, 0xe1, 0x4a, 0xef, 0xaf, 0xdd, 0xa8, 0xe5, 0xc3, 0x40, 0x7d, 0x2e, 0x9b, 0x8, 0x3, 0xe8, 0xbd, 0x44, 0x85, 0xd9, 0x8, 0x1, 0xf3, 0x64, 0x43, 0x8, 0xbb, 0xe3, 0x9b, 0x4d, 0x54, 0xb8, 0x17, 0x88, 0x1b, 0x12, 0xc0, 0x37}, types.Tx{0xd6, 0xb3, 0xcc, 0x1e, 0x88, 0xe9, 0x18, 0xaa, 0x82, 0x82, 0xf3, 0xb4, 0x96, 0xcc, 0x15, 0x63, 0x67, 0x45, 0x76, 0xee, 0x1c, 0xd1, 0x59, 0x21, 0xc8, 0x29, 0x31, 0x65, 0x39, 0x6f, 0xf2, 0x50, 0x79, 0x4a, 0x48, 0xe9, 0x5a, 0x20, 0x8b, 0x31, 0x71, 0xe4, 0x3b, 0x25, 0x63, 0xc4, 0x4b, 0xfa, 0xb3, 0xd4, 0xef, 0xc5, 0x79, 0x6e, 0x1, 0xec, 0xf4, 0x1c, 0x6b, 0xff, 0x2a, 0x47, 0x1d, 0xc7, 0xd4, 0x7c, 0x2, 0x89, 0xc2, 0xf1, 0xac, 0x3e, 0xaa, 0x9, 0x7, 0x45, 0x77, 0x29, 0x2, 0xd0, 0x92, 0xe9, 0x3b, 0x30, 0x70, 0x33, 0x76, 0x53, 0x2a, 0xdf}, types.Tx{0x5d, 0xc2, 0x18, 0x6e, 0xf4, 0x1b, 0xd5, 0xb0, 0x9b, 0x9, 0xe2, 0x8a, 0xb1, 0x1, 0x4c, 0x1d, 0x1d, 0x5c, 0x93, 0x3a, 0x51, 0xa6, 0x41, 0x30, 0x3e, 0x21, 0x53, 0x79, 0xad, 0xf2}, types.Tx{0x62, 0xdb, 0xfc, 0x15, 0xa1, 0x23, 0xe0, 0x72, 0x1d, 0x4a, 0x5a, 0x34, 0xc7, 0x66, 0x6d}, types.Tx{0x9, 0x87, 0x9e, 0x98, 0x9, 0xb7, 0xb7, 0x4f, 0x5e, 0x79, 0x6c, 0xe6, 0x2e, 0x73, 0x90, 0xa0, 0x36, 0x97, 0xe8, 0x99, 0x35, 0x4f, 0x20, 0xff, 0x9a}, types.Tx{0x99, 0x22, 0xf5, 0xb2, 0x4f, 0x9}, types.Tx{0x62, 0xcd, 0xe5, 0x3a, 0xb0, 0xfa, 0x72, 0x40, 0x56, 0x8c, 0xdc, 0x9f, 0xb5, 0x78, 0x74, 0xdf, 0x42, 0x68, 0x0, 0x58, 0x7f}, types.Tx{0x64, 0x11, 0x89, 0xa8, 0xa2, 0xbb, 0x69, 0x8a, 0x28, 0xd5, 0x21, 0x14, 0xb1, 0x5f, 0x1f, 0xca, 0x94, 0x81, 0xd8, 0x61, 0x4f, 0x57, 0xa, 0x44, 0x22, 0xa5, 0xc, 0x21, 0xe3, 0x34, 0x96, 0xe7, 0x6c, 0x29}, types.Tx{0x1d, 0xe0, 0x11, 0x42, 0x7f, 0x7b, 0x1a}, types.Tx{0x94, 0xf2, 0x54, 0xf5, 0xb7, 0x7f, 0x35, 0x34}, types.Tx{0x30, 0x53, 0x92, 0x31, 0x21, 0x8, 0x3, 0x5f, 0xae, 0xe1, 0x3a, 0xdf, 0xd, 0x72, 0x5, 0x58, 0x4a, 0xd9, 0xa, 0x8b, 0x5, 0xd7, 0x5b, 0xb4, 0x9a, 0x60, 0x1, 0x2d, 0x81, 0x1, 0x91, 0x47, 0x4d, 0x91, 0x28, 0xef, 0x4d, 0x94, 0x45, 0xa8, 0x31, 0x91, 0x92, 0xcb, 0x4f, 0xc2, 0x2a, 0x15, 0x30, 0x13, 0xd, 0xfb, 0x44, 0x4a, 0xe, 0xf9, 0xde, 0x9e, 0x8b, 0x76, 0xee, 0x80, 0x61, 0xec, 0xfd, 0xab, 0x3f}, types.Tx{0x3d, 0x97, 0x31, 0xd4, 0xcd, 0x75, 0x9d, 0x4, 0xd8, 0x26, 0x72, 0x18, 0x1f, 0x42, 0xcd, 0x6d, 0x4d, 0x78}, types.Tx{0x97, 0x1e, 0xe6, 0x34, 0xd0, 0x44, 0x29, 0x37, 0xc9, 0x2a, 0x4f, 0x68, 0xe7, 0xff, 0x36, 0x75, 0x8c, 0x65, 0x7a, 0x7f, 0x44, 0xf6, 0x74, 0x3f, 0xe, 0x51, 0xc0, 0x7f, 0xbb, 0x61, 0x6c, 0x3e, 0x97, 0x37, 0xdf, 0x46, 0x83, 0x12, 0x85, 0x89, 0x79, 0xa8, 0x2b, 0x86, 0xd5, 0x3, 0xbb, 0x19, 0x32, 0xfc}, types.Tx{0x1d, 0xab, 0x67, 0xb6, 0x1a, 0x4e, 0x11, 0x7f, 0x7f, 0xd2, 0x11, 0xfa, 0xda, 0xcf, 0x66, 0x1f, 0xa2, 0x89, 0xd0, 0x9c, 0xb7, 0x4b, 0xe1, 0xd, 0xcd, 0x2b, 0xe0, 0xb9, 0x99, 0x41, 0x90, 0x3e, 0xeb, 0x63, 0x32, 0x57, 0xd2, 0x90, 0xe, 0x6a, 0x3c, 0x84, 0x98, 0xfd, 0x1f, 0x20, 0xad, 0x6, 0x88, 0x9f, 0x84, 0x8a, 0xb, 0x13, 0x50, 0xf9, 0x6, 0x2e, 0xc4, 0xf5, 0xc6, 0x31, 0x69, 0x54, 0x18, 0x73, 0x51, 0x94, 0x9b, 0xa, 0x48, 0x9b, 0xf0, 0xc9, 0xe, 0x40, 0xc1, 0xc8, 0x43, 0xd7, 0x66, 0xa2, 0x9f, 0x80, 0xc3, 0xd0, 0x9e, 0x47, 0x57, 0x1f, 0xf2, 0xb3, 0xcd, 0xf9, 0x6f, 0xd7}, types.Tx{0x9d, 0x5, 0xd2, 0xe, 0xda, 0x7a, 0xa8, 0x78, 0x70, 0x15, 0x70, 0x77, 0xbb, 0x6e, 0xd8, 0xe, 0xd1, 0x5, 0xc5, 0xc1, 0xdd, 0x9b, 0xb0, 0x36, 0x14, 0x63, 0xe0, 0x4d, 0xf4, 0xf0, 0x9f, 0xd2, 0x43, 0xf6, 0x36, 0x54, 0x92, 0xd4, 0x75, 0x88, 0xef, 0xfc, 0x74, 0x4c, 0xd0, 0x57, 0xb9, 0xc2, 0x84, 0xb6, 0x4, 0xb, 0x1, 0xe5, 0xe9, 0xac, 0x17, 0xd4, 0xaf, 0x6a, 0x53, 0x28, 0x45, 0xf7, 0x1, 0x3c, 0x76, 0xdc, 0x3f, 0x86, 0x36, 0x80, 0x64, 0xf1, 0x8e, 0x16, 0xf7, 0x9f, 0xe4, 0x5e}, types.Tx{0x65, 0x15, 0x67, 0xee, 0xf0, 0xc0, 0xa2, 0x88, 0x59, 0xc, 0xf9, 0xa, 0x21, 0xa, 0x74, 0x8b, 0x22, 0x39, 0xb5, 0x67, 0xa2, 0x79, 0x42, 0xf0, 0xbf, 0x60, 0x5f, 0xa2, 0x94, 0x5f, 0xe9, 0xf1, 0x18, 0xb3, 0xe7, 0x41, 0x5d, 0x4f, 0x8d, 0xa1, 0xe9, 0xc2, 0x46, 0x4, 0xb6, 0xc, 0x9b, 0xe, 0x22, 0x51, 0xcd, 0xb, 0x3f, 0x7, 0xdd, 0x28, 0x2a, 0xa6, 0x21, 0x96, 0x3f, 0x1c, 0xb3, 0x87, 0xfb, 0xe7, 0x9b, 0x8e, 0x2c, 0x60, 0x51, 0x4c, 0xbf, 0xc0, 0xe8, 0x12, 0xdd, 0xaf, 0xc6, 0x8b, 0x16, 0x2c, 0xfa, 0x5c, 0xe2, 0x9d, 0x19, 0x1f, 0xb1, 0xd3, 0xb6, 0xaf, 0x7a, 0x3f, 0x9a, 0x4a, 0x7f}, types.Tx{0x2a, 0x85, 0x56, 0xa9, 0x4b, 0xa1, 0x45, 0x8f, 0xe1, 0xe8, 0xe, 0x36, 0x50, 0xeb, 0x84, 0x53, 0xc6, 0x3d, 0x3f, 0x42, 0x3d, 0x74, 0xd1, 0xa6, 0x3d, 0xfb, 0xa, 0xf0, 0x17, 0xe7, 0x40, 0xa5, 0x20, 0x1a, 0xf6, 0x83, 0x12, 0x2, 0x37, 0x29, 0xea, 0xca, 0xe0, 0xcf, 0xf, 0x10, 0xf8, 0x6b}, types.Tx{0x3a, 0x7f, 0x4f, 0x52, 0x3c, 0x9f, 0xc, 0xac, 0xd8, 0xab, 0x83, 0xeb, 0x3f, 0xb6, 0x73, 0x27, 0xea, 0x4e, 0xb5, 0x3f, 0x60, 0x6c, 0x2a, 0x86, 0xa0, 0x94, 0x9d, 0x67, 0xc6, 0x4d, 0x92, 0x76, 0xc8, 0x14, 0xce, 0xdf, 0xfa, 0x28, 0x4a, 0x9e}, types.Tx{0x9f, 0xae, 0x86, 0xf7, 0x54, 0xf0, 0xe7, 0x25, 0x4e, 0xa9, 0x27, 0xad, 0x96, 0x25, 0x14, 0x7, 0x5b, 0xd4, 0xeb, 0x6, 0xeb, 0x4a, 0x78, 0x16, 0xe9, 0x96, 0xec, 0xe6, 0x74, 0xa5, 0x38, 0x25, 0x23, 0xd3, 0xd8, 0x3c, 0x5a, 0xf3, 0x3b, 0x24, 0xad, 0x8c, 0x6d, 0xfc, 0xa9, 0x20, 0xd4, 0x31, 0xc0, 0xae, 0x57, 0xb1, 0x6c, 0x6d, 0xd8, 0x9a, 0x48, 0xd1, 0xbf, 0xca, 0xa, 0x41, 0xf9, 0x1f, 0x2f, 0x7, 0x35, 0xa3}, types.Tx{0x30, 0x86, 0x17, 0x89, 0x5e, 0x6d, 0x54, 0x6b, 0x3e, 0xa6, 0xa7, 0xb9, 0xdf, 0x82, 0x99, 0x1a, 0x2d, 0x50, 0x6f, 0x10, 0x27, 0x90, 0x7e, 0xfc, 0xa9, 0x8c, 0x28, 0xbf, 0xd4, 0xca, 0x5c, 0x16, 0xd8, 0xeb, 0xc2, 0x22, 0xf2, 0x9e, 0xbb, 0x70, 0xc2, 0x48, 0x76}, types.Tx{0x94, 0xd0, 0x5c, 0x11, 0xee, 0x3a, 0x1d, 0x7c, 0xb2, 0x56, 0x54, 0xed, 0x37, 0x8c, 0x71, 0x46, 0x56, 0x15, 0xa5, 0xea, 0x25, 0x61, 0x70, 0x61, 0x2a, 0x8e, 0x14, 0xad, 0xb3, 0x1d, 0xd2, 0x67, 0xa4, 0x68, 0x96, 0x30, 0x2, 0xad, 0x25, 0x2b, 0x8, 0x72, 0x82, 0x4f, 0xd7, 0xaf}, types.Tx{0xeb, 0x55, 0xf6, 0x46, 0x2a, 0xd8, 0x20, 0x60, 0x14, 0xd5, 0x85, 0x77, 0xf3, 0xdc, 0xe1, 0xa5, 0x9c, 0x3b, 0xe, 0x83, 0x1, 0x76, 0x91, 0x56, 0x6e, 0x22, 0xda, 0xcf, 0xe6, 0x24, 0xd9, 0x9b, 0x2f, 0xba, 0x90, 0x62, 0x7e, 0xcd, 0x59, 0x32, 0xf3, 0x6b, 0x6c, 0xcd, 0xab, 0x4a, 0xaf, 0x4, 0xe4, 0xfd, 0x3b, 0x98, 0x4a, 0xb0, 0x0, 0xc5, 0x93, 0x3e, 0x17, 0x5d, 0x18, 0x54, 0xa2, 0xd7, 0x0, 0x22, 0x27, 0x6e, 0xdc, 0xbc, 0x58, 0x69, 0x6a, 0x92, 0x41, 0x74, 0xc1, 0x32}, types.Tx{0xa2, 0x13, 0x5c, 0x2d, 0x68, 0x6c, 0xdf, 0xa3, 0xfd, 0xd6, 0x28, 0x68, 0x62, 0x29, 0x69, 0x55, 0x7f, 0x5e, 0xc2, 0x1e, 0x66, 0x91, 0x7c, 0xed}, types.Tx{0x28, 0x53, 0x6b, 0xd8, 0x79, 0x55, 0x14, 0xc1, 0xbf, 0x35, 0x9b, 0x46, 0x6, 0xaa, 0xcf, 0x61, 0x4e, 0x48, 0x31, 0xc5, 0x40, 0x9a, 0x27, 0xc5, 0xc, 0x1b, 0x3d, 0xe2, 0xd8, 0x65, 0x64, 0x34, 0xc7}, types.Tx{0x7c, 0xdf, 0xe9, 0x5, 0xd2, 0x71, 0xe3, 0xe4, 0xf4, 0x11, 0x93, 0x95, 0x63, 0x4d, 0xa2, 0x4f, 0x42, 0x37, 0xc9, 0x93, 0x48, 0x6f, 0x20, 0x17, 0xf1, 0x71, 0x91, 0x29, 0xa9, 0x39, 0xbd, 0xf5, 0xc, 0x85, 0x74, 0x7d, 0xf8, 0x75, 0xb1, 0x1, 0x65, 0x60, 0xbc, 0xd1, 0x3f, 0x7d, 0x93, 0x50, 0xe4, 0xf2, 0x11, 0x13, 0xaf, 0x72, 0xdc, 0x59, 0xaf, 0xb3, 0xef, 0xd8, 0x4c, 0x18, 0x8a, 0x5a, 0x7f, 0x18, 0x2d, 0x5e, 0x5a, 0x6d, 0x32, 0x7c, 0xe8}, types.Tx{0xd3, 0xd4, 0xe2, 0x85, 0x25, 0x59, 0xcf, 0x76, 0xb, 0xc, 0x6c, 0x37, 0x55, 0x79, 0xe4, 0x81, 0x5a, 0x1c, 0x8e, 0x7b, 0xcf, 0x7a, 0x71, 0x40}, types.Tx{0x3f, 0xf2, 0x2b, 0x3b, 0x25, 0xf}, types.Tx{0x9a, 0x8b, 0xaa, 0x14, 0x4e, 0xf9, 0x8b, 0x86, 0x55, 0x50, 0xa8, 0x84, 0xf4, 0x43, 0x3b, 0xc4, 0x5, 0x4b, 0xc4, 0xda, 0x49, 0x28, 0x1b, 0xaf, 0x98, 0x98, 0x95, 0x78, 0x93, 0x37, 0x3, 0xe0, 0x97, 0xe2, 0xb8, 0x60, 0xe0, 0xc7, 0xee, 0xc, 0xcb, 0x8f, 0xd4, 0xc9, 0x70, 0xdc, 0xdc, 0xa5, 0xe, 0xe0, 0x91, 0x55, 0xd2, 0x75, 0x46, 0xc0, 0x67, 0x71, 0x69, 0x62, 0xe0, 0x4b, 0x22, 0xf2, 0x76, 0xc, 0xd3, 0xe7, 0x2d, 0x0, 0xe2, 0xe7, 0x9}, types.Tx{0x9c, 0x88, 0x3f, 0xbe, 0x98, 0x17, 0x1e, 0xc8, 0xe7, 0x37, 0x2a, 0xd0, 0x47, 0x5c, 0x6f, 0xe4, 0x12, 0xc1, 0x3a, 0x25, 0xd5, 0x29, 0x8e, 0x85, 0xcc, 0x41, 0x76, 0x7b, 0xa8, 0x6d, 0xeb, 0xaf, 0x49, 0x63, 0x2c, 0x59, 0x8a, 0xa7, 0xfb, 0x9e, 0x38, 0xe7, 0x3f, 0x4a, 0x40, 0x61, 0xc7, 0x79, 0x85, 0xd9, 0xab, 0xcb, 0xc5, 0xe4, 0x47, 0x88, 0xa, 0x35, 0x2d, 0xb3, 0x94, 0xed, 0x7a, 0x2d, 0xc2, 0x9c, 0x51, 0x32, 0xd, 0x1, 0x36, 0x37, 0xdc, 0x4c, 0x24, 0x84, 0x69, 0x4b, 0x5, 0x36, 0xea, 0x7c, 0x8a, 0xac, 0xef, 0x25, 0x2, 0xc1, 0xe6, 0xf4, 0x14, 0x5c, 0x1d, 0xb4, 0x12, 0x46, 0x17}, types.Tx{0x2a, 0x29, 0x6b, 0xd0, 0x8, 0x69, 0x1e, 0x29, 0x57, 0x41, 0xa8, 0xd0, 0x19, 0x1, 0x6a, 0x9b, 0xce, 0x42, 0x43, 0x80, 0xfe, 0xa6, 0x88, 0xaf, 0x11, 0xf2, 0xcf, 0xda, 0xd2, 0xf7, 0x28, 0x7e, 0xb6, 0x91, 0x53, 0xc4, 0xac, 0x93, 0xaa, 0x7f, 0x13, 0x9d, 0x24, 0xc2, 0xe5, 0xc2, 0x36, 0x77, 0xde, 0x9f, 0xc8}, types.Tx{0x6d, 0x87, 0xb4, 0x89, 0xfd, 0x71, 0x8e, 0x4f, 0xf8, 0x1, 0x14, 0x51, 0x29, 0x4d, 0x4a, 0x8f, 0xa4, 0x8d, 0x74, 0xba, 0xbb, 0x37, 0xb9, 0x23, 0xc5, 0x38, 0x32, 0xab}, types.Tx{0xe8, 0x5b, 0xf0, 0x96, 0xab, 0x4b, 0xb3, 0x1a, 0x27, 0xf0, 0x3b, 0x83, 0x82, 0x19, 0x3, 0xc3, 0x53, 0xdc, 0xe4, 0xb9, 0x46, 0x90, 0x13, 0xed, 0xd4, 0x16, 0x3d, 0xba, 0xe6, 0xe7, 0xf5, 0x5e, 0x6b, 0x22, 0x22, 0xc5, 0x25, 0xa3, 0x6c, 0x45, 0x0, 0x6f, 0x1c}, types.Tx{0xc7, 0x8c, 0xdf, 0xa8, 0x72, 0xb0, 0x9b, 0xe7, 0x2b, 0x93, 0x9d, 0x82, 0x44, 0xdf, 0xc5, 0x62, 0x6c, 0x70, 0x55, 0x6, 0xa, 0xf8, 0xb1, 0xe0, 0x60, 0xab, 0xea, 0x70, 0xbd, 0x82, 0xfd, 0x75, 0xe4, 0x2c, 0x90, 0xe, 0x58, 0x22, 0xf2, 0xd, 0xb5, 0x67, 0x8, 0x1, 0x59, 0x5, 0x29, 0xc3, 0x3c, 0xb4, 0x31, 0x78}, types.Tx{0xff, 0xed, 0xfb, 0x35, 0x92, 0xe5, 0xfc, 0xe1, 0xe8, 0xf1, 0xe0, 0x24, 0xf5, 0xc3}, types.Tx{0xce, 0xd5, 0x17, 0x4f, 0x14, 0xb2, 0x95, 0xcf, 0x3e, 0x25, 0x1f, 0x8, 0xd0, 0xac, 0xa2, 0xb5, 0x72, 0xc8}, types.Tx{0x21, 0x52, 0xb9, 0xcc, 0x3d, 0x8f, 0x93, 0xe0, 0xb5, 0x4f, 0x3d, 0x48, 0x94, 0x7e, 0x75, 0x31, 0x41, 0xeb, 0x89, 0xd6, 0xc3, 0x45, 0x82, 0xd4, 0x11, 0x6d}, types.Tx{0x0, 0x1b, 0x17, 0x6c, 0xb8, 0x33, 0xc6, 0xf8, 0xe6, 0x8b, 0x15, 0x22, 0x3e, 0xa9, 0x5a, 0x56, 0xc6, 0x93, 0xb6, 0xbc, 0xe1, 0xaf, 0xcc, 0x87, 0x70}, types.Tx{0x9c, 0x59, 0x9f, 0x20, 0x39, 0xf8, 0x6b, 0xba, 0xca, 0xac, 0xe8, 0x71, 0xb8, 0xb5, 0x75, 0x1, 0x53, 0x11, 0x83, 0x4c, 0xc5, 0xa0, 0x2f, 0xd8, 0x3b, 0xbc, 0xcf, 0xc8, 0x55, 0x50, 0x5d, 0x6, 0x7a, 0xc2, 0xc, 0xc8, 0x1f, 0xd9, 0xd, 0xf7, 0xb2, 0xdd, 0x2c, 0xf5, 0x98, 0x35, 0x1f, 0xbb, 0xb, 0x51, 0xa8}, types.Tx{0xd9, 0xa0, 0x80, 0x98, 0x80, 0x10, 0x83, 0x8a, 0x29, 0x45, 0xf3, 0xb8, 0x72, 0x3d, 0x8, 0xe3, 0xc9, 0x2a, 0xdc, 0x56, 0x75, 0x63, 0xf1, 0xe0, 0xc, 0xe4, 0x2d, 0xe7, 0xc0, 0x53, 0xe1, 0x3b, 0x3e, 0x1e, 0x47, 0xf, 0x52, 0x35, 0x8b, 0x10, 0xa7, 0x8e, 0xe4, 0xf0, 0x36, 0x1d, 0xc2, 0x73, 0x62, 0x3c, 0xd9, 0xfa, 0xb8, 0xf6, 0xaa, 0x94, 0xc, 0xd0, 0xfb, 0xe8, 0x3f, 0x84, 0xb1}, types.Tx{0x57, 0x51, 0xc9, 0x96, 0xd0, 0xc2, 0x3d, 0x85, 0xb3, 0x4a, 0xc0, 0xd, 0xfb, 0xf2, 0x2c, 0x92, 0x2c, 0x72, 0x98, 0xc7, 0x93, 0x86, 0x6b, 0x75, 0x23, 0xd1, 0xbf, 0xb2, 0xef, 0xf5, 0xbd, 0x83, 0x12, 0x78, 0x85, 0xcd, 0x8f, 0xd4, 0x7, 0x95, 0x58, 0xe7, 0xcd, 0x6, 0xbf}, types.Tx{0x8b, 0x50, 0x4e, 0x9e, 0x58, 0x4f, 0x33, 0x2, 0x75, 0xc, 0xdf, 0xd, 0xb0, 0x8c, 0x10, 0x55, 0x88, 0x8, 0x44, 0x81, 0x9, 0xf7, 0x75, 0xe9, 0xca, 0xf0, 0x4, 0x59, 0xd0, 0x37, 0xf2, 0x99, 0x64, 0xf3, 0x8f, 0xd9, 0x5, 0x30, 0x24, 0x97, 0xd1, 0x9e, 0x6a, 0xe5, 0x24, 0xdc, 0xe5, 0xa4, 0xd9, 0x36, 0x88, 0xec, 0x4d, 0x8f, 0xd5, 0xce, 0xa5, 0x73, 0xa2, 0xa9, 0x25, 0xa7, 0x2c, 0xe7, 0x9a, 0x38, 0x27, 0xfd, 0x3c, 0xa8, 0xb7, 0xe5, 0x95, 0xd3, 0x0}, types.Tx{0x1a, 0x50, 0xa4, 0x4f, 0xad, 0xb9, 0xcc, 0xc9, 0x24, 0xf, 0x58, 0x77, 0x93, 0xc6, 0x4d, 0xa8, 0xd5, 0x7a, 0x7b, 0x93, 0xc5, 0xab, 0x89, 0x54, 0x7e, 0x59, 0x8c, 0x26}, types.Tx{0xf3, 0xf6, 0xf7, 0x6d, 0x52, 0x68}, types.Tx{0xd3, 0x66, 0x24, 0xdd, 0xd, 0xc9, 0xba, 0x5d, 0xc2, 0x3f, 0xc1, 0x4a, 0xf3, 0x88, 0x42, 0x33, 0xf0, 0x65, 0x5d, 0x27, 0xf4, 0x0, 0xa, 0xa4, 0xd, 0x7c, 0x79, 0x42, 0x9, 0x88, 0x5e, 0x76, 0x99, 0xe3, 0x67, 0xc6, 0x92, 0x4a, 0x2, 0x33, 0x38, 0x6d, 0x99, 0xe8, 0x58, 0x77, 0x92}, types.Tx{0x41, 0x1f, 0x81, 0x65, 0xc4, 0x19, 0x86, 0x29, 0x4f, 0x4d, 0xd9, 0x1f, 0x32, 0x1, 0xcb, 0x2e, 0x2e, 0x97, 0xd0, 0xe1, 0xb, 0x62, 0x8, 0xa6, 0xeb, 0x90, 0x12, 0x28}, types.Tx{0xcf, 0x8f, 0x54, 0x48, 0x6d, 0x6a, 0xeb, 0xc2, 0x76, 0xe3, 0xc8, 0xac, 0xca, 0x95, 0x81, 0xd0, 0x38, 0xc9, 0x41, 0xb7, 0xd8, 0xea, 0x5d, 0xda, 0x8d, 0x8e}, types.Tx{0xc2, 0x65, 0x2f, 0x29, 0xbb, 0x67, 0x30, 0x56, 0x44, 0xec, 0x2b, 0x56, 0x1c, 0xe3, 0x6a, 0xb8, 0x39, 0xca, 0x1f}, types.Tx{0x0, 0xe0, 0x65, 0x1, 0xd0, 0xe6, 0x47, 0x7d, 0x1a, 0x4a, 0x18, 0xb5, 0xa4, 0x6e, 0xf1, 0x60, 0x8c, 0xc2, 0x45, 0x1e, 0xb0, 0x22, 0xc7, 0xb0}, types.Tx{0x56, 0x62, 0xf, 0x6, 0x82, 0x22, 0x83, 0x4c, 0x32, 0x50, 0x68, 0x1d, 0x93, 0xda, 0x33, 0x7, 0xa6, 0x57, 0x5a, 0x8a}, types.Tx{0xe8, 0x36, 0x60, 0x67, 0x22, 0x23, 0x52, 0x2b, 0xad, 0x9c, 0xc6, 0x1f, 0xdc, 0x16, 0xe2, 0xe9, 0x56, 0x90, 0x8d, 0x4b, 0xf8, 0x97, 0xd5, 0x2d, 0x85, 0x48, 0x5d, 0x12, 0x56, 0x73, 0xe4, 0xa9, 0xaf, 0xd, 0x38, 0x5c, 0x70, 0xb5, 0xc5, 0xda, 0xf9, 0xd9, 0x41, 0xc8, 0xa2, 0x17, 0x34, 0xf8, 0xed, 0x54, 0xb7, 0x5b, 0x94, 0xbe, 0xa0, 0xa1, 0x45, 0x8c, 0xd0, 0x9a, 0x6f, 0x35, 0xe, 0x5b, 0x46, 0x2d, 0xac, 0x8b, 0xd3, 0xcc, 0xad, 0x45, 0x6a, 0xd8, 0xe2, 0xd2, 0x79, 0xa9, 0xd5, 0x9, 0x10, 0x92, 0xc4, 0xfe, 0x1, 0x14, 0x54, 0xc, 0x3, 0xdd, 0xf1}, types.Tx{0xa3, 0xb3, 0x5d, 0x63, 0x1a, 0xb8, 0x70, 0xae, 0x85, 0x16, 0xc3, 0xf8, 0x56, 0xe8, 0x1c, 0x68, 0x2d}, types.Tx{0xb8, 0x60, 0xb3, 0x6a, 0x65, 0xbd, 0x3b, 0xd2, 0xc1, 0x17}, types.Tx{0x78, 0x37, 0xab, 0x5b, 0x3f, 0x8a, 0x46, 0xa3, 0xcf, 0x82, 0x93, 0x7a, 0x7c, 0x6d, 0x2d, 0x3f, 0x82, 0x2d, 0x38, 0x73, 0xad, 0xed, 0x4f, 0x2d, 0xee, 0x59, 0xa, 0x5, 0x89, 0x96, 0x6b, 0x1d, 0x0, 0xfc, 0xea, 0xaf, 0xef, 0x7f, 0x9c, 0xec, 0x24, 0xf8, 0x53, 0x75, 0xf0, 0xb, 0x7a, 0xb, 0x82, 0xa4, 0xd8, 0xd2, 0xb4, 0xa6, 0x81, 0x7a, 0x27, 0x91, 0xbd, 0x18, 0x3, 0x2d, 0x1, 0xb4, 0xef, 0xdc, 0x11, 0x76, 0xb1, 0x26, 0x20, 0x2e, 0x17, 0xea, 0x85, 0x55, 0x37, 0xae, 0x47, 0x6, 0xc8, 0x89, 0xb2, 0xaf, 0x39, 0xe5, 0x0}, types.Tx{0x55, 0x8c, 0xfd, 0x92, 0x7e, 0xf1, 0x5b, 0xbe, 0x98, 0x81, 0xcb, 0x22, 0x91, 0x9d, 0xd4, 0x22, 0xe8, 0x81, 0xc3, 0xd, 0x3c, 0xb7, 0xd6, 0xd7, 0xdd, 0x1, 0xd2, 0x5f, 0x2a, 0xc1, 0xc3, 0x21, 0x4d, 0x5c, 0x5a, 0x99, 0xfe, 0xc8, 0xbd, 0xe5, 0xa0, 0x28, 0x67, 0x13, 0xb4, 0x68, 0x99, 0x64, 0x2, 0x8a, 0x5a, 0xe2, 0xcb, 0x27, 0xf6, 0x15, 0x90, 0xf6, 0x7b, 0xe3, 0xea, 0xaa, 0x5f, 0x18, 0xfb, 0x42, 0xde, 0xf2, 0xce, 0xf2, 0x22, 0xef, 0x2e, 0x70, 0x38, 0x8a, 0x1c, 0xe0, 0x64, 0xf0, 0x4c, 0x32, 0xa4, 0x1d, 0x22, 0x2a, 0x77, 0x7, 0xd7, 0x4a, 0x6a, 0x49}, types.Tx{0xda, 0x8b, 0xe6, 0x89, 0x82, 0xf5, 0xb6, 0x18, 0x4d, 0xdf, 0x17, 0xb, 0xf7, 0x4a, 0x7f, 0xa7, 0x6b, 0xbc, 0xd9, 0x6c, 0xf8, 0xca, 0x9b, 0x3d, 0xb2, 0x5f, 0x59, 0x3d, 0x9b, 0xc9, 0x22, 0x79, 0x8d, 0xae, 0xf8, 0xb8, 0xe8, 0x54, 0xfb, 0xd7, 0x9c, 0x7e, 0xcf, 0xc2, 0xda, 0xb1, 0xa8, 0x51, 0xe4, 0x5f, 0x87, 0xb8, 0xb1, 0x18, 0x6e, 0x69, 0xc8, 0x13, 0x30, 0x3b, 0x80, 0xd7, 0x2c, 0x8e, 0x52, 0x73, 0xe3, 0x28, 0x98, 0xd5, 0x8f, 0x0, 0xf, 0x21, 0x81, 0x5, 0x10, 0x5a, 0xae, 0xfe, 0xbd, 0xd6, 0x1a, 0x67, 0xd3, 0x6a, 0x78, 0x25, 0x81, 0xa6, 0xe0, 0x60, 0xa4, 0x7f, 0xcd, 0x61}, types.Tx{0x4, 0x28}, types.Tx{0x9f, 0xd, 0x3d}, types.Tx{0x14, 0x33, 0x19, 0x48, 0x1, 0xa7, 0xe4, 0xe4, 0x68, 0x0, 0x61, 0xb9, 0x4, 0x4c, 0x48, 0x97, 0x1, 0xc9, 0xa6, 0xa7, 0xf0, 0xf8, 0x1d, 0xa5, 0x91, 0x60, 0x4d, 0xa9, 0x3c, 0xeb, 0x5b, 0xaa, 0x4f, 0x7c, 0x6, 0xd5, 0x81, 0x1f, 0x70, 0xb2, 0x37, 0xd4, 0x5, 0x49, 0x50, 0x60, 0xc7, 0x25, 0xd4, 0x8b, 0x63, 0x3e, 0x71, 0xf9, 0xf0, 0x2b, 0x92, 0xd9, 0xc, 0xf7, 0x79, 0x63, 0x93, 0x89, 0x6f, 0xfa, 0x4a, 0x69, 0x55, 0xc5, 0xc9, 0x18, 0x38, 0xe5, 0x5f, 0x1d, 0xc4, 0xb5, 0xa4, 0x51, 0x64, 0x77, 0xdd, 0x83, 0x66, 0x2f, 0xa1, 0xd6}, types.Tx{0xeb, 0xdb, 0x88, 0xcd, 0x3, 0x93, 0x59, 0xc5, 0xec, 0x76, 0x2f, 0xa9, 0x7a, 0xc2, 0x4d, 0x83, 0x48, 0x33, 0x98, 0x84, 0xfe, 0x83, 0xf, 0x7f, 0x1d, 0xe9, 0x6e, 0xbb, 0x6, 0x63, 0x8f, 0x4c, 0x51, 0x5a, 0x56, 0xa4, 0x49, 0x99, 0xfb, 0x33, 0x28, 0xed, 0x5c, 0xfe, 0xbb, 0x95, 0x13, 0x32, 0x69, 0xd4, 0xe1, 0xa6, 0x7f, 0x7, 0x39, 0x49, 0x4e, 0xa1, 0x43, 0x96, 0xbb, 0x35, 0xd5, 0x16, 0xf, 0xe8, 0x77, 0x8, 0x48, 0x67, 0x90, 0x10, 0x74, 0xce, 0xf7, 0xb4, 0xde, 0xc9, 0xd9, 0xfc, 0x2b, 0x41, 0xfd, 0x63, 0xc5, 0xb5, 0xef, 0x49, 0x17, 0x64, 0x26}, types.Tx{0xbc, 0xdc, 0x10, 0xf1, 0xfb, 0x3, 0x70, 0x16, 0xa0, 0x35, 0xfa, 0x4f, 0xa3, 0xef, 0x13, 0x97, 0xf7, 0xa6, 0x6f, 0x92, 0x1e, 0x52, 0x98, 0x21, 0x94, 0xd0, 0x9, 0x8b, 0x7b, 0xda, 0x31, 0xe2, 0xa5, 0xe8, 0x11, 0xb2, 0xa3, 0x48, 0xf2, 0xc4, 0xb4, 0x36, 0x4d, 0xbb, 0xc, 0xc3, 0xf8, 0x7a, 0xe4, 0x4a, 0xd8, 0xc5, 0x98, 0x2c, 0xeb, 0x52, 0x8a, 0x1, 0x48, 0x18, 0xfe, 0xc, 0xa5, 0x8, 0x8f, 0xd, 0x89, 0x34, 0xe3, 0xf5, 0xcf, 0xab, 0x82, 0x95, 0x1d, 0xa4, 0xd4, 0xa1}, types.Tx{0xdb, 0x0}, types.Tx{0x21, 0x31, 0xf7, 0xf9, 0xd0, 0x54, 0x1b, 0x9, 0x71, 0x45, 0x4e, 0xb5, 0x8e, 0xe6, 0x1a, 0x3b, 0x1b, 0x66, 0xf1, 0x6c, 0x8d, 0xbc, 0xb8, 0x87, 0xfc, 0x59, 0xbd, 0x68, 0xe6, 0x75, 0x72}, types.Tx{0x58, 0x89, 0x12, 0x92, 0x34, 0xd0, 0x7c, 0xe7, 0x3d, 0x0, 0x2b, 0xb5, 0xab, 0x6, 0x2, 0x6b, 0xf5, 0xdd, 0x52, 0xf4, 0xe4, 0xaf, 0x55, 0xb8, 0x62, 0x38, 0x1c, 0x4d, 0xd8, 0xe2, 0xd6, 0xf9, 0xf1, 0x4d, 0xa0, 0xbd, 0x23}, types.Tx{0x5a, 0xd4, 0x62, 0xb3, 0xd4, 0x2f, 0x51, 0x26, 0x55, 0xd2, 0xa7, 0x63, 0xad, 0xd1, 0xae, 0xc9, 0xf9, 0x30, 0x4e, 0x55, 0x62, 0xa1, 0x93, 0xfc, 0x16, 0xbf, 0xcc, 0xbf, 0x97, 0x54, 0xd2, 0xa5, 0xdd, 0x80, 0x1b, 0x1b, 0x51, 0xc4, 0x9, 0xce, 0xcd, 0x7c, 0x6e, 0xd, 0x6b, 0xfc, 0xce, 0xb2, 0x88, 0x78, 0x85, 0x3b, 0xfb, 0x6f, 0xfc, 0xcd, 0x45, 0x56, 0xb8, 0xe9, 0x3e, 0x4b, 0x9a, 0x20, 0x13, 0x94, 0x7e, 0x64, 0xc5, 0x7}, types.Tx{0x7d, 0x24, 0xbd, 0xc9, 0x8e, 0xca, 0xd7, 0x22, 0x3d, 0xdf, 0x6d, 0x33, 0x8f, 0x1, 0x2f, 0xe9, 0x0, 0x4a, 0x48, 0x7, 0x0, 0xe9, 0x7d, 0x9f, 0x92, 0xa4, 0x1a, 0x97, 0x41, 0xa8, 0x5d, 0xc, 0xd0, 0x26, 0x95, 0xe4, 0xd4, 0xe0, 0xb5, 0xfe, 0xe5, 0xf4, 0xe5, 0x1a, 0xed, 0x2d, 0x1c, 0xa9, 0x72, 0x91, 0x5b, 0x38, 0xce, 0x4d, 0xf2, 0xc2, 0xcd, 0xd0, 0xa6, 0xe8, 0x6c, 0x9b, 0x4b, 0x38, 0x47, 0xe0, 0xd8, 0x7, 0xcb, 0x29, 0xfa, 0x8f, 0xfc, 0x86, 0xc1, 0x31, 0xc9, 0x31, 0x4f, 0xca, 0x3f, 0xa3, 0xdf, 0x70, 0x31, 0xd0, 0x73, 0x7f}, types.Tx{0x4, 0xb, 0xea, 0xfc, 0x7c, 0x9b, 0xe4, 0xdb, 0x5f, 0xd6, 0x8b, 0xbf, 0xc7, 0x1c, 0xf6}, types.Tx{0x82, 0xcf, 0x95, 0xf2, 0x4b, 0x6c, 0x87, 0x75, 0x96, 0x8d, 0x92, 0x33, 0xcd, 0x3d, 0x55, 0xe5, 0xb5, 0xdd, 0xcc, 0xc2, 0x3e, 0x3b}, types.Tx{0xb0, 0xea, 0xe7, 0x9c, 0x7, 0xa4, 0x5a, 0x5d, 0xea, 0xdc, 0xb4, 0x5d, 0x9d, 0x26, 0xe2, 0x88, 0xf2, 0xc2, 0x34, 0x13, 0x0, 0x9, 0x20, 0xe5, 0xef, 0xcc, 0xf1, 0x80, 0x21, 0xb9, 0x9c, 0xc4, 0x32, 0x34, 0x4f, 0x73, 0x77, 0xcd, 0x3, 0x59, 0x43, 0x3e, 0x19, 0xfc, 0x86, 0x84, 0xb, 0x71, 0x17, 0xeb, 0x85, 0xe6, 0x6a, 0x6b, 0x39, 0x2c, 0x44, 0xdd, 0x32, 0xe7, 0x92, 0x91, 0xf5, 0xf7, 0x30, 0xab, 0xe0, 0xfa, 0x81, 0x89, 0x2d, 0x7d, 0x5c}, types.Tx{0x4c, 0x11, 0x74, 0xa3, 0xb6, 0xf, 0x58, 0x24, 0xd8, 0x7c, 0x66, 0x8c, 0xe6, 0x9c, 0x5f, 0xda, 0x6, 0xef, 0xce, 0xf0, 0x4f, 0xd2, 0xb0, 0x27, 0x49, 0x5c, 0xda, 0xc8, 0x45, 0x77, 0x1b, 0x86, 0xa5}, types.Tx{0xd7, 0x26, 0x5, 0xa7, 0x6e, 0x10, 0x25, 0xfe, 0xc8, 0xe5, 0x16, 0x98, 0x26, 0xe0, 0x76, 0xc, 0xba, 0xa3, 0xb0, 0x15, 0x91, 0x32, 0xad, 0x1d, 0x67, 0x77, 0x5d, 0x7c, 0xf, 0x8a, 0x53, 0xef, 0x35, 0x9b, 0x92, 0xed, 0xcc, 0x76, 0xdb, 0xa4, 0x31, 0xcc, 0x38, 0x8f, 0x84, 0xb3, 0x88, 0x7a, 0x89, 0x31, 0x5d, 0x16, 0xd5, 0xd2, 0xef, 0x47, 0x77, 0x2b, 0xa, 0xa2, 0x22, 0xfa, 0x2, 0xc5, 0x1c, 0x75, 0xac, 0xf9, 0x4d, 0x45, 0x78, 0x29, 0xe0, 0x96, 0x1d, 0x49, 0x6c, 0x46, 0xd, 0x11, 0xaf, 0x67}, types.Tx{0x8d, 0x29, 0x8, 0x62, 0x95, 0x71, 0x16, 0xcd, 0xa6, 0x96, 0x11, 0x4f, 0x44, 0xe4, 0x7f, 0x81, 0x9e, 0x20, 0x39, 0x43, 0xc4, 0x54, 0x99, 0x15, 0x38, 0x52, 0x21, 0x4a, 0x5e, 0xc7, 0xa3, 0x2e, 0x44, 0xb, 0xce, 0x31, 0xda, 0x31, 0x18, 0x4c, 0x68, 0xeb, 0x21, 0x75, 0xa9, 0x66, 0xd, 0x32, 0x90, 0x3c, 0x6f, 0x77, 0x68}, types.Tx{0x2a, 0xfc, 0x45, 0x43, 0x1a, 0xc5, 0xa2, 0xee, 0xc6, 0xdb, 0xd9, 0xac, 0x4b, 0xfa, 0x6d, 0x3a, 0xe2, 0xf6, 0x82, 0xb4, 0xeb, 0xe0, 0x10, 0xc2, 0xb2, 0x25, 0x53, 0x22, 0xa3, 0xae, 0x85, 0x21}, types.Tx{0xd, 0x53, 0xc4, 0xe8, 0x14, 0x33, 0x5b, 0x9e, 0x60, 0x43, 0xfc, 0xa0, 0xb6, 0x3e, 0xeb, 0xdd, 0x12, 0x99, 0xb9, 0x6e, 0xf3, 0xc4, 0x36, 0xfe, 0xfb, 0xd7, 0x54, 0xbb, 0xe8, 0x6c, 0x5f, 0x64, 0x75, 0x9c, 0xd, 0xde, 0x24, 0x74, 0x4f, 0x4e, 0x19, 0x94, 0x28, 0x38, 0x11, 0xd4, 0x51, 0xd8, 0xc9, 0x8b, 0xfa, 0x7}, types.Tx{0x83, 0x2b, 0x38, 0xdb, 0xa, 0xc8, 0xa, 0x1e, 0x61, 0x9a, 0xfa, 0x88, 0xb6, 0x4c, 0xe, 0xa9, 0xa1, 0xa3, 0x16, 0x68, 0x15, 0xed, 0x63, 0x79, 0x1e, 0x41, 0x4d, 0xb5, 0x5, 0xdd, 0xfe, 0xe1, 0x8b, 0x1c}, types.Tx{0x8, 0x19, 0x10, 0xbb, 0x4a, 0x86, 0x43, 0xc2, 0x37, 0x76, 0x72, 0x6e, 0x55, 0xd3, 0xcd, 0x4e, 0xa2, 0x61, 0xd2, 0xad, 0x54, 0x49, 0x20, 0x76, 0xb9, 0x11, 0x41, 0xff, 0x3b, 0xef, 0x5c, 0x56, 0xa6, 0xac, 0x81, 0x56, 0x7f, 0x56, 0x70, 0x97, 0x81, 0x38, 0xda, 0xcd, 0x6c, 0x63, 0x12, 0x27, 0xdf, 0x14, 0x24, 0xe9, 0xe, 0x9c, 0xe7, 0xa5, 0x1b, 0x2b, 0x7f, 0x5e, 0xb9, 0xc9, 0x25, 0xd8, 0x5b, 0x84, 0xe3, 0x13, 0xa3, 0xdf, 0x1a, 0x41, 0x61, 0x41, 0x3e, 0x16, 0x3d, 0xa5, 0xc, 0xcc, 0x9, 0xec, 0x42, 0x57, 0x87, 0xea, 0x6, 0xb0, 0x6c, 0x4a}, types.Tx{0xc1, 0xb, 0x6b, 0xb3, 0x2b, 0x84, 0xfa, 0xf5, 0x42, 0xb7, 0x78, 0x24, 0xe0, 0x3d, 0x84, 0xe5, 0x83, 0xac, 0xc1, 0xa, 0x33, 0x27, 0xf3, 0x82, 0xa0, 0xca, 0xa5, 0x28, 0x3d, 0xa8, 0x17, 0x6c, 0xf3, 0xeb, 0xa3, 0x10, 0x40, 0x1e, 0xa2, 0xc5, 0xca, 0xfc, 0xb4, 0x68, 0x5e, 0xd, 0x8d, 0xb9, 0x3f, 0xe2, 0xea, 0x6, 0x67, 0x9, 0x52, 0xa3, 0xa5, 0x6c, 0x9e, 0x98, 0x5e, 0x39, 0x78, 0x69, 0x96, 0xd6, 0xc6, 0x6b, 0xac, 0x69, 0xd2, 0xf3, 0x59, 0x1f, 0x83, 0xc7, 0xf0}, types.Tx{0x10, 0x2c, 0x68, 0x23, 0xe3, 0x1, 0xc5, 0x47, 0x6, 0x35, 0x3d, 0x9c, 0x25}, types.Tx{0x81, 0xe1, 0xca, 0x66, 0xd4, 0x5d, 0xc4, 0x86, 0x96, 0xd, 0x90, 0xee, 0x20, 0x69, 0xd4, 0x3, 0x47, 0x54, 0x58, 0x41, 0xf7, 0x27, 0x66, 0xe6, 0xd5, 0xc5, 0xe6, 0xac, 0x41, 0x5f, 0x19, 0x26, 0x61, 0xf8, 0x9d, 0x60, 0xd0, 0xd1, 0xfa, 0x85, 0x8d, 0x8f, 0xf2, 0x13}, types.Tx{0xd3, 0x56, 0x30, 0xd6, 0xd, 0xba, 0x69, 0x1b, 0xa3, 0x96, 0x8a, 0xce, 0xf4, 0x7a, 0xdc, 0x5, 0x12, 0xfa, 0x65, 0x51, 0xfe, 0xc0, 0xc0, 0x95, 0xe8, 0x54, 0xa8, 0xfc, 0x4f, 0x2f, 0x49, 0x4c, 0xb5, 0x68, 0xd8, 0x26, 0x7, 0x25, 0x45, 0xbc, 0x92, 0xa2, 0xd9, 0x22, 0xf4, 0x3b, 0x42, 0x3a, 0xf8, 0x5b, 0xdb, 0xae, 0xb1, 0x64, 0x36, 0x4f, 0x2f, 0x11, 0xb7, 0x36, 0x2e, 0x5e, 0x66, 0xf9, 0xd2, 0x61, 0xc9, 0xf, 0x9f, 0xb6, 0x5a, 0x30, 0xe0, 0x19, 0xb3, 0x2f, 0x75, 0xcb, 0xa4, 0x4c, 0x61}, types.Tx{0x8d, 0xcf, 0xc8, 0xfb, 0x9f, 0x8a, 0x5d, 0x4f, 0xf6, 0xd0, 0x4f, 0xe5, 0xc, 0x92, 0x5c, 0xfc, 0xef, 0x24, 0xd3, 0x3e, 0x86, 0x24, 0x4d, 0xa8, 0xc1, 0xf7, 0xba, 0x40, 0xbc, 0x2f, 0x6b, 0x15, 0x7c, 0x8, 0x88, 0x93, 0x88, 0xc8, 0x1d, 0x94, 0xa9, 0x3a, 0x6f, 0xc0, 0xfe, 0xb0, 0x14, 0xea, 0x86, 0x4b, 0xc9, 0x9e, 0x3d, 0x57, 0x6f, 0xe2, 0xcf}, types.Tx{0x4e, 0x3f, 0x86, 0x85, 0x81, 0xf3, 0x52, 0xf9, 0x88, 0x8b, 0xde, 0x2b, 0xa3, 0x3f, 0x7f, 0xc, 0x66, 0xcb, 0x9a, 0x8f, 0x9, 0x26, 0x8d, 0x2d, 0x49, 0xf2, 0x3f, 0x51, 0xbf, 0xe3, 0x2a, 0x8, 0x47, 0x8d, 0xaf, 0x7e, 0x3, 0x26, 0x96, 0xc2, 0xf1, 0x4b, 0x2b, 0x31, 0x63, 0x8b, 0xdb, 0x9b, 0xe8, 0x83, 0x3f, 0x8e, 0xaf, 0xe6, 0x5e, 0x18, 0x7f, 0xaa, 0x3e, 0x64, 0xeb, 0xe4}, types.Tx{0x2c, 0x44, 0x5a, 0x6a, 0x80, 0x81, 0xee, 0xd7, 0x7, 0xcb, 0x50, 0xc7, 0xec, 0x3f, 0xf9, 0xc, 0x17, 0x53, 0xae, 0x4a, 0x8d, 0x86, 0x1f, 0xfc, 0xc1, 0x3, 0x73, 0x2d, 0xdb, 0x86, 0x26, 0x49, 0x67, 0x9f, 0xff, 0x44, 0xef, 0xde, 0x2b, 0xd3, 0xb6, 0x70, 0xb, 0xc0, 0xd2, 0xf9, 0x59, 0x55, 0xfa, 0x1, 0x9c, 0x51, 0x4d, 0x3b, 0xaf, 0x31, 0x5e, 0xf5, 0x4d, 0xd2, 0xa4, 0xf0, 0xf2, 0xd0, 0xe4, 0xe, 0xc7, 0x87, 0xc4, 0x5, 0x0, 0x4b, 0xad, 0xe6, 0xf8, 0xe8, 0x2a, 0x4e, 0x44, 0xaa, 0xe6, 0xd6, 0x5b, 0x1b, 0xcd, 0x96, 0x90, 0xb, 0x9b, 0x8d, 0xe3, 0x97}, types.Tx{0xc6, 0xdf, 0x8b, 0x72, 0xa9, 0x22, 0xdb, 0xfd, 0xeb, 0xd4, 0x83, 0x9a, 0xa5, 0x58, 0xef, 0x1d, 0xab, 0xb2, 0x88, 0x51, 0x64, 0xc1, 0x93, 0xbc, 0x36, 0xa, 0x2f, 0x4d, 0xa2, 0x65, 0x43, 0xb9, 0x70, 0xa6, 0xc5, 0x4f, 0xdc, 0xe3, 0xc8, 0x20, 0x1a, 0xd, 0xab, 0x90, 0xf7, 0x47, 0x84, 0xf4, 0x54, 0xc7, 0x13, 0x8c, 0x27, 0x2f}, types.Tx{0x75, 0x53, 0xa4, 0x74, 0x56, 0xcd, 0xe1, 0xd6, 0x39, 0xed, 0x9b, 0x22, 0xdb, 0x6f, 0xbb, 0x4d, 0xdc, 0xd0, 0x9a, 0x26, 0x2c, 0x57, 0x61, 0xdb, 0xe3, 0x35, 0x6e, 0xc3, 0x7f, 0x33, 0x6b, 0x64, 0x76, 0x29, 0x90, 0xe4, 0x84, 0xdb, 0x3b, 0x42, 0xc3, 0xa, 0x95, 0xad, 0xc4, 0x62, 0xaa, 0xac, 0x25, 0x57, 0x4a, 0xcf, 0x9a, 0x3e, 0x35, 0x42, 0xfa, 0x97, 0xf4, 0xfd, 0xea, 0xfd, 0x55, 0x6d, 0x3c, 0xce, 0xc4, 0x40, 0x3d, 0x4f, 0xff, 0x5d, 0xcb, 0x8a, 0x3d, 0x2d}, types.Tx{0x98, 0x64, 0xbe, 0x42, 0x9c, 0x83, 0x9c, 0xb3, 0x64, 0xdd, 0x20, 0x6e, 0xca, 0x6, 0x84, 0x5d, 0xfd, 0xfa, 0x20, 0x92, 0xb6, 0x44, 0x14, 0x10, 0xec, 0x1c, 0xa3, 0x2f, 0x1b, 0x1e, 0xd2, 0x75, 0xf7, 0xfd, 0x7e, 0x9d, 0xb4, 0xdf, 0x89, 0x53, 0xd1, 0xdb, 0xa0, 0xd6, 0x17, 0xa7, 0xae, 0xa5, 0x6c, 0xba, 0x6f, 0x1e, 0xb8, 0xe3, 0xc6, 0xcd, 0x3f}, types.Tx{0xd4, 0x2a, 0x15, 0x6b, 0xf4, 0xfb, 0x87, 0x4d, 0x15, 0xb8}, types.Tx{0xe0, 0xd4, 0x95, 0x82, 0xab, 0xdb, 0xc6, 0xf4, 0xfc, 0xe4, 0xc8, 0xba, 0x8c, 0x10, 0x44, 0x6f, 0x43, 0xf2, 0x24, 0x8c, 0x5d, 0xf4, 0x37, 0xa9, 0xa0, 0xbb, 0xf3, 0xfd, 0x32, 0x63, 0xf4, 0xb6, 0x3b, 0x9, 0x46, 0xb1, 0x5b, 0x13, 0x95, 0x4f, 0x8f, 0x9f, 0xc4, 0x4f, 0xe3, 0xec, 0x3b, 0x4c, 0xec, 0xbc, 0xb1, 0xb5, 0x1f, 0xe8, 0xa1, 0x2b, 0x57, 0x4b, 0xa, 0x9b, 0xb0, 0xf4, 0xd1, 0xcd, 0x7c, 0x6e, 0xf9, 0x9c, 0xba, 0x9f, 0xa1, 0x88}, types.Tx{0x24, 0x21, 0xc6, 0xa9, 0x8b, 0xf3, 0xe7, 0xb4, 0x61, 0x3b, 0x95, 0x39, 0x7f, 0x9b, 0xad, 0x41, 0x3, 0x9c, 0xde, 0x1b, 0x8e, 0xd4, 0xb2, 0xd4, 0xa9, 0xaa, 0xdc, 0xc2, 0xae, 0xa3, 0x11, 0xe2, 0x6a, 0x8c, 0x52, 0x3a, 0xd6, 0xa0, 0xce, 0xd6, 0xaa, 0x9f, 0xfe, 0x9a, 0xfc, 0x50, 0x49, 0xa4, 0x69, 0x7c, 0x3a, 0xe0, 0xe6, 0x51, 0xf, 0xa7, 0x13, 0x6c, 0xb6, 0x10, 0xe0, 0x1f, 0xbb, 0x36, 0xc6, 0x2b, 0x10, 0x6f, 0x1e, 0x90, 0xa5, 0x1e, 0xd7, 0xbb, 0x93, 0x45, 0xa1, 0x31}, types.Tx{0x29, 0xa, 0xc8, 0xcb, 0x81, 0x3a, 0xfc, 0x15, 0x91, 0x8f, 0x77, 0x83, 0xb3, 0x36, 0x76, 0x82, 0xe9, 0xed, 0xdf, 0xd0, 0xdc, 0x68, 0x31, 0xeb, 0x8d, 0xe1, 0xb9, 0x7c, 0xd6, 0xba, 0xb8, 0x8f, 0x50, 0xd5, 0xfa, 0xca, 0xab, 0x1e, 0x87, 0xcc, 0x52, 0xdc, 0x43, 0x54, 0xb4, 0xce, 0xa7, 0xcd, 0xa5, 0x52, 0x16, 0x1c, 0x96, 0x8b, 0xbe, 0x86, 0xc8, 0x6c, 0x75, 0x1b, 0x7d, 0xb8, 0xa, 0x36, 0x8a, 0x16, 0x64, 0xfd, 0x34, 0xa, 0x4b, 0x55, 0x8d, 0x15, 0x3d, 0xa, 0xf5, 0xc9, 0xca, 0x6b, 0x14, 0xc1, 0x54}, types.Tx{0x6a, 0xc, 0x37, 0x9f, 0xe8, 0x44, 0x87, 0xcd, 0xfb, 0x29, 0xe8, 0x20, 0xe5, 0x39, 0xcd, 0xf, 0xc8, 0xa9, 0x8c, 0x97, 0xd7, 0x74, 0x7d, 0x94, 0x37, 0xe8, 0xc9, 0x36, 0x53, 0xae, 0xb9, 0xe9, 0xca, 0xbe, 0xe6, 0xd8, 0x58, 0xd1, 0x12, 0x30, 0x9, 0x18, 0x8f, 0xe, 0x66, 0x62, 0x32, 0xb9, 0x50, 0x77, 0x32, 0x84, 0xe9, 0xb, 0xba, 0xce, 0x5, 0xb8, 0xe3, 0xce, 0x7b, 0xb5, 0x9c, 0xe8, 0x40, 0x64, 0x4c, 0x2d, 0xaa, 0x3a, 0x10, 0xb8, 0xad, 0xc0, 0xda, 0xf1, 0x2d, 0x8d, 0xdb, 0x2a, 0x95, 0xef, 0x65, 0x54, 0x1b, 0x5b, 0x50, 0xb3, 0x2b, 0xe6, 0x38}, types.Tx{0xb2, 0x25, 0x14, 0xcb, 0x8c, 0x35, 0x15, 0x26, 0xce, 0xd4, 0x14, 0xd1, 0x5, 0xfe, 0x24, 0x99, 0x1b, 0xc7, 0x59, 0x5c, 0x19, 0xc8, 0x3b, 0xc0, 0x1d, 0xfa, 0x51, 0xa4, 0x2b, 0x5d, 0xc0, 0x87, 0x29, 0xd7, 0xe8, 0xbc, 0xbf, 0x23, 0xe0, 0xab, 0x8d, 0x5a, 0xff, 0xf1, 0xa, 0x7a, 0x6, 0x92}, types.Tx{0x7f, 0xba, 0x37, 0x6c, 0x4, 0x65, 0x9, 0x26, 0xb5, 0x85, 0x9a, 0x7, 0x52, 0x7b, 0x56, 0xc1, 0x65, 0x8f, 0x26, 0xdf, 0x13, 0x12, 0x32, 0x17, 0xb8, 0x71, 0x87, 0xc6, 0x14, 0x3f, 0x8f, 0xa7, 0xdc, 0xdc, 0xd8, 0xcf, 0x73, 0x12, 0xba, 0x5b, 0xf, 0xa7, 0x68, 0xb0, 0xb6, 0xf6, 0x19, 0x52, 0x36, 0x83, 0x73, 0xe, 0xdb, 0x32, 0x68, 0xba, 0x99, 0x61, 0x6, 0x18, 0xb8, 0xb2, 0xe6, 0x9}, types.Tx{0xea, 0xb9, 0xda, 0x29, 0x96, 0x34, 0xe4, 0xc9, 0x75, 0xd, 0x7, 0xfd, 0xa9, 0x40, 0x12, 0x5e, 0xd7, 0xd4, 0xbb, 0xfd, 0x7e, 0x39, 0x91, 0xba, 0x7f, 0xe8, 0x41, 0x28, 0x9a, 0x7e, 0x85, 0x19, 0x52, 0xe, 0x1d, 0xe7, 0x73, 0xbd, 0x7a, 0x44, 0x65, 0xef, 0x63, 0xb8, 0x54, 0xf9, 0x90, 0x3d, 0x94, 0x47, 0xe4, 0xe, 0xa9, 0xdd, 0x68, 0x6d, 0x61, 0x49, 0x19, 0x23, 0x7b, 0xdc, 0x7b, 0xcc, 0xf0, 0x99, 0x1f, 0x86, 0x27, 0xfe, 0xde, 0xf6, 0x7a, 0xae, 0x9e, 0x69, 0xb, 0x32, 0x6f, 0xc7, 0xcc, 0x20, 0xb5, 0x79, 0x8d, 0x46, 0x5, 0x5, 0xfc, 0xcf, 0xc9}, types.Tx{0x4c, 0x6a, 0xdd, 0x73, 0x6d, 0xc1, 0x18, 0xe8, 0x63, 0x64, 0xe4, 0xa1, 0x82, 0xa1, 0x7d, 0x3b, 0xd7, 0x5b, 0x38, 0x15, 0x5b, 0xf8, 0x3e, 0x5d, 0x90, 0x15, 0x5d}, types.Tx{0x95, 0xd8, 0xb2, 0x17, 0xd1, 0x45, 0x67, 0xeb, 0xd3, 0x38, 0xdc, 0xab, 0x72, 0xc8, 0xc5, 0xdc, 0x82, 0x94, 0xf3, 0xe8, 0xce, 0x5a}, types.Tx{0x59, 0x9d, 0x99, 0xa1, 0xb9, 0xa7, 0x64, 0x44, 0xdc, 0x15, 0x0, 0xff, 0xd1, 0x3b, 0x1a, 0xb6, 0xf9, 0xf9, 0x24, 0x1a, 0xf9, 0x4d, 0x3b, 0x30, 0x4c, 0xe, 0x18, 0x31, 0xe, 0x73, 0xb, 0x29, 0x81, 0x97, 0x1d, 0x97, 0x66, 0x36, 0x10, 0xe4, 0x42, 0xa6, 0x69, 0x3e, 0xef, 0x19, 0xff, 0x23, 0xc3, 0x35, 0x7a, 0x63, 0x80, 0xed, 0x27, 0x60, 0x1c, 0x9a, 0xee, 0xa0, 0x6b, 0xa1, 0x28, 0x23, 0x7a, 0x9e, 0xa4, 0x82, 0x2b, 0xf, 0x50, 0xa0, 0x69, 0xba, 0x71, 0xbf, 0x62}, types.Tx{0x2c, 0x51, 0x7a, 0x76, 0x9a, 0x76, 0x53, 0x12, 0xa7, 0xc1, 0x66, 0x46, 0x92, 0x38, 0xf4, 0xec, 0xc4, 0xb1, 0xf1, 0x44, 0x27, 0x36, 0x4c, 0xaf, 0xaa, 0xe6, 0xa7, 0xd1, 0x33, 0x10, 0x55, 0x14, 0x27, 0x1e, 0x31, 0x1b, 0x6c, 0xfe, 0xbf, 0x82, 0xf4, 0x8f, 0xff, 0xe6, 0x33, 0xcc, 0xf8, 0x52, 0xd2, 0x4e, 0xd7, 0x3e, 0xe1, 0x96, 0xe7, 0xee, 0x8d, 0x85, 0x35, 0xaa, 0x63, 0x49, 0x53, 0xbf, 0xb4, 0x61, 0xcc, 0xe7, 0xbd}, types.Tx{0xcd, 0xe8, 0x4f, 0x8, 0x18, 0x38, 0x46, 0xcf, 0x30, 0x73, 0x46, 0xaf, 0xed, 0x56, 0xb6, 0x6e, 0xca, 0x86, 0x7a, 0xd6, 0xb1, 0xcf, 0x36, 0x5c, 0xf5, 0xf6, 0x58, 0x80, 0x51, 0xbb, 0x69, 0x6, 0xab, 0x6b, 0x4, 0x73, 0xb5, 0x78, 0xe6, 0x6e, 0x11, 0x3c, 0x4d, 0x54, 0xcb, 0x75, 0x21, 0xac, 0x6f, 0x8f, 0xf6, 0xcc}, types.Tx{0xdb, 0x85, 0x22, 0xc4, 0x9a, 0x70, 0xb0, 0x5b, 0xa2, 0xaf, 0x1d, 0x84, 0x96, 0x46, 0x1e, 0xdd, 0xd6, 0xd3, 0xac, 0x58, 0xc, 0x9c, 0x82, 0x90, 0xe6, 0x4b, 0x21, 0x93, 0x94, 0x8b, 0x2c, 0x6e, 0x56, 0x32, 0xa2, 0x6, 0xd2, 0xb9, 0xf5, 0x21, 0x56, 0x48, 0x1f, 0xae, 0xcc, 0x2, 0xdf, 0x50, 0x2c, 0xfb, 0x52, 0x1e, 0x5, 0x5e, 0x80, 0x2b, 0x82, 0x69, 0x83, 0xb7, 0x15, 0x85, 0x4a, 0x63, 0xe5, 0x30, 0xf1, 0x90, 0x67, 0x71, 0x42, 0xd9, 0xee, 0xd0, 0x9c, 0x21, 0x17, 0x99, 0x3c, 0xe8, 0xde}, types.Tx{0xd0, 0xb2, 0x74, 0xeb, 0x3d, 0x46, 0x69, 0x6d, 0xc5, 0x4c, 0x6d, 0x7b, 0x91, 0x37, 0xe2, 0xdc, 0xac, 0x1, 0x7c, 0xae, 0x69, 0x94, 0x65, 0x21, 0x55, 0x33, 0xac, 0xbe, 0x6, 0xbb, 0xe8, 0xf8, 0x71, 0xa, 0x44, 0x8, 0xf8, 0x8d, 0xfc, 0x73, 0x38, 0xf6, 0xe, 0xbc, 0x33, 0x6e, 0x7c, 0xd8, 0x4, 0x94, 0x65}, types.Tx{0x5, 0x6, 0x49, 0x28, 0x2, 0x5d, 0x81, 0xaa, 0xab, 0xf6, 0x67, 0x20, 0xbe, 0xc, 0xb5, 0x5a, 0xbb, 0x7e, 0x28, 0x32, 0x9, 0x6c, 0x46, 0x12, 0xb5, 0x4e, 0xef, 0x75, 0x5f, 0x7d, 0xd3, 0x56, 0x8c, 0xd0, 0x71, 0x1e, 0x15, 0x22, 0x5a, 0xd6, 0xc1, 0x44, 0xc1, 0xbe, 0xff, 0x54, 0x31, 0x47, 0x37, 0x7c, 0x19, 0x76, 0x10, 0x42, 0xad, 0x5c, 0x91, 0x96, 0x31, 0x76, 0x92, 0x56, 0xd8, 0xe1, 0x14, 0xaa, 0x77, 0x20, 0x33, 0x7e, 0xc8, 0xf2, 0xab, 0x52, 0x24, 0x7a, 0x2, 0x74, 0x5b, 0x34, 0xae, 0x8b, 0x76}, types.Tx{0x9c, 0x2e, 0x6e, 0x67, 0xa4, 0x79, 0xe, 0x90, 0x84, 0xfa, 0x7f, 0xc4, 0x3, 0x48, 0x63, 0x50, 0x1c, 0x16, 0xee, 0x92, 0x89, 0xd6}, types.Tx{0x2c, 0xc1, 0x2, 0x43, 0x4e, 0xfb, 0x10, 0x3f}, types.Tx{0xb3, 0x35, 0xc5, 0x68, 0x87, 0xf4, 0x92, 0x40, 0x22, 0x37, 0x2e, 0x46, 0xa5, 0x58, 0x31, 0x7d, 0x76, 0x4d, 0x36, 0xeb, 0x20, 0x76, 0x58, 0x3e, 0x9, 0x3e, 0x8f, 0xb9, 0x17, 0x64, 0x85, 0x9f, 0x7, 0x97, 0x33, 0xca, 0x22, 0xe8, 0x4e, 0x2f, 0x9d, 0x2c, 0xb4, 0x2c, 0xa4, 0x49, 0xb6, 0xf, 0xa4, 0x84, 0xbe, 0x14, 0xe4, 0x2d, 0xbc, 0xdd, 0xfb, 0xbb, 0x1d, 0x2a, 0x7f, 0x13, 0x85, 0x66, 0xfd, 0x9d, 0x85, 0xb8, 0xfe, 0x5d, 0xab, 0x97, 0x81, 0xb2, 0xb3, 0xb, 0x7d, 0xb2, 0xfb, 0xd8, 0x95, 0xb, 0x25, 0x0, 0xd9, 0x3d, 0xf5, 0xe3, 0x2b, 0x4, 0x9f, 0x93, 0x93, 0x30, 0x99}, types.Tx{0x81, 0xd2, 0x98, 0xcc, 0x78}, types.Tx{0x18, 0xcb, 0xfb, 0x55, 0x5b, 0xe9, 0xd5, 0xd1, 0xb6, 0x1b, 0x3a, 0x83, 0x83, 0xe8, 0x4e, 0xf1, 0x1f, 0xb9, 0xbf, 0x4e, 0x74, 0xfb, 0xeb, 0xaf, 0xd9, 0x89, 0xbf, 0x88, 0x4e, 0x8c, 0x3a, 0xea, 0x32, 0x70, 0x9b, 0x7, 0x4e, 0xe6, 0x4e, 0xb, 0xd9, 0x43, 0x21, 0x54, 0xb3, 0xb2, 0xd, 0x80, 0x6d, 0xa, 0x48, 0x75, 0x51, 0x4, 0x29, 0x3c, 0x85, 0x41, 0x7a, 0x5f, 0xfd, 0x45, 0xdf, 0x13, 0x24, 0xcd, 0xeb, 0x7c, 0x4d, 0x57, 0x24, 0x19, 0x52, 0x6f, 0xb4, 0x83, 0xd5, 0x44, 0x59}, types.Tx{0x4d, 0x5e, 0x50, 0xf3, 0xa9, 0xb7, 0x43, 0x46, 0xb6, 0x6f, 0x50, 0xbf, 0x52, 0xde, 0x86, 0x62, 0x8e, 0x8e, 0xe8, 0xf7, 0x3c, 0x96, 0x93, 0xe4, 0x7, 0x4c, 0xd1, 0xbe, 0x45, 0x5f, 0x89, 0xeb, 0x54, 0x5e, 0xa1, 0x2f, 0x49, 0x94}, types.Tx{0xf1, 0x28, 0x20, 0xd4, 0xd8, 0xf, 0xaa, 0x9a, 0x65, 0x83, 0x6c, 0x0, 0x6, 0xbd, 0x92, 0x4a, 0x38, 0x17, 0x4c, 0x26, 0x2d, 0x15, 0x68, 0x35, 0x58, 0x4c, 0xeb, 0x15, 0x8e, 0x91, 0x92, 0xb1, 0x84, 0x1, 0xec, 0xf7, 0x1d, 0x3, 0x8d, 0xbe, 0xa4, 0x97, 0xec, 0x7d, 0x9b, 0xae, 0x8d, 0x51, 0xd7, 0xfa, 0x50, 0x8a, 0x40, 0x31}, types.Tx{0xf4, 0x25, 0x9c, 0xaa, 0x75, 0x7f, 0xd0, 0xa2, 0x65, 0x3c, 0x45, 0x3, 0x8f, 0xf4, 0x86, 0x16, 0x73, 0x71, 0x34, 0x7a, 0xaa, 0x3b, 0xd3, 0x25, 0x12, 0xb9, 0xd1, 0xd4, 0x9f, 0xc6, 0xf6, 0xf3, 0x78, 0xbf, 0xc7, 0x6, 0x9f, 0x8e, 0x58, 0x89, 0xa, 0x36, 0xb5, 0x0, 0xf4, 0x4d, 0x53, 0x75, 0x6, 0x6, 0x62, 0xf0, 0xe4, 0xc1, 0x51}, types.Tx{0xc2, 0x97, 0x36, 0x4c, 0x24, 0x9f, 0x9c, 0x8c, 0xff, 0x43, 0x0, 0xa6, 0xde, 0x60, 0x33, 0x3d, 0xf3, 0x8a, 0x7e, 0xee, 0x21, 0xc1, 0xfd, 0xe6, 0xae, 0x90, 0x27, 0xe6, 0x6, 0x4c, 0x33, 0x10, 0x50, 0x79, 0x5f, 0x92, 0x88, 0x58, 0xaa, 0x61, 0x42, 0x6e, 0x54, 0x4d, 0x3a, 0x46, 0x21, 0xbc, 0xb, 0x9, 0x60, 0xed, 0xcd, 0xa1, 0xa0, 0x94, 0x54, 0x6c, 0xe8, 0x7f, 0x15, 0x6b, 0x0, 0xe2, 0x90, 0x22, 0x9d, 0x36, 0xc6, 0xb9, 0x90, 0x99, 0x76, 0xf5, 0xc8, 0xf2, 0x24, 0xe8, 0xfb, 0xc8, 0xd5, 0x9f, 0xa6, 0x96, 0x43, 0x7b, 0x3a}, types.Tx{0xe5, 0x7d, 0xbe, 0x6e, 0xa4, 0x77, 0xe1, 0x5d, 0x6b, 0xbc, 0x4b, 0x46, 0xa5, 0x62, 0xd6, 0x9d, 0xc4, 0xab, 0xfc, 0xb1, 0x5f, 0xd, 0x3f, 0xe2, 0xb, 0xbe, 0xff, 0x28, 0x9, 0xd2, 0x53, 0x59, 0x65, 0xcf, 0x78, 0xcb, 0xc0, 0x4e, 0x41, 0x43, 0xf9, 0x32, 0x44, 0xd6, 0x7a, 0x1b, 0x62, 0x79, 0xf8, 0x87, 0x28, 0xcc, 0xdc, 0xcd, 0x46, 0x50, 0x56, 0x7b, 0x9b, 0x63, 0xb2, 0x10, 0xfa, 0x62, 0x9c, 0xe2, 0x2, 0x36, 0xa, 0x5e, 0x90}, types.Tx{0x1f, 0xcf, 0x23, 0xd, 0x7c, 0xa0, 0x98}, types.Tx{0xcd, 0x97, 0x50, 0xc8, 0x13, 0x74, 0xab, 0x88, 0x13, 0xb5, 0x7c, 0x51, 0xf3, 0x36, 0x88, 0x9d, 0x79, 0x61, 0x10, 0x41, 0xb7, 0x39, 0xf0, 0xf4, 0x18, 0x88, 0x16, 0x1a, 0x67, 0xf9, 0x1, 0x8b, 0xf5, 0x7, 0xb5, 0x45, 0xd2, 0x8d, 0x34, 0xf0, 0x3b, 0xda, 0xe9, 0x9a, 0x14, 0xa6, 0x77, 0xd3, 0xc4, 0xa2, 0xc4}, types.Tx{0xb5, 0xfb, 0xcc, 0xfe, 0xb9, 0xb0, 0x80, 0x62, 0x70, 0x83, 0x45, 0x36, 0xc8, 0x6f, 0x96, 0x46, 0xb0, 0x80, 0xd5, 0xba, 0x67, 0xa, 0x29, 0x65, 0xbb, 0xed, 0xef, 0xce, 0x78, 0x76, 0x13, 0x77, 0x9f, 0xd6, 0x43, 0xf, 0xa9, 0xe7, 0xe7, 0xa2, 0x41, 0x7a, 0x70, 0xaa, 0x5f, 0x6d, 0x2c, 0x13, 0x8a, 0xf8, 0x0, 0x75, 0x3, 0x45, 0x8a, 0x7d, 0x40, 0x1e, 0xee, 0xbb, 0xca, 0x63, 0xc2, 0xc5, 0x4a, 0xe1, 0x5c, 0x7b, 0xd6, 0xd, 0x94, 0xc5, 0x8b, 0xe, 0xfe, 0x6f, 0x60, 0xb2}, types.Tx{0x21, 0xac, 0xf3, 0x5c, 0x89, 0xd6, 0x68, 0xcf, 0x96, 0xe0, 0xca, 0x3e, 0x1a, 0xa2, 0xf7, 0x7a, 0x5e, 0x9a, 0x39, 0x3b, 0x6a, 0x7c, 0x4f, 0x4d, 0x1f, 0x9d, 0xa4, 0x25, 0x95, 0x4f, 0x7f, 0xc0, 0x41, 0x92, 0xf9, 0xbc, 0x6c, 0xb3, 0xfe, 0xa2, 0xdb, 0x5b, 0x54, 0x27, 0x7a, 0x5f, 0xed, 0x47, 0x38, 0xf, 0x3b, 0xaa, 0xbf, 0x76, 0xd2, 0x7b, 0xd8, 0x86, 0x74, 0xae, 0xab, 0xe5, 0xa3, 0xbd, 0x3d, 0x3f, 0x26, 0xff, 0x15, 0xbb, 0x62, 0x24, 0x45}, types.Tx{0x11, 0xa, 0xf0, 0xaf, 0x64, 0x15, 0x1f, 0xff, 0x78, 0x3c, 0x9a, 0x8b, 0x26, 0x5d, 0xdd, 0xc5, 0x27, 0x14, 0x38, 0x89, 0x6, 0xbd, 0xab, 0x11, 0x40, 0xf2, 0xf4, 0x33, 0x1b, 0xd9, 0x2c, 0xf9, 0xd8, 0x2d, 0xdf, 0x67, 0x44, 0x44, 0x33, 0x41, 0x44, 0x79, 0xfe, 0x91}, types.Tx{0xa, 0x6d}, types.Tx{0xd4, 0x7c, 0xd0, 0x3e, 0xec, 0xef, 0x9, 0xa6, 0xb7, 0xfb, 0xf9, 0x8c, 0x5f, 0xf7, 0xa2, 0xf4, 0x92, 0x14, 0x4e, 0x7, 0x78, 0x92, 0xc8, 0xfa, 0x45, 0xf5, 0xa0, 0xa1, 0xbe, 0xff, 0x6c, 0xb0, 0x38, 0xa5, 0x3b, 0x6a, 0xeb, 0x94, 0xbe, 0xff, 0x3a, 0x6a, 0xe, 0xa7, 0x3b, 0xe7, 0xf, 0xf0}, types.Tx{0xd4, 0xaf, 0x4c, 0x2c, 0x14, 0x5, 0xf, 0x7f, 0x63, 0x56, 0x7c, 0xa8, 0x88, 0x69, 0x43, 0x9f, 0x1, 0xc1, 0x6d, 0x6b, 0x74, 0xde, 0x5b, 0xd8, 0xb, 0xb8, 0xe0, 0x9, 0x8e, 0xc5, 0xb3, 0x79, 0x1d, 0xe8, 0x3f, 0xd1, 0x74, 0xfe, 0xd6, 0x4f, 0x63, 0xe1, 0x98, 0xe5, 0xf0, 0x70}, types.Tx{0x46, 0xe3, 0x83, 0x86, 0x90, 0x28, 0x1a, 0x36, 0xe, 0x30, 0xba, 0x24, 0xca, 0x88, 0x1c, 0x48, 0xf1, 0xfb, 0x71, 0xed, 0x84, 0x40, 0xce, 0x52, 0x49, 0x2c, 0xe3, 0xe7, 0x13, 0x4b, 0x3f, 0x2d, 0x6, 0x47, 0xa9, 0x11, 0xf4, 0xc2, 0xb1, 0x17, 0x78, 0xeb}, types.Tx{0x6f, 0x98, 0xac, 0xd2, 0x53, 0xee, 0xc6, 0xb, 0x71, 0xa3, 0x87, 0x7b, 0xad, 0x1a, 0xd8, 0x20, 0x90, 0xb9, 0x77, 0x22, 0x9, 0x4d, 0x98, 0x4c, 0x34, 0x2, 0x58, 0x5c, 0x64, 0xac, 0xbc, 0xcd, 0x82, 0xfc, 0x45, 0x4e, 0xbc, 0xe8, 0x40, 0x72, 0x7d, 0xeb, 0xa9, 0x84, 0xd, 0xa, 0x32, 0x21, 0x85, 0xb8, 0xb4, 0x6, 0xa3, 0x59, 0x19, 0x56, 0x67, 0xeb, 0x8e, 0x4b, 0xb1, 0x7a, 0x3f, 0x77, 0x1, 0xce, 0xeb, 0xe7, 0x8c, 0x48, 0xae, 0x23, 0xa6, 0xba}, types.Tx{0x3e, 0xaf, 0x3c, 0x7d, 0xb1, 0x95, 0x6c, 0x7e, 0x3f, 0x9d, 0xe4, 0x8c, 0x6e, 0xb0, 0x25, 0xa5, 0xe, 0x7f, 0xa1, 0xb9, 0xa7, 0xcd, 0x8e, 0xa9, 0x9, 0x7e, 0x73, 0x73, 0xf9, 0xaf, 0x6c, 0xc8, 0x69, 0x12, 0x4e, 0xd6, 0xde, 0x68, 0x8c, 0x6a, 0x2}, types.Tx{0xbe, 0x16, 0xb4, 0xf7, 0x73, 0x64, 0x8b, 0xfe, 0xd2, 0xb, 0x6f, 0xfd, 0x7b, 0xe4, 0xb9, 0x66, 0xbe, 0xfd, 0x1d, 0x51, 0xb4, 0x3e, 0xe5, 0xef, 0x31, 0xd6, 0xad, 0xf0, 0xcd, 0x87, 0x16, 0x8, 0x20, 0x9f, 0x24, 0x1a, 0xc7, 0xaf, 0x8e, 0x16, 0x2, 0x9b, 0xbc, 0xca, 0x37, 0x7c, 0x27, 0x5a, 0x6b, 0x82, 0xcc, 0xec, 0xdb, 0x89, 0x77, 0xdd, 0x69, 0x3c, 0xff, 0x6c, 0x83, 0x4d, 0x3f, 0x95, 0xc, 0x3f, 0x8, 0x90, 0xd2, 0x30, 0x51, 0xa0, 0x51, 0x11, 0xdf, 0xdc, 0xf7, 0x60, 0xf1, 0x49, 0x22, 0xaf, 0xbb, 0x6, 0x6e, 0x80}, types.Tx{0xfb, 0x68, 0x14, 0x98, 0xaa, 0x70, 0x8b, 0x29, 0x44, 0xa5, 0x11, 0xb, 0x1f, 0xd8, 0x6e, 0xe6, 0x77, 0xb0, 0x37, 0x7d, 0x74, 0x13, 0xaf, 0x69, 0x9c, 0x12, 0x6e, 0xc2, 0x9b, 0xd2, 0x48, 0x3c, 0x55, 0xbe}, types.Tx{0xf4, 0x3a, 0x94, 0x97, 0xdc, 0x8c, 0xaa, 0x4f, 0x33, 0xdf, 0xdc, 0xe4, 0x15, 0xac, 0x7d, 0xf7, 0x67, 0xd5, 0xe6, 0xbb, 0xac, 0xa0, 0xbf, 0xff, 0x2b, 0xf9, 0xb2, 0xb2, 0x9c, 0xb4, 0xd5, 0xc1, 0x9a, 0xf1, 0x7e, 0x10, 0x92, 0xb5, 0x61, 0x21, 0x30, 0x4b, 0xd1, 0x5b, 0x17, 0x28, 0xf1, 0x1b, 0x7, 0x99, 0xd8, 0xd, 0xe4, 0x82, 0xd3, 0xe3, 0x44, 0x8d, 0x1e, 0xf, 0x67, 0x87, 0xce, 0xe2, 0xc3, 0x5f, 0x7b, 0xf, 0x58, 0x6e, 0x57, 0x7a, 0x6, 0xc9, 0x95, 0xc7, 0x5c, 0x6a, 0x86, 0x64, 0xaa}, types.Tx{0x59, 0x25, 0xdd, 0xaf, 0x84, 0x23, 0x19, 0xe3, 0x1f, 0xf9, 0xec, 0xed, 0xac, 0xb4, 0x44, 0x69, 0xa8, 0x75, 0x9, 0x9f, 0x15, 0xcc, 0x31, 0x6, 0x87, 0x8a, 0x18, 0x6a, 0x87, 0x8f, 0xc0, 0x28, 0x62, 0x22, 0x12, 0x60, 0x30, 0x52, 0x5f, 0xa8, 0x8e, 0x3f, 0xb6, 0xa5, 0x84, 0xaf, 0x89, 0xdd, 0x2d, 0xf, 0xea, 0xa5, 0x49, 0x43, 0xb2, 0x35, 0xc9, 0xd4, 0xaa, 0xe3, 0x26, 0xa1, 0x2c, 0x8, 0x17, 0x25, 0xa8, 0x6c, 0xae, 0xa9, 0xfa, 0x7e, 0x94, 0xdb, 0x73, 0x85, 0x90, 0xc2, 0x4c, 0x55, 0x84, 0x4d, 0x4e, 0x7e, 0xf7, 0xa8, 0x29, 0x78, 0x6b, 0x24, 0x9f, 0x7, 0x15, 0x7b, 0xc0, 0x5a, 0xc4}, types.Tx{0x65, 0xfd, 0x40, 0x41, 0x62, 0xff, 0x51, 0x21, 0x82, 0xd3, 0x5, 0x6a, 0xb5, 0x81, 0x9c, 0xc9, 0x3b, 0xc9}, types.Tx{0xa3, 0xb2, 0x55, 0x24, 0xb, 0x13, 0x3c, 0x83, 0x1e, 0x98, 0x1e, 0x98, 0x3b, 0x99, 0x5f, 0x58, 0x92, 0x77, 0x6a, 0x4d, 0xdb, 0x1d, 0x1b, 0xcf, 0x78, 0x9c, 0x56, 0x53, 0x64, 0x3, 0xa3, 0xc5, 0xeb, 0x60, 0xbd, 0xf0, 0x2, 0x5, 0xc4, 0x21, 0x8, 0xe5, 0x5c}, types.Tx{0x30, 0x9c, 0x52, 0x32, 0x79, 0xb6, 0x52, 0xaf, 0x3c, 0x8, 0x4a, 0xfe, 0xce, 0xc1, 0xe1, 0x8c, 0x1c, 0xdd, 0xaa, 0xf6, 0x1a, 0x41, 0x9c, 0xf3, 0x17, 0xe4, 0xa2, 0xfb, 0x50, 0x7e, 0xb0, 0x8e, 0xae, 0x21, 0x19, 0x58, 0xe1, 0x4c, 0x1e, 0x72, 0xbf, 0x15, 0x1, 0x4e, 0x15, 0xea, 0x38, 0x73, 0x81, 0x11, 0x77, 0x4c, 0xd, 0x8, 0xf2, 0x51, 0xc6, 0x90, 0xea, 0x83, 0x8f, 0x32, 0xb7, 0x8f, 0xfb, 0x7d, 0xfa, 0x30, 0xf3, 0x6a, 0x75, 0x65, 0xed, 0x93}, types.Tx{0xaf, 0x4b, 0x45, 0x5f, 0x75, 0x78, 0xbc, 0xc6, 0xca, 0x33, 0x6f, 0x6, 0x91, 0x87, 0x9d, 0xdc, 0x1c, 0xb3, 0x85, 0x63, 0x8d, 0x9d, 0x49, 0xd2, 0x23, 0x6b, 0x7a, 0x67, 0xc8, 0xa1}, types.Tx{0xa0, 0x79, 0xef, 0x17, 0xc4, 0x14, 0xd4, 0xd7, 0xd, 0xb8, 0xa2, 0x84, 0xfb, 0xdb, 0x29, 0x74, 0x87, 0x79, 0x3a, 0x82, 0x26, 0xb9, 0x6a, 0xbe, 0x53, 0xaa, 0x9c, 0xcc, 0x1b, 0x48, 0x96, 0xbf, 0x6b, 0xf0, 0x5c, 0xb3, 0xb3, 0xdf, 0xcf, 0xfc, 0x64, 0xe7, 0x5}, types.Tx{0xab, 0x94, 0xe3, 0x92, 0x2, 0xa0, 0x5a, 0x61, 0xa2, 0x90, 0x2e, 0x51, 0x72, 0x30, 0x1e, 0x2e, 0x58, 0x8, 0xa8, 0x76, 0x25, 0x85, 0x1a, 0xc9, 0xc0, 0x68, 0xe4, 0xd8, 0xd7, 0x8b, 0xa7, 0xa, 0xc3, 0xd7, 0x7a, 0x30, 0x49, 0x3c, 0x2d, 0x1a, 0xb0, 0x67, 0x18, 0xa8, 0x71, 0x78, 0x7c, 0xaf, 0xea, 0x1d, 0xb, 0x94, 0x7e, 0x46, 0xdf, 0x19, 0x4f, 0x67, 0x5d, 0x36, 0x12, 0xc1, 0x2c, 0xb5, 0x57, 0x8b, 0x1a, 0x36, 0xd8, 0xaf, 0xc, 0x20, 0x80, 0x46, 0xb0}, types.Tx{0x27, 0xd1, 0x44, 0x73}, types.Tx{0x39, 0x10, 0xff, 0x61, 0x66, 0x6a, 0xc1, 0x2a, 0xe1, 0x13, 0xd, 0x7, 0xea, 0x21, 0x45, 0xf7, 0xa9, 0x34, 0xa, 0x63, 0x8d, 0x99, 0x7c, 0xc9, 0x1d, 0x2c, 0xaa, 0xec, 0x62, 0x14, 0x1d, 0xa4, 0x92, 0xeb, 0xa9, 0x2b, 0x9a, 0xa0, 0x69, 0x8e, 0x17, 0x55, 0x21, 0x41, 0x3a, 0x3c, 0x3d, 0x59, 0x18, 0x58, 0x62, 0x3f, 0xc4, 0xa5, 0xa2, 0x21, 0xb8, 0x89, 0xe8, 0x51, 0x3, 0xf2, 0x47, 0xf7, 0x2b, 0x7d, 0x10, 0x6d, 0xe2, 0xce, 0x1e, 0x3f, 0x98, 0x88, 0xf3, 0x37, 0x13, 0x4a, 0x43, 0x63, 0x6f, 0x7d, 0x22, 0x6c}, types.Tx{0x1f, 0x1, 0x94, 0x99, 0x3a, 0xaf, 0xbc, 0xa3, 0x8b, 0x84, 0x20, 0x1c, 0xa, 0xfa, 0xfe, 0x83, 0xb3, 0x81, 0xaa, 0x39, 0x66, 0x64, 0x3d, 0xf3, 0x38, 0xe3, 0xad, 0x46, 0x57, 0xbd, 0xe7, 0x8a, 0x47, 0x7d, 0x1a, 0x4f, 0x8f, 0x22, 0x53, 0x64, 0xa9, 0xf0, 0xdd, 0x48, 0x19, 0xb7, 0x38, 0x68, 0x8d, 0x44}, types.Tx{0xd8, 0x5f, 0xc2, 0xda, 0x53, 0xec, 0x4b, 0xb3, 0xf8, 0x16, 0xd5}, types.Tx{0x9a, 0x8c, 0xd, 0x43, 0x8f}, types.Tx{0xcf, 0x9c, 0x7a, 0xf, 0xbe, 0xb0, 0x15}, types.Tx{0x5b, 0x2a, 0xf4, 0x7f, 0xe8, 0xf, 0x43, 0xe8, 0xaa, 0x9d, 0xc9, 0xa7, 0x9e, 0x8f, 0xa5, 0x63, 0x49, 0xd8, 0x55, 0xa3, 0x81, 0xca, 0xc8, 0x63, 0x79, 0x9a, 0x82}, types.Tx{0xff, 0x89, 0xd1, 0xa4, 0x49, 0xf4, 0xfe, 0xbd, 0xa2, 0x22, 0x5b, 0x2, 0x58, 0xad, 0x14, 0x12, 0x51, 0x41, 0x13, 0x4e, 0xe5, 0xf6, 0xb4, 0xe4, 0x1f, 0x9a, 0x1b, 0xe, 0x2f, 0x68, 0x2c, 0x73, 0x63, 0xff, 0x89}, types.Tx{0x8c, 0x1e, 0x5d, 0xf7, 0xf0, 0x36, 0x36, 0x9a, 0x3b, 0xb3, 0xc5, 0xe6, 0x7d, 0x74, 0xed, 0x8c, 0x42, 0x37, 0xc1, 0x8, 0xe7, 0x93, 0x79, 0xd2, 0x67, 0xd9, 0xfb, 0x2b, 0xcd, 0xb8, 0xa5, 0x69, 0x9f}, types.Tx{0x68}, types.Tx{0x1e, 0xb1, 0x9f, 0x5a, 0x6f, 0xff, 0x5a, 0xd9, 0xc2, 0x23, 0x1d, 0xb4, 0xff, 0x78, 0x36, 0xe1, 0x4b, 0xa8, 0x4b, 0xe1, 0x66, 0x8c, 0xf9, 0x74, 0x98, 0xb1, 0xd2, 0x72, 0x67, 0x79, 0xdb, 0xb6, 0xcc, 0x27, 0xcc, 0xa0, 0x6a, 0xd4, 0x7d, 0xb1, 0xaa, 0x35, 0xb2, 0x25, 0x45, 0x5e, 0x8d, 0x9f, 0xbf, 0xfb, 0xb0}, types.Tx{0x95, 0xe6, 0x32, 0x9f, 0xda, 0xa1, 0xf2, 0xe3, 0x68, 0x30, 0xb9, 0xd8, 0x81, 0xc1, 0xb7, 0x88, 0xd6, 0x8e, 0x5a, 0xab, 0x4f, 0x1d, 0xef, 0xd9, 0xdc, 0x69, 0x6a, 0x3f, 0xfd, 0x7e, 0x6f, 0x26, 0xda, 0x13, 0x86, 0x41, 0xaa, 0x85, 0xa8, 0xae, 0x2f, 0xc1, 0x1, 0xb0, 0xf4, 0x85, 0x80, 0x71, 0x97, 0x93, 0xf5, 0xdc, 0x3a, 0xcf, 0xea, 0x71, 0xff, 0xa9, 0x34, 0x36, 0x6f, 0x5, 0x14, 0xe0, 0x13, 0x9f, 0x6, 0xf3, 0x83, 0xee, 0x6c, 0x7, 0x20, 0xd0, 0xe1, 0x64, 0xf9, 0xb0, 0xa8, 0x37, 0xab, 0x7a, 0xcd, 0xa1, 0x3e, 0x34, 0x4, 0x3c, 0x93, 0x0, 0x57, 0xe4, 0x3b}, types.Tx{0x56, 0xed, 0xa7, 0x16, 0xdf, 0x6f, 0xe, 0x89, 0x8d, 0x28, 0xf6, 0x21, 0x54}, types.Tx{0x2d, 0x2e, 0xc7, 0x14, 0x1e, 0x28, 0x53, 0xd9, 0xd, 0xed, 0xa1, 0x49, 0xf5, 0xc8, 0x48, 0x2a, 0x57, 0x4, 0x9c, 0x2f, 0x6f, 0x76, 0x3, 0xc4, 0xad, 0x71, 0xb3, 0x2, 0xf, 0x65, 0x43, 0xcb, 0x9f}, types.Tx{0xed, 0x6c, 0x42, 0xb3, 0xb9}, types.Tx{0xa5, 0x73, 0x4e, 0xe9, 0x9d, 0x8c, 0x5e, 0x39, 0x26, 0xac, 0xff, 0x1d, 0x80, 0x7f, 0xf3, 0xdc, 0x72, 0x3b, 0xe7, 0x18, 0xcd, 0x65, 0x5f, 0x74, 0x5d, 0xc2, 0xc9, 0x35, 0x39, 0xb1, 0xcd, 0x75, 0x58, 0x9f, 0x23, 0xf4, 0x1d, 0x84, 0x7d, 0x3c, 0xee, 0x54, 0xde, 0x36, 0x88, 0x94, 0x7c, 0xd3, 0x65, 0x41, 0x7e, 0x5f, 0x2b, 0x61, 0xe6, 0xc3, 0x17, 0xdb, 0xda, 0xe8, 0xa1, 0xbe, 0x2b, 0x17, 0x2b, 0x25, 0x63, 0x45, 0xea, 0x2f, 0xb9, 0x3e, 0x9e, 0x1a, 0x71, 0x3a, 0x2c, 0xf7, 0x44, 0x33, 0xcf, 0x34}, types.Tx{0x1f, 0xed, 0xbf, 0x8, 0xa, 0x61, 0xb3, 0xca, 0xfc, 0x17, 0x85, 0xce, 0x8a, 0xa5, 0x93, 0x9a, 0x2d, 0x41, 0xb, 0x40, 0xde, 0x21, 0xca, 0x83, 0xc4, 0x19, 0xaf, 0xfb, 0x45, 0x40, 0xfe, 0xe9, 0xcb, 0xd8, 0x75, 0xda, 0xad, 0x25, 0x91, 0xdb, 0xa1, 0x97, 0xe6, 0x71, 0xaf, 0x1f, 0x3b, 0xf6, 0x34, 0xb2, 0xc, 0xa, 0xc1, 0x8b, 0x1e, 0x13, 0x28, 0xba, 0xa2, 0x34, 0x7, 0x4c, 0x55, 0x6a, 0x60, 0x3a, 0x0, 0xe1, 0x5, 0x45, 0xf0, 0x39, 0xfd, 0x4c, 0xaf, 0x33, 0x1c, 0xe3, 0xef, 0x91, 0x46, 0x97, 0xd5, 0x3a, 0x25, 0x79, 0x76, 0xe}, types.Tx{0x1c}, types.Tx{0xf6, 0x70, 0xde, 0xa7, 0x22, 0x19, 0x55, 0x66, 0xb7, 0xd7, 0x9d, 0x77, 0xbf, 0x97, 0xfc, 0x2c, 0x86, 0x46, 0xbc, 0x66, 0xa9, 0x69, 0x42, 0x8b, 0x1c, 0xe6, 0x8c, 0x2f, 0x49, 0x48, 0xe, 0xfd, 0x2c, 0x65, 0x36, 0x23, 0x7c, 0x3e, 0x18, 0x79, 0x15, 0x4c, 0x41, 0xf4, 0x88, 0x64, 0x32, 0x20, 0x44, 0x62, 0x1c, 0x18, 0x9a, 0xcf, 0x58, 0x72, 0xbb, 0xfa, 0xf3, 0xcd, 0xc4, 0xc8, 0x13, 0xc4, 0xb, 0xa2, 0xf2, 0x63, 0x2a, 0xb6, 0x90, 0x15, 0xbb, 0x57, 0x4a, 0x24, 0xc9, 0x8a, 0x48, 0xb3, 0x18, 0xa2, 0xb2, 0x42, 0xd8, 0x45, 0x18, 0x1f, 0x33, 0xcb, 0x10, 0x61, 0x2b, 0x72}, types.Tx{0x8f, 0x7c, 0x67, 0x99, 0xd0, 0x75, 0x22, 0xaf, 0xe8, 0xac, 0x43, 0xdc, 0xef, 0x7f, 0x5f, 0xda, 0xf4, 0xc1, 0x6e, 0x88, 0x11, 0x0, 0x60, 0x2e, 0x21, 0x21, 0xb8, 0xc, 0xaf, 0x67, 0x7a, 0x17, 0x1, 0xb, 0xdb, 0x34, 0x1d, 0xc5, 0xc8, 0x4c, 0x28, 0x6c, 0x81, 0x40}, types.Tx{0x23, 0x63, 0x63, 0x24, 0x1c, 0x0, 0x52, 0xd7, 0x65, 0x5, 0x26, 0x10, 0x4d, 0xf9, 0x9d, 0x78, 0x78, 0x82, 0xa9, 0xc8, 0x39, 0xe7, 0xfc, 0x98, 0x3c, 0x3b, 0x47, 0x64, 0x10, 0xf1, 0xb2, 0x75}, types.Tx{0xe0, 0x75, 0x9f, 0xb7, 0xeb, 0x80, 0xfe, 0x73, 0x1f, 0x15, 0x96, 0x3d, 0xbc, 0xcc, 0x22, 0xa5, 0xa1, 0xd0, 0x89, 0x79, 0x3a, 0x48, 0x6b, 0xce, 0x8, 0xf, 0x39, 0x8c, 0x23, 0x9e, 0xe5, 0xa7, 0xa0, 0xb7, 0x29, 0x99, 0xc3, 0x76, 0x9b, 0x6e, 0xd, 0xcc, 0x4d, 0xbe, 0xeb, 0xd7}, types.Tx{0x8a, 0x28, 0x6, 0x80, 0x6e, 0xb0, 0xd, 0x20, 0x4c, 0xfd, 0x63, 0x58, 0x95, 0x59, 0x9, 0x7c, 0x61, 0xb0, 0x40, 0xd2, 0x2b, 0x7f, 0xc4, 0x78, 0x27, 0xbd, 0xd5, 0xe6, 0xf7, 0x9f, 0x0, 0x14, 0x19, 0x54, 0xab, 0x8d, 0x71, 0x0, 0xe5, 0x41, 0xfa, 0x8b, 0x2e, 0x7b, 0x25, 0x5a, 0xef, 0xd5, 0x63, 0xf0, 0x69, 0xe8, 0x68, 0x60, 0x6d, 0xaf, 0x63, 0xbd, 0x87, 0xab, 0xc2, 0x28, 0xeb, 0xc9, 0x60, 0xbf, 0xd, 0xcf, 0x17, 0xe9, 0xdb, 0x22, 0xc2, 0x39, 0x86, 0x81, 0xc1, 0xd6, 0xe6, 0xb7}, types.Tx{0x95, 0x61, 0x39, 0xe3, 0xce, 0x33, 0x77, 0x21, 0x3, 0x61, 0x5c, 0x74, 0x64, 0xb, 0xa1, 0xe4, 0x37, 0x15, 0x88, 0x8c, 0x7d, 0x88, 0x12, 0x24, 0x65, 0x19, 0x29, 0xb8, 0x55, 0x91, 0x36, 0x3a, 0x10, 0xfc, 0xad, 0xcd, 0xe3, 0x7f, 0xcf, 0xc0, 0x9d, 0xec, 0xfb, 0x85, 0x15, 0xaf, 0x57, 0x6b, 0x81, 0xb1, 0x88, 0x69, 0xfc, 0x6d, 0x66, 0x10, 0x25, 0xd1, 0x3a, 0xbe, 0x45, 0xed, 0xbe, 0x66, 0x8b, 0x7e, 0xe5, 0xdf, 0x95, 0x5b, 0xeb, 0x29, 0x67, 0xa5, 0xf7, 0xc4, 0xf9, 0x9f, 0xe0, 0x58, 0x0, 0x84, 0xe1, 0xe, 0x24, 0x75, 0xc3, 0xb0, 0xe4, 0x92, 0x6c, 0xb2, 0xba, 0xd4, 0xd7, 0xb1, 0x7e, 0x88}, types.Tx{0xee, 0x66, 0x8f, 0x38, 0x6b, 0x1c, 0x4c, 0xa1, 0x6b, 0xce, 0x62, 0xa9, 0xcf, 0x1d, 0xfb, 0xb, 0x2e, 0x56, 0x11, 0x1f, 0xb5, 0xd8, 0xcc, 0x61, 0xd0, 0x93, 0x4a, 0xca, 0xe8, 0x84, 0x1f, 0x5e, 0x5a, 0xcf, 0x28, 0xec, 0xc2, 0x3b, 0xd6, 0x3d, 0x4b, 0x64, 0xda, 0x50}, types.Tx{0x79, 0xba, 0x41, 0x38, 0x3a, 0xed, 0xbb, 0xc7}, types.Tx{0xf6, 0xfa, 0xa9, 0xa5, 0x15, 0xe9, 0x9d, 0xc0}, types.Tx{0xe5, 0x7a, 0x9b, 0x9e, 0x21, 0xed, 0x78, 0xdf, 0xda, 0xf8, 0x74, 0x42, 0x32, 0x61, 0xa0, 0x5b, 0x88, 0x1f, 0x4d, 0xf4, 0x7f, 0x66, 0xc5, 0x85, 0x95, 0xa5, 0xd4, 0x7e, 0xae, 0x6d, 0x98, 0x8b, 0x2f, 0xed, 0x19, 0x42, 0x6b, 0x70, 0xa4, 0x36, 0x97, 0x78, 0x23, 0x66, 0x93, 0xba, 0x1b, 0x5e, 0x2b, 0x39, 0x2, 0x4c, 0xd9, 0x16, 0x9c, 0x77, 0x54, 0x0, 0x1, 0x3b, 0x90, 0xdd, 0xe7, 0xe8, 0x31, 0x75, 0xe7, 0x93, 0x8a, 0x46, 0xab, 0xe, 0xd2, 0x8e, 0xae, 0xa7, 0x96, 0xcd}, types.Tx{0x62, 0x7d, 0xe0, 0x31, 0xcf, 0x24, 0x8, 0x65, 0xc3, 0xd2, 0xe4, 0x60, 0x4, 0x9, 0x52, 0x3b, 0x63, 0x9d, 0xb3, 0xb9, 0x7d, 0x2e, 0xd0, 0x26, 0x44, 0xb9, 0x2b, 0xb2, 0x32, 0x12, 0x7f, 0xbf, 0x84}, types.Tx{0xf6, 0x4f, 0xde, 0xa2, 0xb7, 0x39, 0x56, 0xd0, 0x5e, 0x78, 0xcc, 0xa1, 0xd8, 0x79, 0x9e, 0xb5, 0x4d, 0x6, 0x1c, 0x89, 0x9b, 0x6b, 0x75, 0x4c, 0xe9, 0x29, 0xaa, 0x9, 0xa2, 0x3e, 0xa6, 0x84, 0x69, 0x37, 0xfd, 0x2f, 0x2b, 0xfe, 0xab, 0x3f, 0xf7, 0x64, 0xbd, 0xe, 0x67, 0x5f, 0x30, 0xca, 0xfc, 0x9a, 0xc6, 0xe3, 0x5b, 0x87, 0xb1, 0xf5, 0x64, 0x3e, 0x70, 0x97, 0xc7, 0xf4, 0xaf, 0x35, 0x5e, 0x79, 0x82, 0xc2, 0xfa, 0x77, 0x5f, 0xa1, 0x12, 0xc1, 0xf6, 0x40, 0xa9, 0x7b, 0x19, 0x6c}, types.Tx{0x11, 0x9a, 0xd0, 0x60, 0x69, 0x94, 0xfb, 0x3f, 0x2a, 0x42, 0xf0, 0x9e, 0xb3, 0x3e, 0x8e, 0x1f, 0xd6, 0xbe, 0x3d, 0x72, 0x5e, 0x88, 0x80, 0x66, 0x86, 0x94, 0xfd, 0x87, 0xc1, 0x86, 0x2e, 0xfb, 0x16, 0x7, 0x44, 0xdc, 0x98, 0x98, 0x94, 0x49, 0x1e, 0x32, 0x30, 0x85, 0xf7, 0x70, 0xa1, 0x33, 0x66, 0x69, 0x6, 0xb4, 0xe8, 0xc7, 0x79, 0xf6, 0x1e, 0x3e, 0x7d, 0xe1, 0xe7, 0x5b, 0x77, 0x36}, types.Tx{0x3, 0xe5, 0x80, 0x16, 0x15, 0x20, 0x9a, 0xfa, 0x4d, 0xfd, 0x37, 0x68, 0xd2, 0x3c, 0x58, 0x84, 0x8, 0xd}, types.Tx{0xd, 0x27, 0xad}, types.Tx{0x75, 0x6f, 0xf4, 0xbb, 0xa3, 0x4, 0xe0, 0x72, 0x1, 0x4, 0x21, 0xbc, 0x4a, 0xf1, 0x82, 0x7d, 0xc6, 0xb1, 0x5c, 0xae, 0xdd, 0x7f, 0x65, 0xec, 0x1e, 0xf, 0x48, 0xe8, 0xf, 0x0, 0x7b, 0x42, 0xfb, 0x5, 0xba, 0x71, 0x46, 0xd8, 0x81, 0x6, 0x58, 0x46, 0x31, 0xeb, 0x48, 0x7c, 0x7d, 0xe4, 0x35, 0xaa, 0xdd, 0xde, 0xfe, 0x88, 0xc, 0xb5, 0x7a, 0xd5, 0x49, 0xd4, 0x6c, 0x77, 0xbf, 0x8, 0xbd, 0xa7, 0xef, 0x83, 0x9a, 0xf9, 0x18, 0xdd, 0xb6, 0xe5, 0x27, 0xe9, 0x3, 0xeb, 0x37, 0x95, 0xf2, 0x53, 0xa8, 0x80, 0x3c, 0x18, 0x33, 0xdf, 0xed}, types.Tx{0x34, 0x16, 0xfd, 0xe7, 0x6c, 0xef, 0xc5, 0xbd, 0xf1, 0x5, 0x90, 0xde, 0x59, 0x3b, 0x57, 0x2e, 0x7e, 0xaf, 0x21, 0x32, 0x43, 0xc5, 0x13, 0x26, 0xe7, 0x30, 0xb1, 0x92, 0xcf, 0x9a, 0xd9, 0xb2, 0xc, 0x2a, 0x2, 0x44, 0xf6, 0xf1, 0xed, 0xaa, 0xa, 0xb9, 0x9, 0xa0, 0x4c, 0xbb, 0xa1, 0xda, 0xdc, 0x80, 0xc5, 0x74, 0x57, 0xf8, 0xd, 0xb6, 0xdd, 0xc4, 0x19, 0xad, 0xe4, 0xf9, 0xef, 0x4b, 0xc3, 0xe6, 0xb, 0x45, 0xc0, 0x2b, 0xd4, 0x59, 0x24, 0x8c, 0x2b, 0x8e, 0xef, 0x57, 0x73, 0x74, 0xeb, 0xf2, 0xb3, 0x7c, 0x5d, 0xe4, 0x55, 0x82, 0x32, 0xd8, 0x4f, 0x68, 0xb5, 0xb8, 0x7e}, types.Tx{0xbf, 0x1f, 0x24, 0x7b, 0x40, 0xbe, 0x6e, 0x99, 0x9d, 0x4d, 0x12, 0xad, 0xe7, 0x95, 0x54, 0x6c, 0xea, 0xe0, 0x52, 0xcc, 0xc4, 0x6b, 0x62, 0x4f, 0xb3, 0x25, 0x32, 0x50, 0x9a, 0x3e, 0x7d, 0x7, 0x78, 0xb3, 0xf3, 0x8f, 0x25, 0xfb, 0x1b, 0xea, 0x74, 0xa, 0xf1, 0x9f, 0xd1, 0x87, 0xab, 0x69, 0x50, 0x9e, 0x66, 0xbe, 0x9d, 0xd9, 0x9a, 0x33, 0x4b, 0xad, 0x39, 0xb4, 0x58, 0xb8, 0xac, 0xdd, 0x21, 0xfa, 0x84, 0x42, 0x6c, 0x8e, 0x86, 0x3a, 0xad, 0x49}, types.Tx{0xc8, 0x3b, 0x44, 0xfc, 0xd6, 0xf7, 0x18, 0xd5, 0x79, 0xf1, 0x8a, 0x9b, 0xf7, 0x8b, 0x66, 0xea, 0xfb, 0x2d, 0x9d, 0xcc, 0x6, 0x18, 0x2e, 0x5e, 0xd8, 0xe4, 0xb0, 0x2a, 0x38, 0xe7, 0xc6, 0x52, 0xe6, 0x56, 0x8d, 0x29, 0x9a, 0x66, 0x85, 0x4b, 0xac, 0xf7, 0x9a, 0x91, 0xdd, 0x16, 0x2b, 0xc1, 0xe8, 0xff, 0x17, 0x75, 0x11, 0xc3, 0x95, 0xac, 0xf3, 0x8, 0xa1, 0xb4, 0xf4, 0xa0, 0xe4, 0x7, 0xe8, 0xfc, 0x1, 0x3c, 0x4c, 0x22, 0x62, 0xe2, 0x60, 0xa2, 0x87, 0xbf, 0x91, 0x9f, 0x3b, 0x40, 0xb1, 0x92, 0x90, 0x1a, 0xc6, 0x88, 0x62, 0x6a, 0xe5, 0x62, 0xb, 0x7e, 0xbf, 0xe2, 0x7, 0x45}, types.Tx{0x13, 0x32, 0x54, 0xf4, 0xd7, 0xb5, 0x7e, 0xcb, 0x18, 0xe7, 0xb, 0x1d, 0xcc, 0x2a}, types.Tx{0xa2, 0xf9, 0x67, 0x36, 0x24, 0xd, 0x38, 0xbd, 0xa2, 0xec, 0x85, 0x4e, 0x7a, 0x8f, 0x71, 0x87, 0xae, 0x30, 0xdf, 0x2a, 0x14, 0xbc, 0x82, 0xe8, 0x4d, 0xf0, 0x3c, 0x11, 0x78, 0xdc, 0xe0, 0x18, 0xfb, 0x92, 0xa4, 0x83, 0x44, 0xdf, 0x3f, 0x74, 0x62, 0x3, 0xa1, 0xa9, 0xa, 0x56, 0x0, 0x53, 0xdd, 0x5e, 0xda, 0xb, 0xd1, 0xc0, 0xf5, 0x61, 0x6a, 0xb6, 0x56, 0xcd, 0xba, 0xb8, 0x49, 0x94, 0x12, 0xc7, 0xd5, 0x41, 0x58, 0x4f, 0xa1, 0xdc, 0x66, 0x39, 0x45, 0x59, 0xf3, 0x19, 0xe4, 0x6e, 0xed, 0x94, 0x29, 0x3e, 0xa6, 0x54, 0x13, 0x48}, types.Tx{0xd9, 0x10, 0xa, 0xe8, 0xf2, 0x87, 0x55, 0x48, 0x7a, 0x57, 0xb6, 0xed, 0xcd, 0x95, 0x7b, 0xbc, 0xa9, 0xdb, 0xb5, 0xf0, 0xa2, 0x57, 0xc1, 0x7c, 0xe, 0xae, 0xfc, 0x42, 0x57, 0x27, 0x67, 0x62, 0xea, 0x3, 0xd9, 0xf4, 0x54, 0xb9, 0xa6, 0x31, 0xfe, 0x5c, 0x7e, 0x9, 0x6a, 0x77, 0x63, 0x31, 0x32, 0x28, 0x5e, 0xe8, 0xb1, 0xae, 0x3c, 0xec, 0xbb, 0x3, 0x9a, 0x37, 0xd0, 0xa0, 0xd5, 0xbc}, types.Tx{0x3a, 0x78, 0x94, 0x54, 0xf2, 0x91, 0x5e, 0x4d, 0xa3, 0x6d, 0x92, 0xa2, 0xfc, 0x7c, 0x54, 0x90, 0x62, 0xb9, 0x57, 0xd5, 0x12, 0x2, 0x7c, 0x40, 0xa4, 0x79, 0xc7, 0x2e, 0x75, 0xaa, 0x38, 0x8e, 0xec, 0xed, 0xbd, 0x12, 0x76, 0xe, 0x28, 0x2e, 0x7b, 0x17, 0xae, 0xbb, 0xbc, 0xff, 0x4d, 0x36, 0x97, 0xd9, 0x16, 0x9d, 0xaa, 0xc6, 0xcd, 0x7, 0x27, 0xc4, 0x6a, 0x4d, 0x7f, 0xc0, 0xe5, 0x97, 0xad, 0x5d}, types.Tx{0x9f, 0xf1, 0x8a, 0x32, 0xfd, 0x76, 0x23, 0x87, 0x9d, 0xa5, 0x93, 0xc0, 0xcc, 0x7d, 0xa2, 0x39, 0xc0, 0x2b, 0x56}, types.Tx{0x9f, 0x64, 0x3, 0xbe, 0xd0, 0x2b, 0xca, 0x71, 0x2a, 0x66, 0x29, 0x19, 0x44, 0xb5, 0x40, 0x68, 0xac, 0x53, 0xee, 0x3e, 0x65, 0xdc, 0x52, 0xb3, 0x4e, 0x64, 0x1f, 0x21, 0xf2, 0x72, 0xe, 0xe6, 0xa0, 0x21, 0x99, 0x38, 0xf7, 0xfe, 0x53, 0xf8, 0xeb, 0x47, 0xc4, 0x26, 0xb5, 0x21, 0xfa, 0x88, 0x2c, 0x1d, 0xa1, 0x4d, 0xfd, 0x95, 0xda, 0x2d, 0xb4, 0x6d, 0x76, 0x8f, 0x91, 0x77, 0x53, 0x1c, 0x5a, 0x61, 0xf7, 0xd1, 0x6a, 0x66, 0xdd, 0x77, 0xf3, 0x8d, 0x2b, 0x5a, 0x48, 0x8f, 0x5e, 0x46, 0x3e, 0xeb, 0xad, 0xb4, 0x1c, 0xab, 0x5a, 0x1d}, types.Tx{0x5c, 0xf}, types.Tx{0x50, 0xc0, 0x92, 0x8, 0x46, 0xa8, 0x72, 0x39, 0x95, 0xa3, 0xbb, 0xf6, 0x95, 0x2f, 0x5f, 0x37, 0x50, 0x3d, 0x79, 0xa9, 0xc9, 0x8f, 0xef, 0xfb, 0x14, 0xf6, 0x48, 0xfd, 0x51, 0xff, 0xab, 0x15, 0x83, 0x8d, 0x69, 0xc1, 0x62, 0xc2, 0x84, 0xf4, 0xe5, 0xe3, 0x62, 0x47, 0x55, 0x2, 0x65, 0x61, 0x6f, 0x3d, 0xa0, 0x99, 0x74, 0x60, 0xac, 0x8f, 0x7, 0x71, 0x56, 0x63, 0xfe}, types.Tx{0x33, 0x14, 0xa1, 0x2d, 0x82, 0xac, 0x6, 0x85, 0xa6, 0x2d, 0x3, 0xd4, 0xe8, 0x84, 0x93, 0x48, 0xa8, 0xf0, 0x77, 0x6, 0x57, 0xc8, 0x93, 0xe7, 0xb5, 0xdb, 0xff, 0xcb, 0x89, 0xe6, 0x66, 0xd9, 0x96, 0x7d, 0xe3, 0xf1, 0x53, 0xde, 0x91, 0x54, 0x2d, 0xd2, 0xbf, 0xce, 0xe2, 0x77, 0x9, 0x3f, 0x1d, 0xe4, 0xb0, 0x3f, 0x5b, 0x71}}, + }, // { // name: "one small tx", // txs: generateRandomlySizedTxs(1, 200), @@ -130,10 +125,11 @@ func TestTxSharePosition(t *testing.T) { rawTx := []byte(tt.txs[i]) rawTxDataForRange := stripCompactShares(shares, pos.start, pos.end) if !strings.Contains(string(rawTxDataForRange), string(rawTx)) { - fmt.Printf("txs: %+v\n", tt.txs) - fmt.Printf("shares: %+v\n", shares) - fmt.Printf("rawTx: %+v\n", rawTx) - fmt.Printf("rawTxDataForRange: %+v\n", rawTxDataForRange) + fmt.Printf("txs: %#v\n", tt.txs) + fmt.Printf("shares: %#v\n", shares) + fmt.Printf("rawTx: %#v\n", rawTx) + fmt.Printf("rawTxDataForRange: %#v\n", rawTxDataForRange) + t.Fatalf("rawTxDataForRange does not contain rawTx") } assert.Contains( t, @@ -171,6 +167,8 @@ func TestTxShareIndex(t *testing.T) { {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 80) + 247, 82}, // 82 compact shares + two bytes in last share {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 80) + 248, 82}, + {20079, 81}, + {20168, 81}, } for _, tt := range tests { diff --git a/pkg/shares/compact_shares_test.go b/pkg/shares/compact_shares_test.go index d92fbd7c0c..c818f70c37 100644 --- a/pkg/shares/compact_shares_test.go +++ b/pkg/shares/compact_shares_test.go @@ -82,6 +82,7 @@ func Test_processCompactShares(t *testing.T) { {"many big txs", appconsts.ContinuationCompactShareContentSize * 4, 10}, {"single exact size tx", exactTxShareSize, 1}, {"many exact size txs", exactTxShareSize, 10}, + {"many exact size txs", exactTxShareSize, 100}, } for _, tc := range tests { From 753779dbc5c1b41d59c9000e2e94789e49431cbe Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Tue, 27 Sep 2022 14:49:24 -0400 Subject: [PATCH 13/38] reorder consts to use order in which they are encoded --- pkg/shares/split_compact_shares.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 4ab68e4d47..a15ff701c0 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -161,7 +161,7 @@ func (css *CompactShareSplitter) forceLastShareReserveByteToZero() { // data after transaction is padding. See // https://github.com/celestiaorg/celestia-specs/blob/master/src/specs/data_structures.md#share if len(css.shares) == 1 { - rawLastShare[appconsts.NamespaceSize+appconsts.FirstCompactShareDataLengthBytes+appconsts.ShareInfoBytes+i] = byte(0) + rawLastShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes+i] = byte(0) } else { rawLastShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+i] = byte(0) } From 676cee1bc939bc6d7023c57229091fe0a38f13df Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Tue, 27 Sep 2022 14:49:32 -0400 Subject: [PATCH 14/38] remove duplicate unnecessary test --- pkg/shares/compact_shares_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/shares/compact_shares_test.go b/pkg/shares/compact_shares_test.go index c818f70c37..7978f956f8 100644 --- a/pkg/shares/compact_shares_test.go +++ b/pkg/shares/compact_shares_test.go @@ -81,7 +81,6 @@ func Test_processCompactShares(t *testing.T) { {"single big tx", appconsts.ContinuationCompactShareContentSize * 4, 1}, {"many big txs", appconsts.ContinuationCompactShareContentSize * 4, 10}, {"single exact size tx", exactTxShareSize, 1}, - {"many exact size txs", exactTxShareSize, 10}, {"many exact size txs", exactTxShareSize, 100}, } From 1393238152cc58fa88cda95fd8168c6962d951fa Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Tue, 27 Sep 2022 15:55:05 -0400 Subject: [PATCH 15/38] implement failing test for SplitTxs --- pkg/shares/share_splitting_test.go | 31 ++++++++++++++++++++++++++++++ pkg/shares/split_compact_shares.go | 9 +++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 pkg/shares/share_splitting_test.go diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go new file mode 100644 index 0000000000..15dce308d5 --- /dev/null +++ b/pkg/shares/share_splitting_test.go @@ -0,0 +1,31 @@ +package shares + +import ( + "reflect" + "testing" + + coretypes "github.com/tendermint/tendermint/types" +) + +func TestSplitTxs(t *testing.T) { + type testCase struct { + txs coretypes.Txs + want [][]byte + } + testCases := []testCase{ + { + txs: coretypes.Txs{}, + want: [][]byte{}, + }, + { + txs: coretypes.Txs{coretypes.Tx{0x01}}, + want: [][]uint8{{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + }, + } + for _, tt := range testCases { + got := SplitTxs(tt.txs) + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("SplitTxs(%#v) got %#v, want %#v", tt.txs, got, tt.want) + } + } +} diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index a15ff701c0..8954830f90 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -136,9 +136,10 @@ func (css *CompactShareSplitter) Export() NamespacedShares { dataLengthVarint := css.dataLengthVarint() // add the pending share to the current shares before returning - if len(css.pendingShare.Share) > appconsts.NamespaceSize+appconsts.ShareInfoBytes { + if !css.isEmptyPendingShare() { css.pendingShare.Share = zeroPadIfNecessary(css.pendingShare.Share, appconsts.ShareSize) css.shares = append(css.shares, css.pendingShare) + css.pendingShare = NamespacedShare{} } css.writeDataLengthVarintToFirstShare(dataLengthVarint) @@ -213,6 +214,8 @@ func (css *CompactShareSplitter) writeDataLengthVarintToFirstShare(dataLengthVar // the share info byte in each share. dataLength does include the reserved // byte in each share and the unit length delimiter prefixed to each unit. func (css *CompactShareSplitter) dataLength() uint64 { + // HACKHACK this dataLength calculation is wrong. + // It doesn't account for the fact that the first compact share has fewer bytes available for data than continuation compact shares. length := uint64(len(css.shares)) * appconsts.ContinuationCompactShareContentSize length += uint64(len(css.shares)) * appconsts.CompactShareReservedBytes if !css.isEmptyPendingShare() { @@ -228,7 +231,9 @@ func (css *CompactShareSplitter) isEmptyPendingShare() bool { // pendingShareDataLength returns the length of the data in the pending share. func (css *CompactShareSplitter) pendingShareDataLength() uint64 { - return uint64(len(css.pendingShare.Share) - appconsts.NamespaceSize - appconsts.ShareInfoBytes) + // HACKHACK this pendingShareDataLength calculation is wrong if the pending share is the first share. + foo := uint64(len(css.pendingShare.Share) - appconsts.NamespaceSize - appconsts.ShareInfoBytes) + return foo } // Count returns the current number of shares that will be made if exporting. From ac1ac10d1d16b99dbccb433c5d4e4960dbffd0a1 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 12:12:08 -0400 Subject: [PATCH 16/38] pass TestSplitTxs with one transaction --- pkg/shares/parse_sparse_shares.go | 8 +++--- pkg/shares/share_splitting_test.go | 12 +++++++-- pkg/shares/shares_test.go | 21 +++++++++------ pkg/shares/split_compact_shares.go | 43 +++++++++++++++++------------- pkg/shares/split_sparse_shares.go | 4 +-- 5 files changed, 53 insertions(+), 35 deletions(-) diff --git a/pkg/shares/parse_sparse_shares.go b/pkg/shares/parse_sparse_shares.go index d0133d2ae2..5f6f0c0390 100644 --- a/pkg/shares/parse_sparse_shares.go +++ b/pkg/shares/parse_sparse_shares.go @@ -92,7 +92,7 @@ func ParseDelimiter(input []byte) (inputWithoutLengthDelimiter []byte, dataLengt l = len(input) } - delimiter := zeroPadIfNecessary(input[:l], binary.MaxVarintLen64) + delimiter, _ := zeroPadIfNecessary(input[:l], binary.MaxVarintLen64) // read the length of the data r := bytes.NewBuffer(delimiter) @@ -112,15 +112,15 @@ func ParseDelimiter(input []byte) (inputWithoutLengthDelimiter []byte, dataLengt // zeroPadIfNecessary pads the share with trailing zero bytes if the provided // share has fewer bytes than width. Returns the share unmodified if the // len(share) is greater than or equal to width. -func zeroPadIfNecessary(share []byte, width int) []byte { +func zeroPadIfNecessary(share []byte, width int) (padded []byte, bytesOfPadding int) { oldLen := len(share) if oldLen >= width { - return share + return share, 0 } missingBytes := width - oldLen padByte := []byte{0} padding := bytes.Repeat(padByte, missingBytes) share = append(share, padding...) - return share + return share, missingBytes } diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index 15dce308d5..63a0730dfc 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -18,8 +18,16 @@ func TestSplitTxs(t *testing.T) { want: [][]byte{}, }, { - txs: coretypes.Txs{coretypes.Tx{0x01}}, - want: [][]uint8{{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + txs: coretypes.Txs{coretypes.Tx{0x01}}, + want: [][]uint8{{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x1, // info byte + 0x2, 0x0, 0x0, 0x0, // message length + 0x0, // reserved byte + 0x1, // unit length of first transaction + 0x1, // data of first transaction + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + }}, }, } for _, tt := range testCases { diff --git a/pkg/shares/shares_test.go b/pkg/shares/shares_test.go index c8a14a7115..2901f59764 100644 --- a/pkg/shares/shares_test.go +++ b/pkg/shares/shares_test.go @@ -176,19 +176,24 @@ func Test_zeroPadIfNecessary(t *testing.T) { width int } tests := []struct { - name string - args args - want []byte + name string + args args + wantPadded []byte + wantBytesOfPadding int }{ - {"pad", args{[]byte{1, 2, 3}, 6}, []byte{1, 2, 3, 0, 0, 0}}, - {"not necessary (equal to shareSize)", args{[]byte{1, 2, 3}, 3}, []byte{1, 2, 3}}, - {"not necessary (greater shareSize)", args{[]byte{1, 2, 3}, 2}, []byte{1, 2, 3}}, + {"pad", args{[]byte{1, 2, 3}, 6}, []byte{1, 2, 3, 0, 0, 0}, 3}, + {"not necessary (equal to shareSize)", args{[]byte{1, 2, 3}, 3}, []byte{1, 2, 3}, 0}, + {"not necessary (greater shareSize)", args{[]byte{1, 2, 3}, 2}, []byte{1, 2, 3}, 0}, } for _, tt := range tests { tt := tt // stupid scopelint :-/ t.Run(tt.name, func(t *testing.T) { - if got := zeroPadIfNecessary(tt.args.share, tt.args.width); !reflect.DeepEqual(got, tt.want) { - t.Errorf("zeroPadIfNecessary() = %v, want %v", got, tt.want) + gotPadded, gotBytesOfPadding := zeroPadIfNecessary(tt.args.share, tt.args.width) + if !reflect.DeepEqual(gotPadded, tt.wantPadded) { + t.Errorf("zeroPadIfNecessary gotPadded %v, wantPadded %v", gotPadded, tt.wantPadded) + } + if gotBytesOfPadding != tt.wantBytesOfPadding { + t.Errorf("zeroPadIfNecessary gotBytesOfPadding %v, wantBytesOfPadding %v", gotBytesOfPadding, tt.wantBytesOfPadding) } }) } diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 5ceecc43c3..1be300038c 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -136,15 +136,14 @@ func (css *CompactShareSplitter) Export() NamespacedShares { return []NamespacedShare{} } - dataLengthVarint := css.dataLengthVarint() - + var bytesOfPadding int // add the pending share to the current shares before returning if !css.isEmptyPendingShare() { - css.pendingShare.Share = zeroPadIfNecessary(css.pendingShare.Share, appconsts.ShareSize) + css.pendingShare.Share, bytesOfPadding = zeroPadIfNecessary(css.pendingShare.Share, appconsts.ShareSize) css.shares = append(css.shares, css.pendingShare) - css.pendingShare = NamespacedShare{} } + dataLengthVarint := css.dataLengthVarint(bytesOfPadding) css.writeDataLengthVarintToFirstShare(dataLengthVarint) css.forceLastShareReserveByteToZero() return css.shares @@ -165,8 +164,10 @@ func (css *CompactShareSplitter) forceLastShareReserveByteToZero() { // data after transaction is padding. See // https://github.com/celestiaorg/celestia-specs/blob/master/src/specs/data_structures.md#share if len(css.shares) == 1 { + // the reserved byte is after the namespace, info byte, and data length varint rawLastShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes+i] = byte(0) } else { + // the reserved byte is after the namespace, info byte rawLastShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+i] = byte(0) } } @@ -178,14 +179,16 @@ func (css *CompactShareSplitter) forceLastShareReserveByteToZero() { css.shares[len(css.shares)-1] = newLastShare } -func (css *CompactShareSplitter) dataLengthVarint() []byte { +// dataLengthVarint returns a varint of the data length written to this compact +// share splitter. +func (css *CompactShareSplitter) dataLengthVarint(bytesOfPadding int) []byte { if len(css.shares) == 0 && css.isEmptyPendingShare() { return []byte{} } // declare and initialize the data length dataLengthVarint := make([]byte, appconsts.FirstCompactShareDataLengthBytes) - binary.PutUvarint(dataLengthVarint, css.dataLength()) + binary.PutUvarint(dataLengthVarint, css.dataLength(bytesOfPadding)) zeroPadIfNecessary(dataLengthVarint, appconsts.FirstCompactShareDataLengthBytes) return dataLengthVarint @@ -216,15 +219,17 @@ func (css *CompactShareSplitter) writeDataLengthVarintToFirstShare(dataLengthVar // dataLength does not include the # of bytes occupied by the namespace ID or // the share info byte in each share. dataLength does include the reserved // byte in each share and the unit length delimiter prefixed to each unit. -func (css *CompactShareSplitter) dataLength() uint64 { - // HACKHACK this dataLength calculation is wrong. - // It doesn't account for the fact that the first compact share has fewer bytes available for data than continuation compact shares. - length := uint64(len(css.shares)) * appconsts.ContinuationCompactShareContentSize - length += uint64(len(css.shares)) * appconsts.CompactShareReservedBytes - if !css.isEmptyPendingShare() { - length += css.pendingShareDataLength() +func (css *CompactShareSplitter) dataLength(bytesOfPadding int) uint64 { + if len(css.shares) == 0 { + return 0 } - return length + if len(css.shares) == 1 { + return uint64(appconsts.FirstCompactShareContentSize) - uint64(bytesOfPadding) + } + + continuationSharesCount := len(css.shares) - 1 + continuationSharesDataLength := uint64(continuationSharesCount) * appconsts.ContinuationCompactShareContentSize + return uint64(appconsts.FirstCompactShareContentSize) + continuationSharesDataLength - uint64(bytesOfPadding) } // isEmptyPendingShare returns true if the pending share is empty, false otherwise. @@ -245,8 +250,8 @@ func (css *CompactShareSplitter) Count() (shareCount int) { return 0 } - if len(css.pendingShare.Share) > appconsts.NamespaceSize+appconsts.ShareInfoBytes { - // pending share is non-empty, so we must add one to the count + if !css.isEmptyPendingShare() { + // pending share is non-empty, so it will be zero padded and added to shares during export return len(css.shares) + 1 } return len(css.shares) @@ -283,7 +288,7 @@ func MarshalDelimitedTx(tx coretypes.Tx) ([]byte, error) { return append(lenBuf[:n], tx...), nil } -func namespacedPaddedShares(ns []byte, count int) NamespacedShares { +func namespacedPaddedShares(namespace []byte, count int) NamespacedShares { infoByte, err := NewInfoReservedByte(appconsts.ShareVersion, true) if err != nil { panic(err) @@ -292,10 +297,10 @@ func namespacedPaddedShares(ns []byte, count int) NamespacedShares { for i := 0; i < count; i++ { shares[i] = NamespacedShare{ Share: append(append(append( - make([]byte, 0, appconsts.ShareSize), ns...), + make([]byte, 0, appconsts.ShareSize), namespace...), byte(infoByte)), make([]byte, appconsts.SparseShareContentSize)...), - ID: ns, + ID: namespace, } } return shares diff --git a/pkg/shares/split_sparse_shares.go b/pkg/shares/split_sparse_shares.go index 85d67ba7f7..8aa333f872 100644 --- a/pkg/shares/split_sparse_shares.go +++ b/pkg/shares/split_sparse_shares.go @@ -104,7 +104,7 @@ func AppendToShares(shares []NamespacedShare, nid namespace.ID, rawData []byte) byte(infoByte)), rawData..., ) - paddedShare := zeroPadIfNecessary(rawShare, appconsts.ShareSize) + paddedShare, _ := zeroPadIfNecessary(rawShare, appconsts.ShareSize) share := NamespacedShare{paddedShare, nid} shares = append(shares, share) } else { // len(rawData) > MsgShareSize @@ -151,7 +151,7 @@ func splitMessage(rawData []byte, nid namespace.ID) NamespacedShares { byte(infoByte)), rawData[:shareSizeOrLen]..., ) - paddedShare := zeroPadIfNecessary(rawShare, appconsts.ShareSize) + paddedShare, _ := zeroPadIfNecessary(rawShare, appconsts.ShareSize) share := NamespacedShare{paddedShare, nid} shares = append(shares, share) rawData = rawData[shareSizeOrLen:] From 92202a5bf07e1d366165e58fd0937949116a1393 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 12:13:58 -0400 Subject: [PATCH 17/38] add test case for two transactions --- pkg/shares/share_splitting_test.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index 63a0730dfc..ad852e191d 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -18,17 +18,31 @@ func TestSplitTxs(t *testing.T) { want: [][]byte{}, }, { - txs: coretypes.Txs{coretypes.Tx{0x01}}, + txs: coretypes.Txs{coretypes.Tx{0xA}}, want: [][]uint8{{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte 0x2, 0x0, 0x0, 0x0, // message length 0x0, // reserved byte 0x1, // unit length of first transaction - 0x1, // data of first transaction + 0xA, // data of first transaction 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, }, + { + txs: coretypes.Txs{coretypes.Tx{0xA}, coretypes.Tx{0xB}}, + want: [][]uint8{{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x1, // info byte + 0x4, 0x0, 0x0, 0x0, // message length + 0x0, // reserved byte + 0x1, // unit length of first transaction + 0xA, // data of first transaction + 0x1, // unit length of second transaction + 0xB, // data of second transaction + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + }}, + }, } for _, tt := range testCases { got := SplitTxs(tt.txs) From e35f6130c41dbc03a81ff546f97d729f781d9476 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 12:16:13 -0400 Subject: [PATCH 18/38] add test names --- pkg/shares/share_splitting_test.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index ad852e191d..9693e9190f 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -9,16 +9,19 @@ import ( func TestSplitTxs(t *testing.T) { type testCase struct { + name string txs coretypes.Txs want [][]byte } testCases := []testCase{ { + name: "empty txs", txs: coretypes.Txs{}, want: [][]byte{}, }, { - txs: coretypes.Txs{coretypes.Tx{0xA}}, + name: "one small tx", + txs: coretypes.Txs{coretypes.Tx{0xA}}, want: [][]uint8{{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte @@ -30,7 +33,8 @@ func TestSplitTxs(t *testing.T) { }}, }, { - txs: coretypes.Txs{coretypes.Tx{0xA}, coretypes.Tx{0xB}}, + name: "two small txs", + txs: coretypes.Txs{coretypes.Tx{0xA}, coretypes.Tx{0xB}}, want: [][]uint8{{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte @@ -45,9 +49,11 @@ func TestSplitTxs(t *testing.T) { }, } for _, tt := range testCases { - got := SplitTxs(tt.txs) - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("SplitTxs(%#v) got %#v, want %#v", tt.txs, got, tt.want) - } + t.Run(tt.name, func(t *testing.T) { + got := SplitTxs(tt.txs) + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("SplitTxs(%#v) got %#v, want %#v", tt.txs, got, tt.want) + } + }) } } From 3bc23890e312afa8db578b5f2573563144729cee Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 12:38:05 -0400 Subject: [PATCH 19/38] replace hard-coded padding with bytes.Repeat --- pkg/shares/share_splitting_test.go | 73 ++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index 9693e9190f..c0b15a9d8e 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -1,6 +1,7 @@ package shares import ( + "bytes" "reflect" "testing" @@ -21,32 +22,54 @@ func TestSplitTxs(t *testing.T) { }, { name: "one small tx", - txs: coretypes.Txs{coretypes.Tx{0xA}}, - want: [][]uint8{{ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id - 0x1, // info byte - 0x2, 0x0, 0x0, 0x0, // message length - 0x0, // reserved byte - 0x1, // unit length of first transaction - 0xA, // data of first transaction - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - }}, - }, - { - name: "two small txs", - txs: coretypes.Txs{coretypes.Tx{0xA}, coretypes.Tx{0xB}}, - want: [][]uint8{{ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id - 0x1, // info byte - 0x4, 0x0, 0x0, 0x0, // message length - 0x0, // reserved byte - 0x1, // unit length of first transaction - 0xA, // data of first transaction - 0x1, // unit length of second transaction - 0xB, // data of second transaction - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - }}, + txs: coretypes.Txs{coretypes.Tx{0xa}}, + want: [][]uint8{ + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x1, // info byte + 0x2, 0x0, 0x0, 0x0, // message length + 0x0, // reserved byte + 0x1, // unit length of first transaction + 0xa, // data of first transaction + }, bytes.Repeat([]byte{0}, 240)...), // padding + }, }, + // { + // name: "two small txs", + // txs: coretypes.Txs{coretypes.Tx{0xA}, coretypes.Tx{0xB}}, + // want: [][]uint8{{ + // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + // 0x1, // info byte + // 0x4, 0x0, 0x0, 0x0, // message length + // 0x0, // reserved byte + // 0x1, // unit length of first transaction + // 0xA, // data of first transaction + // 0x1, // unit length of second transaction + // 0xB, // data of second transaction + // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // padding + // }}, + // }, + // { + // name: "one large tx", + // txs: coretypes.Txs{bytes.Repeat([]byte{0xC}, 256)}, + // want: [][]uint8{ + // { + // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + // 0x1, // info byte + // 0xAE, 0x2, 0x0, 0x0, // message length is 302 + // 0x0, // reserved byte + // 0xAC, 0x2, // unit length of first transaction + // 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, // data of first transaction + // }, + // { + // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + // 0x0, // info byte + // 0x0, // reserved byte + // 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, // continuation data of first transaction + // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // padding + // }, + // }, + // }, } for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { From 181c118d8bc1e995d05fdb691d857e7f53cf50d3 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 12:40:02 -0400 Subject: [PATCH 20/38] replace hard-coded padding with bytes.Repeat for test case 2 --- pkg/shares/share_splitting_test.go | 31 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index c0b15a9d8e..7a4f74cfa0 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -34,21 +34,22 @@ func TestSplitTxs(t *testing.T) { }, bytes.Repeat([]byte{0}, 240)...), // padding }, }, - // { - // name: "two small txs", - // txs: coretypes.Txs{coretypes.Tx{0xA}, coretypes.Tx{0xB}}, - // want: [][]uint8{{ - // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id - // 0x1, // info byte - // 0x4, 0x0, 0x0, 0x0, // message length - // 0x0, // reserved byte - // 0x1, // unit length of first transaction - // 0xA, // data of first transaction - // 0x1, // unit length of second transaction - // 0xB, // data of second transaction - // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // padding - // }}, - // }, + { + name: "two small txs", + txs: coretypes.Txs{coretypes.Tx{0xA}, coretypes.Tx{0xB}}, + want: [][]uint8{ + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x1, // info byte + 0x4, 0x0, 0x0, 0x0, // message length + 0x0, // reserved byte + 0x1, // unit length of first transaction + 0xA, // data of first transaction + 0x1, // unit length of second transaction + 0xB, // data of second transaction + }, bytes.Repeat([]byte{0}, 238)...), // padding + }, + }, // { // name: "one large tx", // txs: coretypes.Txs{bytes.Repeat([]byte{0xC}, 256)}, From 3be79dc4a095ffd503b4212cd9e045a8079eef77 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 12:52:14 -0400 Subject: [PATCH 21/38] use bytes.Repeat for third test case --- pkg/shares/share_splitting_test.go | 50 ++++++++++++++---------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index 7a4f74cfa0..c958a16062 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -27,7 +27,7 @@ func TestSplitTxs(t *testing.T) { append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte - 0x2, 0x0, 0x0, 0x0, // message length + 0x2, 0x0, 0x0, 0x0, // 1 byte (unit) + 1 byte (unit length) = 2 bytes message length 0x0, // reserved byte 0x1, // unit length of first transaction 0xa, // data of first transaction @@ -36,41 +36,39 @@ func TestSplitTxs(t *testing.T) { }, { name: "two small txs", - txs: coretypes.Txs{coretypes.Tx{0xA}, coretypes.Tx{0xB}}, + txs: coretypes.Txs{coretypes.Tx{0xa}, coretypes.Tx{0xb}}, want: [][]uint8{ append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte - 0x4, 0x0, 0x0, 0x0, // message length + 0x4, 0x0, 0x0, 0x0, // 2 bytes (first transaction) + 2 bytes (second transaction) = 4 bytes message length 0x0, // reserved byte 0x1, // unit length of first transaction - 0xA, // data of first transaction + 0xa, // data of first transaction 0x1, // unit length of second transaction - 0xB, // data of second transaction + 0xb, // data of second transaction }, bytes.Repeat([]byte{0}, 238)...), // padding }, }, - // { - // name: "one large tx", - // txs: coretypes.Txs{bytes.Repeat([]byte{0xC}, 256)}, - // want: [][]uint8{ - // { - // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id - // 0x1, // info byte - // 0xAE, 0x2, 0x0, 0x0, // message length is 302 - // 0x0, // reserved byte - // 0xAC, 0x2, // unit length of first transaction - // 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, // data of first transaction - // }, - // { - // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id - // 0x0, // info byte - // 0x0, // reserved byte - // 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, // continuation data of first transaction - // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // padding - // }, - // }, - // }, + { + name: "one large tx", + txs: coretypes.Txs{bytes.Repeat([]byte{0xC}, 241)}, + want: [][]uint8{ + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x1, // info byte + 243, 1, 0, 0, // 241 (unit) + 2 (unit length) = 243 message length + 0x0, // reserved byte + 241, 1, // unit length of first transaction is 241 + }, bytes.Repeat([]byte{0xc}, 240)...), // data of first transaction + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x0, // info byte + 0x0, // reserved byte + 0xc, // continuation data of first transaction + }, bytes.Repeat([]byte{0x0}, 245)...), // padding + }, + }, } for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { From ea1f7ce725bc42ec1046358b05b763dddcc67cd2 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 12:53:24 -0400 Subject: [PATCH 22/38] reserve byte should be non-zero --- pkg/shares/share_splitting_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index c958a16062..28f9aa9403 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -28,7 +28,7 @@ func TestSplitTxs(t *testing.T) { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte 0x2, 0x0, 0x0, 0x0, // 1 byte (unit) + 1 byte (unit length) = 2 bytes message length - 0x0, // reserved byte + 0x0, // BUG: reserved byte should be non-zero 0x1, // unit length of first transaction 0xa, // data of first transaction }, bytes.Repeat([]byte{0}, 240)...), // padding @@ -42,7 +42,7 @@ func TestSplitTxs(t *testing.T) { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte 0x4, 0x0, 0x0, 0x0, // 2 bytes (first transaction) + 2 bytes (second transaction) = 4 bytes message length - 0x0, // reserved byte + 0x0, // BUG: reserved byte should be non-zero 0x1, // unit length of first transaction 0xa, // data of first transaction 0x1, // unit length of second transaction @@ -58,7 +58,7 @@ func TestSplitTxs(t *testing.T) { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte 243, 1, 0, 0, // 241 (unit) + 2 (unit length) = 243 message length - 0x0, // reserved byte + 0x0, // BUG: reserved byte should be non-zero 241, 1, // unit length of first transaction is 241 }, bytes.Repeat([]byte{0xc}, 240)...), // data of first transaction append([]uint8{ From 7e86c158a6a846b7065542c13cbd1370868998e7 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 14:46:28 -0400 Subject: [PATCH 23/38] improve test name --- pkg/shares/share_splitting_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index 28f9aa9403..dd5dc9fbc7 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -51,7 +51,7 @@ func TestSplitTxs(t *testing.T) { }, }, { - name: "one large tx", + name: "one large tx that spans two shares", txs: coretypes.Txs{bytes.Repeat([]byte{0xC}, 241)}, want: [][]uint8{ append([]uint8{ From 72713a3b67e8557c17c9c8b0dcc057a49616fe05 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 15:41:01 -0400 Subject: [PATCH 24/38] implement failing fourth test case --- pkg/shares/share_splitting_test.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index dd5dc9fbc7..05874514f4 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -69,6 +69,27 @@ func TestSplitTxs(t *testing.T) { }, bytes.Repeat([]byte{0x0}, 245)...), // padding }, }, + { + name: "one small tx then one large tx that spans two shares", + txs: coretypes.Txs{coretypes.Tx{0xd}, bytes.Repeat([]byte{0xe}, 241)}, + want: [][]uint8{ + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x1, // info byte + 245, 1, 0, 0, // 2 bytes (first transaction) + 243 bytes (second transaction) = 245 bytes message length + 0x0, // BUG: reserved byte should be non-zero + 1, // unit length of first transaction + 0xd, // data of first transaction + 241, 1, // unit length of second transaction is 241 + }, bytes.Repeat([]byte{0xe}, 238)...), // data of first transaction + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x0, // info byte + 0x0, // reserved byte + 0xe, 0xe, 0xe, // continuation data of second transaction + }, bytes.Repeat([]byte{0x0}, 244)...), // padding + }, + }, } for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { From d6c0c9ea416f8a005afa976260e948cc9ee40bf0 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 15:58:24 -0400 Subject: [PATCH 25/38] fix: test case four --- pkg/shares/share_splitting_test.go | 2 +- pkg/shares/split_compact_shares.go | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index 05874514f4..2705fa71ac 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -87,7 +87,7 @@ func TestSplitTxs(t *testing.T) { 0x0, // info byte 0x0, // reserved byte 0xe, 0xe, 0xe, // continuation data of second transaction - }, bytes.Repeat([]byte{0x0}, 244)...), // padding + }, bytes.Repeat([]byte{0x0}, 243)...), // padding }, }, } diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 1be300038c..3d0b6751b1 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -234,7 +234,14 @@ func (css *CompactShareSplitter) dataLength(bytesOfPadding int) uint64 { // isEmptyPendingShare returns true if the pending share is empty, false otherwise. func (css *CompactShareSplitter) isEmptyPendingShare() bool { - return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes + if css.isPendingShareTheFirstShare() { + return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes + } + return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes +} + +func (css *CompactShareSplitter) isPendingShareTheFirstShare() bool { + return len(css.shares) == 0 } // pendingShareDataLength returns the length of the data in the pending share. From 9f448768a543d5cbdcac4e20f5cf69cb47561b9b Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 16:01:03 -0400 Subject: [PATCH 26/38] uncomment proof tests --- pkg/prove/proof_test.go | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/pkg/prove/proof_test.go b/pkg/prove/proof_test.go index 6d8ba53cc5..c51baa7b3c 100644 --- a/pkg/prove/proof_test.go +++ b/pkg/prove/proof_test.go @@ -81,30 +81,30 @@ func TestTxSharePosition(t *testing.T) { } tests := []test{ - // { - // name: "typical", - // txs: generateRandomlySizedTxs(44, 200), - // }, - // { - // name: "many small tx", - // txs: generateRandomlySizedTxs(444, 100), - // }, + { + name: "typical", + txs: generateRandomlySizedTxs(44, 200), + }, + { + name: "many small tx", + txs: generateRandomlySizedTxs(444, 100), + }, { name: "many small tx (without randomness)", txs: types.Txs{types.Tx{0x49, 0x88, 0x8b, 0x74, 0xd9, 0x88, 0xfc, 0x10, 0x3c, 0x61, 0x53, 0xe1, 0xf, 0x1b, 0x7e, 0xc7, 0x8d, 0xd6, 0x18, 0x62, 0xc5, 0x93, 0x72, 0x85, 0x29, 0x82, 0xc, 0xad, 0x70, 0xcd, 0x5e, 0x38, 0xb4, 0x22, 0x1a, 0x96, 0x5f, 0x51, 0xbc, 0x67, 0x82, 0xab, 0x17, 0xd1, 0x6a, 0xb8, 0xc4, 0x18, 0xe, 0xd, 0xd4, 0xb, 0xf8, 0xe0, 0x94, 0x6a, 0xcd, 0x72, 0x33, 0xde, 0x6, 0x49, 0x24, 0xda, 0x69, 0x19, 0x88, 0x21, 0xe4, 0xe5, 0x5c, 0x1f, 0xe9, 0xfc, 0x4f, 0xf2, 0x85, 0xaa, 0x4e, 0x6c, 0xba, 0x99, 0xf, 0xd3, 0x12, 0x4c}, types.Tx{0xcc, 0x35, 0x13, 0x1f, 0xf6, 0x61, 0x4c, 0xed, 0x2d, 0xd5, 0x20, 0x34, 0x8b, 0x42, 0xdb, 0x18, 0xe9, 0x92, 0x57, 0x5a, 0xb, 0xf6, 0x18, 0x94, 0x9c, 0x6f, 0x19, 0x13, 0x86, 0x43, 0xc2, 0x9b, 0xc5, 0x41, 0x1d, 0xf8, 0x22}, types.Tx{0xf9, 0x68, 0x5a, 0x7e, 0x16, 0x72, 0x7c, 0x41, 0x64, 0xf2, 0x2f, 0x4d, 0x5f, 0x6b, 0x4, 0x52, 0x7e, 0xd1, 0xf4, 0x70, 0x5, 0x5b}, types.Tx{0xa8, 0xc8, 0x5b, 0xd5, 0xd2, 0x7a, 0xd2, 0xdb, 0xb4, 0x1b, 0x3e, 0x69, 0x8f, 0x2a, 0x78, 0x9f, 0x16, 0xdc, 0x6f, 0xb3, 0xab, 0xd4, 0x7d, 0xd, 0xdc, 0x3, 0xf5, 0x2f, 0xb6, 0x65, 0xfa, 0x94, 0xb3, 0x69, 0x57, 0x65, 0xd1, 0x6c, 0x2, 0xaf, 0xab, 0x67, 0xcc, 0x6e, 0x82, 0x30, 0xf, 0x20, 0x55, 0x49, 0x63, 0xdd, 0xa9, 0x38, 0x13, 0x8b, 0x5a, 0x3, 0xec}, types.Tx{0x2, 0x46, 0x8a, 0x37, 0xc0, 0x60, 0x28, 0x5b, 0xcf, 0xad, 0x78, 0xdb}, types.Tx{0xb9, 0x9c, 0xe0, 0x5f, 0x2b, 0x65, 0x5e, 0xa9, 0x5d, 0x54, 0x9, 0xe3, 0xa2, 0xd5, 0x2f, 0x59, 0x36, 0x9f, 0x7f, 0x5d, 0x5, 0x74, 0xa7, 0xeb, 0x8f, 0x6d, 0x3d, 0x4c, 0xf8, 0xc0}, types.Tx{0x17, 0x7, 0x63, 0xcf, 0xf3, 0x39, 0x6d, 0x4a, 0x44, 0xf9, 0x21, 0x6b, 0x39, 0xde, 0x1c, 0xea, 0x70, 0xe, 0x4b, 0x68, 0x66, 0xd1, 0x37, 0xfe, 0xd3, 0xba, 0xc7, 0xd1, 0x78, 0xa5, 0x8a, 0xc3, 0x3b, 0x44, 0x30, 0x89, 0x41, 0xa0, 0xe4, 0x3f, 0xa6, 0xc7, 0x2a, 0x5b, 0x75, 0x37, 0x44, 0x19, 0xd8, 0x71, 0x9b, 0x2a, 0xac, 0x2b, 0x7b, 0xa6, 0xe6}, types.Tx{0x99, 0xcf, 0x86, 0x5d, 0xb1, 0x30, 0x2, 0xc8, 0x8f, 0x10, 0xb4, 0xfb, 0xb9, 0x7d, 0x70, 0x8a, 0x16, 0xd2, 0x6b, 0x71, 0x49, 0x48, 0x5f, 0x83, 0x77, 0xeb, 0x97, 0xbc, 0x3c, 0xa2, 0x91, 0x9c, 0x61, 0x16, 0x3a, 0x56, 0x40, 0xa2, 0x2d, 0xde, 0x6f, 0x33, 0x76, 0x5f, 0x4d, 0xe0, 0xe8, 0x50, 0xd6, 0x4a, 0x92, 0x42, 0xaf, 0x8f, 0x36, 0xc9, 0x17, 0x5d, 0x38, 0xac, 0x33, 0xeb, 0x4, 0xb6, 0x29, 0x78, 0x33, 0x70, 0x4b, 0x25, 0x1, 0xb, 0x2d, 0x8c, 0xb5, 0xd8, 0x80}, types.Tx{0xe8, 0x2f, 0x64, 0x0, 0xea, 0xcb, 0xc3, 0x9e, 0x2d, 0x6e, 0xf, 0x98, 0x57, 0xa8, 0x64, 0x8c, 0xd8, 0x1c, 0x5e, 0x4b, 0xf9, 0xd, 0x48, 0xbd, 0x92, 0x3d, 0xd0, 0x9a, 0x5a, 0x59, 0x14, 0x2, 0x38, 0x81, 0xf4, 0xc2, 0x13, 0x26, 0x8d, 0x78, 0xaf, 0xd7, 0xf4, 0x86, 0x1f, 0xb8, 0x72, 0x58, 0xfc, 0x64, 0x62, 0xb4, 0x11, 0x17, 0x14, 0xff, 0xde, 0x88, 0x4b, 0x82}, types.Tx{0x32, 0x58, 0x9a, 0x8f, 0x76, 0xd3, 0xbf, 0x1b, 0x11, 0x23, 0x6d, 0xcf, 0xca, 0x80, 0x68, 0x6f, 0xae, 0x9e, 0xa1, 0xdd, 0x87}, types.Tx{0x4e, 0xdb, 0x6a, 0x8c, 0x3, 0x37, 0xed, 0xfb, 0xf1, 0x25, 0x88, 0x3d, 0x42, 0x94, 0xeb, 0x32, 0xc1, 0x87, 0x1e, 0xc5, 0xb, 0xcd, 0xaf, 0x68, 0x3c, 0x47, 0xdc, 0x54, 0x87, 0xad, 0xda, 0x72, 0xf0, 0x33, 0x51, 0x88, 0xc, 0x4b, 0xf, 0x11, 0xea, 0x18, 0xec, 0xb4, 0xce, 0x4f, 0x77, 0x4f, 0x40, 0xd1, 0x7e, 0x97, 0xf7}, types.Tx{0xad, 0xfd, 0x92, 0x9e, 0x8b, 0x8b, 0xd8, 0x58, 0x54, 0xe6, 0x20, 0x4a, 0x88, 0x3e, 0xd6, 0x7e, 0x5, 0x34, 0x1a, 0xd6, 0x30, 0xd0, 0x91, 0x7d, 0x63}, types.Tx{0xad, 0xea, 0xcc, 0x67, 0x42, 0xff, 0xd5, 0x13, 0xf, 0x3d, 0xca, 0x1a, 0x11, 0x41, 0x45, 0x50, 0x86, 0xe9, 0xf2, 0xdf, 0xe7, 0x9e, 0xe4, 0x16, 0x26, 0x8, 0xd7, 0x59}, types.Tx{0x74, 0x12, 0x43, 0x55, 0xc4, 0x40, 0xd0, 0xa4, 0x3e, 0x27, 0x14, 0x94}, types.Tx{0x6e, 0x33, 0xb3, 0xa8, 0xad, 0x8, 0x6d, 0xd2, 0x73, 0x17, 0xbf, 0x68, 0x6b, 0x58, 0xb, 0xc1, 0xd, 0x7f, 0x7f, 0x22}, types.Tx{0xdb, 0x18, 0x94, 0xc8, 0x5e, 0x5a, 0xe4, 0x89, 0x43, 0x58, 0x1e, 0xb4, 0x87, 0x1f, 0xc, 0x8d, 0x15, 0x32}, types.Tx{0x77, 0xc, 0xfd, 0xd0, 0x59, 0x76, 0xc6, 0xe5, 0xfe, 0x70, 0x41, 0x90, 0x44, 0x26, 0x81, 0xe2, 0xa9, 0x75, 0x92, 0x63, 0x3f, 0x68, 0x4c, 0x15, 0xf6, 0x63, 0xc0, 0x82, 0xb5, 0x85, 0xa4, 0x17, 0x5e, 0xf, 0x79, 0x60, 0x1a, 0x3a, 0x34, 0x63, 0x3e, 0xe8, 0x27, 0x2c, 0xab, 0xf, 0xa6, 0x8b, 0xea, 0x8a, 0x7b, 0x57, 0x35, 0xdb, 0x13, 0x5b, 0xa4, 0xbe, 0xaf, 0x7c, 0x49, 0x6f, 0xdc, 0xd9, 0x3a, 0x1b, 0x76, 0xf4, 0x71, 0x33, 0xbe, 0x6c, 0xae, 0x3a, 0xec, 0x4f, 0x67, 0xdc, 0x0, 0x9b, 0x7e, 0xe1, 0xa3, 0x28, 0x2, 0x4d, 0x47, 0x5e, 0x9b, 0x98, 0x33, 0xe7, 0x99, 0x9c, 0x6b, 0xdd, 0x38}, types.Tx{0xc3, 0x25, 0x38, 0xf3, 0x8, 0xdb, 0xb5, 0xbf, 0x90, 0x70, 0xac, 0x3, 0xd3, 0x85, 0x26}, types.Tx{0x16, 0xfa, 0x1e, 0x7a, 0xa4, 0x25, 0x6b, 0x3f, 0x15, 0xff, 0x3d, 0x24, 0x52, 0xe5, 0x6a, 0x4e, 0x81, 0x8d, 0xc4, 0x16, 0xd4, 0xe6, 0x26, 0x5e, 0x45, 0x10, 0x91, 0xf9, 0x56, 0xfa, 0xb1, 0x57, 0x22, 0xdf, 0x11, 0x92, 0xb3, 0x5e}, types.Tx{0xa2, 0xd9, 0x10, 0x65, 0x47, 0x96, 0xa3, 0xd7, 0x12, 0x2a, 0xee, 0x1, 0x5f, 0x8, 0xab, 0x35, 0xc0, 0xbf, 0xb6, 0x86, 0xc8, 0xe7, 0x39, 0xfa, 0xf4, 0xfa, 0x8d, 0x21, 0x9, 0xc1, 0xcc, 0x47, 0x32, 0xf8, 0xf0, 0x31, 0xd5, 0x81, 0x73, 0x1c, 0xae, 0x2a, 0x90}, types.Tx{0x62, 0xf7, 0xf6, 0x2f}, types.Tx{0x41, 0xa4, 0x29, 0xfc, 0x7f, 0x9d, 0x43, 0xc7, 0x25, 0x2, 0xe8, 0xff, 0x92, 0xe5, 0x94, 0x89, 0x15, 0x80, 0xc9, 0x21, 0x8b, 0xdc, 0x8d, 0xd, 0xfe, 0x9, 0x52, 0x3b, 0x2e, 0x14, 0x43, 0x6d, 0x33, 0xa3, 0x5c, 0x95, 0x7c, 0x9, 0x18, 0x1e, 0x95, 0x24, 0xb9, 0x18, 0x60, 0x97, 0xa0, 0xd5, 0x3b, 0xa5, 0x8, 0xc5, 0x87, 0x97, 0x7a, 0xb7, 0x2f, 0x19, 0x62, 0xe3, 0xfa, 0x95, 0xb7}, types.Tx{0xc0, 0xf4, 0xd1, 0xb9, 0xfc, 0x6, 0x4f, 0x70, 0xd3, 0x15, 0x12, 0x8, 0xd0, 0x54, 0x8e, 0x79, 0x89, 0xe9, 0x4b, 0xee, 0xe2, 0xf0, 0x92, 0x63, 0x47, 0x94, 0x66, 0xb4, 0x47, 0xb, 0xcf, 0x19, 0xf8, 0x17, 0x81, 0xc0, 0x9f, 0xed, 0x57, 0xfc, 0xc6, 0x5c, 0x11, 0x34, 0x98, 0x27, 0x17, 0x96, 0x8c, 0x56, 0xc0, 0xce, 0x13, 0x7f, 0x3a, 0x1e, 0xa6, 0x31, 0x77, 0x29, 0x17, 0xfe, 0xef, 0x52, 0x6e, 0x5b, 0x26, 0x1c, 0xa3, 0xa0, 0x9a, 0xf8, 0x5b, 0x6b, 0xf6, 0x38, 0x65, 0x65, 0xbe, 0xb3, 0xef, 0x9, 0xb7, 0x35, 0x72, 0x61, 0x55, 0xc4, 0x6b, 0xef, 0x6e, 0xa9, 0xed, 0x4f, 0xc9, 0x46}, types.Tx{0xc3, 0xe3, 0x65, 0x33, 0x85, 0xd3, 0xb6, 0x98, 0x3f, 0xdd, 0x89, 0xca, 0xcd, 0x12, 0xa1, 0x91, 0xe0, 0xba, 0xef, 0x9a, 0x37, 0xed, 0x0, 0xd5, 0x8c, 0xf7, 0x97, 0xc0, 0x6e, 0x84, 0x94, 0x7, 0x1a, 0x10, 0xa, 0xc5, 0x28, 0x8a, 0x6d, 0x86, 0xa5, 0x1f, 0x95, 0x10, 0xeb, 0xa0, 0x3a, 0x56, 0xe2, 0x5, 0x5a, 0x44, 0x63, 0xdc, 0x53, 0xa0, 0x4a, 0xbb, 0xb, 0x14, 0x8e, 0x9b, 0x83, 0x87, 0x1, 0x35, 0xf4, 0xda, 0x81, 0xb, 0xaa, 0xd6, 0xd9, 0x64, 0x1a, 0x59, 0x7a}, types.Tx{0xda, 0x6d, 0x41, 0xec, 0xcc}, types.Tx{0x4f, 0x91, 0xbf, 0x7c, 0x49, 0x7, 0xdf, 0xb5, 0xee, 0xa9, 0xeb, 0x8e, 0x46, 0x1b, 0x21, 0xbb, 0x17, 0x8, 0xbd, 0x4, 0x11, 0xf1, 0x8f, 0xf3, 0x27, 0x35, 0x5d, 0x7e, 0x86, 0xc7, 0xd, 0xeb, 0x4c, 0x4, 0xb4, 0x93, 0x41, 0x89, 0x27}, types.Tx{0xe3, 0x2e}, types.Tx{0x1d, 0xf1, 0x2f, 0x38, 0x54, 0xcb, 0xf8, 0x4b, 0x2f, 0x88, 0xe7, 0x3a, 0xee, 0x26, 0xd5, 0xe6, 0x90, 0x1b, 0x8c, 0xf, 0x7d, 0x2d, 0x3f}, types.Tx{0x29, 0x2a, 0x6e, 0xaf}, types.Tx{0xe5, 0xb3, 0x82, 0xd2, 0xf2, 0x11}, types.Tx{0x4a, 0xa1, 0x90, 0xff, 0xd7, 0x85, 0xb7, 0x80, 0x85, 0xb9, 0xa8, 0xc, 0x1e, 0xd7, 0x4f, 0x8d, 0x94, 0xa7, 0xa3, 0xdc, 0xf7, 0x78, 0xe1, 0x64, 0x13, 0x2f, 0xbe, 0x45, 0x6, 0x0, 0x7, 0x73, 0xe4, 0xd1, 0xe8, 0x2f, 0x76, 0x60, 0x53, 0x61, 0x9d, 0xea}, types.Tx{0x93, 0xb0, 0x3a, 0x89, 0x9f, 0x53, 0x4d, 0x6e, 0xf8, 0xe4, 0x65, 0x6f, 0x68, 0x8a, 0x99, 0xc0, 0x47, 0x33, 0x30, 0x75, 0x39, 0x96, 0x46, 0x53, 0x27, 0x28, 0xda, 0xb2, 0x56, 0xc0, 0x87, 0xe7, 0x12, 0xd2, 0x49, 0x51, 0x28, 0xbb, 0x29, 0x43, 0x70, 0xd1, 0x67, 0xdd, 0xae, 0x65, 0xfd, 0xa8, 0xaf, 0xff, 0x41, 0x14, 0x57, 0x65, 0xce, 0x9e, 0x83, 0xe1, 0xa1, 0x1e, 0xae, 0x72, 0x2a, 0x28, 0xbe, 0xbc, 0xb7, 0x5f, 0x9e, 0x38, 0x5b, 0x1e, 0x2b, 0x17, 0xf7, 0x69, 0xbf, 0x1c, 0x88, 0xbb, 0x1, 0x92, 0x5e, 0x57, 0x66, 0x6d, 0xbe, 0x88}, types.Tx{0x49, 0xf1, 0x75, 0x5d, 0xe, 0x57, 0x90, 0xd, 0xfd, 0x65, 0x75, 0xaf, 0xa9, 0x3b, 0xe8, 0xa2, 0x1a, 0x4f, 0x8b, 0x9b, 0xf8}, types.Tx{0xe5, 0xcd, 0xf, 0x9f, 0xa9, 0x8c, 0xe9, 0xe1, 0xc9}, types.Tx{0xaa, 0x34, 0x7f, 0x47, 0x2b, 0x71, 0xdb, 0xb3, 0x72, 0x3f, 0x71, 0x86, 0x10, 0xbf, 0xca, 0x1e, 0x9d, 0x9f, 0xea, 0x73, 0x69, 0xf3, 0x8, 0x66, 0xb7, 0xd1}, types.Tx{0x82, 0xd4}, types.Tx{0x5d, 0x54, 0x86, 0x27, 0xd7, 0x7e, 0x40, 0xe7, 0xd1, 0x1a, 0x95, 0x62, 0x69, 0x38, 0xa6, 0x6b, 0xb8, 0x8d, 0xe8, 0xe5, 0x92, 0x4a, 0xd3, 0xab, 0xdc, 0x4, 0x82}, types.Tx{0xda, 0xa, 0x40, 0x3d, 0x50, 0xf5, 0x1a, 0xe4, 0xc8, 0xd3, 0xe6, 0x16, 0x59, 0xdd, 0xee, 0xb4, 0xb0, 0x6b, 0xaf, 0xfd, 0x5, 0x16, 0xbe, 0x19, 0x10, 0x39, 0xef, 0x5, 0xe8, 0xd3, 0x8e, 0x40, 0x92, 0xc0, 0xd3, 0xb7, 0xba, 0x68, 0x3d, 0xb, 0x14, 0x33, 0xb4, 0x71, 0x27, 0xc8, 0xfd, 0xd1, 0xc2, 0x92, 0x31, 0x16, 0x99, 0xe8, 0x1e, 0x54, 0x18, 0xc9, 0x68, 0xef, 0x66, 0x27, 0x7d, 0xf9, 0x85, 0x8d, 0xae, 0x8f, 0x1a, 0xaf, 0x98, 0x2b, 0x89, 0xba, 0xa0, 0xe4, 0x9d, 0xb4, 0x62, 0xf7, 0xc4, 0x5e, 0x75, 0xd0, 0xe8, 0x96, 0x61, 0x51, 0x66, 0xc0, 0xd3, 0x47}, types.Tx{0x82, 0x3b}, types.Tx{0x2f, 0x3b, 0x89, 0xcd, 0xd, 0x9c, 0x99, 0x78, 0x30, 0x71, 0x4b, 0x2d}, types.Tx{0x99, 0xff, 0x89, 0x11, 0x8c, 0xa7, 0x97, 0x9d, 0x5b, 0x2e, 0xc8, 0x37, 0xd6, 0x93, 0xc3, 0xeb, 0xd5, 0xdd, 0x35, 0x28, 0x3e, 0x15, 0x62, 0x83, 0x5, 0xaa, 0x9b, 0xb1, 0xb, 0xa3, 0xd3, 0x7e, 0xa4, 0x77, 0x7, 0x76, 0xe9, 0x17, 0x79, 0xb9, 0xda, 0xe5, 0xf3, 0xc5, 0x5f, 0xdf, 0x4e, 0x5d, 0xde}, types.Tx{0xd, 0xa7, 0xc4, 0xf4, 0xa9, 0x87, 0xa1, 0x34, 0xa1, 0x49, 0x59, 0x1d, 0x88, 0x58, 0xfc, 0xa6, 0x4a, 0xe3, 0xd2, 0x5b, 0xf8, 0xb5, 0xf, 0x99, 0x45, 0x4e, 0x37, 0xfc, 0x89, 0xb1, 0x2b, 0xdc, 0xfc, 0x5a, 0x27, 0xf2, 0xd9, 0x30, 0x6f, 0x7d, 0x3b, 0xe2, 0xc3, 0xd0, 0x10, 0xbb, 0xb0, 0xde, 0x41, 0xe2, 0x71, 0x1c, 0x3, 0xa6, 0x11, 0x15, 0x2f, 0xcd, 0xb, 0x31, 0xdf, 0x33, 0xff, 0xe5, 0x63, 0xb6, 0x8f, 0x3, 0x53, 0x86, 0xa0, 0x1b, 0x7b, 0xac, 0xd1, 0x9c, 0x7b, 0x41, 0x50, 0x9c, 0x51, 0x75}, types.Tx{0x3a, 0xcf, 0xc4, 0xa1, 0x27, 0xad, 0xe0, 0x5b, 0x43, 0x3f, 0x45, 0x6d, 0x9d, 0x15, 0x8a, 0xf4, 0x29, 0xea, 0x30, 0x5b, 0x29, 0xad, 0x34, 0x8e, 0x54, 0x8c, 0xcb, 0xfc, 0x13, 0xa6}, types.Tx{0x98, 0x8, 0x38, 0x2b, 0x50, 0xfd, 0x2, 0x65, 0x2f, 0x2c, 0xcc, 0x45, 0x96, 0xd8, 0xa6, 0x7f, 0xab, 0xf8, 0xca, 0xb9, 0x38, 0x6e, 0x96, 0xd3, 0x14, 0xe8, 0x8c, 0x69, 0x2f}, types.Tx{0x93, 0x96, 0xe7}, types.Tx{0x15, 0x95, 0x69, 0xea, 0x57, 0xc, 0xc3, 0x2a, 0x10, 0x7c, 0xec, 0x4, 0xb0, 0xdb, 0x9a, 0x2c, 0xdd, 0xd4, 0x3f, 0x7d, 0xe5, 0x37, 0xa4, 0x4f, 0xde, 0xaf, 0xf9, 0x9e, 0x83, 0x8b, 0x11, 0xd8, 0x6f, 0xcf, 0xb9, 0xea, 0xb6, 0x8f, 0x27, 0x6a, 0x9a, 0x1f, 0x79, 0x34, 0xad, 0x5, 0xa1, 0x58, 0x4e, 0x21, 0x54, 0xa5, 0xd2, 0xdf, 0x91, 0xc5, 0x50, 0xcf, 0xd5, 0x82, 0x64, 0x7c, 0x7d, 0xc6, 0xc4, 0x92, 0xfe, 0xbd, 0x11, 0x42, 0x95, 0x20, 0xb0, 0x12, 0x25, 0x4, 0x2f, 0x9c, 0xff, 0x54, 0x9d, 0xe1, 0x5e, 0xf8, 0x21, 0x96, 0xcc, 0x63, 0x3a, 0x6, 0x9}, types.Tx{0x54, 0x98, 0xa4, 0x53, 0x23, 0x50, 0xe7, 0xb1, 0x51, 0xc9, 0x40, 0xf0, 0x4a, 0x83, 0xb0, 0x62, 0x91}, types.Tx{0xbe, 0xc9, 0x74, 0x70, 0x2d, 0xae}, types.Tx{0xb8, 0xa3, 0x21, 0x4c, 0x83, 0x44, 0x87, 0xb8, 0x2b, 0x10, 0x82, 0x91, 0xd7, 0xb, 0xd2, 0x10, 0xf6, 0x96, 0x46, 0xef, 0x73, 0x16, 0x89, 0x16, 0xc2, 0x77, 0x75, 0x88, 0x93, 0xda, 0xa2, 0xd4, 0x3e, 0xc4, 0xe4, 0xea, 0x1d, 0x81, 0x18, 0xfc, 0x7d, 0x7, 0x94, 0xdc, 0x2c, 0xd5, 0xc, 0x7c, 0xf8, 0x9d, 0xb, 0x99, 0x41, 0xae, 0x67, 0xcd, 0x88}, types.Tx{0x5a, 0xa2, 0xe2, 0x31, 0x4f, 0xc0, 0x77, 0x7, 0x26, 0xbf, 0x5f, 0x1d, 0xc7, 0xfe, 0x7a, 0x2e, 0xd4, 0xc8, 0x4d, 0x58, 0x90, 0x2f, 0xbf, 0x95, 0xe6, 0xbf, 0xb9, 0x44, 0xd, 0x7f, 0x2d}, types.Tx{0xfd, 0xc7, 0x1e, 0x52, 0x42, 0xe3, 0xf, 0xdc, 0x98, 0xe, 0x8b, 0x51, 0x11, 0x21, 0x89, 0xfc, 0x63, 0x9, 0xcc, 0xf0, 0x82, 0x5d, 0xbb, 0xe2, 0x18, 0xc, 0xc2, 0x9, 0xa4, 0x23, 0x89, 0xbf, 0xab, 0x50, 0x26, 0xa8, 0x42, 0xc1, 0xff, 0xdd, 0x2f, 0x5a, 0xa4, 0x3, 0x8f}, types.Tx{0x4b, 0xb8, 0x87, 0xd1, 0x8d, 0x5c, 0x4d, 0xe1, 0x82, 0x50, 0x94, 0x5b, 0xdc, 0x63, 0xc2, 0xd1, 0x79, 0x66, 0x17, 0xda, 0xf0, 0x6d, 0xb9, 0x7d, 0xb6, 0x7c, 0xac, 0xe7, 0x24, 0x5f, 0x34, 0x81, 0xdb, 0xaf, 0x60, 0x94, 0x14, 0x8d, 0x84, 0xd5, 0xb7, 0x0, 0x8d, 0xa5, 0x54, 0xa3, 0x32, 0x19, 0xe3, 0x7d, 0x33, 0x2f, 0x7f, 0xf, 0x18, 0xc4, 0xa6, 0x9e, 0x24, 0x30, 0xf7, 0x1c, 0x5c, 0xe2, 0xf1, 0xbd, 0x60, 0x48, 0xf8, 0xa8, 0x6f, 0xb4, 0xc4, 0xcb, 0x8e, 0x14, 0xd, 0x6f, 0xfb, 0xa}, types.Tx{0x40, 0x4d, 0x29, 0x4d, 0x8c, 0x3f, 0x1c, 0xcc, 0x73, 0x2f, 0x88, 0x9d, 0xa9, 0x33, 0xbd, 0xf3, 0xbf, 0x7e, 0x53, 0x36, 0xa, 0x33, 0x1f, 0x1c, 0x5a, 0x52, 0x7f, 0xed, 0x67, 0x1e, 0x21, 0x8, 0x8c, 0x18, 0xa0, 0xf2, 0x85, 0x7d, 0xd7, 0xcc, 0x77, 0xf, 0x43, 0x30, 0x1e, 0x1b, 0xa0, 0xfa, 0xd6, 0xc, 0xf, 0xa1, 0x6, 0xa9, 0xf6, 0xe5, 0xfb, 0xc0, 0x84, 0xa4, 0xd4, 0x7b, 0xa6, 0x73, 0x15, 0x62, 0x53, 0xe8, 0x61, 0x9f, 0x7c, 0xda, 0x35, 0x32, 0x44, 0xa6, 0xfe, 0x94, 0x3e, 0x8f, 0xe8, 0x1, 0xae, 0x9c, 0x43, 0xa, 0x72, 0x87, 0xcb, 0xe5, 0x75, 0xfc, 0x61, 0x81, 0x26, 0x26, 0x74, 0x45}, types.Tx{0xbc, 0x9, 0x42, 0xd4, 0x50, 0xe9, 0x2, 0x2d, 0xca, 0xf1, 0xe7, 0xa8, 0xc8, 0x13, 0x32, 0x13, 0x7c, 0x7f, 0x64, 0x87, 0x11, 0x5d, 0x51, 0xaa, 0xa0, 0x1e, 0xdc, 0x4e, 0xf8, 0xe2, 0xfd, 0xa8, 0xab, 0x4c, 0x6d, 0xc6, 0x93, 0xa, 0x14, 0x5e, 0x62, 0x56, 0x4d, 0x12, 0x43, 0x80, 0x0, 0x4f, 0x35, 0xcf, 0xf6, 0x3d, 0x3d, 0xcc, 0xda, 0xc4, 0x3b, 0x1f, 0xdd, 0xc5, 0x49, 0x54, 0xb3, 0xed, 0xe9, 0x45, 0xd4, 0x90, 0xc5, 0x9e, 0x55, 0x58, 0xcb, 0x79, 0xfd, 0xa3, 0x33, 0x3f, 0xa5, 0x21, 0xa8, 0xf3, 0x20, 0x30, 0x77, 0x31, 0x6d, 0x12, 0x55, 0x13, 0xf9, 0x4b, 0xec, 0x5a, 0xbb, 0x5c, 0xd, 0x92}, types.Tx{0xb8, 0x5d, 0x3d, 0xe3, 0xd0, 0x32, 0x5, 0xa9, 0x8e, 0x16, 0xd7, 0xff, 0xa1, 0xed, 0xa5, 0x6, 0x7a, 0xbf, 0xdd, 0x9b, 0xdb, 0x2, 0xd3, 0x5d, 0xf1, 0x9e, 0xfd, 0xda, 0x62}, types.Tx{0x97, 0x93, 0xf5, 0xca, 0x2, 0x7f, 0xfb, 0xab, 0xc4, 0x3, 0x15, 0x11, 0xce, 0xa5, 0x56, 0x35, 0x3, 0x6d, 0xea, 0x35, 0x49, 0x48, 0x2c, 0x8c, 0x3a, 0xfd, 0x59, 0x24, 0xd3, 0xd6, 0x12, 0x5d, 0x31, 0x3d, 0x93, 0x3d, 0x3, 0xb, 0x3e, 0x5f, 0x47, 0x21, 0xe5, 0x3a, 0xc3, 0xa6, 0x8c, 0x57, 0xa7, 0x9, 0x88, 0x81, 0x44, 0xb5, 0x6e, 0x75, 0xbb, 0xc4, 0x21, 0xdf, 0x3b, 0x3b, 0x40, 0xb4, 0xe2, 0x4c, 0x85, 0x91, 0x9, 0xdb, 0x68, 0x33, 0x76, 0x83, 0xea, 0xe7, 0xea, 0xea, 0x82, 0xc7, 0xe4}, types.Tx{0xce, 0xb2, 0x3c, 0x14, 0xa4, 0xe6, 0x2a, 0x6d, 0x74, 0x7d, 0x2c, 0x96, 0xeb, 0x88, 0xdf, 0x41, 0xd3, 0x4a, 0xd3, 0xb2, 0xc8, 0x1b, 0x12, 0xdf, 0x76, 0x6b, 0xe6, 0xbb, 0xaf, 0x87, 0xa4, 0xea, 0xbd, 0xcd, 0x4a, 0x46, 0xbc, 0xc1, 0xb8, 0x31, 0xeb, 0x18, 0xc9, 0xef}, types.Tx{0x6c, 0x0, 0x84, 0x8c, 0x9b, 0x82, 0x86, 0x88, 0xb, 0x9d, 0xd7, 0xca, 0x26, 0xa4, 0x8f, 0xa7, 0x3c, 0x59, 0xe8, 0x17, 0x30, 0xc1, 0x7d, 0x2b, 0xe8, 0x8e, 0x88, 0x32, 0x13, 0xa6, 0x5d, 0x9d, 0x65, 0x27, 0x38, 0x1c, 0x21, 0xc3, 0x25, 0x66, 0xb1, 0xb2, 0xc5, 0xdc, 0xaa, 0xab, 0x70, 0x9d, 0x40, 0x47, 0x8e, 0xa8, 0xd5, 0x1c, 0x94, 0x49, 0x4c, 0x6f, 0x20, 0x92, 0xe3, 0x26, 0xc5, 0x8e, 0xd3, 0x1b, 0x6a, 0xc5, 0xaf, 0x25, 0x29, 0x16, 0x13, 0x8, 0xff, 0x90, 0x89, 0xbc, 0x56, 0x5e, 0xd8, 0xfe, 0xe4, 0x8, 0x19, 0x8a}, types.Tx{0x25, 0x75, 0x77, 0xa, 0x29, 0x10, 0x2a, 0xcc, 0xd5, 0xdb, 0xba, 0xcd, 0x67, 0x3f, 0xd0, 0x93, 0x3e, 0xb7, 0x8c, 0x2, 0x46, 0x1b, 0x65, 0x9b, 0xe, 0x72, 0xfa, 0xc4, 0xfa, 0x22, 0xc4, 0xec, 0xd6, 0x66}, types.Tx{0xa3, 0x1e, 0x32, 0xa6, 0x9e, 0x17, 0x6b, 0x1a}, types.Tx{0x9f, 0xc0, 0x29, 0x43, 0x51, 0xc0, 0x1d, 0x76, 0xa6, 0x9e, 0x9c, 0xb0, 0x5d, 0xc9, 0xb1, 0x8e, 0xc4, 0x9f, 0xc4, 0xcf, 0xe1, 0x3f, 0x39, 0xbe, 0x89, 0x23, 0x4c, 0x88, 0x6c, 0x59, 0xe1, 0x8a, 0x36, 0x17, 0xc2, 0xaa, 0x23, 0x7a, 0x73, 0xf, 0xb5, 0x47, 0x93, 0xda, 0x2a, 0x98, 0xa, 0x74, 0x0, 0x7c, 0x87, 0xb4, 0x4e, 0xca, 0x9e, 0x97, 0xe7, 0x7f, 0x7e, 0xc0, 0x10, 0x5b, 0xbb, 0x93, 0xbd, 0x5b, 0xf2, 0x36, 0x9b, 0x5a, 0xb7, 0xf2, 0x37, 0x58, 0xef, 0x10, 0x10, 0x6b, 0x89, 0x6d, 0xb6, 0x14}, types.Tx{0xa6, 0xe0, 0xa6, 0x9a, 0x77, 0xee, 0xf4, 0xd9, 0x57, 0x3a, 0xdf, 0x5c, 0x8f, 0x98, 0x8d, 0x55, 0x76, 0x16, 0xc4, 0xc1, 0x75, 0x88, 0x89, 0x9b, 0xa7, 0x1f, 0x85, 0xad, 0xea, 0xe3, 0x1, 0xc7, 0xd, 0xf0, 0xd1, 0x69, 0x5c, 0xf9, 0x17, 0x7f, 0xb6, 0x2a, 0xe9, 0xb1, 0x19, 0x74, 0x81, 0x55, 0xcb, 0xc9, 0xf2, 0x8e, 0x44, 0x6c, 0xdf, 0x1d}, types.Tx{0xde, 0xb9, 0xb9, 0xed, 0x92, 0xc1, 0x33, 0x4e, 0xbb, 0x95, 0x5e, 0xd0, 0x55, 0x64, 0xc7, 0xdf, 0x3, 0x7c, 0xc, 0x79, 0x82, 0xe, 0xb0, 0xcf, 0xfe, 0xb4, 0x9c, 0x4f, 0xc7, 0x2e, 0xae, 0x9, 0xea, 0xaf, 0x9, 0xae, 0xba, 0x5d, 0xab, 0xc0, 0xce, 0x37, 0xa5, 0x25, 0x9f, 0xbb, 0xae, 0xc4, 0xd1, 0x11, 0xf7, 0x77, 0x6b, 0xed, 0xa8, 0xf0, 0x9f, 0x93, 0x6c, 0x94, 0x14, 0x87, 0xc2, 0x2c, 0x23, 0xa1, 0x50, 0xe, 0xab, 0xc6}, types.Tx{0xfa, 0x16, 0x15, 0x1, 0xb4, 0x16, 0x7b, 0x76, 0x3c, 0x8d, 0x71, 0xa2, 0x6c, 0x6d, 0xad, 0xb7, 0x5b, 0xfd, 0x40, 0x80, 0x3e, 0xc, 0x96, 0xc1, 0x8d, 0xb9, 0xf8, 0x6c, 0x26, 0x3, 0xed, 0xd4, 0xbe, 0x2d, 0x6b, 0x79, 0x63, 0x8a, 0xae, 0x3a, 0x87, 0xb1, 0xa6, 0xe6, 0x99, 0x6e, 0x14, 0x69, 0x5d, 0xba, 0xe4, 0xcf, 0x5b, 0x3a, 0x41, 0x3c, 0xe9, 0xde, 0x49, 0xab, 0x1f, 0x13, 0x72, 0x28, 0xab, 0x1f, 0xd9, 0x55, 0x91, 0x9b, 0x58, 0xfc, 0x5f, 0x45, 0x13, 0x3b, 0x80, 0x7d, 0xcf, 0xf2, 0xca, 0xc, 0x7f, 0x96, 0xff, 0xe4, 0x60, 0x32, 0xd4, 0xf3, 0x2a, 0x14, 0xa, 0xc0, 0x93}, types.Tx{0x5e, 0x20, 0xd3, 0x96, 0xc9, 0x25, 0x6d, 0x45, 0x31, 0x56, 0xbc, 0x63, 0x75, 0xd1, 0xe8, 0xa8, 0x21, 0x3a, 0xa2, 0x93, 0x2b, 0x7f, 0xd0, 0xce, 0x72, 0xe, 0xbc, 0x32, 0x35, 0xf5, 0x25, 0x75, 0xf3, 0x63, 0x54, 0xb4, 0x6a, 0xdf, 0xee, 0x38, 0x59, 0x5b, 0x7c, 0x11, 0x7e, 0x6, 0x41, 0xdb, 0x41, 0x95, 0x2d, 0x6b, 0x38, 0xb9, 0xab}, types.Tx{0x2a, 0x59, 0x90, 0x29, 0x36}, types.Tx{0x76, 0x58, 0xe7, 0x60, 0xd9, 0x8, 0x69, 0xa0, 0xb4, 0x80, 0x83, 0xc2, 0x6e, 0xc1, 0x90, 0x1c, 0xd3, 0x8, 0xef, 0x5b, 0xc, 0x5b, 0x82, 0xeb, 0x94, 0xd4, 0xe5, 0x49, 0x10, 0x74, 0x5a, 0x92, 0x72, 0x1f, 0x19, 0x60, 0x51, 0xde, 0x9d, 0x93, 0x84, 0x3, 0x1c, 0xab, 0x14, 0xe0, 0x11, 0xd6, 0x1d, 0x41, 0x7e, 0x18, 0xf6, 0x2f, 0x89, 0xc2, 0x5, 0x76, 0x9e, 0x2d, 0x5f, 0x43, 0xc4, 0xd4, 0x7a, 0x9f, 0x32, 0x14, 0xcc, 0xf7, 0xb2, 0x5d, 0xd6, 0xa5, 0x74, 0xcf, 0xd5, 0x16, 0xf8, 0x9b, 0x1a, 0xd8, 0x5, 0x44}, types.Tx{0x80, 0xde, 0x58, 0xc1, 0x7e, 0xe6, 0x56, 0x4d, 0x44, 0x78, 0x30, 0xcd, 0x62, 0x9e, 0x96, 0x6, 0xf2, 0x92, 0x9b, 0x26}, types.Tx{0xcc, 0x63, 0xa2, 0xcd, 0xfb, 0xfa, 0xa4, 0x32, 0xd6, 0x91, 0x7d, 0x83, 0x61, 0x63, 0x8d, 0x2c, 0x89, 0xda, 0xa0, 0x4a, 0x8c, 0x9a, 0xa, 0x0, 0xa0, 0x68, 0xa, 0x93, 0xf7, 0x8a, 0x33, 0x1f, 0x88, 0x6e, 0xc8, 0xce, 0x2c, 0x60, 0x13, 0x53, 0x6f, 0x12, 0x9f, 0xe2, 0xb, 0xc1, 0xf, 0x23, 0x8e, 0xd7, 0xf4, 0x36, 0xf6, 0x62, 0xa9, 0x1a, 0x91, 0x6b, 0x50, 0xed, 0xf6, 0x4d, 0x45, 0x99, 0x6f, 0xaa, 0x58, 0x5d, 0x34, 0x14, 0xf1, 0x76, 0xf6, 0x8b, 0xc3, 0x90, 0x44, 0x74, 0xca, 0x3f, 0xa5, 0xdf, 0xed, 0x5e, 0x7d, 0x3d, 0xb7, 0xe9}, types.Tx{0xfa, 0x67, 0x5, 0x39, 0x8, 0x4a, 0x3, 0x5d, 0x30, 0xb8, 0x95, 0x53, 0x92, 0xa7, 0x3f, 0x15, 0xbc, 0x8d, 0xe9, 0xd4}, types.Tx{0x28, 0x90, 0xe1, 0xc5, 0xe2, 0x70, 0x2d, 0x98}, types.Tx{0x6c, 0x44, 0xe3, 0x6d, 0x9a, 0xcc}, types.Tx{0x76, 0x18, 0x87, 0xbc, 0xdd, 0xad, 0x39, 0x1a, 0x15, 0x27, 0xed, 0x47, 0xf3, 0xea, 0x7c, 0x4b, 0x21, 0xa7, 0x1a, 0x10, 0xd2, 0xfb, 0x1, 0x43, 0x5e, 0x4f, 0x3f, 0x64, 0x8c, 0xd4, 0x88, 0xf1, 0x61, 0x5d, 0xc2, 0x64, 0xe, 0xbe, 0x63, 0xb2, 0xa9, 0x68, 0x88, 0x17, 0x2, 0x86, 0x9, 0x1e, 0x18, 0x97, 0xe7, 0xa5, 0xa7, 0xb2, 0xed, 0xc0, 0x2f, 0x33, 0x46, 0xbe, 0xbd}, types.Tx{0x32, 0x4d, 0x45, 0xc1, 0xb7, 0x41, 0x8, 0xc4, 0x4d, 0xc3, 0x15, 0x8, 0xb5, 0x86, 0x20, 0x2d, 0xe, 0x80, 0xe7, 0xf9, 0x6a, 0xc7, 0xab, 0xdd, 0x5d, 0xa8, 0x63, 0x72, 0x2, 0x78, 0xf2, 0x6d, 0xde, 0xa0, 0xfc, 0x17, 0xa2, 0xa7, 0x68, 0x8, 0xe7, 0x7f, 0xc8, 0xc, 0x6e, 0xd8, 0xea, 0x7f, 0xd3, 0x2b, 0xfe, 0xa5, 0x8a, 0xb8, 0xf2, 0xa8, 0x54, 0x5f, 0x1c, 0x2d, 0xde, 0xc1, 0xfd, 0xcb, 0xa3, 0x60, 0x37, 0xeb, 0x15, 0xdf, 0x3e, 0xc1, 0x93, 0x6d, 0xb0, 0xcc, 0xb, 0xa, 0x4b, 0x36, 0xfa, 0xa6, 0x3c, 0xbf, 0x68, 0xb8, 0x68, 0xd, 0xd8, 0x7a}, types.Tx{0x6e, 0x13, 0x15, 0x7d, 0xc3}, types.Tx{0x22, 0x59, 0xec, 0x94, 0xd7, 0xab, 0xd6, 0xdd, 0x2e, 0x3c, 0x12, 0x4b, 0x2d, 0xea, 0xbe, 0x46, 0x18, 0xdd, 0x7c, 0x70, 0x44, 0xb1, 0x32, 0x7b, 0xda, 0x48, 0xca, 0x40, 0x95, 0x10, 0x70, 0x7d, 0x6d, 0xf0, 0x14, 0x89, 0x5e, 0xe9, 0x5d, 0xfe, 0x53, 0x6c, 0x7f, 0x1f, 0xbd, 0xb2, 0x2e, 0x2c, 0x6e, 0xdb, 0xef, 0x5b, 0x55, 0x8, 0xc2, 0x91, 0xdc, 0x93, 0x7c, 0x6b, 0x18, 0xbe, 0xf9, 0x27, 0xe5, 0x3a, 0xec, 0x4f, 0x5b, 0xdb, 0x97, 0x55, 0x2, 0xf3}, types.Tx{0x4c, 0xd2, 0x2a, 0xe1, 0x9, 0x14, 0xb1, 0xf5, 0xff, 0xeb, 0x7b, 0x19, 0x66, 0x30, 0x3b, 0xd6, 0xd8, 0x84, 0x40, 0x56, 0x7e, 0x80, 0x11, 0x56, 0xb2, 0xbc, 0x2a, 0xf0, 0x2a, 0x1e, 0x6f, 0x25, 0x51, 0x7d, 0x7b, 0x3b, 0x51, 0x89, 0x79, 0xb5, 0x7f, 0x6e, 0x50, 0xbd, 0x2d, 0xfd, 0xb, 0xa7, 0x6f, 0xc1, 0xeb, 0xb5, 0x44, 0x14, 0xd4, 0x20, 0xd5, 0xe0, 0x98, 0x1d, 0x5a, 0xc1, 0x9e, 0x73, 0xca, 0xa0, 0xbe, 0xe3, 0x54, 0x37, 0xe1, 0x52, 0xed, 0x6e, 0xb3, 0x67, 0x40, 0xf7, 0x3e, 0xae, 0x20, 0x37, 0xad, 0x2e, 0x1e}, types.Tx{0xbe, 0xf0, 0x53, 0xd1, 0x7e, 0x71, 0x60, 0x61, 0xbc, 0xd1, 0xe5, 0xd8, 0x71, 0xe7, 0x73, 0x1d, 0xfb, 0xa0, 0x17, 0xa, 0x43, 0xc2, 0x31, 0x51, 0xff, 0xde, 0x45, 0xd7, 0x7a, 0x98, 0xad, 0xdd, 0x40, 0xe3, 0x16, 0x60, 0x2d, 0xf3, 0x22, 0x3f, 0xf9, 0xef, 0x13, 0x45, 0xe6, 0x6b, 0x6, 0x54, 0xb7, 0xff, 0xbe, 0xd, 0x41, 0x1d, 0x63, 0xc2, 0xf5, 0x6a, 0x8b, 0xc0, 0x2, 0x74, 0xbb, 0xd3, 0xcb, 0xd7, 0xe1, 0xfc, 0x27, 0x33, 0x34, 0x67, 0x16, 0x7d, 0x46, 0x58, 0xd7, 0x2a, 0x4c, 0x6f, 0xb8, 0x6, 0x3f, 0xe1, 0xb3, 0xe4, 0x89, 0xa0, 0xbc, 0xb2, 0x77, 0x40, 0x8, 0x59, 0x80, 0x93, 0xde, 0x5d}, types.Tx{0x2c, 0xb2, 0xf0, 0x7b, 0x2, 0xc1, 0x9a, 0x45, 0x78, 0x8a, 0xe4, 0xd8, 0x2f, 0x17, 0xbb, 0xb, 0x96, 0xd4, 0x2d, 0x99, 0xc9, 0xa5, 0x18, 0x3d, 0x92, 0x74, 0x50, 0x87, 0x1e, 0xd6, 0x72, 0x8b, 0x8f, 0xba, 0xe1, 0x30, 0xc8, 0xaf, 0x14, 0x8e, 0x13, 0x29, 0xf5, 0x7f, 0x27, 0xf7, 0x16, 0xd4, 0xfe, 0xfd, 0x55, 0xa8, 0xf6, 0x8a, 0xbc, 0x1f, 0xf0, 0xde, 0xcf, 0x97, 0x4e, 0x2b}, types.Tx{0x70, 0x18, 0x60, 0x49, 0x9d, 0x1a, 0xb7, 0xcb, 0x4e, 0xe1, 0x62, 0x3f, 0xa0, 0x35, 0x1e, 0x9e, 0xdd, 0x76, 0xa1, 0x15, 0xf4, 0x49, 0xad, 0xc, 0xea, 0xec, 0x9f, 0xa2, 0xd6, 0x29, 0x66, 0x8b, 0xe9, 0x52, 0x2a, 0x3b, 0x7f, 0xc9, 0x10, 0x3b, 0x63}, types.Tx{0x4e, 0xaf, 0x18, 0x23, 0x68, 0x65, 0xdb, 0x0, 0x20, 0xef, 0xbf, 0xb8, 0xa7, 0x9e, 0xd5, 0xc9, 0x9c, 0x4, 0x82, 0xee, 0x6d, 0x9c, 0x3c, 0xe6, 0xe5, 0x5b, 0x4a, 0xa9, 0xd9, 0x0, 0xa2, 0xea, 0x84, 0x9, 0x5b}, types.Tx{0x27, 0xb8, 0xe2, 0xf6, 0xfb, 0x59, 0xa1, 0x30, 0x97, 0x5d, 0x97, 0x25, 0x6f, 0x3a, 0xe0, 0xee, 0xa3, 0xb0, 0xd7, 0x3b, 0xe1, 0x76, 0xd4, 0xba, 0x26, 0x35, 0xc4, 0x76, 0x39}, types.Tx{0x21, 0x32, 0x34, 0x23, 0xd7, 0x33, 0x2e, 0x54, 0x18, 0xe2, 0x4, 0x4a, 0xe0, 0x46, 0x47, 0xe5, 0x37, 0xb4, 0x2, 0xc6, 0x97, 0x53, 0x46, 0x42, 0x91, 0x92, 0xb4, 0x89, 0xea, 0x25, 0x7, 0x7a, 0x37, 0x48, 0x31, 0xcd, 0x7b, 0xb1, 0x98, 0x1b, 0xc7, 0x38, 0xf3, 0xe1, 0xe2, 0x6e, 0xae, 0xc2, 0xe9, 0x30, 0x41, 0xad, 0xb5, 0xbd, 0xb7, 0xd1, 0x3c, 0xef, 0xf8, 0x2b, 0xcf, 0x7, 0x3a, 0xb7, 0x84, 0xae, 0xe5}, types.Tx{0x94, 0x10, 0xd5, 0x7e, 0x1f, 0xe6, 0xf1, 0x72, 0x91, 0xa0, 0x2d, 0xb5, 0xfc, 0xe5, 0xfe, 0x2a, 0x3a, 0x9f, 0xf1, 0x62, 0xd7, 0x60, 0xff, 0x97, 0xa0, 0xc6, 0xb7, 0xcb, 0x41, 0xc5, 0xd3, 0xb9, 0x14, 0xb6, 0xca, 0xf1, 0xf3, 0xa1, 0x18, 0xf, 0xa2, 0xee, 0xd9, 0x51, 0x1c, 0xab, 0x77, 0xc2, 0xcb, 0xb8, 0x4, 0xfc, 0x19, 0x18, 0xa1, 0xc5, 0xe7, 0x91, 0x8e, 0x81, 0x6e, 0xac, 0xfc, 0x8, 0xfe, 0xa3, 0x81, 0x5a, 0xde, 0x31, 0x42, 0x32, 0x75, 0xc4, 0x32, 0xad, 0xa1, 0x6e, 0xdb}, types.Tx{0x61, 0x62, 0x8, 0xdc, 0x2b, 0xde, 0x45, 0xb3, 0x83, 0x3f, 0x3, 0xd4, 0x9, 0x4b, 0xa7, 0x18, 0xef, 0x7d, 0x9a}, types.Tx{0x97, 0xa0}, types.Tx{0x13, 0x72, 0x6e, 0xdc, 0x78, 0xc8, 0xc9, 0x53, 0xa7, 0x72, 0x30, 0x9c, 0x94, 0x3a, 0xfb, 0x8f, 0xbb, 0x9d, 0xcf, 0x35, 0x41, 0x7a, 0xfa, 0xcb, 0x4e, 0xb2, 0x1e, 0x55, 0x60, 0xed, 0x9c, 0xec, 0x9a, 0x71, 0xd0, 0x2a, 0xa6, 0x2e, 0x19, 0xe2, 0x9c, 0xce, 0xcf, 0x99, 0x47, 0xa, 0xfd, 0x9f, 0x2a, 0xdd, 0x41, 0x90, 0x62, 0xef, 0xfc, 0x40, 0x1c, 0x10, 0x21, 0x57, 0xa2, 0x45, 0x22}, types.Tx{0xb5, 0x9, 0x52, 0x53, 0x63, 0x14, 0xc9, 0xe3, 0x5f, 0x3a, 0xdd, 0x4b, 0x26, 0xb9, 0x91, 0xd4, 0xc2, 0xc9, 0x9e, 0x21, 0x8d, 0xa, 0x71, 0x5c, 0xbc, 0xc7, 0x43, 0xec, 0x6c, 0x63, 0xdb, 0xe3, 0x75, 0xcc, 0x9d, 0xf4, 0x6e, 0xaf, 0x67, 0xe3, 0xde, 0x26, 0x11, 0x81, 0x1f, 0x76, 0x8, 0xcd, 0x5, 0xcd, 0x93, 0xac, 0xca, 0x3e, 0x3f, 0x2c, 0xeb, 0x1, 0xbc, 0x93, 0x33, 0xf9, 0xa3, 0x30, 0xdb, 0x86, 0x4, 0x1d}, types.Tx{0xcd, 0x0, 0x7b, 0x87, 0x86, 0x9f, 0xc, 0x39, 0x2c, 0xed, 0x7b, 0xbb, 0xb1, 0xff, 0xb2, 0x6e, 0xdd, 0x2f, 0x5b, 0xbd, 0x58, 0x25, 0xb1, 0xc2, 0x2d, 0xb5, 0xeb, 0x62, 0x41, 0xd9, 0x3c, 0xed, 0x3d, 0x55, 0x63, 0x8d, 0x75, 0xae, 0xbd, 0xb, 0x15, 0x58, 0xf4, 0xdc, 0xf8, 0x12, 0x35, 0xb3, 0x20, 0x34, 0x63, 0x68, 0xe8, 0xff, 0x2, 0xdf, 0xf, 0xa8, 0xd8, 0xc1, 0x66, 0x2f, 0xc6, 0xdb, 0xa2, 0xd1, 0xe1, 0x8e, 0x5e, 0xe0, 0x8f, 0x58, 0x46, 0xc8, 0x97, 0xec, 0xb1, 0x4f, 0x34, 0xfb, 0x71, 0xc9, 0x4, 0xc4, 0x2c, 0x4c}, types.Tx{0xcf, 0x85, 0x18, 0xba, 0x77, 0x23, 0xc0, 0xce, 0x20, 0xee, 0xb1, 0xbc, 0xdc, 0xc8, 0xad, 0xca, 0xb5, 0x3a, 0x5a, 0x1a, 0xef, 0xf4, 0x1c, 0x42, 0x39, 0xee, 0x7a, 0x53, 0xc0, 0xda, 0x77, 0xc5, 0x51, 0x4a, 0x70, 0xde, 0x9, 0xd1, 0x50, 0x2c}, types.Tx{0xee, 0x45, 0x99}, types.Tx{0xd2, 0x6a, 0x48, 0x82, 0x52, 0x27, 0xea, 0x20, 0x7c, 0xaf, 0xea, 0x63, 0xbc, 0x41, 0x2a, 0x2, 0x1d, 0x58, 0x8a, 0xb5, 0xee, 0x2f, 0x66, 0x4a, 0x8a}, types.Tx{0x97, 0x4, 0x14, 0x4e, 0x3b, 0x81, 0x24, 0xf1, 0xe1, 0xf9, 0xb2, 0xed, 0x26, 0xe2, 0x1d, 0x97, 0x49, 0x84, 0x48, 0x34, 0xb7, 0x32, 0xca, 0xf3, 0xe1, 0xaa, 0x52, 0xb6, 0x6b, 0x8b, 0x91, 0x9d, 0x97, 0xf3, 0xa8, 0x1, 0x71, 0x98, 0xb8, 0x98, 0xdb, 0x9a, 0x2c, 0xb6, 0xb, 0xf0, 0x1c, 0xb6, 0xf5, 0x1d, 0xd2, 0x75, 0x9e, 0x9a, 0x15, 0x4d, 0xb6, 0xc, 0xf8}, types.Tx{0x80, 0xf5, 0xaf, 0x70, 0x7e, 0x30, 0x1e, 0x63, 0xa2, 0x90, 0xc2, 0x38, 0x9b, 0xb, 0x45, 0x7a, 0xf7, 0x60, 0x4c, 0xee, 0xa6, 0x4a, 0x6, 0x6e, 0xf2, 0x5f, 0x93, 0x64, 0xc0, 0xe0, 0x8e, 0x65, 0xa9, 0x7, 0xf6, 0xfb, 0xab, 0x86, 0xbe, 0x1e, 0xc6, 0x31, 0xab, 0xc6, 0xdf, 0x66, 0x5a, 0xeb, 0x4f, 0xbc}, types.Tx{0x58, 0x33, 0xe6, 0xc1, 0x4c, 0x95, 0x25, 0x5c, 0xe7}, types.Tx{0x7d, 0xf, 0xf4, 0xae, 0x70, 0xbd, 0x87, 0x8c, 0x45, 0x76, 0x72, 0x1c, 0x4e, 0xc3, 0xd9, 0xed, 0xa5, 0xb9, 0x27, 0xab, 0xf2, 0x37, 0x75, 0xa0, 0xd3, 0x39, 0xb5, 0x70, 0x9e, 0xd5, 0x57, 0x70, 0x87, 0x57, 0x9, 0x12, 0xfc, 0x71, 0x7c, 0x7a, 0x8f, 0xbe, 0x69, 0xc4, 0x10, 0xec, 0xd8, 0x20, 0x82, 0x2, 0x15, 0xbf, 0x20, 0xbe, 0x84, 0xdd, 0x5, 0x63, 0xd, 0x40, 0x59, 0x44, 0x26, 0x94, 0xf2, 0xdd, 0x86, 0xbd, 0x3f, 0xf, 0x3e, 0x56, 0x1f, 0xfe, 0x32, 0x99, 0x35, 0x6a, 0xe0, 0xf7, 0xd8}, types.Tx{0xa0, 0x1f, 0xde, 0xd4, 0xe3, 0xe9, 0xba, 0x1, 0xca, 0x88, 0x8e, 0xb8, 0x59, 0x58, 0xe7, 0x92, 0x7d, 0xfb, 0xa9, 0xab, 0xb8, 0xf1, 0x61, 0x8, 0x64, 0x91, 0xcd, 0xc6, 0xea, 0xc0, 0xf2, 0x45, 0x44, 0xa2, 0xf6, 0x7c, 0x32, 0x86, 0x52, 0x27, 0x2d, 0x6f, 0xd0, 0xe1, 0xb3, 0x8e, 0xef, 0x10, 0xd5, 0xfc, 0xd8, 0x3a, 0x8, 0xa5, 0xd6, 0x98, 0x33, 0xb4, 0x4d, 0x13, 0x13, 0x10, 0xd, 0xe}, types.Tx{0xf, 0x5e, 0xc3, 0xb8, 0x49, 0x3c, 0xf0, 0xaf, 0x8a, 0x94, 0x99, 0x58, 0xc7, 0x1, 0x89, 0x2b, 0xb}, types.Tx{0xba, 0x63, 0xcb, 0x36, 0x44, 0x9b, 0x7, 0xa6, 0x94, 0xd9, 0x7e, 0x20, 0x6e, 0x45, 0x1e, 0x55, 0x21, 0x85, 0xbe, 0x7b, 0x45, 0x5e, 0x55, 0x63, 0xb0, 0xff, 0x62, 0x43, 0x89, 0x30, 0x3d, 0xe4, 0x43, 0x53, 0xfa, 0xb, 0xc5, 0x16, 0xfc, 0x11, 0x19, 0xb7, 0xd3, 0x4b, 0x5, 0xee, 0x7a, 0xb3, 0x19, 0x8c, 0x82, 0x84, 0xcd, 0x80, 0xcc, 0xf, 0x7, 0xac, 0xe8}, types.Tx{0x42, 0xb7, 0xc9, 0x1b, 0x66, 0x39, 0xf5, 0x97, 0x3, 0x7d, 0xb, 0x4d, 0xb, 0xea, 0x49, 0xbf, 0x2a, 0x9c, 0xa4, 0x3d, 0xf1, 0x39, 0xe8, 0xbc, 0x8f, 0x48, 0x98, 0xe7, 0xa3, 0xbc, 0x78, 0x27, 0xc9, 0x24, 0x66, 0xde, 0x11, 0x47, 0x87, 0xd9, 0xd3, 0x95, 0x56, 0x57, 0x99, 0x61, 0xf7, 0x9b, 0x85, 0x32, 0x6c, 0xe1, 0x58, 0x14, 0xaa, 0x18, 0xed, 0x6b, 0x83, 0x2f, 0xca, 0x40, 0x64, 0xe0, 0xea}, types.Tx{0x18, 0x47, 0xb0, 0xfe, 0x5d, 0x5, 0x1b, 0xd2, 0xd7, 0x18, 0x8b}, types.Tx{0x17, 0x6c, 0xfc, 0xe6, 0x70, 0x57, 0x19, 0xd0, 0x7e, 0xca, 0xff, 0x1e, 0x9d, 0xb0}, types.Tx{0x84, 0x70, 0xda, 0x2f, 0xb6}, types.Tx{0xe6, 0x3e, 0x62, 0x2b, 0xde, 0x1, 0x9d, 0xb2, 0xab, 0x4e, 0x7c, 0x22, 0x48, 0x6b, 0xb7, 0xd6, 0x48, 0xe3, 0xd1, 0xd0, 0xbb, 0xd8, 0x40, 0xde, 0x92, 0xbd, 0xc7, 0x38, 0x85, 0x10, 0x13, 0xf4, 0x76, 0x7b, 0xb0, 0x74, 0xde, 0xdb, 0x7f, 0x33, 0x95, 0x8f, 0x35, 0x5d, 0xe2, 0x70, 0x58, 0x3f, 0xb7, 0x69, 0x83, 0x6b, 0x73, 0xfd, 0xf7, 0xbf, 0xa, 0x6, 0x9, 0xfd, 0x74, 0x37, 0x1c, 0xd3, 0x71, 0xac, 0x18, 0xfa, 0x62, 0xf0, 0xb4, 0x45, 0xed, 0x1d, 0x57, 0xde, 0x62, 0x79, 0xfc, 0x95, 0xe9, 0x61, 0x62, 0xaf, 0xec, 0x3d, 0xa5, 0xaa, 0x75, 0x9b, 0xe2, 0x23, 0x2d}, types.Tx{0x1a, 0x27, 0xb7, 0xfe, 0x96, 0xe9, 0xb7, 0x59, 0x46, 0x9e, 0xc2, 0x8c, 0x6e, 0x0, 0xa4, 0x89, 0x2a}, types.Tx{0x51, 0x5f, 0x65, 0xd, 0x3e, 0xa1, 0xec, 0x9b, 0xe, 0x80, 0x4f, 0x1f, 0x3f, 0xf7, 0xad, 0x83, 0xb7, 0xfa, 0xc4, 0x6e, 0xc4, 0x4c, 0xa3, 0xbd, 0xde, 0xc6, 0xbf, 0xd2, 0x86, 0x74, 0xaa, 0xa7, 0x4f, 0x4, 0x44, 0x41, 0xc2, 0xf8, 0xdf, 0xa6, 0x8a, 0xa0, 0x93, 0xa7, 0xe2, 0xc2, 0xd2, 0xae, 0xa3, 0x79, 0xfa, 0xd4, 0x9f, 0xb6, 0xe4, 0x3a, 0x4a, 0x31, 0x8d, 0x22, 0x4b, 0x29, 0x68, 0xae, 0x99, 0x50, 0x95, 0x3, 0xe4, 0x32, 0x55, 0xa, 0x50, 0x50, 0xf7, 0x47, 0x71, 0xc7, 0x24, 0x9f, 0xbb, 0xee, 0x83, 0x7a, 0x72, 0x9e, 0x27, 0xd1, 0x76, 0x30, 0xcf, 0x42, 0xe8, 0xd1, 0xcf, 0x84}, types.Tx{0x7a, 0xbb, 0x9d, 0x4e, 0x57, 0xf3, 0x9d, 0x92, 0x94, 0xef, 0x94, 0x2e, 0x34, 0xc0, 0xa4, 0x3f, 0x4, 0x2c, 0x44, 0xdd, 0x54, 0x7, 0x1e, 0x17, 0xab, 0xcd, 0x49, 0x7e, 0xb3, 0x1d, 0x94, 0x5, 0x3b, 0x69, 0x3c, 0x77, 0x53, 0xb8, 0xa9, 0xf2, 0xf8, 0xc4, 0x89, 0x43, 0x2f, 0xa, 0x43, 0xe, 0x2f, 0x9, 0x27, 0xdb, 0xcd, 0xdc, 0xf, 0x6c, 0x46, 0xf7, 0x40, 0x31, 0xb, 0xc2, 0xe6, 0xf2, 0x3e}, types.Tx{0x44, 0xb2, 0xbd, 0xda, 0xbc, 0x11, 0xa4, 0x19, 0xa, 0x34, 0x87, 0x8c, 0x1e, 0x3e, 0xb8, 0x3b, 0xc5, 0x63, 0x13, 0xda, 0x65, 0x45, 0xe3, 0x51, 0x99, 0xd7, 0x5e, 0x83, 0x89, 0x6a, 0xb0, 0x79, 0x45, 0xe1, 0xd0, 0x92, 0x76, 0x96, 0x65, 0x7c, 0x27, 0x2a, 0x7c, 0xfd, 0x2b, 0xf1, 0x19, 0x7b, 0xc8, 0x8f, 0x22, 0x4d, 0x8b, 0x15, 0xe1, 0xee, 0x1f, 0xf0, 0xb, 0x9f, 0x5c, 0xb0, 0x96, 0x53, 0x2a, 0x60, 0x49, 0x33, 0xc0, 0x6b, 0xf3, 0x67, 0x4d, 0x91, 0xc3, 0xf3, 0x42, 0x18, 0x7e, 0x8c, 0x4c, 0xfd, 0x5f, 0xc, 0xea, 0xcf, 0xf3, 0x4f, 0x78, 0xd5, 0x41, 0xeb, 0x4f, 0xd3, 0x17, 0x58}, types.Tx{0x93, 0xa2, 0x7f, 0x3d, 0xba, 0xf3, 0x76, 0x96, 0xd0, 0x58, 0x11, 0x87, 0xa7, 0x56, 0xd4, 0xcc, 0x3d, 0xc, 0xb5, 0x10, 0xc2, 0xe1, 0xdf, 0xac, 0x3b, 0xcc, 0x3b, 0x22, 0x7b, 0xfa, 0xb5, 0xce, 0xa6, 0xb6, 0xd0, 0x94, 0x18, 0xef, 0x3b, 0xb5, 0xa9, 0xe5, 0xe5, 0x66, 0x3e, 0xc9, 0x70, 0xe5, 0x6d}, types.Tx{0x6d, 0xbf, 0x3a, 0x8c, 0x93, 0xbe, 0x7f, 0x6f, 0x23, 0xc8, 0xc6, 0x68, 0x1c, 0x8e, 0x6d, 0x9, 0x4e, 0xc2, 0x7d, 0xc0, 0xaf, 0xb9, 0xaa, 0xd3, 0xc7, 0x0, 0xd1, 0xd2, 0x63, 0xc9, 0x94, 0xa0, 0x26, 0x9c, 0x6c}, types.Tx{0xc3, 0x1f, 0xca, 0xfa, 0x9d, 0x64, 0xd5, 0x4e, 0x5, 0x9d, 0x43, 0xfa, 0x20, 0x1d, 0xba, 0x2b, 0x6c, 0x8b, 0xc6, 0x2c, 0x25, 0x76, 0x39, 0x2c, 0x94, 0x4, 0xb}, types.Tx{0xa, 0x58, 0xc3, 0x8b, 0x4, 0x36, 0x43, 0xc9, 0xbe, 0xc2, 0x62, 0xc8, 0x8e, 0x40, 0xe6, 0xdd, 0x1b, 0x19, 0x33, 0xa2, 0x4b, 0xa5, 0xc, 0xc4, 0xc8, 0x22, 0x26, 0xa7, 0xb1, 0x7d, 0x4f, 0x6d, 0xeb, 0x55, 0x4a, 0xce, 0x8, 0x32, 0x5a, 0x47, 0xda, 0xe4, 0x28, 0xd7, 0x64, 0x7b, 0xcf, 0xe, 0xa6, 0x9b, 0xf9, 0xde, 0xb0, 0x1f, 0x30, 0x30, 0x45, 0xe9, 0x10, 0xd2, 0x4b, 0x74, 0xf1}, types.Tx{0x8d, 0x39, 0xe4, 0xd0, 0x53, 0x49, 0xf9, 0x70, 0xfe, 0x45, 0xc0, 0x3d, 0xf6, 0xea, 0xd5, 0xf3, 0x95, 0x1f, 0xf1, 0xab, 0x43, 0xa4, 0xc4, 0xe7, 0x9c, 0x97, 0xc9, 0xf4, 0x46, 0xb7, 0x10, 0x4f, 0x54, 0x94, 0xe9, 0x8a, 0x14, 0xb1, 0xba, 0x8c, 0x92, 0x68, 0xd7, 0x30, 0x3a, 0x7d, 0xd4, 0x96, 0x56, 0x91, 0xc6, 0x30, 0x34, 0x43, 0x47, 0x47, 0xd1, 0xa1, 0x87, 0x9c, 0x44, 0x9, 0xfa, 0xbd, 0x8b, 0x73, 0xbc, 0xca, 0xa7, 0x5b, 0xdc, 0x2e, 0xef, 0x44, 0x22, 0x92, 0x9b, 0xa9, 0x53, 0x9e, 0xfe, 0xe0, 0x32, 0x84, 0xbc}, types.Tx{0x31, 0x6a, 0xa4, 0xc1, 0x5d, 0xe8, 0x39, 0xad, 0x43, 0xcd, 0x9f, 0x89, 0x39, 0xaf, 0xfc, 0xee, 0xbe, 0x9, 0xed, 0xe0, 0x20, 0xa1, 0x4, 0x10, 0x32, 0x50, 0xbd, 0x4e, 0x6b, 0x7a, 0x73, 0x61, 0xb9, 0xdb, 0x46, 0xbc, 0x5b, 0x32, 0xc8, 0x3e, 0xa5, 0xa7, 0xa8, 0xbd, 0xec, 0x6b, 0x31, 0xc7, 0x5b, 0x5a, 0x74, 0x7a, 0x62, 0xd, 0x88, 0x89, 0x43, 0xd2, 0x1f, 0xb0, 0x7a, 0xf0, 0xdf, 0x57, 0xf6, 0x78}, types.Tx{0x0, 0x9b, 0xce, 0xfd, 0x7e, 0xd5, 0x4a, 0xff, 0x4e, 0x23, 0xa8, 0x80, 0xc5, 0x17, 0x97, 0x8c, 0x26, 0xa9, 0xdf, 0xf6, 0xd0, 0x86, 0x24, 0x7b, 0xc7, 0xc2, 0x19, 0xa, 0x1b, 0x15, 0xc3, 0xab, 0xfd, 0x75, 0x1, 0x76, 0xc, 0xa0, 0xf5, 0x92, 0x4d, 0x77, 0x2d, 0x2, 0xdd, 0xbe, 0x72, 0x24, 0xa6, 0xb6, 0x8f, 0xb7, 0xf5, 0x59, 0x6e, 0x3e, 0x58, 0xf1, 0xf3, 0xbc, 0xd2, 0xfd, 0xe2, 0x3a, 0x19, 0xf4, 0x6c, 0x74, 0x3b, 0x9e, 0x8e, 0x2a, 0x95, 0xb6, 0xb4, 0x3d, 0x1e, 0xee, 0x33, 0xd2, 0x9f, 0x14, 0x99, 0x79, 0xe9, 0x3f, 0x4b, 0x9b, 0x9e, 0x82, 0xf2, 0xb9, 0xad, 0xfd, 0x79, 0x7a, 0xcc}, types.Tx{0x3b, 0x64, 0x91, 0x82, 0x6a, 0x24, 0x85, 0xba, 0xc3, 0xf2, 0xae, 0xda, 0x25, 0xb5, 0x5d, 0x46, 0x9a, 0x7c, 0x98, 0xbc, 0x1f, 0x7, 0x79, 0xa4, 0xed, 0x44, 0x8b, 0x29, 0x31, 0xc7, 0x5c, 0x57, 0x42, 0xca, 0x81, 0x4a, 0xb9, 0x7c, 0xb5, 0xce, 0xe2, 0x5, 0xa6, 0xc2, 0x5, 0xf8, 0x93}, types.Tx{0x2c, 0x55, 0x53, 0x4e, 0xc6, 0xef, 0xfc, 0xc7, 0x87, 0x4c, 0x2c, 0xdc, 0xec, 0x44, 0x7, 0x82, 0xb1, 0x4a, 0xc4, 0x3c, 0xa1, 0x13, 0x30, 0xaa, 0xa4, 0x17, 0xb5, 0x30, 0x48, 0xd9, 0x1e, 0x60, 0x9, 0x65, 0xb5, 0x15, 0x42, 0x66, 0x15, 0x92, 0xc1, 0x21}, types.Tx{0x12, 0x6b, 0x4c, 0x2c, 0x15, 0x82, 0xf2, 0xce, 0xa9, 0x1f, 0xb5, 0x49, 0x0, 0x65, 0x42, 0x1f, 0x1e, 0xdb, 0xde, 0x1, 0xf8, 0x45, 0xa4, 0x9f, 0xa0, 0xf8, 0x81, 0xe1, 0x50, 0xbc, 0xf0, 0xa3, 0x97, 0x8b, 0x2d, 0x4, 0xfa, 0xbd, 0xd4, 0x78, 0xcd, 0x5d, 0x6b, 0x11, 0x6e, 0x59, 0xac, 0xcc, 0x94, 0x3d, 0x67, 0x5a, 0xa7, 0xf, 0x34, 0xb0, 0xfe, 0x65, 0x89, 0xb5, 0xe3, 0xde, 0x43, 0xb2, 0xd7, 0xb1, 0xae, 0x42, 0xc2, 0x30, 0x49, 0x4, 0x96, 0xd2, 0xc7, 0x5c, 0xe9, 0xad, 0xf, 0x2e, 0xad, 0xbc, 0xa4, 0x42, 0xe1, 0x65, 0xb5, 0x96, 0x28, 0x7a, 0xd4, 0xfa}, types.Tx{0xe2, 0x5f, 0x47, 0xfe, 0x32, 0x7b, 0xfb, 0xa, 0xd5, 0xef, 0xb7, 0x8a, 0xe2, 0x40, 0xd, 0x67, 0x10, 0x26, 0x8c, 0xfd, 0xaa, 0x2e, 0xe0, 0x70, 0xe8, 0xc9, 0xd0, 0x6a, 0x8, 0x2f, 0x62, 0xc8, 0xb9, 0xca, 0xd3, 0xdc, 0xd1, 0x85, 0xbe, 0x1a, 0x53, 0xc, 0xaf, 0x9b, 0x6, 0x19, 0x54, 0x91, 0x85, 0x17, 0x1b, 0x1b, 0xd, 0xc3, 0xad, 0xe7, 0x2c, 0x29, 0xb3, 0x3b, 0xb9, 0xfb, 0x5e, 0x82, 0xe8, 0xed}, types.Tx{0x4e, 0xc0, 0xae, 0x23, 0x1f, 0xc8, 0x69, 0xa7, 0xd1, 0x8d, 0x51, 0xca, 0x5d, 0x7b, 0x4e, 0x62, 0x17, 0xed, 0x54, 0x5a, 0xd3, 0xdc, 0x2d, 0x1b, 0xca, 0xa8, 0x6c, 0xd0, 0x6e, 0x80, 0x26, 0x1e, 0xbf, 0x15, 0x1f, 0xf6, 0x30, 0x8e, 0xd0, 0xdf, 0xed, 0xf, 0xf3, 0xc4, 0x2c, 0xb0, 0x73, 0xc9, 0xb9, 0x6d, 0x0}, types.Tx{0xb4, 0x9a, 0x40, 0x49, 0x2a, 0x4c, 0x2e, 0x78}, types.Tx{0x4e, 0xa5, 0xf1, 0x4e, 0x1c, 0x3c, 0xc9, 0x13, 0xca, 0x3c, 0x51, 0xc4, 0x8f, 0x66, 0x2b, 0xbf, 0xc6, 0x24, 0x16, 0x34, 0x20, 0xe8, 0x97, 0x4, 0x6f, 0x3, 0xe3, 0xe0, 0x10, 0xc7, 0x14}, types.Tx{0xf, 0xde, 0x9b, 0x56, 0x15, 0xc4, 0xfe, 0xd8, 0xbb, 0x34, 0xf6, 0x5, 0x49, 0xa8, 0x99, 0x88, 0xa7, 0xb5, 0x1d, 0xb4, 0x10, 0x49, 0x2c, 0x37, 0x2d, 0xbd, 0xf2, 0x20, 0xb2, 0x9, 0xbf, 0x5d, 0xa2, 0x88, 0x5a, 0x6b, 0xcd, 0xea, 0x77, 0x1d, 0xb1, 0x29, 0x23, 0x61, 0xcd, 0xaa, 0xb2, 0xb7, 0x1e, 0x27, 0xc5, 0x50, 0x59, 0x3c, 0x19, 0x47, 0x1d, 0x78, 0x63, 0x1, 0x39, 0xd1, 0x2f, 0xf0, 0xb, 0x48, 0xbd, 0xe2, 0x79, 0xe1, 0xf8, 0x3e, 0x1f, 0xec, 0x38, 0x9e, 0x1b, 0xe0, 0x38, 0xb4, 0x8, 0xd2, 0x20, 0x35, 0x6, 0xf, 0x3c, 0x6d}, types.Tx{0xee, 0x5e, 0x15, 0x4, 0xe6, 0x13, 0x2, 0x5f, 0xae, 0xd5, 0x5d, 0x45, 0x43, 0x66, 0x1, 0xf3, 0xe5, 0x2b, 0x86, 0xe4, 0xdd, 0xdf, 0xfa, 0x2, 0x21, 0x6e, 0xef, 0x60, 0x46, 0x5c, 0x6f, 0xd7, 0x77, 0x1d, 0xd, 0x50, 0x6e, 0xd6, 0xa2, 0x37, 0xf7, 0x99, 0x6d, 0xed, 0x9b, 0xf7, 0x72, 0xb5, 0xce, 0x6c, 0x56, 0x21, 0x1f, 0xc8, 0xee, 0x8, 0x53, 0xf4, 0xcf, 0xd8, 0x3, 0x93, 0xa, 0x8, 0xed, 0x8, 0x33, 0xd9, 0x3d, 0x9, 0x43, 0xfe, 0x3a, 0x18, 0xb, 0x8, 0x6c}, types.Tx{0x47, 0x81, 0xdd, 0x48, 0xc9, 0xf9, 0x15, 0x62, 0xa4, 0x81, 0xdb, 0x93, 0xce, 0xd7, 0x1f, 0xc1, 0x3b, 0xc1, 0xfb, 0xc8, 0x1, 0x4d, 0x8f, 0xfc, 0x32, 0x79, 0xeb, 0x8d, 0xc2, 0xc9, 0x0, 0x5a, 0x81, 0x5d, 0xe8, 0x54, 0x8a, 0x39, 0x8b, 0x4c}, types.Tx{0xcd, 0x1e, 0xf4, 0xa6, 0x8c, 0xce, 0xae, 0x8b, 0x47, 0xbd, 0x89, 0x3a, 0xb2, 0x16, 0xce, 0x89, 0x5, 0xc0, 0xe4, 0x20, 0x75, 0x13, 0x44, 0xee, 0x46, 0xe0, 0xb5, 0x8f, 0xba, 0x46, 0xf9, 0x95, 0xff, 0xc0, 0x86, 0x88, 0xb4, 0x7e, 0x63, 0x21, 0x27, 0x65, 0x8e, 0xd4, 0x6a, 0x30, 0x78, 0x43, 0xae, 0x49, 0x7, 0x68, 0x8d, 0x7f, 0x84, 0x61, 0x26}, types.Tx{0x34, 0x89, 0x60, 0x18, 0xed, 0xe6, 0xf1, 0xa5, 0x81, 0x66, 0x4f, 0x45, 0x7, 0x59, 0x31, 0x43, 0xf2, 0xd5, 0x0, 0x5f, 0xaa, 0x3f, 0xc4, 0x3a, 0xda, 0x44, 0x1, 0x1b, 0xb, 0x90, 0x66, 0xbe, 0xb, 0xb2, 0xb6, 0xf2, 0x52, 0xe0, 0x5f, 0x9e, 0xf0, 0xc1, 0xf3, 0x1b, 0x76, 0x7c, 0x3, 0x3e, 0x70, 0xd7, 0xfc, 0xbe, 0xe1, 0xae, 0xef, 0xcd, 0x2, 0x50, 0x35, 0xda, 0x40, 0xd5, 0x1a, 0xaa, 0xf6, 0x9c, 0x4a, 0x7b, 0xae, 0x9d, 0x2f, 0xc0, 0x64, 0x17, 0x6b, 0xd2, 0x2}, types.Tx{0x5c, 0xd7, 0xdc, 0xe5, 0xbf}, types.Tx{0xf5, 0xec, 0x95, 0x2b, 0x25, 0xaf, 0xf0, 0xe8, 0x74, 0xd0, 0x72, 0x42, 0x37, 0xfb, 0xb2, 0x17, 0xb2, 0x40, 0x54, 0x65, 0x8e, 0x62, 0x6d, 0x23, 0xb2, 0x2e, 0x39, 0x20, 0xf9, 0xeb, 0x3d, 0x2f, 0x4f, 0xbe, 0xf2, 0x8c, 0xc1, 0x83, 0xb5, 0x7b, 0x32, 0xe2, 0xc5, 0x4c, 0x21, 0xe1, 0x9d, 0x49, 0xb9, 0x91, 0x37, 0x6d, 0x17, 0xf7, 0x57, 0xe4, 0x9, 0x2e, 0x9d, 0x86, 0x9b, 0x13, 0x74, 0xdb, 0x2b}, types.Tx{0x12, 0x7, 0x88, 0xd0, 0x4c, 0xb3, 0x7a, 0x6a, 0xf3, 0x11, 0xe6, 0x4d, 0x62, 0x56, 0x92, 0xaf, 0xb, 0x87, 0xe, 0xe, 0xc2, 0x21, 0x93, 0xeb, 0x9d, 0x0, 0x45, 0x73, 0xa0, 0x34, 0x8c, 0xfe, 0xc5, 0xf, 0xb9, 0x48, 0x81, 0x1b, 0x1e, 0x21, 0xb0, 0x54, 0xbe, 0x38}, types.Tx{0x6b, 0x1, 0xcf, 0x3, 0xd, 0x83, 0x2a, 0x1e, 0x32, 0x37, 0x3f, 0xc8, 0x9, 0xf6, 0xdd, 0x60, 0xbb, 0xd7, 0xf8, 0x60, 0xec, 0x62, 0x3a, 0xb9, 0xa6, 0x80, 0x83, 0x3f, 0xd9, 0x99, 0x9f, 0x96, 0x57, 0x59, 0x69, 0x51, 0xe, 0xc3, 0x69, 0xcc, 0xc4, 0x54, 0x52, 0x82, 0x3f, 0x6e, 0xc1, 0xfd, 0xb6, 0xc4, 0x77, 0xb8, 0x52, 0xe1}, types.Tx{0xbc, 0xa2, 0x5a, 0x99, 0x91, 0x25, 0x6a, 0x59, 0x57, 0xe1, 0x58, 0x63, 0x3d, 0xba, 0x42, 0xb9, 0x41, 0x5f, 0xea, 0x97, 0xa8, 0xa3, 0xb0, 0x7e, 0x57, 0xfe}, types.Tx{0x3c, 0x1, 0xa4, 0xff, 0x3d, 0x96, 0xc4, 0xef, 0xf1, 0xba, 0x5e, 0x6a, 0x79, 0xc8, 0x67, 0x96, 0xdb, 0x8a, 0x2e, 0x8d, 0xf, 0x6f, 0x84, 0xea, 0x86, 0xef, 0x9e, 0x50, 0x73, 0x79, 0x32, 0x55, 0xc, 0x31, 0xc, 0x27, 0x58, 0xdf, 0xe6, 0x80, 0xce, 0x52, 0x97, 0x9c, 0x2b, 0xea, 0x6c, 0xf5, 0x18}, types.Tx{0xde, 0x5c, 0x13, 0xe8, 0x7b, 0x29, 0xf6, 0xed, 0xed, 0xa, 0x8d, 0xf5, 0x4a, 0x2f, 0xe8, 0xf5, 0x25, 0x25, 0x98, 0xf2, 0xd0, 0x8f, 0x84, 0x13, 0x70, 0xfe, 0x2f, 0xff, 0x3e, 0x7d, 0x73, 0x66, 0xb3, 0x13, 0x50, 0x46, 0xb8, 0x9d, 0x3, 0x16, 0x9b, 0xa9, 0xa0, 0x1e, 0xc6, 0x2a, 0xf0, 0x2f, 0x18, 0xfa}, types.Tx{0x16, 0x19, 0xb7, 0xe4, 0x78, 0xdf, 0xd5, 0x83, 0x64, 0xc3, 0xf1, 0x55, 0x51, 0x6e, 0xd6, 0xed, 0x23, 0x41, 0xbf, 0x3e, 0x85, 0xcb, 0xfa, 0x20, 0x8c, 0x5f, 0xa4, 0x99, 0xb5, 0xa3, 0x7b, 0x7e, 0x87, 0x2c, 0x4b, 0xb9, 0x86, 0x28, 0x7e, 0xc, 0x87, 0xbb, 0x21, 0xb6, 0x3f, 0xb6, 0x41, 0x43, 0x99, 0xe9, 0x55, 0xa2, 0x9e, 0xd2, 0xb4}, types.Tx{0x30, 0xd7, 0x30, 0x65, 0x52, 0x1e, 0xd0, 0xb2, 0x3e, 0x8b, 0xf8, 0xe4, 0x40, 0x45, 0xeb, 0x48, 0x80, 0x3, 0x23, 0x1d, 0xf9, 0x21, 0xa6, 0xa6, 0xc2, 0x4e, 0x93, 0xed, 0x2c, 0xb6, 0xff, 0xd3, 0x42, 0xf6, 0x5e, 0x48, 0xa7, 0xd5, 0x38, 0xaa, 0x7d, 0x57, 0xec, 0x70, 0x8d, 0xb, 0x4f, 0x3a, 0xc9, 0xc, 0x45, 0xdc, 0x83, 0xf6, 0xf8, 0xf5, 0x5e, 0x34, 0x42, 0xa0, 0xd3, 0x9b, 0x42, 0x41, 0x35, 0x97, 0x50, 0xc7, 0x69, 0x91, 0x12, 0x7d, 0x1a, 0xe8, 0xc1, 0xd5, 0xcf, 0x65}, types.Tx{0xb6, 0x5, 0x45, 0xd0, 0xf6, 0xfe, 0x4c, 0x46, 0xc1, 0xf4, 0x6b, 0x42, 0xf5, 0x5e, 0x7f, 0x40, 0xd5, 0xb8, 0xde, 0xce, 0x95, 0xff, 0x33, 0x53, 0x22, 0xa9, 0x8d, 0x9b, 0x5a, 0xc3, 0x91, 0x14, 0xc3, 0x59, 0xaf, 0x56, 0xb8, 0x91, 0xcc, 0x51, 0x32, 0x7f, 0xf0, 0x64, 0x4c, 0x8c, 0xa8, 0x6e, 0x98, 0x23, 0x21, 0x46, 0xaf, 0xf2, 0xea, 0x2e, 0xe2, 0xa3}, types.Tx{0x28, 0x0, 0x31, 0x5f, 0x78}, types.Tx{0x68, 0x68, 0xe4, 0x9, 0x51, 0x31, 0x54, 0xda, 0xa1, 0x6e, 0x3c, 0x7d, 0x55, 0x6f, 0x75, 0x5e, 0xd1, 0x37, 0x78, 0x2a, 0x7, 0x1e, 0x56, 0x11, 0x1c, 0xca, 0x7, 0xfd, 0x6f, 0xbf, 0xff, 0xd2, 0x8a, 0x14, 0xa8, 0x55, 0x3b, 0xd3, 0x54, 0x72, 0x13, 0xd2, 0xb3, 0xe7, 0x74, 0xfc, 0x11, 0x47, 0x65, 0xd8, 0x8a, 0xe3, 0x5c, 0xb1, 0xf2, 0x51, 0x66, 0xd, 0xde, 0x1c, 0x44, 0x8d, 0x2c, 0x7a, 0x4e, 0x3a, 0x4a, 0x9c, 0x1, 0x8a, 0xa5, 0x9d, 0x8b, 0xd8, 0xe8, 0x57, 0xcb, 0x81, 0xec, 0x6b, 0x96, 0x4c, 0xf8, 0x76, 0xc7, 0x39, 0x48, 0x55, 0xad, 0x28, 0xbe, 0x99, 0x7d, 0xa3, 0x5a}, types.Tx{0x74, 0x75, 0x14, 0xea, 0x5d, 0x3c, 0xe2, 0x18, 0xce, 0xf7, 0x23, 0x86, 0xaf, 0x75, 0x88, 0x2c, 0x16, 0x0, 0xd2, 0x18, 0xbc, 0xed, 0xe5, 0x6c, 0xf1, 0x66, 0x48, 0x27, 0xd0, 0x7e, 0xd4, 0x29, 0x22, 0x32, 0xbe, 0x4a, 0xcf, 0x50, 0x3f, 0x3e, 0x26, 0xf, 0x96, 0xe0, 0x7c, 0xd4, 0x11, 0x12, 0x31, 0xe5, 0x6b, 0x3e, 0x6c, 0xeb, 0x5b, 0x5, 0x6c, 0x28, 0xb4, 0xa9}, types.Tx{0x42, 0xca, 0x95, 0xe0, 0x0, 0x63, 0x94, 0x96, 0x67, 0xbf, 0xe2, 0x9e, 0x6e, 0x60, 0xe, 0xfa, 0x66, 0xf7, 0xc1, 0x26, 0x4f, 0x49, 0x97, 0x3, 0x95, 0x46, 0xe7, 0x27, 0x20, 0xa7, 0x41, 0xc5, 0x6d, 0x89, 0x3a, 0x3, 0xfc, 0x83, 0xdd, 0x6e, 0xa6, 0x9f, 0x52, 0xf7, 0x2a, 0xba, 0x7a, 0x26, 0xce, 0x7, 0xf0, 0xd2, 0x98, 0x3e, 0x9f, 0x53, 0xf3, 0x4b, 0xa9, 0xef, 0xec, 0x29, 0xba, 0x51, 0xff, 0x13, 0xcd, 0xde, 0x90, 0xa5, 0x14, 0x48, 0x43, 0x64, 0x17, 0x3e, 0x48, 0x87, 0x8b}, types.Tx{0xe2, 0x13, 0x73, 0xfe, 0x11, 0xf6, 0xe8, 0xdc, 0x28, 0x56, 0x30, 0x23, 0x9a, 0x42, 0xba, 0x2b, 0xcc, 0x40, 0x38, 0x1d, 0xcd}, types.Tx{0x3c, 0x64, 0x39, 0x9b, 0xe3, 0x3d, 0xcd, 0xf0, 0x3e, 0x60, 0x53, 0x1a, 0x66, 0x38, 0x84, 0x90, 0xd, 0x8f, 0xad, 0x82, 0xa0, 0xfa, 0xcc, 0xb3, 0x79, 0x2a, 0x96, 0xfb, 0xd1, 0x4a, 0xa1, 0xc5, 0xde, 0xa1, 0x83, 0xe7, 0x2d, 0x84, 0x1, 0x8f, 0xc4, 0x90, 0xed, 0xff, 0x52, 0xb2, 0x78, 0xbf, 0xc7, 0xbe, 0xaf, 0xd2, 0x71, 0x26, 0x15, 0x66, 0x39, 0xcf, 0xab, 0x7d, 0xf, 0xfb, 0xe4, 0xa8, 0xbb, 0x98, 0x77, 0x57, 0x25, 0xf1, 0xdf, 0xb2, 0xb9, 0x58, 0x24, 0xce, 0xfc, 0xb0, 0x95, 0x5b, 0x53, 0x34, 0x3f, 0xbf, 0xe0, 0x27}, types.Tx{0xbb, 0xc4, 0xd5, 0x54, 0x75, 0xf0, 0x7, 0xec, 0x4e, 0x76, 0xec, 0x0, 0xeb, 0x46, 0x65, 0xf0, 0xea, 0xe8, 0xb7, 0x2a, 0xd3, 0x69, 0x24, 0xe6, 0x19, 0x83, 0x27, 0x80, 0xce, 0xd5, 0x39, 0x69, 0x99, 0xf2, 0xbb, 0xc3, 0xe3, 0xf1, 0x57, 0xc5, 0xda, 0xb4, 0x45, 0x31, 0xec, 0x9c, 0xbc, 0x1e, 0xf2, 0x4f, 0xab, 0x9e, 0x53, 0x0, 0x2, 0xcb, 0xbc, 0x2a, 0x69, 0xee, 0xb8, 0xbf, 0x34, 0x19, 0xfb, 0xe3, 0xa, 0x9, 0x1f, 0x48, 0xd0, 0xf3, 0x2b, 0xc8, 0xd5, 0xcb, 0x6c, 0x53, 0x2b, 0x32, 0x23, 0x5, 0x52, 0xd8, 0xa, 0x71, 0xfa, 0x8b, 0xbb, 0xc4, 0x8d, 0x8e, 0x1b, 0xed, 0xf7, 0xf9, 0x9d, 0xe1}, types.Tx{0x8, 0x82, 0x4e, 0xc6, 0x7c, 0x7b, 0xd5, 0xb7, 0x41, 0xcc, 0xfc, 0xdf, 0xe1, 0x44, 0x75, 0x4e, 0x24, 0x75, 0x82, 0x57, 0x8, 0x72, 0x3a, 0x5a, 0x6, 0x83, 0xad, 0x77, 0xcb, 0xe1, 0xce, 0xb5, 0x48, 0xac, 0xfb, 0x1c, 0x49, 0x5f, 0x5e, 0x4a, 0xb6, 0x84, 0x5, 0x7d, 0x4b, 0xd2, 0x34, 0x37, 0xd3, 0xc0, 0x5c, 0xcf, 0x46, 0x6e, 0xeb, 0x1, 0x7b, 0x4a, 0xe0, 0x51, 0x12, 0x3f, 0xc5, 0x8d, 0x3f, 0x37, 0xa9, 0x4b, 0xe7}, types.Tx{0x74, 0x6c, 0x59, 0xd1, 0xc8, 0x90, 0x9, 0xbe, 0x9a, 0x72, 0xc6, 0x75, 0xe6, 0x4c, 0x33, 0x4f, 0xbe, 0x6d, 0xf7, 0xe7, 0xbc, 0x50}, types.Tx{0xed, 0xef, 0x6b, 0xc8, 0x52, 0xb1, 0x28, 0x9f, 0xe2, 0xa, 0x30, 0x2d, 0x77, 0xef, 0x22}, types.Tx{0x2e}, types.Tx{0xf9, 0x3}, types.Tx{0x2e, 0xd8, 0xd0, 0xa3, 0xf, 0xc, 0x45, 0x11, 0x8f, 0x3}, types.Tx{0x79, 0x1c, 0xb5, 0xe5, 0x47, 0x99, 0xa2, 0xde, 0x98, 0x17, 0x35, 0x31, 0xa0, 0x20, 0x70, 0x15, 0xba, 0x1c, 0x4e, 0x81, 0x33, 0x1e, 0xcd, 0x34, 0x9f, 0x98, 0x96, 0x4c, 0x5d, 0x15, 0xc, 0x25, 0xd6, 0x2d, 0x1c, 0x5a, 0xa6, 0x95, 0x42, 0xba, 0x1c, 0x57, 0xc5, 0x16, 0x23, 0x56, 0x85, 0x35, 0xed, 0xea, 0xf8, 0xd6, 0x29, 0xaf, 0xfc, 0xc, 0x24, 0xfd, 0x67, 0xa5, 0x39, 0x5e, 0xcc, 0xfb, 0x15, 0xaf, 0x26, 0x63, 0x62, 0x90, 0xf4, 0xc9, 0x0, 0x53}, types.Tx{0x64, 0x5b, 0x7a, 0xa6, 0x5e, 0xa6, 0xcf, 0x52, 0x85, 0x8b, 0x54, 0x4d, 0xe4, 0x9e, 0x80, 0x29, 0x8c, 0xf8, 0xe, 0x13, 0xf6, 0xd5, 0xe0, 0x21, 0x63, 0xc1, 0x1f, 0x27, 0xc8, 0x37, 0xdf, 0xa1, 0x65, 0x1, 0x2a, 0x38, 0x18, 0xdb, 0xb8, 0x33, 0x63, 0x3d, 0x64, 0xf, 0xed, 0xba, 0xfd, 0xc1, 0xa5, 0xa3, 0x5b, 0x20, 0x22, 0xe9}, types.Tx{0x7c, 0x48, 0x63, 0xb5, 0x6b, 0x6b, 0xb7, 0x90, 0x5a, 0xd2, 0x35, 0x21, 0x5f, 0x70, 0x91, 0x21, 0x21, 0xc1, 0x4b, 0x9a, 0xc6, 0x48, 0xb0, 0x21, 0x6f, 0xe8, 0xc9, 0x68, 0x5d, 0xaf, 0xc7, 0x34, 0xe1, 0x52, 0x44, 0xbc}, types.Tx{0x8b, 0xa6, 0xf4, 0x13, 0x91, 0xfd, 0x2c, 0xc1, 0x9c, 0xd2, 0x26, 0xb1, 0xe1, 0xf0, 0x46, 0xb0}, types.Tx{0xd2, 0x41, 0xf0, 0xcd, 0x2d, 0x4c, 0x5f, 0xb, 0xaf, 0xed, 0xcb, 0x2b, 0x36, 0x4c, 0x14, 0x48, 0x91, 0x9e, 0xe8, 0x61, 0x4f, 0xc8}, types.Tx{0xb3, 0x23, 0x45, 0xed, 0xd3, 0xb3, 0xd1, 0xb9, 0x99, 0x7c, 0x7e, 0x9e, 0x8e, 0xd7, 0x75, 0x68, 0x93, 0x4b, 0x45, 0x9b, 0x2e, 0xcf, 0x72, 0x32, 0x65, 0x62, 0xce, 0x11, 0xa7, 0x30, 0xf, 0x16, 0xa8, 0x97, 0xc1, 0x30, 0x4d, 0xa5, 0xd9, 0xb9, 0x70, 0x6a, 0xaf, 0xb5, 0x35, 0x81, 0xa2, 0xc4, 0x4d, 0xaf, 0xc3, 0xea, 0xf0, 0x76, 0x57, 0xe4, 0x15, 0x76, 0x6b, 0x9f, 0x95, 0xc2, 0xe2, 0x5f, 0xb9, 0x29, 0x6b, 0x67, 0x4b, 0xae, 0x86, 0xdd, 0xbd, 0xd2, 0xf5, 0xb1, 0x34, 0x9, 0xf1, 0xf1, 0x50, 0x7d, 0x4c, 0xad}, types.Tx{0xfa, 0x6a, 0x28, 0x45, 0x30, 0x3b, 0xc8, 0xa0, 0xdd, 0x34, 0x9e, 0xd0, 0xbd, 0x2b, 0x9f, 0x95, 0xe2, 0x48, 0xe6, 0xb4, 0x11, 0xa8, 0x6e, 0x9b, 0x71, 0xd, 0xab, 0x96, 0xd1, 0x89, 0x45, 0xa0, 0xd4, 0x76, 0x43, 0x81, 0xa0, 0x91, 0x61, 0xb1, 0x7c, 0x8d, 0xcc, 0xcc, 0x2c}, types.Tx{0xb1, 0x51, 0x90, 0x31}, types.Tx{0x29, 0x22, 0xc2, 0x43, 0x48, 0x35, 0xc0, 0x23, 0x8a, 0xd1, 0xd3, 0x75, 0x22, 0xc4, 0x22, 0x5a, 0x70, 0xfc, 0x39, 0x9f, 0x9c, 0xe6, 0x9e, 0x2a, 0x3, 0xa6, 0x10, 0xc0, 0xa2, 0x96, 0xa7, 0x48, 0xd0, 0x1e, 0xa0, 0xc2, 0xb9, 0xa3, 0xcb, 0xd3, 0x9b, 0x9d}, types.Tx{0xce, 0x89, 0x14, 0x4b, 0xa0, 0xad, 0x94, 0xd4, 0x1e, 0x6, 0xf9, 0x98, 0xc4, 0x7b, 0x55, 0xc9, 0xea, 0xae, 0xad, 0x7d, 0x23, 0xd3, 0x88, 0x36, 0x22, 0xd4, 0xc, 0xdf, 0xfe, 0xce, 0xd3, 0xb4, 0x66, 0xc, 0x1d, 0xd9, 0xea, 0x9, 0xb4, 0xdc, 0xc, 0x9, 0x86, 0xa3, 0xf5, 0x86, 0xac, 0x20, 0xfc, 0xaa, 0x21}, types.Tx{0xb3, 0x8f, 0x25, 0xeb, 0xe1, 0xd8, 0x14, 0xe8, 0x97, 0x65, 0xc8, 0xef, 0x89, 0x45, 0xd2}, types.Tx{0xf7, 0xb9, 0xe3, 0xf3, 0xe8, 0x62, 0x6a, 0xa4, 0x63, 0x2a, 0xa1, 0xe0, 0x15, 0x7d, 0x38, 0xc, 0x24, 0xd2, 0xdc, 0x85, 0x5f, 0xa3, 0x9b, 0xd7, 0xc9, 0x3c, 0x5f, 0x56, 0x18, 0xc6, 0xd9, 0xe8, 0xd9, 0x82}, types.Tx{0xf5, 0xeb, 0xb, 0x96, 0xd6, 0xcd, 0x95, 0xda, 0xfa, 0xfb, 0x77, 0x2e, 0xc1, 0x99, 0x3d, 0xdd, 0x97, 0x95, 0xb9, 0x10, 0x52, 0x24, 0xf5, 0x41, 0x88, 0x51, 0x9d, 0x90, 0xbc, 0xc9, 0x2e, 0x78, 0x2f, 0x70, 0xd9, 0x83, 0xe3, 0x34, 0x57, 0xcd, 0x64, 0xde, 0x1f, 0x1a, 0x32, 0xe, 0xbc, 0x98, 0x66, 0xfe, 0xf4, 0x3, 0x2a}, types.Tx{0xad, 0x85, 0xaa, 0x15, 0x18, 0x81, 0x91, 0x87, 0xa6, 0xe7, 0x4c, 0x7b, 0xe6, 0xb2, 0x0, 0xa8, 0x65, 0x97, 0xa8, 0x76, 0xcd, 0x8c, 0x2d, 0xa8, 0x15, 0xe4, 0xee, 0xef, 0xa0, 0x9b, 0x57, 0xd8, 0x6f, 0x84, 0x26, 0xa3, 0x29, 0x3d, 0x12, 0x4f, 0xfe, 0x8c, 0xd2, 0x38, 0xcb, 0x81, 0x5c, 0x44, 0x5f, 0x9a, 0xc5, 0x24, 0xbc, 0x6b, 0xf7, 0xbe, 0xe4, 0x41, 0x24, 0xb4, 0x41, 0xbb, 0x77, 0xbc, 0xc0, 0x83, 0x7b, 0xa3, 0xfc, 0x53, 0x11, 0xe2, 0xa9, 0x11, 0x2f, 0x47, 0xcd, 0x67, 0xac, 0x5, 0x37, 0xb2, 0xbe, 0xb2, 0x63, 0xea, 0xdc, 0xc2, 0xed, 0x10, 0x39, 0xa1, 0xba, 0xd1, 0x3f}, types.Tx{0x51, 0x52, 0xed, 0xfd, 0xe8, 0xfa, 0x65, 0x86, 0x8f, 0x6f, 0xaf, 0x22, 0xe7, 0x87, 0x1e, 0xe6, 0xdf, 0xe3, 0x24, 0x83, 0x3a, 0xc5, 0x7a, 0x1c, 0x8d, 0x13, 0x56, 0x1a, 0x37, 0x32, 0x72, 0x87, 0x47, 0x3a, 0xba, 0x29, 0x1a, 0xf3, 0xd2, 0xfc, 0xd9, 0xc5, 0x9a, 0xd5, 0xff, 0xf6, 0x5a, 0xc3, 0x19, 0xd6, 0x75, 0x47, 0x2, 0x43, 0x3a, 0xb7, 0xce, 0xe3, 0xb5, 0xca, 0x52, 0x7, 0x5c, 0x9b, 0x88, 0xcf, 0x1f, 0xbd, 0xfe, 0x2, 0xaf, 0x65, 0x64, 0xdb, 0xea, 0x11, 0x8f, 0xa2, 0x61, 0xb2, 0x62}, types.Tx{0x11, 0x21, 0x46, 0x8e, 0xa5, 0x54, 0x7a, 0xb0, 0x82, 0xec, 0x81, 0xf6, 0x4b, 0xd1, 0x58, 0x7b}, types.Tx{0xca, 0x43, 0xb3, 0xf3, 0xda, 0x7, 0xf4, 0x8, 0x6, 0x9, 0x33, 0xef, 0x82, 0x63, 0x2d, 0xe, 0xa3, 0xec, 0x73, 0x12, 0x92, 0x8b}, types.Tx{0xc9, 0x6a, 0x11, 0x44, 0xe2, 0x21, 0xe9, 0x7e, 0x43, 0x89, 0xcd, 0xbd, 0xad, 0xcd, 0x88, 0x6, 0x7e, 0x54, 0x9f, 0x97, 0xf8, 0x76, 0xec, 0xe5, 0x2a, 0xc2, 0x42, 0xea, 0xe5, 0xd0, 0x2c, 0x0, 0x15, 0xec, 0x45, 0x5f, 0xbe, 0xf0, 0x95, 0x1a, 0xb6, 0x16, 0x4c, 0x53, 0x9, 0xcf, 0x7f, 0x45, 0x5b, 0x51, 0x8c, 0x3d, 0x8a, 0x93, 0xa1, 0xca, 0x72, 0x97, 0x91, 0x29, 0xaa, 0xb4, 0xa8, 0x8c, 0x35, 0x46, 0x9}, types.Tx{0x19, 0x5d, 0x33, 0xda, 0xe6, 0x4e, 0x87, 0x2f, 0xbe, 0x85, 0x68, 0x51, 0x28, 0xc9, 0xa2, 0x5c, 0x25, 0x91, 0xe2, 0x15, 0x63, 0x19, 0xed, 0xd5}, types.Tx{0x45, 0x17, 0x49, 0x23, 0x5f, 0x15, 0xd0, 0x37, 0x37, 0x2f, 0xe7, 0xec, 0x79, 0x2a, 0x4b, 0xba, 0xb4, 0x1d, 0x2e, 0x19, 0x36, 0x8b, 0x3b, 0xa8, 0x5c, 0xb8, 0x5b, 0x97, 0xf5, 0x0, 0x88, 0xa1, 0xd1, 0xed, 0x6, 0xbc, 0x57, 0xd0, 0x5e, 0xd2, 0x37, 0xea, 0x6f, 0x63, 0x2c, 0x57, 0x63, 0xe5, 0x0, 0xca, 0x8, 0x7, 0x51}, types.Tx{0xeb, 0x22, 0xf8, 0x58, 0x88, 0xc7, 0x3, 0xb2, 0xf8, 0x27, 0xfe, 0xa7}, types.Tx{0xd3, 0x32, 0x3c, 0xb9, 0xc3, 0x29, 0x1e, 0xea, 0x9c, 0x48, 0x89, 0xe3, 0x76, 0xc1, 0x5c, 0xf6, 0x2f, 0xdd, 0x5a, 0x23, 0x6b, 0xa7, 0xe3, 0x68, 0xb6, 0x95, 0x27, 0x20, 0xf5, 0xd, 0x46, 0x96, 0xf, 0xca, 0x72, 0x0, 0x9f, 0x8e, 0x89, 0xd0, 0xe0, 0xd6, 0xfd, 0x3a, 0x1f, 0x49, 0xfc, 0xf6, 0x95, 0xfb, 0xe2, 0xf8, 0x48, 0x23, 0xb5, 0xb7, 0x7c, 0x61, 0x2e, 0xe1, 0x9c, 0xcd, 0x8, 0x97, 0xeb, 0x53, 0x3a, 0x93, 0x36, 0x64, 0x83, 0x46, 0xeb, 0xc5, 0x87, 0x2, 0x94}, types.Tx{0xc3, 0x18, 0x1c, 0x7c, 0xe5, 0xf, 0x58, 0xba, 0xd5, 0x73, 0x5a, 0xf2, 0x52, 0x8e, 0x29, 0xc, 0x86, 0xbb, 0x7d, 0x3e, 0x54, 0xf5, 0xf, 0x2d, 0xf, 0x51, 0xe7, 0xd2, 0xff, 0x28, 0x7f, 0x48, 0x86, 0x61, 0xb1, 0x70, 0xb5, 0x4f, 0xd1, 0x30, 0x46, 0x6c, 0x4c, 0xa0, 0xa4, 0x99, 0xb7, 0x53, 0xb3, 0x1b, 0x76, 0x23, 0xe3, 0x78, 0xc6, 0x12, 0x3c, 0xd8, 0xab, 0x6f, 0x13, 0xc0, 0xd7, 0xb8, 0xe0, 0x23, 0x76, 0xe2, 0xf6, 0x31, 0xe4, 0x1b, 0xcd, 0x89, 0xf8, 0xd7, 0x7, 0xd6, 0x41, 0xa, 0xda, 0x4f, 0x63, 0xff, 0xef, 0xc3, 0xbd, 0x2a, 0xc7, 0x30, 0x43, 0xc7, 0x58}, types.Tx{0x5e, 0x61, 0x55, 0xeb, 0x91, 0xd1, 0x4a, 0x24, 0xb4, 0xf6, 0x78, 0x84, 0xf6, 0xae, 0x55, 0x2e, 0xb8, 0x12, 0xe1, 0xb6, 0x32, 0xa2, 0x17, 0xc1, 0xfb, 0xf0, 0x24, 0x12, 0x4a, 0x16, 0x4c, 0xb4, 0x6d, 0x93, 0xb7, 0x7, 0x86}, types.Tx{0x17, 0xc2, 0x3a, 0xa1, 0xf4, 0x77, 0x5f, 0x94, 0xa8, 0xe2, 0x13, 0xef, 0x41, 0x46, 0x6d, 0x57, 0x4b, 0xa8, 0x1f, 0x47, 0x13, 0x4a, 0x7b, 0xa9, 0x48, 0x92, 0xb5}, types.Tx{0xb0, 0x4c, 0x93, 0x2c, 0x17, 0xb9, 0x8a, 0x6e, 0x2e, 0xfd, 0xf0, 0xc1, 0x6e, 0xf8, 0x79, 0x2b, 0x3a, 0xa3, 0x34, 0x74, 0xdd, 0xee, 0x23, 0x16, 0xd4, 0x6c, 0xb6, 0x7d, 0x5a, 0x9e, 0x4f, 0xb6, 0x78, 0x44, 0x6c, 0x87, 0x95, 0xc2, 0x50, 0x4b, 0x81, 0x65, 0x3f, 0x27, 0xc6, 0x97, 0xd6, 0x61, 0x37, 0xce, 0x7d, 0x8, 0x7, 0xa8, 0x75, 0x46, 0x4d, 0x2d, 0x75, 0x75, 0x5a, 0x92, 0x20, 0x1f, 0x93, 0x14, 0x29, 0xa8, 0xde, 0xff, 0x3e, 0x4f, 0x3d, 0x56, 0x2d, 0x40, 0x88, 0x4b, 0xb3, 0xb0, 0x56, 0xce, 0x7, 0xf5, 0xae, 0x42}, types.Tx{0x89, 0x28, 0x6b, 0x9c, 0x7b, 0x48, 0x6a, 0xcc, 0x6f, 0x51, 0xed, 0x97, 0x7d, 0x2f, 0x80, 0x60, 0x8e, 0x53, 0x2d, 0xd7, 0xf5, 0x42, 0x34, 0x3e, 0xd7, 0x3c, 0xe4, 0x8c, 0xea, 0x20, 0x63, 0xcc, 0xd8, 0xf9, 0xa8, 0x41, 0xca, 0xbe, 0xc, 0x5c, 0xb1, 0xd7, 0x72, 0x72, 0xe6, 0xf2, 0x77, 0x2e, 0xa4, 0xbd, 0xf0, 0x6a, 0xbf, 0x36, 0x79, 0x90, 0xd2, 0xb4, 0xa, 0x1, 0x8d, 0x6, 0xf2, 0x2d, 0x29, 0xa4, 0xb6, 0xfc, 0x89, 0x5c, 0xac, 0xaf, 0x14, 0x7e, 0x40, 0x5f, 0x5b, 0xe5, 0x3f, 0x14, 0x82, 0x98, 0xdd, 0x9f, 0xca, 0x9d, 0xd9, 0x34, 0xfb, 0xed, 0x8b, 0x91, 0x98, 0xf5, 0x1e}, types.Tx{0x8b, 0xcf, 0x4d, 0xe7, 0x6b, 0x6f, 0xfa, 0x62, 0xae, 0x27}, types.Tx{0x0, 0xe1, 0xa7, 0x0, 0x7, 0x97, 0x6, 0xed, 0x6, 0x19, 0xba, 0xdb, 0x19, 0x59, 0xf3, 0xea, 0xe3, 0xa6, 0xc7, 0xda, 0xc0, 0x87, 0x3c, 0xc}, types.Tx{0x34, 0x12, 0xbd, 0x52, 0xde, 0x2, 0x8c, 0xc3, 0xc5, 0xd4, 0xfd, 0xc1, 0xb5, 0x3c, 0xc8, 0xd1, 0xcf, 0x87, 0x8d, 0x29, 0x2a, 0x9b, 0x60, 0x5b, 0x5c, 0xed, 0x68, 0xa9, 0x75, 0xc4, 0x9b, 0x9a, 0x7e, 0x58, 0x67, 0x22, 0x78, 0xb5, 0x8e, 0xb1, 0xf, 0xb9, 0x55, 0xae, 0xec, 0x2, 0xe, 0xc3, 0xab, 0xf1, 0x4, 0xdd, 0xc1, 0x76, 0xc, 0xad, 0xaa, 0x96, 0xd0, 0x1c, 0xcb, 0xe9, 0x67, 0x23}, types.Tx{0x2e, 0x37, 0x9f, 0x28, 0x9c, 0x63, 0xab, 0x35, 0xe4, 0x44, 0x6, 0xc8, 0x39, 0x9c, 0xc5, 0x9, 0x1c, 0xc9, 0xf2, 0x6c, 0x36, 0xa1}, types.Tx{0x0, 0x25, 0x76, 0x71, 0x7, 0x9, 0x5e, 0x10, 0xbe, 0x34, 0x67, 0x6a, 0x48, 0x67, 0x6f, 0x5f, 0x4f, 0x56, 0xfa, 0x7a, 0x38, 0x78, 0xc8, 0x32, 0x2e, 0x22, 0x36, 0xeb, 0xcd, 0x26, 0x0, 0x87, 0xce, 0x1, 0x90, 0x13, 0xe, 0xfc, 0x8, 0x2, 0x16, 0x33, 0x81}, types.Tx{0xb6, 0x60, 0x3a, 0xc6, 0xc9, 0xdd, 0x7a, 0x3f, 0x45, 0x5f, 0x1a, 0xc3, 0x61, 0xda, 0x27, 0xb3, 0x54, 0xf3, 0x9, 0x25, 0x8f, 0xf0, 0x95, 0x36, 0xdf, 0xb7, 0x1d, 0xee, 0xc2, 0x93, 0x63, 0x19, 0x48, 0x17, 0xf9, 0xcb, 0x66, 0x3d, 0xda, 0x6e, 0x74, 0x7f, 0x18, 0xb4}, types.Tx{0x42, 0xf7, 0x43, 0x65, 0xda, 0x8e, 0x57, 0x12, 0xc0, 0xd0, 0x64, 0x65, 0x5a, 0xc3, 0xd1, 0x32, 0xee, 0x5b, 0x9c, 0x9a, 0xa3, 0x39, 0x43, 0x19, 0x6b, 0x33, 0x2f, 0x60, 0x79, 0x3b, 0xef, 0x13, 0x9b, 0xd5, 0xab, 0x5b, 0xa9, 0xc2, 0x6e, 0xd5, 0x70, 0x9b, 0x4a, 0x9, 0x79, 0xbe, 0x10, 0x30, 0xe7, 0x9e, 0xf6, 0x4c, 0x97, 0x86, 0xd3, 0x42, 0x47, 0xa5, 0xe1, 0x44, 0xcb, 0xf9, 0x2a, 0x20, 0xe1, 0xb7, 0xcd, 0x7d, 0xe0, 0x78, 0x1f, 0xd3, 0x37, 0x46, 0xb9, 0x2f, 0xfb, 0x3e, 0x71, 0xe9, 0x6a, 0xd6, 0x3e, 0x2, 0x98, 0x61, 0x47, 0xe9, 0x1d, 0x65, 0x24, 0xc8, 0x7b, 0xd5, 0x3f, 0x29, 0xa5}, types.Tx{0x15, 0xae, 0xa9, 0x20, 0x7, 0x4c, 0x3a, 0x44, 0x34, 0x9a, 0x36, 0x2a, 0xaf, 0xc1, 0xb7, 0x83, 0x43, 0x1, 0xc9, 0x67, 0xf2, 0x44, 0xbf, 0x47, 0x8e, 0x5a, 0x21, 0x30, 0x1a, 0xe5, 0x85, 0x77, 0x53, 0x10, 0x23, 0x39, 0x49, 0x91, 0xa1, 0x65, 0x44, 0x36, 0xa8, 0xb1, 0x7, 0x21, 0x4e, 0x4c, 0x9c, 0x88, 0xd4, 0x2a, 0x4b, 0xf6, 0xcd, 0xa4, 0xaa, 0x50, 0x95, 0x9e, 0x3f, 0x22, 0x93}, types.Tx{0x38, 0x52, 0xc4, 0xba, 0x5f, 0xb2, 0xd1}, types.Tx{0x3f}, types.Tx{0xa9, 0x78, 0xdf, 0xb9, 0x8d, 0xa5, 0x63, 0x3c, 0x62, 0x51, 0x6, 0x1e, 0x9b, 0x22, 0xcf, 0xbb, 0xc0, 0xd5, 0x46, 0x23, 0xf, 0x57, 0xb6, 0xad, 0x39, 0xe7, 0x6b, 0xf9, 0xf4, 0x6b, 0x94, 0xea, 0x3b, 0xa4, 0xe5, 0x7b, 0x2d, 0x3, 0x13, 0xe5, 0x60, 0x51, 0x3d, 0x5d, 0x3a, 0x2b, 0xc6, 0x8e, 0xd6, 0x14, 0x3b, 0x96, 0x5d, 0xa0, 0xc1, 0xd5, 0x2c, 0x9a, 0x6a, 0xfe, 0x30, 0xe0, 0xc, 0xd1, 0xe, 0xc5, 0xf2, 0xb6, 0xa, 0x19, 0x98, 0xc6, 0x7d, 0x9f, 0xdf, 0x5b}, types.Tx{0xec, 0xff, 0x28, 0xf7, 0x89, 0x52, 0xc7, 0xb6, 0xec, 0x5a, 0x6c, 0x6f, 0x76, 0x7d, 0x66, 0xd3, 0xc9, 0x67, 0xe6, 0xab, 0x72, 0x98, 0x7a, 0x93, 0xef, 0xe8, 0x3f, 0x4e, 0xe7, 0xeb, 0x98, 0x66, 0x55, 0xa2, 0xb7, 0xd8, 0xf2, 0xc2, 0x48, 0xe8, 0xde, 0xcf, 0x42, 0x6e, 0xac, 0xe2, 0xa4, 0x94, 0x10, 0xb9, 0x8b, 0xf5, 0x23, 0x26, 0x75, 0xd6, 0x57, 0x35, 0x5b, 0xc5, 0xb6, 0x7e, 0xbb, 0x33, 0x65, 0x67, 0xb7, 0x85, 0xa1, 0x6f, 0xb4, 0x80, 0xcd, 0x3c, 0xcb, 0x72, 0x3f, 0xd9, 0x80}, types.Tx{0xe1, 0x8f, 0x7d, 0x6a, 0xc7, 0x30, 0x8a, 0x0, 0x10, 0xbf, 0x1f, 0x1c, 0xe9, 0x84, 0xb7, 0x8e, 0xbb, 0xf2, 0x57, 0xc4, 0xa8, 0xb, 0x24, 0xe6, 0xeb, 0x83, 0x92, 0x7b, 0xb4, 0x2, 0x26, 0xf, 0xa6, 0x43, 0xa2, 0xd, 0x46, 0x34, 0xfc, 0x89, 0x6, 0x28, 0xd1, 0xa9, 0x95, 0x18, 0xe, 0x3c, 0x25, 0xf2, 0x24, 0x48, 0x73, 0xcd, 0x33, 0x60, 0x23, 0x86, 0x18, 0x6b, 0x9c, 0x1, 0x7a, 0x15, 0x97, 0x7b, 0x4c}, types.Tx{0xf4, 0xfc, 0x61, 0xa3, 0x44, 0x80, 0x4a, 0xf, 0x6c, 0x3e, 0x19, 0xfe, 0x1f, 0x91, 0x80, 0x62, 0x41, 0xbf, 0x58, 0x61, 0x2f, 0x36, 0xb, 0x5d, 0xdd, 0xfb, 0xfd, 0xa, 0xc0, 0xaf, 0xb4, 0x23, 0x59, 0xaf, 0xa7, 0x81, 0x8, 0x73, 0xa5, 0x1b, 0x39, 0xc3, 0x19, 0x39, 0xed, 0xd1, 0x6c, 0xe2, 0xf5, 0x46, 0x86, 0x31, 0xaf, 0x3, 0x3f, 0x6c, 0x5f, 0x33, 0x87, 0x71, 0x69, 0xbd}, types.Tx{0x83, 0x16, 0x1b, 0x86, 0x49, 0x19, 0xc4, 0x43, 0xf3, 0x9d, 0x4e, 0xf0, 0xf, 0xbd, 0x4}, types.Tx{0x23, 0xe4, 0x1b, 0xf7, 0x6e, 0xd, 0xe, 0x8f, 0x33, 0x62, 0xb5, 0xe6, 0x86, 0x68, 0x5c, 0xc0, 0xe0, 0x3c, 0xd6, 0x6e, 0x1d, 0xb3, 0xfb, 0x99, 0xc0, 0xe9, 0x54, 0x51, 0x2e, 0x2b, 0xb8, 0xec, 0x45, 0x6d, 0x13, 0xed, 0xb1, 0x8, 0x81, 0xa2, 0x8c, 0x61, 0x30, 0xfb, 0x39, 0x2c, 0x4f, 0xba, 0x93, 0xaa, 0x97, 0x85}, types.Tx{0x62, 0x25, 0x1b, 0xb6, 0xf0, 0x37, 0xe5, 0xbf, 0xf9, 0x45, 0x5c, 0xdf, 0x31, 0x54, 0xc0, 0xc4, 0x7e, 0xc3, 0x1d, 0xae, 0xc9, 0xc, 0x55, 0x74, 0x29, 0xf4, 0x13, 0x63, 0x92, 0x65, 0x39, 0x9e, 0xc8, 0xe3}, types.Tx{0xf5, 0x1e, 0x88, 0x25, 0x17, 0x1f, 0x36, 0xcf, 0xda, 0xb2, 0xa5, 0x58, 0x3f, 0x87, 0x11, 0x62, 0x1b, 0xc9, 0xfc, 0x91, 0x91, 0x1d, 0x33, 0x1a, 0x9d, 0x84, 0xbc, 0x8e, 0x49, 0x3b, 0x9e, 0xc9, 0xb8, 0x7f, 0x23, 0x93, 0xcc, 0xe9, 0x47, 0x1a, 0x4b, 0xc5, 0x17, 0x4e, 0x10, 0xce, 0x66, 0x82, 0xcd, 0xe1, 0x20, 0x5b, 0x43, 0xa, 0x7a, 0xd8, 0x13, 0x28, 0x7, 0x6a}, types.Tx{0xcb, 0x60, 0x17, 0x50, 0x20, 0xce, 0xd2, 0x31, 0x1e, 0x75, 0xaf, 0x86, 0xf8, 0x7, 0x30, 0xb2, 0x90, 0x4e}, types.Tx{0x90, 0xb9, 0x2d, 0xdd, 0xd8, 0x2d}, types.Tx{0x77, 0x90, 0xc4, 0xe5, 0x41, 0xdc, 0x7f, 0x24, 0xc8, 0x5e, 0x4, 0xa1, 0xe2, 0x55, 0x2c, 0x22, 0x5e, 0x50, 0x4a, 0x6c, 0xad, 0x5, 0xc1, 0xd5, 0x93, 0x40, 0xe8, 0xd3, 0xfc, 0xe1, 0x98}, types.Tx{0x6a, 0xec, 0xbc, 0xf, 0x57, 0x4f, 0x8, 0x96, 0xf7, 0xf0, 0xf5, 0x6f, 0x78, 0xb4, 0xcf, 0x9a, 0x88, 0x34, 0xe2, 0x10, 0x83, 0x90, 0x53, 0xe6, 0x68, 0x25, 0x4b, 0x67, 0x14, 0xe6, 0xcc, 0x81, 0x11, 0x12, 0xc0, 0x63, 0xc1, 0x7f, 0x41, 0x12, 0x77, 0x6d, 0x87, 0xb8, 0x60, 0xb1, 0x15, 0x79, 0x27, 0x93, 0x9e, 0x5e, 0x8a, 0x5f, 0x29, 0x43, 0x32, 0xf5}, types.Tx{0x2a, 0xec, 0x1d, 0x47, 0x9c, 0xae, 0x93, 0x6e, 0x68, 0x29, 0x3, 0x85, 0xab, 0x63, 0x7f, 0x2f, 0xfb, 0x1b, 0x7c, 0xd0, 0x68, 0xef, 0xeb, 0xd5, 0x4c, 0xa4, 0x33, 0x7, 0xf, 0x1c, 0x89, 0xc2, 0x6f, 0xa0, 0x84, 0xef, 0xde, 0x7a, 0x0, 0x51, 0x40, 0x4c, 0x3e, 0xdd, 0x86, 0x0}, types.Tx{0xc8, 0x25, 0x4c, 0x2a, 0x16, 0xf6, 0xc7, 0x7b, 0x29, 0xf2, 0x3d, 0xa8, 0x5b, 0x2c, 0x54, 0x28, 0x65, 0xf8}, types.Tx{0xd2, 0x88, 0x8, 0x97, 0xfb, 0xb2, 0x81, 0xcf, 0xcb, 0x4, 0x40, 0x3, 0x5d, 0xa2, 0x7d, 0x2b, 0x64, 0xb6, 0x53, 0x83, 0xe3, 0x5, 0x11, 0x72, 0xbd, 0x73, 0xb9, 0x65, 0x5a, 0xe6, 0x71, 0xa8, 0x17, 0x6a, 0xd0, 0x99, 0xdd, 0x81, 0x8c, 0x14, 0x35, 0xf0, 0x6f, 0xc, 0x64, 0x1a, 0x30, 0x48, 0xb, 0xdf, 0xfe, 0x54, 0x1d, 0x9f, 0x95, 0xe0, 0x96, 0x70, 0x8d, 0x4b, 0xe0, 0x72, 0xf8, 0xc9, 0xb3, 0x2d, 0x4b, 0x3a, 0x74, 0x9, 0x63, 0x9f, 0x8c, 0x4b, 0x56, 0x9d, 0xb7, 0x14}, types.Tx{0x4c, 0x50, 0xcd, 0x42, 0x8b, 0x26, 0x94, 0x89, 0xda, 0xd2, 0x27, 0x96, 0x71, 0xdd, 0x6c, 0x81, 0x72, 0x59, 0x35, 0x15, 0x3b, 0xdc, 0x12, 0x37, 0xc8, 0x4d, 0x6f, 0x63, 0x21, 0x68, 0xc8, 0xc0, 0xce, 0x3b, 0x78, 0x67, 0xc4, 0xb0, 0xe, 0x6f, 0x70, 0x94, 0xf9, 0x35, 0x99, 0x98, 0xe5, 0x21, 0xdd, 0x6a, 0x99, 0xed, 0xb0, 0xe3, 0xb8, 0x14, 0x8d, 0x5c, 0xec, 0x3b, 0xd5, 0xde, 0x3a, 0x5c, 0x5c, 0xc3, 0x4f, 0x1e, 0x5f, 0xe4, 0x96, 0x45, 0x77, 0x9c, 0xd4, 0xa3, 0xb0, 0xa0, 0xd4, 0x27, 0xe5, 0xcc, 0xb3}, types.Tx{0x94, 0xa1, 0xfe, 0x57, 0x4f, 0xa8, 0xe5, 0xa1, 0xdc, 0xb0, 0x2b, 0xb1, 0x99, 0x19, 0x37, 0x29, 0x47, 0x8a, 0xde, 0x1d, 0x21, 0x5a, 0xe4, 0x62, 0xf2, 0x15, 0x20, 0x4f, 0x31, 0xa5, 0x97, 0xcb, 0xe1, 0xd6, 0x26, 0xe6, 0xe5, 0x9d, 0xad, 0x98, 0xa0, 0x1c, 0x5, 0x56, 0xf0, 0xe0, 0x48, 0x62, 0x88, 0x96, 0xb2, 0xa8, 0xc4, 0xba, 0xe7, 0xe4, 0x16, 0x83, 0x65, 0xe6, 0xf2, 0xd, 0xae, 0xc3, 0x8a, 0x8d, 0x61, 0xb6, 0xe, 0x7c, 0xcf, 0x9b, 0xbe, 0xa5, 0xb2}, types.Tx{0xed, 0x79, 0x2a, 0xaa, 0x85, 0xb4, 0xc, 0x4a, 0x5d, 0xe7, 0x5c, 0x92, 0xa2, 0xfa, 0x6a, 0x5e, 0x5c, 0x7c, 0x2f}, types.Tx{0x91, 0x31, 0x7d, 0x89, 0x24, 0xdc, 0x5c}, types.Tx{0x93, 0x54, 0xa6, 0xaa, 0x1b, 0xc4, 0x9f, 0xe8, 0x5, 0xde, 0xb9, 0xcd, 0xaa, 0x6b, 0x1e, 0x43, 0xfb, 0x96, 0x42, 0x2b, 0x85, 0x74, 0x4, 0xa2, 0xc1, 0x80, 0x65, 0x52, 0x7f, 0xee, 0x27, 0xc1, 0xa2, 0xca, 0x18, 0xb1, 0x9b, 0x4c, 0x3a, 0x67, 0x6d, 0xf7, 0xa1, 0xda, 0xf7, 0x12, 0x83, 0xba, 0xcc, 0x96, 0x8, 0x22, 0x72, 0xe8, 0xb2, 0x8d, 0x88, 0x9e, 0xb5, 0x41, 0xd4, 0x93, 0x43, 0xab, 0x2, 0x31, 0x5a, 0x5, 0xf0, 0x6f, 0xee, 0x13, 0xa0, 0x43}, types.Tx{0x9e, 0xef, 0xa4, 0x73, 0x2f, 0xb5, 0xe3, 0x1f, 0x2c, 0x54, 0x31, 0x35, 0xac, 0x66, 0xb3, 0x24, 0x67, 0x52, 0x64, 0xa, 0x4, 0xff, 0x84, 0x3f, 0x7d, 0xe4, 0xd6, 0xe8, 0xce, 0xd4, 0x22, 0xe4, 0x88, 0xf1, 0x29, 0x32, 0xaa, 0x7b, 0xef, 0x62, 0x8c, 0x44, 0x15, 0x37, 0xd0, 0xf1, 0x55, 0xc5, 0x3e, 0x13, 0x34, 0x1d, 0x76, 0xf5, 0x28, 0xa5, 0xf7, 0x44, 0xcf, 0xd7, 0x7b, 0x5a, 0xec, 0x24, 0xcf, 0x6a, 0xb7, 0xe0, 0xfd, 0xd3, 0x3, 0x1a, 0xaa, 0x7d, 0xfe, 0x0, 0x1c, 0xa6, 0x41, 0xf6, 0x4b, 0x8e, 0x77, 0x7a, 0xab, 0xad, 0xba, 0x6a, 0x44, 0xaf, 0xb7, 0x41, 0x24, 0xbe, 0xf8, 0x46, 0x86, 0xab, 0x7}, types.Tx{0xa8, 0x2a, 0x3b, 0x54, 0xf4, 0xc7, 0xcb, 0x29, 0x37, 0x4e, 0xc0, 0x38, 0x71, 0x50, 0xaf, 0x5c, 0x7d, 0x4b, 0xe5, 0x4f, 0xc1, 0xf0, 0xac, 0x1a, 0x4a, 0x28, 0xd6, 0x57, 0x65, 0xdb, 0xa8, 0x4f, 0x78, 0x9a, 0x4e, 0x94, 0x97, 0xd2, 0xd8, 0x1a, 0x6c, 0xa1, 0x43, 0xff, 0x51, 0x7c, 0xff, 0x13, 0xd8, 0xce, 0xe7, 0xf8, 0xe0, 0xb2, 0xe0, 0xd2, 0x2, 0xb1, 0xe3, 0xc3, 0x73, 0xb6, 0x5f, 0xf1, 0x60, 0x8f, 0xb1, 0xe2, 0x88, 0xd, 0xcd, 0xcd, 0x7d, 0x2, 0x27, 0x81, 0xde, 0xad, 0xfd, 0x58, 0x3e, 0xe6, 0xd, 0x27, 0xc3, 0xd6, 0xce}, types.Tx{0x76, 0x80, 0x49, 0x80, 0x2d, 0x31, 0x86, 0xcb, 0x71, 0x2d, 0x6b, 0xf4, 0xfb, 0xff, 0xbc, 0x3d, 0x64, 0xc7, 0x3b, 0x7f, 0xd3, 0x5c, 0x82, 0xaf, 0x71, 0x55, 0xa7, 0xb3, 0xdc, 0x11, 0x1d, 0x67, 0x30, 0xb8, 0xfc, 0x99, 0xe7, 0xfa, 0xaa, 0x4, 0x32, 0xd, 0x8d, 0x4e, 0xbe, 0xc1, 0x40, 0xb3, 0x2f, 0x27, 0x9c, 0x26, 0x2a, 0x89, 0x23, 0x14, 0x26, 0xbb, 0x69, 0xe1, 0x7, 0x9e, 0x82, 0xce, 0x87, 0x52, 0x5, 0xb0, 0x55, 0x9, 0x71, 0x61, 0x48, 0x29, 0x83, 0xbb, 0x4, 0x58, 0xa4, 0x5, 0x78, 0x37, 0x76, 0xcf, 0x56, 0xcd, 0xe3}, types.Tx{0x30, 0x3f, 0x88, 0x64, 0xcb, 0xca, 0x38, 0xc6, 0xdd, 0x2e, 0xb, 0x8c, 0xb0, 0x16, 0xf0, 0xe5, 0x4c, 0xa6, 0x8b, 0x7e, 0xea, 0x75, 0x8e, 0x6d, 0xd5, 0xd1, 0x22, 0x31, 0xf1, 0x7a, 0x34, 0xf1, 0xbc, 0x1e, 0xec, 0x44, 0x42, 0xc, 0xb5, 0xa1, 0x5c, 0x44, 0xc4, 0x3c, 0xcb, 0x62, 0xb9, 0x3e, 0x31, 0x69, 0xa4, 0xd7, 0x73, 0xee, 0x2e, 0xe, 0xa1, 0x8b, 0xfc, 0x75, 0xba, 0x2c, 0x11, 0x5d, 0x93, 0x15, 0xab, 0xea, 0x73, 0xe7, 0x9c, 0xf, 0x5a, 0x69, 0xbc, 0xb2, 0x79, 0x2d, 0x3e, 0x97, 0x78, 0x6f, 0x35, 0xe3, 0x21, 0x97, 0x10, 0x37, 0x18, 0x43, 0x6, 0xfc, 0xef, 0x49, 0x9f, 0xd9, 0x4b}, types.Tx{0x37, 0xc4, 0x37, 0x48, 0xf9, 0xe5, 0xaa, 0x73, 0xc6, 0xc7, 0x4, 0x19, 0x53, 0x2, 0x3e, 0x27, 0x83, 0x23, 0x72, 0x21, 0x18, 0xce, 0x5a, 0xd, 0x4e, 0x12, 0x59, 0xc2, 0x2a, 0x78, 0xb5, 0xf, 0xb, 0xc8, 0x2e, 0xd0, 0x34, 0xff, 0x62, 0x45, 0xde, 0xb2, 0x48, 0x5e, 0xf6, 0xb4, 0xc4, 0xfe, 0x64, 0xa7, 0xc3, 0x34, 0xea, 0x18, 0x71, 0xab, 0xed, 0xe5, 0x51, 0x59, 0x29, 0x4a, 0x2f, 0x44, 0x43, 0x5a, 0xfb, 0xb8, 0x6e, 0x6e, 0xd4, 0xf3, 0x26, 0x95, 0x6c, 0x6c, 0xa0, 0x82, 0x81}, types.Tx{0xef, 0x66, 0x7f, 0xec, 0xa0, 0x77, 0x3a, 0x14, 0x57, 0x17, 0x78, 0xd9, 0xa3, 0x85, 0x8, 0xe, 0x55, 0xa4, 0xd8, 0xb1, 0xc8, 0x26, 0xbf, 0x58, 0x4a, 0x8e, 0xc0, 0xd0, 0x34, 0xaa, 0x44, 0xcf, 0x71, 0x42, 0xaa, 0xf9, 0x98, 0xd5, 0xaf, 0x42, 0x3d, 0x25, 0xcc, 0xb6, 0xd4, 0xf, 0xde, 0xf7, 0x72, 0x77, 0x40, 0x2a, 0x2b}, types.Tx{0x63, 0xf7, 0x14, 0xd2, 0xf6, 0x1, 0xc1, 0x72, 0x86, 0x64, 0x71, 0xa7, 0x52, 0x87, 0xed, 0x41, 0xa0, 0xf0, 0xd6, 0x4a, 0x60, 0xa0, 0x3c, 0x1e, 0x4d, 0x34, 0x6, 0x5b, 0xd0, 0xae, 0xba, 0xbd, 0xeb, 0xfa, 0xd9, 0x4, 0x2f, 0xd1, 0xaa, 0x4, 0x26, 0xef, 0x96, 0xed, 0x5, 0xf6, 0xde}, types.Tx{0x8a, 0xa8, 0x2, 0x6b, 0xe9, 0x9e, 0x4e, 0x6b, 0x86, 0xc6, 0x7d, 0x8c, 0xcd, 0x6b, 0x69, 0x77, 0x15, 0x8b, 0x16, 0x25, 0xd5, 0x60, 0xa9, 0x67, 0xbb, 0xd1, 0x60, 0xfa, 0x1a, 0x1, 0x67, 0xe4, 0x68, 0x6f, 0xbd, 0xc6, 0x44, 0xf4, 0x65, 0x25, 0x26, 0xae, 0xaf, 0xb7, 0x2b, 0xa6, 0x27, 0xb3, 0x83, 0x44, 0xc1, 0xc3, 0x93, 0x45, 0xd9, 0x4c, 0x1d, 0xe3, 0x4a, 0x85, 0x85, 0xa8, 0x36, 0xa2, 0xa, 0x3a, 0xc, 0x68, 0x97, 0x32, 0x2f, 0xb0, 0x54, 0xcb}, types.Tx{0x66, 0xcd, 0xf9, 0x73, 0xbb, 0x63, 0x4d, 0x6a, 0x86, 0x1b, 0x5f, 0x16, 0x38, 0x4, 0x25, 0x61, 0xa3, 0xa7, 0xb5, 0xa5, 0x8f, 0x41, 0xd6, 0x87, 0x56, 0x7f, 0xfe, 0xe1, 0xf8, 0xd9, 0x8d, 0x6, 0x25, 0x95, 0xe3}, types.Tx{0x81, 0x99, 0x7a, 0x2f, 0x18, 0xd, 0x5e, 0x75, 0xeb, 0x64, 0xcc, 0xa, 0xb0, 0x24, 0x4c, 0x1a, 0xaa, 0xc0, 0xab, 0x6, 0x61, 0xa5, 0xcd, 0x41}, types.Tx{0xf5, 0x51, 0xe3, 0x56, 0x69, 0x2e, 0x38, 0xe3, 0x2a, 0xb2, 0xbf, 0xe2, 0xb4, 0x3, 0xa5, 0x2b, 0xbb, 0x42, 0x28, 0x27, 0x21, 0x76, 0xb0, 0x48, 0xcb, 0x78, 0x58, 0x85, 0x71, 0xd8, 0x60, 0x32, 0x8c, 0x45, 0x36, 0x75, 0x7c, 0xe8, 0x5, 0xa1, 0x93, 0xc3, 0xce, 0x2c, 0x91, 0x62, 0xe5, 0xbd, 0x28, 0x7d, 0xac, 0x81, 0xfe, 0xa4, 0xa8, 0xb9, 0xd3, 0xbb}, types.Tx{0xd1, 0xda, 0xea, 0x1, 0x4a, 0x2e}, types.Tx{0x2f, 0x74, 0xcb, 0x45, 0x69, 0x83, 0xea, 0x9d, 0x20, 0x7, 0xdd, 0x32, 0x1d, 0x1f, 0xa2, 0xb7, 0x92, 0xbb, 0x1b, 0xfa, 0xf3, 0x51, 0x45, 0xb4, 0x6b, 0xa3, 0x95, 0xbe, 0xbb, 0xd3, 0x1d, 0x84, 0x97, 0xdb, 0x90, 0x2a, 0x54, 0x3b, 0x0, 0xc3, 0x95, 0x3c, 0x49, 0xd2, 0xa5, 0xeb, 0x72, 0x91, 0xac, 0x20, 0x3b, 0xc, 0xa8, 0x5c, 0x56, 0x6b, 0x9f, 0x32, 0xe, 0x65, 0xbf, 0xf2, 0x6c, 0xaa, 0x7c, 0x51, 0xcd, 0xf6, 0x8e, 0x30, 0x59, 0xfe, 0x44, 0xc6, 0xe7, 0x3e, 0x15, 0x2b, 0xf, 0xf5}, types.Tx{0xbd, 0xf8, 0x8f, 0xa0, 0x7e, 0x9b, 0xa1, 0x1b, 0x2b, 0x57, 0x47}, types.Tx{0x7d, 0x5d, 0x7c, 0xae, 0x47, 0x21, 0xd3, 0xac, 0x80, 0x5f, 0x2f, 0x78, 0xf5, 0xe, 0x6d, 0xda, 0xc6, 0x42, 0x1e, 0x12, 0xf0, 0x89, 0xe8, 0xdf, 0x19, 0x7f, 0xea, 0xde, 0x5, 0x70, 0x45, 0xee, 0xe9, 0x66, 0x2f, 0x87, 0x36, 0x23, 0xcb, 0xd8, 0x22, 0xf1, 0xc3, 0xd5, 0x88, 0x53, 0x98, 0x9d, 0xae, 0x6f, 0xba, 0x72, 0xcf, 0xdd, 0x0, 0x12, 0x8a, 0xdc}, types.Tx{0x46, 0x52, 0x73, 0x14, 0x43, 0x2e, 0xbc}, types.Tx{0x77, 0xbe, 0x43, 0x12, 0x98, 0xc, 0x7, 0xfb, 0x0, 0xb4, 0x8c, 0x6e, 0x23, 0xa7, 0x29, 0x29, 0x1d, 0xeb, 0xc2, 0x29, 0x7c, 0x4f, 0x82, 0x26, 0x84, 0x68, 0x62, 0x90, 0xa9, 0xc0, 0x77, 0x91, 0x12, 0x51, 0x4, 0x36, 0xc9, 0x5e, 0xcf, 0x11, 0xc, 0xc2, 0x10, 0xcc, 0xc0}, types.Tx{0x9c, 0xab, 0x97, 0x5c, 0x62}, types.Tx{0x31, 0xf7, 0x27, 0xb2, 0x82, 0x10, 0x3d}, types.Tx{0xfb, 0x86, 0x13, 0x7, 0x3b, 0x3e, 0x64, 0x19, 0x3f, 0xe3, 0xab, 0xa7, 0x83, 0x86, 0xbd, 0xda, 0xfa, 0xea, 0xb3, 0xd8, 0xb8, 0x4, 0x50, 0x70, 0xd4, 0xc5, 0x30, 0x91, 0x5, 0x3, 0x58, 0xb4, 0xdf, 0xf2}, types.Tx{0x4d}, types.Tx{0x83, 0x1e, 0xf6, 0x1, 0x7d, 0x6b, 0xab, 0xa2, 0x71, 0x49, 0x20, 0x36, 0xad, 0x71, 0x3e, 0x92, 0xe2, 0x5d, 0x76, 0x8b, 0x8a, 0xb9, 0xe4, 0x10, 0xb4, 0x6f, 0xbe, 0x3c, 0x24, 0xcb, 0x9a, 0x6e, 0x61, 0xb0, 0xe0, 0x84, 0xed, 0xb8, 0x12, 0xed, 0x5b, 0xf, 0x1a, 0x7f, 0xaf, 0x7a, 0x5d, 0x5, 0x40, 0x7}, types.Tx{0x7f, 0xb1, 0x20, 0x42, 0xdb, 0x70, 0x1, 0x4c, 0xa9, 0xbe, 0xbd, 0x94, 0x89, 0x4f, 0x1a, 0xf0, 0x99, 0x66, 0xcc, 0xf4, 0xeb, 0x70, 0xe, 0x46, 0xb2, 0xe1, 0xea, 0xe2, 0x68, 0xa4, 0xeb, 0xc0, 0x86, 0x9, 0x20, 0x88, 0x68, 0x93, 0x55, 0xf8, 0x6e, 0x79, 0x38, 0xab, 0x37, 0x14, 0x3c, 0xa7, 0x39, 0x74, 0xa3, 0xbd, 0x12, 0x2, 0x18, 0xd, 0xf9, 0x89, 0xaf, 0xb2, 0x7c, 0x3c, 0xef, 0xb6, 0x9b, 0x79, 0x95}, types.Tx{0xf8, 0xa7, 0x40, 0x44, 0x91, 0x3c, 0x61, 0xce, 0xd1, 0xce, 0x34, 0x30, 0x45, 0xc2, 0xc0, 0xa9, 0x6b, 0xe7, 0xa0, 0x95, 0x59, 0xbb}, types.Tx{0xcf, 0xb1, 0x80, 0xfd, 0xe7, 0x8b, 0x2e, 0x22, 0x37, 0x77, 0x9e, 0xe1, 0x6d, 0xd6, 0x7, 0x67, 0xf6, 0x58, 0xe6, 0xad, 0xea, 0x51, 0xd8, 0xec, 0xea, 0x7, 0xf5, 0xea, 0xaf, 0x52, 0xf4, 0xbd, 0xce, 0xc2, 0x80, 0x7, 0x9e, 0x40, 0x45, 0x70, 0x59, 0xfc, 0xb8, 0x5d, 0x1a, 0xa, 0x65, 0x31, 0x5a, 0x2f, 0xb8, 0xf4, 0x62, 0xfa, 0x6, 0xa1, 0x4c, 0x11, 0x46, 0xe9, 0x1f, 0x50, 0x3b, 0xa9, 0x9e, 0xdc, 0x43, 0xcd, 0x38, 0x14, 0xd5, 0xa, 0xb5, 0x88, 0xa, 0x75, 0x93, 0x2c, 0x90, 0x88, 0xe9, 0xbf, 0x22, 0x8a, 0x45, 0xbf, 0xff, 0xdc, 0x50, 0x35, 0x42, 0x2c, 0x99}, types.Tx{0xd3, 0x28}, types.Tx{0x87, 0x11, 0x8b, 0x56}, types.Tx{0x62, 0x2e, 0x5e, 0xd4, 0xab, 0x52, 0x1e, 0x2a, 0x74, 0xc6, 0x35, 0x3b, 0xdc, 0xa5, 0x9e, 0xe9, 0x85, 0x6c, 0xcc, 0x41, 0xd3, 0x6, 0xa6, 0xdc, 0x14, 0xec, 0x8e, 0xa7, 0x6a, 0xbc, 0x6a, 0x7b, 0xcd, 0xab, 0x3d, 0xbe, 0x8e, 0xe2, 0xca, 0x7d, 0x6, 0xa1, 0xcd, 0x8b, 0xd1, 0x96, 0x52, 0x94, 0x8e, 0x45, 0xa3, 0xb2, 0x3d, 0x1, 0xb6, 0x94, 0xc5, 0x8f, 0xbc, 0xe, 0xe3, 0xbc, 0x44, 0x9d}, types.Tx{0x2b, 0x57, 0x35, 0x56, 0xc2, 0xa9, 0x7c, 0x1c, 0xc2, 0xaa, 0x85, 0x5, 0x54, 0x81, 0x5d, 0xe5, 0x1c, 0x70, 0xe9, 0x5b, 0x25, 0xfc, 0x78, 0xb0, 0x32, 0xe3, 0x2f, 0xf9, 0xd8, 0x78, 0x1, 0x23, 0xd0, 0x20, 0x18, 0xb9, 0x70, 0xc3, 0x5b, 0x2b, 0xc, 0xf3, 0x7b, 0x43, 0x5f, 0x9c, 0x90, 0xb6, 0x6d, 0x9c, 0xc1, 0x6b, 0xa2, 0xf2, 0x84, 0xc6, 0x11, 0x18, 0xc8, 0xfb, 0xf1, 0x7e, 0x77, 0x1e, 0x1d, 0x54, 0x45, 0x43, 0xab, 0xfa, 0xba, 0xe7, 0xeb, 0x98, 0xa, 0x62, 0xfb, 0x8e, 0xfd, 0x19, 0xe1, 0x1}, types.Tx{0x1d, 0x21, 0x5e, 0xe4, 0x4e, 0xc8, 0xb7, 0xa2, 0xda, 0xb8, 0xd, 0x2, 0x48, 0x17, 0x7, 0xd8, 0x8, 0x62, 0xb, 0x5e, 0xfe, 0xda, 0x36}, types.Tx{0x15, 0x64, 0x98, 0x23, 0x99, 0x42, 0x45}, types.Tx{0x1c, 0xf8, 0x72, 0xea, 0x4f, 0x15, 0xa9, 0x40, 0x1c, 0x10, 0x28, 0xbf, 0x29, 0x86, 0x7c, 0xca, 0xae, 0x5c, 0x5f, 0x8a, 0x58, 0xd4, 0x15, 0x5d, 0x95, 0xed, 0x41, 0x71, 0x0, 0x88, 0x2c, 0x64, 0x38, 0x5b, 0x43, 0xa7, 0xb2, 0xbc, 0x6b, 0x6e, 0x58, 0xff, 0x3e, 0xa5, 0xcc, 0xaf, 0xb2, 0x8c, 0xc9, 0xf3, 0x68, 0x9, 0x15, 0xc0}, types.Tx{0xe8, 0xee, 0x38, 0x65, 0x73, 0x47, 0xf6, 0x56, 0x40, 0xc6, 0xc2, 0x9d, 0xe2, 0xb0, 0x77, 0xa1, 0x9, 0x3, 0xb5, 0x29, 0xc1, 0x1b, 0x78, 0x23, 0xc6, 0x47, 0xd9, 0xed, 0xb7, 0x99, 0x96, 0x93, 0x2a, 0x11, 0xa7, 0xef, 0x37, 0x76, 0x2a, 0x7e, 0xc7, 0x80, 0x8b, 0xfe, 0x47, 0x8c, 0x93, 0xf6, 0x35, 0xcc, 0x69, 0xb1}, types.Tx{0x74, 0x77, 0xd5, 0xff, 0x72, 0x1d, 0x1c, 0xc9, 0xc9, 0x22, 0xe5, 0x7d, 0x82, 0xbe, 0xe1, 0xd1, 0xa7, 0xaf, 0xda, 0xbd, 0xa6, 0xfb, 0xbc, 0xc0, 0xa3, 0x88, 0xbe, 0x86, 0x4, 0x90, 0x77, 0xa8, 0xb9, 0xac, 0x33, 0x53, 0x5f, 0xc3, 0x3f, 0x9e, 0x1f, 0xec, 0xad, 0x3e, 0x0, 0x37, 0x44, 0x1c, 0xec, 0xfd, 0xe3, 0x7c, 0x23, 0xe1, 0xca, 0x91, 0xe9, 0x6f, 0x5f, 0x49, 0x7e, 0x76, 0xae, 0x3d, 0x4d, 0xca, 0xe3, 0x87, 0x19, 0xe0, 0x93, 0xce, 0x2d, 0xb7, 0xb8, 0x93, 0x24, 0x26, 0x84, 0xcf, 0x82, 0x8e, 0x4e, 0x86, 0xfc, 0x8a}, types.Tx{0x3e, 0xb6, 0x37, 0x4b, 0xd9, 0x38, 0xab, 0x70, 0xa3, 0xac, 0x26, 0x1a, 0x74, 0x15, 0xa0, 0xf9, 0x99, 0xf0, 0xe9, 0x78, 0x22, 0x18, 0x65, 0xd3, 0xf1, 0xc8, 0xa4, 0x83, 0xd4, 0x17, 0xbc, 0xc3, 0xb1, 0x56, 0x3c, 0xa0, 0x1c, 0xcf, 0xee, 0xb1, 0x8a, 0x7b, 0x4a, 0x46, 0x26, 0x2a, 0x6e, 0x4, 0x45, 0x5f, 0x39, 0xbd, 0x77, 0x90, 0x96, 0xbc, 0xe4, 0xda, 0x6b, 0x34, 0x37, 0x3c, 0x56, 0xc0, 0xa5, 0x7a, 0x50, 0xae, 0x4c, 0x59, 0xec, 0x18, 0x9e, 0xea, 0xfe, 0xdd, 0x14, 0xea, 0x86, 0x23, 0x71, 0x7e, 0x6, 0xdd, 0x83, 0xa9, 0x88, 0x54, 0xe2, 0x54, 0x50, 0x4d, 0x5, 0x6a, 0x85, 0x14, 0xae}, types.Tx{0x2c, 0x7, 0xbe, 0x70, 0xed, 0xba, 0x97, 0x7c, 0x76, 0xe2, 0x5e, 0x4c, 0x69, 0x42, 0x79, 0x9d, 0xff, 0xf8, 0x3c, 0x4e, 0x10, 0x49, 0xf2, 0x2, 0x6b, 0x92, 0x1a, 0xce, 0xce, 0xd6, 0x1d, 0x6, 0xfb, 0x44, 0xb1, 0xb9, 0x23, 0x38, 0x8b, 0xd2, 0xfd, 0x5f, 0x48, 0x51, 0x8, 0x78, 0x41, 0xca, 0xc5, 0x6b, 0x4b, 0x76, 0x7d, 0x5a, 0x13, 0x1e, 0x46, 0x2f, 0xc1, 0x46}, types.Tx{0xe4}, types.Tx{0x85, 0x7e, 0xb5, 0x4, 0x77, 0xb4, 0x4d, 0x20, 0x82, 0x1f, 0x19, 0xb4, 0x3b, 0x94, 0x62, 0xb0, 0x2a, 0x86, 0xa2, 0xce, 0x21, 0x34, 0x9f, 0xf5, 0x51, 0x1c, 0xdf, 0x5d, 0x6e, 0xe, 0x98, 0xd2, 0xdb, 0xc7, 0x5c, 0x37, 0x83, 0x46, 0xeb, 0xac, 0xf7, 0x6a, 0xae, 0x21, 0x16, 0x0, 0xd7, 0xe3, 0xcf, 0x44, 0xf8, 0x3c, 0xc3, 0xd4, 0xc9, 0x51}, types.Tx{0x46, 0xde, 0xe3, 0x50, 0x7a, 0x81, 0x84, 0xb9, 0xb2, 0xa8, 0xc4, 0x69, 0x6b, 0xc4, 0x7e, 0x29}, types.Tx{0x59, 0x53, 0xd2, 0x53, 0x86, 0x81, 0xcc, 0x66, 0x56, 0x3, 0x37, 0x5b, 0x85, 0x6e, 0x10, 0x5f, 0x13, 0xf8, 0xdd, 0x8b, 0x8c, 0x29, 0x67, 0xf2, 0xc, 0x54, 0x71, 0xc5, 0xdc, 0x75, 0xdf, 0xe2, 0x4b, 0x3c, 0x5e, 0x8a, 0x4e, 0x71, 0x39, 0xf, 0xf7, 0x6, 0x84, 0xc9, 0xa5, 0x80, 0x13, 0x56, 0x5a, 0xd6, 0x2f, 0xab}, types.Tx{0xe3, 0x52, 0x23, 0xf8, 0x15, 0x7, 0x38, 0xf, 0x6a, 0x5, 0xe7, 0xa5, 0x2d, 0x9d, 0x22, 0x3d, 0xe7, 0x84, 0xf0, 0x5d, 0xdb, 0x72, 0x74, 0x3d, 0x6f, 0x22, 0x86, 0xbd, 0x3b, 0x3, 0x73, 0x1e, 0x2c, 0xf, 0x29, 0x7b, 0x26, 0x40, 0x53, 0x6e, 0x59, 0x1, 0x7c, 0x9c, 0x9e, 0x58, 0xc3, 0x9d, 0x2, 0x23, 0x36, 0x41, 0x5a, 0x62, 0xef, 0x95, 0x17, 0xba, 0xee, 0x53, 0xf7, 0x76, 0xa1, 0xe2, 0xce, 0x16, 0x95, 0x47, 0x54, 0x4a, 0xe1, 0x3, 0xf0, 0xfb, 0xf4, 0x6e, 0x17, 0x14, 0x43, 0xea, 0xe4, 0x70, 0xce, 0xbb, 0x71, 0x52, 0x3c, 0x9e, 0x95, 0xf5, 0xf7, 0xf4}, types.Tx{0x92, 0xc2, 0x58, 0x6c, 0xea, 0x9, 0x6c, 0x80, 0xfe, 0xbc, 0x8e, 0x53, 0x2a, 0x7d, 0xc4, 0x2f, 0x4f, 0x77, 0x2, 0x49, 0x89, 0xf7, 0xb0, 0x97, 0x17, 0xfe, 0xbe, 0xb3, 0x2, 0x6e, 0xd, 0x72, 0x37, 0x8c, 0x2, 0xf3, 0x85, 0x44, 0x82, 0xd2, 0x94}, types.Tx{0x5a, 0x79, 0xef, 0xdf, 0xe4, 0x39, 0xe5, 0x6, 0xfd, 0x2b, 0x87, 0x5f}, types.Tx{0x3e, 0xc8, 0xc5, 0x29, 0x17, 0x11, 0x2b, 0x75, 0x3e, 0x10, 0x88, 0xd, 0xc9, 0xe0, 0x3b, 0x89, 0xc2, 0x87, 0x8d, 0x8b, 0x51, 0x64, 0x6e, 0xc6, 0x9c, 0x4a, 0xa9, 0xd4, 0x2b, 0x74, 0xf8, 0xaa, 0x7, 0xe9, 0x41, 0xf0, 0xf3, 0x73, 0x47, 0x3, 0xc9, 0xde, 0x99, 0x0, 0x75, 0x89, 0xc6, 0x47, 0x59, 0x13, 0x8, 0x8c, 0x47, 0xda, 0xb0}, types.Tx{0xe2, 0x8f, 0x83, 0xfb, 0x47, 0x2, 0x1e, 0x60, 0x10, 0x17, 0x5a, 0x31, 0x46, 0x3b, 0x33, 0x45, 0x63, 0x9c, 0x5d, 0x10, 0xe4}, types.Tx{0x96, 0xae, 0xb2, 0x1, 0x2c, 0x26, 0x71, 0x9d, 0x2d, 0xd3, 0x97, 0x95, 0x8b, 0xa7, 0xc2, 0x6f, 0xba, 0xda, 0x6a, 0x52, 0x87, 0x1f, 0x34, 0x92, 0xee, 0xeb, 0xfb, 0x36, 0xd9, 0x80, 0x91, 0xaf, 0x27, 0xb3, 0xaa, 0x57, 0xdc, 0x2, 0x9d}, types.Tx{0x32, 0x52, 0x3a, 0xa, 0x8f, 0x73, 0x59, 0x62, 0x2b, 0x87, 0xd5, 0x7d, 0xe1, 0x97, 0xa4, 0xd7, 0xd5, 0xfa, 0xd2, 0x2f, 0x43, 0x63, 0xa0, 0xfe, 0xe9, 0x1b, 0x4b, 0x9c, 0x28, 0xf6, 0xac, 0x45, 0x36, 0xaa, 0x37, 0x81, 0x9f, 0x26, 0x1d, 0x5e, 0xb3, 0xb7, 0x7c, 0xcb, 0xf8, 0xd9, 0xb8, 0xaf, 0xb8, 0x66}, types.Tx{0xf4, 0x2c, 0xd8, 0x6f, 0x8f, 0xb6, 0x50, 0xc8, 0x9, 0xd5, 0x86, 0x56, 0xdf, 0xe7, 0x34, 0x66, 0xd1, 0x7e, 0xc1, 0x82, 0xb8, 0x25, 0x35, 0xb, 0xb1, 0x7b, 0xfb, 0xe7, 0x76, 0xf9, 0x30, 0x1d, 0x6b, 0xcd, 0xed, 0x4a, 0x59, 0xa6, 0xf8, 0x91, 0x11, 0x4e, 0xe0, 0xf4, 0x92, 0x29, 0x98, 0xb2, 0xfa, 0x1d, 0x90, 0x34, 0x2b, 0x59, 0x9f, 0x7c}, types.Tx{0xc0, 0x81, 0x97, 0x55, 0x43, 0xc3, 0xdb, 0x48, 0xc7, 0x7b, 0xb0, 0x12, 0x90, 0xf3, 0xae, 0xd3, 0x60, 0x16, 0x6d, 0xbf, 0x8d, 0xe5, 0xe, 0x44, 0x31, 0xee, 0xf9, 0xd, 0x46, 0xd8, 0x43, 0x17, 0x7c, 0x11, 0x79, 0x3a, 0x1b, 0x5a, 0x52, 0x6c, 0xd9, 0xc4, 0xcd, 0xba, 0xa7, 0xf5, 0xe4, 0x0, 0xd1, 0xba, 0xdd, 0xfb, 0xf0, 0x6, 0x7, 0xb7, 0xb5, 0x22, 0xd9, 0x66, 0x61, 0xfc, 0xbe, 0x8c, 0x90, 0xb3, 0x23, 0x35, 0x5, 0x63, 0xbe, 0xab, 0xb4, 0x88, 0x5c, 0xe7, 0x3b, 0xe3, 0x26, 0x7c, 0x75, 0x5d, 0xfc, 0x8e, 0x92, 0xdc}, types.Tx{0x99, 0x27, 0x3c, 0x1c, 0x8f, 0x64, 0x35, 0xf8, 0x48, 0x26}, types.Tx{0x6b, 0x43, 0xf6, 0x2b, 0x94, 0x7, 0xb8, 0x53, 0x88, 0xff, 0xa2, 0xb9, 0x61, 0x17, 0x91, 0x59, 0x75, 0x97, 0x77, 0xf, 0x30, 0x26, 0xa5, 0x89, 0x8a, 0x54, 0x92, 0xd1, 0x47, 0xfd, 0x9b, 0x3d, 0xb6, 0x76, 0x5c, 0x4d, 0x30, 0xc, 0x63, 0xe8, 0xa, 0x8e, 0x24, 0x39, 0x54, 0xe0, 0x21, 0xc9, 0xed, 0x24, 0xcf, 0xb0, 0x8f, 0x1e, 0xb0, 0xdd, 0x59, 0xbb, 0x35, 0x3d, 0x6e, 0xa6, 0xd6, 0x3e, 0x70, 0x82, 0x86, 0xb7, 0x17, 0x1a}, types.Tx{0xb2, 0x2d, 0x59, 0x5, 0x2c, 0x8b, 0xaf, 0x97, 0xed, 0x2b, 0x3e, 0xb2, 0xd, 0x6e, 0x40, 0x6a, 0xcb, 0xf8, 0xce, 0x98, 0xf0, 0x9a, 0x59, 0x6c, 0xf, 0xc1, 0x4d, 0x1f, 0x11, 0x73, 0x82, 0x9d, 0x5e, 0xaf, 0x59, 0x13, 0x44, 0x3, 0x3b, 0xdb, 0xef, 0xce, 0x61, 0x91, 0xd1, 0xa5, 0x38, 0x59, 0x46, 0x94, 0xe6, 0x94, 0xdb, 0xf6, 0x8e, 0x7, 0xf6, 0xb0, 0x9b, 0xf2, 0x4b, 0xb4, 0x7f, 0xe6, 0x21, 0xf3, 0x90, 0xe3, 0x42, 0x67, 0x98, 0x77, 0x3a}, types.Tx{0x3a, 0x3, 0xb9, 0x98, 0xf2, 0x82, 0xb9, 0xfc, 0x17, 0xcb, 0xea, 0x84, 0x77, 0x85, 0x7c, 0x38, 0xf1, 0x57, 0x3f, 0x69, 0xd5, 0xe4, 0x59, 0x3e, 0xe8, 0xd, 0x21}, types.Tx{0x18, 0xf0, 0xf2, 0x53, 0xe9, 0x96, 0x4f, 0xa1, 0x9f, 0xc4, 0xa2, 0x3b, 0x29, 0x30, 0x18, 0xf2, 0x52, 0x99, 0x4b, 0x2f, 0x96, 0x1e, 0x35, 0x18, 0xce, 0x86, 0x92, 0xed, 0x12, 0x2e, 0x6, 0x90, 0x96, 0x9f, 0x71, 0x98, 0x7c, 0xd8, 0xb7, 0xf1, 0xc1, 0xb, 0xfc, 0xf1, 0x4f, 0x2a, 0xf5, 0xbd, 0x94, 0x17, 0xa5, 0xb6, 0x3a, 0xa0, 0xf5, 0x8f, 0x5a, 0xc5, 0x31, 0x9e, 0xfb, 0x67, 0x36, 0x69, 0xc, 0x75}, types.Tx{0x28, 0xb3, 0xe2, 0x70, 0x8f, 0x8f, 0xe2, 0x70, 0x27, 0x6b, 0x8f, 0x92, 0x57, 0x8a, 0xe4, 0x58, 0xe4, 0x69, 0x7e, 0xdf, 0xc4, 0x2, 0x90, 0x91, 0x91, 0x70, 0x42, 0xf4, 0x70, 0xe7, 0x54, 0x16, 0x17, 0xd0, 0x74, 0xf1, 0xe5, 0xad, 0x96, 0xd1, 0x60, 0x9, 0x41, 0x79, 0xe, 0xbf, 0x58, 0x9, 0x54, 0xd2, 0xc4, 0x37, 0x5c, 0x86, 0x88, 0x8d, 0xec, 0x4e, 0x80, 0xe8, 0xfa, 0xdb, 0xa2, 0x81, 0x56, 0x99, 0x7d, 0x6f, 0x43, 0xc, 0xc, 0xea, 0xc0, 0x0, 0x42, 0xc9}, types.Tx{0x9d, 0x4a, 0xc9, 0x8c, 0x85, 0xb6, 0x52, 0xa2, 0x4d, 0x1b, 0xb8, 0x65, 0x92, 0x17}, types.Tx{0xcd, 0xc9, 0x43, 0x6b, 0xdf, 0xc8, 0x7c, 0x94, 0xa0, 0x3a, 0x4c, 0x71, 0x68, 0x53, 0xb5, 0x38, 0x26, 0x2f, 0x69, 0x8a, 0xe1, 0xfc, 0xbb, 0xd1, 0x10, 0x9f, 0xd2, 0x3d, 0x8a, 0x40, 0x6c, 0x32, 0x53, 0xc8, 0x40}, types.Tx{0x1c, 0xc3, 0x49, 0x76, 0xaf, 0x30, 0xdb, 0x6b, 0x38, 0xa9, 0x15}, types.Tx{0xac, 0x9c, 0xdb, 0x65, 0xf3, 0xc7, 0xd0, 0xd2, 0xb2, 0xd2, 0x0, 0x12, 0x94, 0xbc, 0x22, 0x12, 0x84, 0x25, 0x9, 0xf1, 0xc9, 0x7c, 0xa9, 0x96, 0x84, 0xfd, 0x56, 0x4b, 0x52, 0x44, 0x23, 0x17, 0xce, 0xc9, 0x4c, 0x9d, 0xb0, 0x5, 0xf, 0x19, 0x20, 0xb3, 0x2f, 0xc8, 0x44, 0x70, 0x88, 0xc3, 0x5f, 0xfe, 0xd, 0x51, 0x27, 0xcf, 0xdf, 0x13, 0x3a, 0x39, 0x1, 0x11, 0x18, 0xb5, 0x2a, 0x75, 0x18, 0xbe, 0x3f, 0x74, 0xb3, 0x32, 0x20, 0x72, 0x8d, 0x7f, 0xed, 0x86, 0x38, 0x42, 0xfc, 0xdb, 0x2b, 0xb7, 0x5b, 0x91, 0x87, 0xad, 0x3a, 0xef, 0xcd, 0x33, 0x69, 0xf8}, types.Tx{0xda, 0x64, 0x5f, 0xd, 0xb6, 0x63, 0x53, 0xf6, 0x83, 0x94, 0xa8, 0x94, 0x31, 0x7f, 0xce, 0x12, 0xff, 0x7e, 0x3d, 0x77, 0x9, 0xe1, 0x17, 0x3b, 0x32, 0xf7, 0x84, 0x4, 0x14, 0xe, 0xd8, 0x3f, 0xa8, 0x2b, 0xf6, 0x94, 0x9d, 0x54, 0x1a, 0x9a, 0x7d, 0x9f, 0xe0, 0xfa, 0x60, 0x5c, 0x43, 0x4, 0xea, 0x38, 0xab, 0x68, 0x38, 0x1a, 0x79, 0xe1, 0x4a, 0xef, 0xaf, 0xdd, 0xa8, 0xe5, 0xc3, 0x40, 0x7d, 0x2e, 0x9b, 0x8, 0x3, 0xe8, 0xbd, 0x44, 0x85, 0xd9, 0x8, 0x1, 0xf3, 0x64, 0x43, 0x8, 0xbb, 0xe3, 0x9b, 0x4d, 0x54, 0xb8, 0x17, 0x88, 0x1b, 0x12, 0xc0, 0x37}, types.Tx{0xd6, 0xb3, 0xcc, 0x1e, 0x88, 0xe9, 0x18, 0xaa, 0x82, 0x82, 0xf3, 0xb4, 0x96, 0xcc, 0x15, 0x63, 0x67, 0x45, 0x76, 0xee, 0x1c, 0xd1, 0x59, 0x21, 0xc8, 0x29, 0x31, 0x65, 0x39, 0x6f, 0xf2, 0x50, 0x79, 0x4a, 0x48, 0xe9, 0x5a, 0x20, 0x8b, 0x31, 0x71, 0xe4, 0x3b, 0x25, 0x63, 0xc4, 0x4b, 0xfa, 0xb3, 0xd4, 0xef, 0xc5, 0x79, 0x6e, 0x1, 0xec, 0xf4, 0x1c, 0x6b, 0xff, 0x2a, 0x47, 0x1d, 0xc7, 0xd4, 0x7c, 0x2, 0x89, 0xc2, 0xf1, 0xac, 0x3e, 0xaa, 0x9, 0x7, 0x45, 0x77, 0x29, 0x2, 0xd0, 0x92, 0xe9, 0x3b, 0x30, 0x70, 0x33, 0x76, 0x53, 0x2a, 0xdf}, types.Tx{0x5d, 0xc2, 0x18, 0x6e, 0xf4, 0x1b, 0xd5, 0xb0, 0x9b, 0x9, 0xe2, 0x8a, 0xb1, 0x1, 0x4c, 0x1d, 0x1d, 0x5c, 0x93, 0x3a, 0x51, 0xa6, 0x41, 0x30, 0x3e, 0x21, 0x53, 0x79, 0xad, 0xf2}, types.Tx{0x62, 0xdb, 0xfc, 0x15, 0xa1, 0x23, 0xe0, 0x72, 0x1d, 0x4a, 0x5a, 0x34, 0xc7, 0x66, 0x6d}, types.Tx{0x9, 0x87, 0x9e, 0x98, 0x9, 0xb7, 0xb7, 0x4f, 0x5e, 0x79, 0x6c, 0xe6, 0x2e, 0x73, 0x90, 0xa0, 0x36, 0x97, 0xe8, 0x99, 0x35, 0x4f, 0x20, 0xff, 0x9a}, types.Tx{0x99, 0x22, 0xf5, 0xb2, 0x4f, 0x9}, types.Tx{0x62, 0xcd, 0xe5, 0x3a, 0xb0, 0xfa, 0x72, 0x40, 0x56, 0x8c, 0xdc, 0x9f, 0xb5, 0x78, 0x74, 0xdf, 0x42, 0x68, 0x0, 0x58, 0x7f}, types.Tx{0x64, 0x11, 0x89, 0xa8, 0xa2, 0xbb, 0x69, 0x8a, 0x28, 0xd5, 0x21, 0x14, 0xb1, 0x5f, 0x1f, 0xca, 0x94, 0x81, 0xd8, 0x61, 0x4f, 0x57, 0xa, 0x44, 0x22, 0xa5, 0xc, 0x21, 0xe3, 0x34, 0x96, 0xe7, 0x6c, 0x29}, types.Tx{0x1d, 0xe0, 0x11, 0x42, 0x7f, 0x7b, 0x1a}, types.Tx{0x94, 0xf2, 0x54, 0xf5, 0xb7, 0x7f, 0x35, 0x34}, types.Tx{0x30, 0x53, 0x92, 0x31, 0x21, 0x8, 0x3, 0x5f, 0xae, 0xe1, 0x3a, 0xdf, 0xd, 0x72, 0x5, 0x58, 0x4a, 0xd9, 0xa, 0x8b, 0x5, 0xd7, 0x5b, 0xb4, 0x9a, 0x60, 0x1, 0x2d, 0x81, 0x1, 0x91, 0x47, 0x4d, 0x91, 0x28, 0xef, 0x4d, 0x94, 0x45, 0xa8, 0x31, 0x91, 0x92, 0xcb, 0x4f, 0xc2, 0x2a, 0x15, 0x30, 0x13, 0xd, 0xfb, 0x44, 0x4a, 0xe, 0xf9, 0xde, 0x9e, 0x8b, 0x76, 0xee, 0x80, 0x61, 0xec, 0xfd, 0xab, 0x3f}, types.Tx{0x3d, 0x97, 0x31, 0xd4, 0xcd, 0x75, 0x9d, 0x4, 0xd8, 0x26, 0x72, 0x18, 0x1f, 0x42, 0xcd, 0x6d, 0x4d, 0x78}, types.Tx{0x97, 0x1e, 0xe6, 0x34, 0xd0, 0x44, 0x29, 0x37, 0xc9, 0x2a, 0x4f, 0x68, 0xe7, 0xff, 0x36, 0x75, 0x8c, 0x65, 0x7a, 0x7f, 0x44, 0xf6, 0x74, 0x3f, 0xe, 0x51, 0xc0, 0x7f, 0xbb, 0x61, 0x6c, 0x3e, 0x97, 0x37, 0xdf, 0x46, 0x83, 0x12, 0x85, 0x89, 0x79, 0xa8, 0x2b, 0x86, 0xd5, 0x3, 0xbb, 0x19, 0x32, 0xfc}, types.Tx{0x1d, 0xab, 0x67, 0xb6, 0x1a, 0x4e, 0x11, 0x7f, 0x7f, 0xd2, 0x11, 0xfa, 0xda, 0xcf, 0x66, 0x1f, 0xa2, 0x89, 0xd0, 0x9c, 0xb7, 0x4b, 0xe1, 0xd, 0xcd, 0x2b, 0xe0, 0xb9, 0x99, 0x41, 0x90, 0x3e, 0xeb, 0x63, 0x32, 0x57, 0xd2, 0x90, 0xe, 0x6a, 0x3c, 0x84, 0x98, 0xfd, 0x1f, 0x20, 0xad, 0x6, 0x88, 0x9f, 0x84, 0x8a, 0xb, 0x13, 0x50, 0xf9, 0x6, 0x2e, 0xc4, 0xf5, 0xc6, 0x31, 0x69, 0x54, 0x18, 0x73, 0x51, 0x94, 0x9b, 0xa, 0x48, 0x9b, 0xf0, 0xc9, 0xe, 0x40, 0xc1, 0xc8, 0x43, 0xd7, 0x66, 0xa2, 0x9f, 0x80, 0xc3, 0xd0, 0x9e, 0x47, 0x57, 0x1f, 0xf2, 0xb3, 0xcd, 0xf9, 0x6f, 0xd7}, types.Tx{0x9d, 0x5, 0xd2, 0xe, 0xda, 0x7a, 0xa8, 0x78, 0x70, 0x15, 0x70, 0x77, 0xbb, 0x6e, 0xd8, 0xe, 0xd1, 0x5, 0xc5, 0xc1, 0xdd, 0x9b, 0xb0, 0x36, 0x14, 0x63, 0xe0, 0x4d, 0xf4, 0xf0, 0x9f, 0xd2, 0x43, 0xf6, 0x36, 0x54, 0x92, 0xd4, 0x75, 0x88, 0xef, 0xfc, 0x74, 0x4c, 0xd0, 0x57, 0xb9, 0xc2, 0x84, 0xb6, 0x4, 0xb, 0x1, 0xe5, 0xe9, 0xac, 0x17, 0xd4, 0xaf, 0x6a, 0x53, 0x28, 0x45, 0xf7, 0x1, 0x3c, 0x76, 0xdc, 0x3f, 0x86, 0x36, 0x80, 0x64, 0xf1, 0x8e, 0x16, 0xf7, 0x9f, 0xe4, 0x5e}, types.Tx{0x65, 0x15, 0x67, 0xee, 0xf0, 0xc0, 0xa2, 0x88, 0x59, 0xc, 0xf9, 0xa, 0x21, 0xa, 0x74, 0x8b, 0x22, 0x39, 0xb5, 0x67, 0xa2, 0x79, 0x42, 0xf0, 0xbf, 0x60, 0x5f, 0xa2, 0x94, 0x5f, 0xe9, 0xf1, 0x18, 0xb3, 0xe7, 0x41, 0x5d, 0x4f, 0x8d, 0xa1, 0xe9, 0xc2, 0x46, 0x4, 0xb6, 0xc, 0x9b, 0xe, 0x22, 0x51, 0xcd, 0xb, 0x3f, 0x7, 0xdd, 0x28, 0x2a, 0xa6, 0x21, 0x96, 0x3f, 0x1c, 0xb3, 0x87, 0xfb, 0xe7, 0x9b, 0x8e, 0x2c, 0x60, 0x51, 0x4c, 0xbf, 0xc0, 0xe8, 0x12, 0xdd, 0xaf, 0xc6, 0x8b, 0x16, 0x2c, 0xfa, 0x5c, 0xe2, 0x9d, 0x19, 0x1f, 0xb1, 0xd3, 0xb6, 0xaf, 0x7a, 0x3f, 0x9a, 0x4a, 0x7f}, types.Tx{0x2a, 0x85, 0x56, 0xa9, 0x4b, 0xa1, 0x45, 0x8f, 0xe1, 0xe8, 0xe, 0x36, 0x50, 0xeb, 0x84, 0x53, 0xc6, 0x3d, 0x3f, 0x42, 0x3d, 0x74, 0xd1, 0xa6, 0x3d, 0xfb, 0xa, 0xf0, 0x17, 0xe7, 0x40, 0xa5, 0x20, 0x1a, 0xf6, 0x83, 0x12, 0x2, 0x37, 0x29, 0xea, 0xca, 0xe0, 0xcf, 0xf, 0x10, 0xf8, 0x6b}, types.Tx{0x3a, 0x7f, 0x4f, 0x52, 0x3c, 0x9f, 0xc, 0xac, 0xd8, 0xab, 0x83, 0xeb, 0x3f, 0xb6, 0x73, 0x27, 0xea, 0x4e, 0xb5, 0x3f, 0x60, 0x6c, 0x2a, 0x86, 0xa0, 0x94, 0x9d, 0x67, 0xc6, 0x4d, 0x92, 0x76, 0xc8, 0x14, 0xce, 0xdf, 0xfa, 0x28, 0x4a, 0x9e}, types.Tx{0x9f, 0xae, 0x86, 0xf7, 0x54, 0xf0, 0xe7, 0x25, 0x4e, 0xa9, 0x27, 0xad, 0x96, 0x25, 0x14, 0x7, 0x5b, 0xd4, 0xeb, 0x6, 0xeb, 0x4a, 0x78, 0x16, 0xe9, 0x96, 0xec, 0xe6, 0x74, 0xa5, 0x38, 0x25, 0x23, 0xd3, 0xd8, 0x3c, 0x5a, 0xf3, 0x3b, 0x24, 0xad, 0x8c, 0x6d, 0xfc, 0xa9, 0x20, 0xd4, 0x31, 0xc0, 0xae, 0x57, 0xb1, 0x6c, 0x6d, 0xd8, 0x9a, 0x48, 0xd1, 0xbf, 0xca, 0xa, 0x41, 0xf9, 0x1f, 0x2f, 0x7, 0x35, 0xa3}, types.Tx{0x30, 0x86, 0x17, 0x89, 0x5e, 0x6d, 0x54, 0x6b, 0x3e, 0xa6, 0xa7, 0xb9, 0xdf, 0x82, 0x99, 0x1a, 0x2d, 0x50, 0x6f, 0x10, 0x27, 0x90, 0x7e, 0xfc, 0xa9, 0x8c, 0x28, 0xbf, 0xd4, 0xca, 0x5c, 0x16, 0xd8, 0xeb, 0xc2, 0x22, 0xf2, 0x9e, 0xbb, 0x70, 0xc2, 0x48, 0x76}, types.Tx{0x94, 0xd0, 0x5c, 0x11, 0xee, 0x3a, 0x1d, 0x7c, 0xb2, 0x56, 0x54, 0xed, 0x37, 0x8c, 0x71, 0x46, 0x56, 0x15, 0xa5, 0xea, 0x25, 0x61, 0x70, 0x61, 0x2a, 0x8e, 0x14, 0xad, 0xb3, 0x1d, 0xd2, 0x67, 0xa4, 0x68, 0x96, 0x30, 0x2, 0xad, 0x25, 0x2b, 0x8, 0x72, 0x82, 0x4f, 0xd7, 0xaf}, types.Tx{0xeb, 0x55, 0xf6, 0x46, 0x2a, 0xd8, 0x20, 0x60, 0x14, 0xd5, 0x85, 0x77, 0xf3, 0xdc, 0xe1, 0xa5, 0x9c, 0x3b, 0xe, 0x83, 0x1, 0x76, 0x91, 0x56, 0x6e, 0x22, 0xda, 0xcf, 0xe6, 0x24, 0xd9, 0x9b, 0x2f, 0xba, 0x90, 0x62, 0x7e, 0xcd, 0x59, 0x32, 0xf3, 0x6b, 0x6c, 0xcd, 0xab, 0x4a, 0xaf, 0x4, 0xe4, 0xfd, 0x3b, 0x98, 0x4a, 0xb0, 0x0, 0xc5, 0x93, 0x3e, 0x17, 0x5d, 0x18, 0x54, 0xa2, 0xd7, 0x0, 0x22, 0x27, 0x6e, 0xdc, 0xbc, 0x58, 0x69, 0x6a, 0x92, 0x41, 0x74, 0xc1, 0x32}, types.Tx{0xa2, 0x13, 0x5c, 0x2d, 0x68, 0x6c, 0xdf, 0xa3, 0xfd, 0xd6, 0x28, 0x68, 0x62, 0x29, 0x69, 0x55, 0x7f, 0x5e, 0xc2, 0x1e, 0x66, 0x91, 0x7c, 0xed}, types.Tx{0x28, 0x53, 0x6b, 0xd8, 0x79, 0x55, 0x14, 0xc1, 0xbf, 0x35, 0x9b, 0x46, 0x6, 0xaa, 0xcf, 0x61, 0x4e, 0x48, 0x31, 0xc5, 0x40, 0x9a, 0x27, 0xc5, 0xc, 0x1b, 0x3d, 0xe2, 0xd8, 0x65, 0x64, 0x34, 0xc7}, types.Tx{0x7c, 0xdf, 0xe9, 0x5, 0xd2, 0x71, 0xe3, 0xe4, 0xf4, 0x11, 0x93, 0x95, 0x63, 0x4d, 0xa2, 0x4f, 0x42, 0x37, 0xc9, 0x93, 0x48, 0x6f, 0x20, 0x17, 0xf1, 0x71, 0x91, 0x29, 0xa9, 0x39, 0xbd, 0xf5, 0xc, 0x85, 0x74, 0x7d, 0xf8, 0x75, 0xb1, 0x1, 0x65, 0x60, 0xbc, 0xd1, 0x3f, 0x7d, 0x93, 0x50, 0xe4, 0xf2, 0x11, 0x13, 0xaf, 0x72, 0xdc, 0x59, 0xaf, 0xb3, 0xef, 0xd8, 0x4c, 0x18, 0x8a, 0x5a, 0x7f, 0x18, 0x2d, 0x5e, 0x5a, 0x6d, 0x32, 0x7c, 0xe8}, types.Tx{0xd3, 0xd4, 0xe2, 0x85, 0x25, 0x59, 0xcf, 0x76, 0xb, 0xc, 0x6c, 0x37, 0x55, 0x79, 0xe4, 0x81, 0x5a, 0x1c, 0x8e, 0x7b, 0xcf, 0x7a, 0x71, 0x40}, types.Tx{0x3f, 0xf2, 0x2b, 0x3b, 0x25, 0xf}, types.Tx{0x9a, 0x8b, 0xaa, 0x14, 0x4e, 0xf9, 0x8b, 0x86, 0x55, 0x50, 0xa8, 0x84, 0xf4, 0x43, 0x3b, 0xc4, 0x5, 0x4b, 0xc4, 0xda, 0x49, 0x28, 0x1b, 0xaf, 0x98, 0x98, 0x95, 0x78, 0x93, 0x37, 0x3, 0xe0, 0x97, 0xe2, 0xb8, 0x60, 0xe0, 0xc7, 0xee, 0xc, 0xcb, 0x8f, 0xd4, 0xc9, 0x70, 0xdc, 0xdc, 0xa5, 0xe, 0xe0, 0x91, 0x55, 0xd2, 0x75, 0x46, 0xc0, 0x67, 0x71, 0x69, 0x62, 0xe0, 0x4b, 0x22, 0xf2, 0x76, 0xc, 0xd3, 0xe7, 0x2d, 0x0, 0xe2, 0xe7, 0x9}, types.Tx{0x9c, 0x88, 0x3f, 0xbe, 0x98, 0x17, 0x1e, 0xc8, 0xe7, 0x37, 0x2a, 0xd0, 0x47, 0x5c, 0x6f, 0xe4, 0x12, 0xc1, 0x3a, 0x25, 0xd5, 0x29, 0x8e, 0x85, 0xcc, 0x41, 0x76, 0x7b, 0xa8, 0x6d, 0xeb, 0xaf, 0x49, 0x63, 0x2c, 0x59, 0x8a, 0xa7, 0xfb, 0x9e, 0x38, 0xe7, 0x3f, 0x4a, 0x40, 0x61, 0xc7, 0x79, 0x85, 0xd9, 0xab, 0xcb, 0xc5, 0xe4, 0x47, 0x88, 0xa, 0x35, 0x2d, 0xb3, 0x94, 0xed, 0x7a, 0x2d, 0xc2, 0x9c, 0x51, 0x32, 0xd, 0x1, 0x36, 0x37, 0xdc, 0x4c, 0x24, 0x84, 0x69, 0x4b, 0x5, 0x36, 0xea, 0x7c, 0x8a, 0xac, 0xef, 0x25, 0x2, 0xc1, 0xe6, 0xf4, 0x14, 0x5c, 0x1d, 0xb4, 0x12, 0x46, 0x17}, types.Tx{0x2a, 0x29, 0x6b, 0xd0, 0x8, 0x69, 0x1e, 0x29, 0x57, 0x41, 0xa8, 0xd0, 0x19, 0x1, 0x6a, 0x9b, 0xce, 0x42, 0x43, 0x80, 0xfe, 0xa6, 0x88, 0xaf, 0x11, 0xf2, 0xcf, 0xda, 0xd2, 0xf7, 0x28, 0x7e, 0xb6, 0x91, 0x53, 0xc4, 0xac, 0x93, 0xaa, 0x7f, 0x13, 0x9d, 0x24, 0xc2, 0xe5, 0xc2, 0x36, 0x77, 0xde, 0x9f, 0xc8}, types.Tx{0x6d, 0x87, 0xb4, 0x89, 0xfd, 0x71, 0x8e, 0x4f, 0xf8, 0x1, 0x14, 0x51, 0x29, 0x4d, 0x4a, 0x8f, 0xa4, 0x8d, 0x74, 0xba, 0xbb, 0x37, 0xb9, 0x23, 0xc5, 0x38, 0x32, 0xab}, types.Tx{0xe8, 0x5b, 0xf0, 0x96, 0xab, 0x4b, 0xb3, 0x1a, 0x27, 0xf0, 0x3b, 0x83, 0x82, 0x19, 0x3, 0xc3, 0x53, 0xdc, 0xe4, 0xb9, 0x46, 0x90, 0x13, 0xed, 0xd4, 0x16, 0x3d, 0xba, 0xe6, 0xe7, 0xf5, 0x5e, 0x6b, 0x22, 0x22, 0xc5, 0x25, 0xa3, 0x6c, 0x45, 0x0, 0x6f, 0x1c}, types.Tx{0xc7, 0x8c, 0xdf, 0xa8, 0x72, 0xb0, 0x9b, 0xe7, 0x2b, 0x93, 0x9d, 0x82, 0x44, 0xdf, 0xc5, 0x62, 0x6c, 0x70, 0x55, 0x6, 0xa, 0xf8, 0xb1, 0xe0, 0x60, 0xab, 0xea, 0x70, 0xbd, 0x82, 0xfd, 0x75, 0xe4, 0x2c, 0x90, 0xe, 0x58, 0x22, 0xf2, 0xd, 0xb5, 0x67, 0x8, 0x1, 0x59, 0x5, 0x29, 0xc3, 0x3c, 0xb4, 0x31, 0x78}, types.Tx{0xff, 0xed, 0xfb, 0x35, 0x92, 0xe5, 0xfc, 0xe1, 0xe8, 0xf1, 0xe0, 0x24, 0xf5, 0xc3}, types.Tx{0xce, 0xd5, 0x17, 0x4f, 0x14, 0xb2, 0x95, 0xcf, 0x3e, 0x25, 0x1f, 0x8, 0xd0, 0xac, 0xa2, 0xb5, 0x72, 0xc8}, types.Tx{0x21, 0x52, 0xb9, 0xcc, 0x3d, 0x8f, 0x93, 0xe0, 0xb5, 0x4f, 0x3d, 0x48, 0x94, 0x7e, 0x75, 0x31, 0x41, 0xeb, 0x89, 0xd6, 0xc3, 0x45, 0x82, 0xd4, 0x11, 0x6d}, types.Tx{0x0, 0x1b, 0x17, 0x6c, 0xb8, 0x33, 0xc6, 0xf8, 0xe6, 0x8b, 0x15, 0x22, 0x3e, 0xa9, 0x5a, 0x56, 0xc6, 0x93, 0xb6, 0xbc, 0xe1, 0xaf, 0xcc, 0x87, 0x70}, types.Tx{0x9c, 0x59, 0x9f, 0x20, 0x39, 0xf8, 0x6b, 0xba, 0xca, 0xac, 0xe8, 0x71, 0xb8, 0xb5, 0x75, 0x1, 0x53, 0x11, 0x83, 0x4c, 0xc5, 0xa0, 0x2f, 0xd8, 0x3b, 0xbc, 0xcf, 0xc8, 0x55, 0x50, 0x5d, 0x6, 0x7a, 0xc2, 0xc, 0xc8, 0x1f, 0xd9, 0xd, 0xf7, 0xb2, 0xdd, 0x2c, 0xf5, 0x98, 0x35, 0x1f, 0xbb, 0xb, 0x51, 0xa8}, types.Tx{0xd9, 0xa0, 0x80, 0x98, 0x80, 0x10, 0x83, 0x8a, 0x29, 0x45, 0xf3, 0xb8, 0x72, 0x3d, 0x8, 0xe3, 0xc9, 0x2a, 0xdc, 0x56, 0x75, 0x63, 0xf1, 0xe0, 0xc, 0xe4, 0x2d, 0xe7, 0xc0, 0x53, 0xe1, 0x3b, 0x3e, 0x1e, 0x47, 0xf, 0x52, 0x35, 0x8b, 0x10, 0xa7, 0x8e, 0xe4, 0xf0, 0x36, 0x1d, 0xc2, 0x73, 0x62, 0x3c, 0xd9, 0xfa, 0xb8, 0xf6, 0xaa, 0x94, 0xc, 0xd0, 0xfb, 0xe8, 0x3f, 0x84, 0xb1}, types.Tx{0x57, 0x51, 0xc9, 0x96, 0xd0, 0xc2, 0x3d, 0x85, 0xb3, 0x4a, 0xc0, 0xd, 0xfb, 0xf2, 0x2c, 0x92, 0x2c, 0x72, 0x98, 0xc7, 0x93, 0x86, 0x6b, 0x75, 0x23, 0xd1, 0xbf, 0xb2, 0xef, 0xf5, 0xbd, 0x83, 0x12, 0x78, 0x85, 0xcd, 0x8f, 0xd4, 0x7, 0x95, 0x58, 0xe7, 0xcd, 0x6, 0xbf}, types.Tx{0x8b, 0x50, 0x4e, 0x9e, 0x58, 0x4f, 0x33, 0x2, 0x75, 0xc, 0xdf, 0xd, 0xb0, 0x8c, 0x10, 0x55, 0x88, 0x8, 0x44, 0x81, 0x9, 0xf7, 0x75, 0xe9, 0xca, 0xf0, 0x4, 0x59, 0xd0, 0x37, 0xf2, 0x99, 0x64, 0xf3, 0x8f, 0xd9, 0x5, 0x30, 0x24, 0x97, 0xd1, 0x9e, 0x6a, 0xe5, 0x24, 0xdc, 0xe5, 0xa4, 0xd9, 0x36, 0x88, 0xec, 0x4d, 0x8f, 0xd5, 0xce, 0xa5, 0x73, 0xa2, 0xa9, 0x25, 0xa7, 0x2c, 0xe7, 0x9a, 0x38, 0x27, 0xfd, 0x3c, 0xa8, 0xb7, 0xe5, 0x95, 0xd3, 0x0}, types.Tx{0x1a, 0x50, 0xa4, 0x4f, 0xad, 0xb9, 0xcc, 0xc9, 0x24, 0xf, 0x58, 0x77, 0x93, 0xc6, 0x4d, 0xa8, 0xd5, 0x7a, 0x7b, 0x93, 0xc5, 0xab, 0x89, 0x54, 0x7e, 0x59, 0x8c, 0x26}, types.Tx{0xf3, 0xf6, 0xf7, 0x6d, 0x52, 0x68}, types.Tx{0xd3, 0x66, 0x24, 0xdd, 0xd, 0xc9, 0xba, 0x5d, 0xc2, 0x3f, 0xc1, 0x4a, 0xf3, 0x88, 0x42, 0x33, 0xf0, 0x65, 0x5d, 0x27, 0xf4, 0x0, 0xa, 0xa4, 0xd, 0x7c, 0x79, 0x42, 0x9, 0x88, 0x5e, 0x76, 0x99, 0xe3, 0x67, 0xc6, 0x92, 0x4a, 0x2, 0x33, 0x38, 0x6d, 0x99, 0xe8, 0x58, 0x77, 0x92}, types.Tx{0x41, 0x1f, 0x81, 0x65, 0xc4, 0x19, 0x86, 0x29, 0x4f, 0x4d, 0xd9, 0x1f, 0x32, 0x1, 0xcb, 0x2e, 0x2e, 0x97, 0xd0, 0xe1, 0xb, 0x62, 0x8, 0xa6, 0xeb, 0x90, 0x12, 0x28}, types.Tx{0xcf, 0x8f, 0x54, 0x48, 0x6d, 0x6a, 0xeb, 0xc2, 0x76, 0xe3, 0xc8, 0xac, 0xca, 0x95, 0x81, 0xd0, 0x38, 0xc9, 0x41, 0xb7, 0xd8, 0xea, 0x5d, 0xda, 0x8d, 0x8e}, types.Tx{0xc2, 0x65, 0x2f, 0x29, 0xbb, 0x67, 0x30, 0x56, 0x44, 0xec, 0x2b, 0x56, 0x1c, 0xe3, 0x6a, 0xb8, 0x39, 0xca, 0x1f}, types.Tx{0x0, 0xe0, 0x65, 0x1, 0xd0, 0xe6, 0x47, 0x7d, 0x1a, 0x4a, 0x18, 0xb5, 0xa4, 0x6e, 0xf1, 0x60, 0x8c, 0xc2, 0x45, 0x1e, 0xb0, 0x22, 0xc7, 0xb0}, types.Tx{0x56, 0x62, 0xf, 0x6, 0x82, 0x22, 0x83, 0x4c, 0x32, 0x50, 0x68, 0x1d, 0x93, 0xda, 0x33, 0x7, 0xa6, 0x57, 0x5a, 0x8a}, types.Tx{0xe8, 0x36, 0x60, 0x67, 0x22, 0x23, 0x52, 0x2b, 0xad, 0x9c, 0xc6, 0x1f, 0xdc, 0x16, 0xe2, 0xe9, 0x56, 0x90, 0x8d, 0x4b, 0xf8, 0x97, 0xd5, 0x2d, 0x85, 0x48, 0x5d, 0x12, 0x56, 0x73, 0xe4, 0xa9, 0xaf, 0xd, 0x38, 0x5c, 0x70, 0xb5, 0xc5, 0xda, 0xf9, 0xd9, 0x41, 0xc8, 0xa2, 0x17, 0x34, 0xf8, 0xed, 0x54, 0xb7, 0x5b, 0x94, 0xbe, 0xa0, 0xa1, 0x45, 0x8c, 0xd0, 0x9a, 0x6f, 0x35, 0xe, 0x5b, 0x46, 0x2d, 0xac, 0x8b, 0xd3, 0xcc, 0xad, 0x45, 0x6a, 0xd8, 0xe2, 0xd2, 0x79, 0xa9, 0xd5, 0x9, 0x10, 0x92, 0xc4, 0xfe, 0x1, 0x14, 0x54, 0xc, 0x3, 0xdd, 0xf1}, types.Tx{0xa3, 0xb3, 0x5d, 0x63, 0x1a, 0xb8, 0x70, 0xae, 0x85, 0x16, 0xc3, 0xf8, 0x56, 0xe8, 0x1c, 0x68, 0x2d}, types.Tx{0xb8, 0x60, 0xb3, 0x6a, 0x65, 0xbd, 0x3b, 0xd2, 0xc1, 0x17}, types.Tx{0x78, 0x37, 0xab, 0x5b, 0x3f, 0x8a, 0x46, 0xa3, 0xcf, 0x82, 0x93, 0x7a, 0x7c, 0x6d, 0x2d, 0x3f, 0x82, 0x2d, 0x38, 0x73, 0xad, 0xed, 0x4f, 0x2d, 0xee, 0x59, 0xa, 0x5, 0x89, 0x96, 0x6b, 0x1d, 0x0, 0xfc, 0xea, 0xaf, 0xef, 0x7f, 0x9c, 0xec, 0x24, 0xf8, 0x53, 0x75, 0xf0, 0xb, 0x7a, 0xb, 0x82, 0xa4, 0xd8, 0xd2, 0xb4, 0xa6, 0x81, 0x7a, 0x27, 0x91, 0xbd, 0x18, 0x3, 0x2d, 0x1, 0xb4, 0xef, 0xdc, 0x11, 0x76, 0xb1, 0x26, 0x20, 0x2e, 0x17, 0xea, 0x85, 0x55, 0x37, 0xae, 0x47, 0x6, 0xc8, 0x89, 0xb2, 0xaf, 0x39, 0xe5, 0x0}, types.Tx{0x55, 0x8c, 0xfd, 0x92, 0x7e, 0xf1, 0x5b, 0xbe, 0x98, 0x81, 0xcb, 0x22, 0x91, 0x9d, 0xd4, 0x22, 0xe8, 0x81, 0xc3, 0xd, 0x3c, 0xb7, 0xd6, 0xd7, 0xdd, 0x1, 0xd2, 0x5f, 0x2a, 0xc1, 0xc3, 0x21, 0x4d, 0x5c, 0x5a, 0x99, 0xfe, 0xc8, 0xbd, 0xe5, 0xa0, 0x28, 0x67, 0x13, 0xb4, 0x68, 0x99, 0x64, 0x2, 0x8a, 0x5a, 0xe2, 0xcb, 0x27, 0xf6, 0x15, 0x90, 0xf6, 0x7b, 0xe3, 0xea, 0xaa, 0x5f, 0x18, 0xfb, 0x42, 0xde, 0xf2, 0xce, 0xf2, 0x22, 0xef, 0x2e, 0x70, 0x38, 0x8a, 0x1c, 0xe0, 0x64, 0xf0, 0x4c, 0x32, 0xa4, 0x1d, 0x22, 0x2a, 0x77, 0x7, 0xd7, 0x4a, 0x6a, 0x49}, types.Tx{0xda, 0x8b, 0xe6, 0x89, 0x82, 0xf5, 0xb6, 0x18, 0x4d, 0xdf, 0x17, 0xb, 0xf7, 0x4a, 0x7f, 0xa7, 0x6b, 0xbc, 0xd9, 0x6c, 0xf8, 0xca, 0x9b, 0x3d, 0xb2, 0x5f, 0x59, 0x3d, 0x9b, 0xc9, 0x22, 0x79, 0x8d, 0xae, 0xf8, 0xb8, 0xe8, 0x54, 0xfb, 0xd7, 0x9c, 0x7e, 0xcf, 0xc2, 0xda, 0xb1, 0xa8, 0x51, 0xe4, 0x5f, 0x87, 0xb8, 0xb1, 0x18, 0x6e, 0x69, 0xc8, 0x13, 0x30, 0x3b, 0x80, 0xd7, 0x2c, 0x8e, 0x52, 0x73, 0xe3, 0x28, 0x98, 0xd5, 0x8f, 0x0, 0xf, 0x21, 0x81, 0x5, 0x10, 0x5a, 0xae, 0xfe, 0xbd, 0xd6, 0x1a, 0x67, 0xd3, 0x6a, 0x78, 0x25, 0x81, 0xa6, 0xe0, 0x60, 0xa4, 0x7f, 0xcd, 0x61}, types.Tx{0x4, 0x28}, types.Tx{0x9f, 0xd, 0x3d}, types.Tx{0x14, 0x33, 0x19, 0x48, 0x1, 0xa7, 0xe4, 0xe4, 0x68, 0x0, 0x61, 0xb9, 0x4, 0x4c, 0x48, 0x97, 0x1, 0xc9, 0xa6, 0xa7, 0xf0, 0xf8, 0x1d, 0xa5, 0x91, 0x60, 0x4d, 0xa9, 0x3c, 0xeb, 0x5b, 0xaa, 0x4f, 0x7c, 0x6, 0xd5, 0x81, 0x1f, 0x70, 0xb2, 0x37, 0xd4, 0x5, 0x49, 0x50, 0x60, 0xc7, 0x25, 0xd4, 0x8b, 0x63, 0x3e, 0x71, 0xf9, 0xf0, 0x2b, 0x92, 0xd9, 0xc, 0xf7, 0x79, 0x63, 0x93, 0x89, 0x6f, 0xfa, 0x4a, 0x69, 0x55, 0xc5, 0xc9, 0x18, 0x38, 0xe5, 0x5f, 0x1d, 0xc4, 0xb5, 0xa4, 0x51, 0x64, 0x77, 0xdd, 0x83, 0x66, 0x2f, 0xa1, 0xd6}, types.Tx{0xeb, 0xdb, 0x88, 0xcd, 0x3, 0x93, 0x59, 0xc5, 0xec, 0x76, 0x2f, 0xa9, 0x7a, 0xc2, 0x4d, 0x83, 0x48, 0x33, 0x98, 0x84, 0xfe, 0x83, 0xf, 0x7f, 0x1d, 0xe9, 0x6e, 0xbb, 0x6, 0x63, 0x8f, 0x4c, 0x51, 0x5a, 0x56, 0xa4, 0x49, 0x99, 0xfb, 0x33, 0x28, 0xed, 0x5c, 0xfe, 0xbb, 0x95, 0x13, 0x32, 0x69, 0xd4, 0xe1, 0xa6, 0x7f, 0x7, 0x39, 0x49, 0x4e, 0xa1, 0x43, 0x96, 0xbb, 0x35, 0xd5, 0x16, 0xf, 0xe8, 0x77, 0x8, 0x48, 0x67, 0x90, 0x10, 0x74, 0xce, 0xf7, 0xb4, 0xde, 0xc9, 0xd9, 0xfc, 0x2b, 0x41, 0xfd, 0x63, 0xc5, 0xb5, 0xef, 0x49, 0x17, 0x64, 0x26}, types.Tx{0xbc, 0xdc, 0x10, 0xf1, 0xfb, 0x3, 0x70, 0x16, 0xa0, 0x35, 0xfa, 0x4f, 0xa3, 0xef, 0x13, 0x97, 0xf7, 0xa6, 0x6f, 0x92, 0x1e, 0x52, 0x98, 0x21, 0x94, 0xd0, 0x9, 0x8b, 0x7b, 0xda, 0x31, 0xe2, 0xa5, 0xe8, 0x11, 0xb2, 0xa3, 0x48, 0xf2, 0xc4, 0xb4, 0x36, 0x4d, 0xbb, 0xc, 0xc3, 0xf8, 0x7a, 0xe4, 0x4a, 0xd8, 0xc5, 0x98, 0x2c, 0xeb, 0x52, 0x8a, 0x1, 0x48, 0x18, 0xfe, 0xc, 0xa5, 0x8, 0x8f, 0xd, 0x89, 0x34, 0xe3, 0xf5, 0xcf, 0xab, 0x82, 0x95, 0x1d, 0xa4, 0xd4, 0xa1}, types.Tx{0xdb, 0x0}, types.Tx{0x21, 0x31, 0xf7, 0xf9, 0xd0, 0x54, 0x1b, 0x9, 0x71, 0x45, 0x4e, 0xb5, 0x8e, 0xe6, 0x1a, 0x3b, 0x1b, 0x66, 0xf1, 0x6c, 0x8d, 0xbc, 0xb8, 0x87, 0xfc, 0x59, 0xbd, 0x68, 0xe6, 0x75, 0x72}, types.Tx{0x58, 0x89, 0x12, 0x92, 0x34, 0xd0, 0x7c, 0xe7, 0x3d, 0x0, 0x2b, 0xb5, 0xab, 0x6, 0x2, 0x6b, 0xf5, 0xdd, 0x52, 0xf4, 0xe4, 0xaf, 0x55, 0xb8, 0x62, 0x38, 0x1c, 0x4d, 0xd8, 0xe2, 0xd6, 0xf9, 0xf1, 0x4d, 0xa0, 0xbd, 0x23}, types.Tx{0x5a, 0xd4, 0x62, 0xb3, 0xd4, 0x2f, 0x51, 0x26, 0x55, 0xd2, 0xa7, 0x63, 0xad, 0xd1, 0xae, 0xc9, 0xf9, 0x30, 0x4e, 0x55, 0x62, 0xa1, 0x93, 0xfc, 0x16, 0xbf, 0xcc, 0xbf, 0x97, 0x54, 0xd2, 0xa5, 0xdd, 0x80, 0x1b, 0x1b, 0x51, 0xc4, 0x9, 0xce, 0xcd, 0x7c, 0x6e, 0xd, 0x6b, 0xfc, 0xce, 0xb2, 0x88, 0x78, 0x85, 0x3b, 0xfb, 0x6f, 0xfc, 0xcd, 0x45, 0x56, 0xb8, 0xe9, 0x3e, 0x4b, 0x9a, 0x20, 0x13, 0x94, 0x7e, 0x64, 0xc5, 0x7}, types.Tx{0x7d, 0x24, 0xbd, 0xc9, 0x8e, 0xca, 0xd7, 0x22, 0x3d, 0xdf, 0x6d, 0x33, 0x8f, 0x1, 0x2f, 0xe9, 0x0, 0x4a, 0x48, 0x7, 0x0, 0xe9, 0x7d, 0x9f, 0x92, 0xa4, 0x1a, 0x97, 0x41, 0xa8, 0x5d, 0xc, 0xd0, 0x26, 0x95, 0xe4, 0xd4, 0xe0, 0xb5, 0xfe, 0xe5, 0xf4, 0xe5, 0x1a, 0xed, 0x2d, 0x1c, 0xa9, 0x72, 0x91, 0x5b, 0x38, 0xce, 0x4d, 0xf2, 0xc2, 0xcd, 0xd0, 0xa6, 0xe8, 0x6c, 0x9b, 0x4b, 0x38, 0x47, 0xe0, 0xd8, 0x7, 0xcb, 0x29, 0xfa, 0x8f, 0xfc, 0x86, 0xc1, 0x31, 0xc9, 0x31, 0x4f, 0xca, 0x3f, 0xa3, 0xdf, 0x70, 0x31, 0xd0, 0x73, 0x7f}, types.Tx{0x4, 0xb, 0xea, 0xfc, 0x7c, 0x9b, 0xe4, 0xdb, 0x5f, 0xd6, 0x8b, 0xbf, 0xc7, 0x1c, 0xf6}, types.Tx{0x82, 0xcf, 0x95, 0xf2, 0x4b, 0x6c, 0x87, 0x75, 0x96, 0x8d, 0x92, 0x33, 0xcd, 0x3d, 0x55, 0xe5, 0xb5, 0xdd, 0xcc, 0xc2, 0x3e, 0x3b}, types.Tx{0xb0, 0xea, 0xe7, 0x9c, 0x7, 0xa4, 0x5a, 0x5d, 0xea, 0xdc, 0xb4, 0x5d, 0x9d, 0x26, 0xe2, 0x88, 0xf2, 0xc2, 0x34, 0x13, 0x0, 0x9, 0x20, 0xe5, 0xef, 0xcc, 0xf1, 0x80, 0x21, 0xb9, 0x9c, 0xc4, 0x32, 0x34, 0x4f, 0x73, 0x77, 0xcd, 0x3, 0x59, 0x43, 0x3e, 0x19, 0xfc, 0x86, 0x84, 0xb, 0x71, 0x17, 0xeb, 0x85, 0xe6, 0x6a, 0x6b, 0x39, 0x2c, 0x44, 0xdd, 0x32, 0xe7, 0x92, 0x91, 0xf5, 0xf7, 0x30, 0xab, 0xe0, 0xfa, 0x81, 0x89, 0x2d, 0x7d, 0x5c}, types.Tx{0x4c, 0x11, 0x74, 0xa3, 0xb6, 0xf, 0x58, 0x24, 0xd8, 0x7c, 0x66, 0x8c, 0xe6, 0x9c, 0x5f, 0xda, 0x6, 0xef, 0xce, 0xf0, 0x4f, 0xd2, 0xb0, 0x27, 0x49, 0x5c, 0xda, 0xc8, 0x45, 0x77, 0x1b, 0x86, 0xa5}, types.Tx{0xd7, 0x26, 0x5, 0xa7, 0x6e, 0x10, 0x25, 0xfe, 0xc8, 0xe5, 0x16, 0x98, 0x26, 0xe0, 0x76, 0xc, 0xba, 0xa3, 0xb0, 0x15, 0x91, 0x32, 0xad, 0x1d, 0x67, 0x77, 0x5d, 0x7c, 0xf, 0x8a, 0x53, 0xef, 0x35, 0x9b, 0x92, 0xed, 0xcc, 0x76, 0xdb, 0xa4, 0x31, 0xcc, 0x38, 0x8f, 0x84, 0xb3, 0x88, 0x7a, 0x89, 0x31, 0x5d, 0x16, 0xd5, 0xd2, 0xef, 0x47, 0x77, 0x2b, 0xa, 0xa2, 0x22, 0xfa, 0x2, 0xc5, 0x1c, 0x75, 0xac, 0xf9, 0x4d, 0x45, 0x78, 0x29, 0xe0, 0x96, 0x1d, 0x49, 0x6c, 0x46, 0xd, 0x11, 0xaf, 0x67}, types.Tx{0x8d, 0x29, 0x8, 0x62, 0x95, 0x71, 0x16, 0xcd, 0xa6, 0x96, 0x11, 0x4f, 0x44, 0xe4, 0x7f, 0x81, 0x9e, 0x20, 0x39, 0x43, 0xc4, 0x54, 0x99, 0x15, 0x38, 0x52, 0x21, 0x4a, 0x5e, 0xc7, 0xa3, 0x2e, 0x44, 0xb, 0xce, 0x31, 0xda, 0x31, 0x18, 0x4c, 0x68, 0xeb, 0x21, 0x75, 0xa9, 0x66, 0xd, 0x32, 0x90, 0x3c, 0x6f, 0x77, 0x68}, types.Tx{0x2a, 0xfc, 0x45, 0x43, 0x1a, 0xc5, 0xa2, 0xee, 0xc6, 0xdb, 0xd9, 0xac, 0x4b, 0xfa, 0x6d, 0x3a, 0xe2, 0xf6, 0x82, 0xb4, 0xeb, 0xe0, 0x10, 0xc2, 0xb2, 0x25, 0x53, 0x22, 0xa3, 0xae, 0x85, 0x21}, types.Tx{0xd, 0x53, 0xc4, 0xe8, 0x14, 0x33, 0x5b, 0x9e, 0x60, 0x43, 0xfc, 0xa0, 0xb6, 0x3e, 0xeb, 0xdd, 0x12, 0x99, 0xb9, 0x6e, 0xf3, 0xc4, 0x36, 0xfe, 0xfb, 0xd7, 0x54, 0xbb, 0xe8, 0x6c, 0x5f, 0x64, 0x75, 0x9c, 0xd, 0xde, 0x24, 0x74, 0x4f, 0x4e, 0x19, 0x94, 0x28, 0x38, 0x11, 0xd4, 0x51, 0xd8, 0xc9, 0x8b, 0xfa, 0x7}, types.Tx{0x83, 0x2b, 0x38, 0xdb, 0xa, 0xc8, 0xa, 0x1e, 0x61, 0x9a, 0xfa, 0x88, 0xb6, 0x4c, 0xe, 0xa9, 0xa1, 0xa3, 0x16, 0x68, 0x15, 0xed, 0x63, 0x79, 0x1e, 0x41, 0x4d, 0xb5, 0x5, 0xdd, 0xfe, 0xe1, 0x8b, 0x1c}, types.Tx{0x8, 0x19, 0x10, 0xbb, 0x4a, 0x86, 0x43, 0xc2, 0x37, 0x76, 0x72, 0x6e, 0x55, 0xd3, 0xcd, 0x4e, 0xa2, 0x61, 0xd2, 0xad, 0x54, 0x49, 0x20, 0x76, 0xb9, 0x11, 0x41, 0xff, 0x3b, 0xef, 0x5c, 0x56, 0xa6, 0xac, 0x81, 0x56, 0x7f, 0x56, 0x70, 0x97, 0x81, 0x38, 0xda, 0xcd, 0x6c, 0x63, 0x12, 0x27, 0xdf, 0x14, 0x24, 0xe9, 0xe, 0x9c, 0xe7, 0xa5, 0x1b, 0x2b, 0x7f, 0x5e, 0xb9, 0xc9, 0x25, 0xd8, 0x5b, 0x84, 0xe3, 0x13, 0xa3, 0xdf, 0x1a, 0x41, 0x61, 0x41, 0x3e, 0x16, 0x3d, 0xa5, 0xc, 0xcc, 0x9, 0xec, 0x42, 0x57, 0x87, 0xea, 0x6, 0xb0, 0x6c, 0x4a}, types.Tx{0xc1, 0xb, 0x6b, 0xb3, 0x2b, 0x84, 0xfa, 0xf5, 0x42, 0xb7, 0x78, 0x24, 0xe0, 0x3d, 0x84, 0xe5, 0x83, 0xac, 0xc1, 0xa, 0x33, 0x27, 0xf3, 0x82, 0xa0, 0xca, 0xa5, 0x28, 0x3d, 0xa8, 0x17, 0x6c, 0xf3, 0xeb, 0xa3, 0x10, 0x40, 0x1e, 0xa2, 0xc5, 0xca, 0xfc, 0xb4, 0x68, 0x5e, 0xd, 0x8d, 0xb9, 0x3f, 0xe2, 0xea, 0x6, 0x67, 0x9, 0x52, 0xa3, 0xa5, 0x6c, 0x9e, 0x98, 0x5e, 0x39, 0x78, 0x69, 0x96, 0xd6, 0xc6, 0x6b, 0xac, 0x69, 0xd2, 0xf3, 0x59, 0x1f, 0x83, 0xc7, 0xf0}, types.Tx{0x10, 0x2c, 0x68, 0x23, 0xe3, 0x1, 0xc5, 0x47, 0x6, 0x35, 0x3d, 0x9c, 0x25}, types.Tx{0x81, 0xe1, 0xca, 0x66, 0xd4, 0x5d, 0xc4, 0x86, 0x96, 0xd, 0x90, 0xee, 0x20, 0x69, 0xd4, 0x3, 0x47, 0x54, 0x58, 0x41, 0xf7, 0x27, 0x66, 0xe6, 0xd5, 0xc5, 0xe6, 0xac, 0x41, 0x5f, 0x19, 0x26, 0x61, 0xf8, 0x9d, 0x60, 0xd0, 0xd1, 0xfa, 0x85, 0x8d, 0x8f, 0xf2, 0x13}, types.Tx{0xd3, 0x56, 0x30, 0xd6, 0xd, 0xba, 0x69, 0x1b, 0xa3, 0x96, 0x8a, 0xce, 0xf4, 0x7a, 0xdc, 0x5, 0x12, 0xfa, 0x65, 0x51, 0xfe, 0xc0, 0xc0, 0x95, 0xe8, 0x54, 0xa8, 0xfc, 0x4f, 0x2f, 0x49, 0x4c, 0xb5, 0x68, 0xd8, 0x26, 0x7, 0x25, 0x45, 0xbc, 0x92, 0xa2, 0xd9, 0x22, 0xf4, 0x3b, 0x42, 0x3a, 0xf8, 0x5b, 0xdb, 0xae, 0xb1, 0x64, 0x36, 0x4f, 0x2f, 0x11, 0xb7, 0x36, 0x2e, 0x5e, 0x66, 0xf9, 0xd2, 0x61, 0xc9, 0xf, 0x9f, 0xb6, 0x5a, 0x30, 0xe0, 0x19, 0xb3, 0x2f, 0x75, 0xcb, 0xa4, 0x4c, 0x61}, types.Tx{0x8d, 0xcf, 0xc8, 0xfb, 0x9f, 0x8a, 0x5d, 0x4f, 0xf6, 0xd0, 0x4f, 0xe5, 0xc, 0x92, 0x5c, 0xfc, 0xef, 0x24, 0xd3, 0x3e, 0x86, 0x24, 0x4d, 0xa8, 0xc1, 0xf7, 0xba, 0x40, 0xbc, 0x2f, 0x6b, 0x15, 0x7c, 0x8, 0x88, 0x93, 0x88, 0xc8, 0x1d, 0x94, 0xa9, 0x3a, 0x6f, 0xc0, 0xfe, 0xb0, 0x14, 0xea, 0x86, 0x4b, 0xc9, 0x9e, 0x3d, 0x57, 0x6f, 0xe2, 0xcf}, types.Tx{0x4e, 0x3f, 0x86, 0x85, 0x81, 0xf3, 0x52, 0xf9, 0x88, 0x8b, 0xde, 0x2b, 0xa3, 0x3f, 0x7f, 0xc, 0x66, 0xcb, 0x9a, 0x8f, 0x9, 0x26, 0x8d, 0x2d, 0x49, 0xf2, 0x3f, 0x51, 0xbf, 0xe3, 0x2a, 0x8, 0x47, 0x8d, 0xaf, 0x7e, 0x3, 0x26, 0x96, 0xc2, 0xf1, 0x4b, 0x2b, 0x31, 0x63, 0x8b, 0xdb, 0x9b, 0xe8, 0x83, 0x3f, 0x8e, 0xaf, 0xe6, 0x5e, 0x18, 0x7f, 0xaa, 0x3e, 0x64, 0xeb, 0xe4}, types.Tx{0x2c, 0x44, 0x5a, 0x6a, 0x80, 0x81, 0xee, 0xd7, 0x7, 0xcb, 0x50, 0xc7, 0xec, 0x3f, 0xf9, 0xc, 0x17, 0x53, 0xae, 0x4a, 0x8d, 0x86, 0x1f, 0xfc, 0xc1, 0x3, 0x73, 0x2d, 0xdb, 0x86, 0x26, 0x49, 0x67, 0x9f, 0xff, 0x44, 0xef, 0xde, 0x2b, 0xd3, 0xb6, 0x70, 0xb, 0xc0, 0xd2, 0xf9, 0x59, 0x55, 0xfa, 0x1, 0x9c, 0x51, 0x4d, 0x3b, 0xaf, 0x31, 0x5e, 0xf5, 0x4d, 0xd2, 0xa4, 0xf0, 0xf2, 0xd0, 0xe4, 0xe, 0xc7, 0x87, 0xc4, 0x5, 0x0, 0x4b, 0xad, 0xe6, 0xf8, 0xe8, 0x2a, 0x4e, 0x44, 0xaa, 0xe6, 0xd6, 0x5b, 0x1b, 0xcd, 0x96, 0x90, 0xb, 0x9b, 0x8d, 0xe3, 0x97}, types.Tx{0xc6, 0xdf, 0x8b, 0x72, 0xa9, 0x22, 0xdb, 0xfd, 0xeb, 0xd4, 0x83, 0x9a, 0xa5, 0x58, 0xef, 0x1d, 0xab, 0xb2, 0x88, 0x51, 0x64, 0xc1, 0x93, 0xbc, 0x36, 0xa, 0x2f, 0x4d, 0xa2, 0x65, 0x43, 0xb9, 0x70, 0xa6, 0xc5, 0x4f, 0xdc, 0xe3, 0xc8, 0x20, 0x1a, 0xd, 0xab, 0x90, 0xf7, 0x47, 0x84, 0xf4, 0x54, 0xc7, 0x13, 0x8c, 0x27, 0x2f}, types.Tx{0x75, 0x53, 0xa4, 0x74, 0x56, 0xcd, 0xe1, 0xd6, 0x39, 0xed, 0x9b, 0x22, 0xdb, 0x6f, 0xbb, 0x4d, 0xdc, 0xd0, 0x9a, 0x26, 0x2c, 0x57, 0x61, 0xdb, 0xe3, 0x35, 0x6e, 0xc3, 0x7f, 0x33, 0x6b, 0x64, 0x76, 0x29, 0x90, 0xe4, 0x84, 0xdb, 0x3b, 0x42, 0xc3, 0xa, 0x95, 0xad, 0xc4, 0x62, 0xaa, 0xac, 0x25, 0x57, 0x4a, 0xcf, 0x9a, 0x3e, 0x35, 0x42, 0xfa, 0x97, 0xf4, 0xfd, 0xea, 0xfd, 0x55, 0x6d, 0x3c, 0xce, 0xc4, 0x40, 0x3d, 0x4f, 0xff, 0x5d, 0xcb, 0x8a, 0x3d, 0x2d}, types.Tx{0x98, 0x64, 0xbe, 0x42, 0x9c, 0x83, 0x9c, 0xb3, 0x64, 0xdd, 0x20, 0x6e, 0xca, 0x6, 0x84, 0x5d, 0xfd, 0xfa, 0x20, 0x92, 0xb6, 0x44, 0x14, 0x10, 0xec, 0x1c, 0xa3, 0x2f, 0x1b, 0x1e, 0xd2, 0x75, 0xf7, 0xfd, 0x7e, 0x9d, 0xb4, 0xdf, 0x89, 0x53, 0xd1, 0xdb, 0xa0, 0xd6, 0x17, 0xa7, 0xae, 0xa5, 0x6c, 0xba, 0x6f, 0x1e, 0xb8, 0xe3, 0xc6, 0xcd, 0x3f}, types.Tx{0xd4, 0x2a, 0x15, 0x6b, 0xf4, 0xfb, 0x87, 0x4d, 0x15, 0xb8}, types.Tx{0xe0, 0xd4, 0x95, 0x82, 0xab, 0xdb, 0xc6, 0xf4, 0xfc, 0xe4, 0xc8, 0xba, 0x8c, 0x10, 0x44, 0x6f, 0x43, 0xf2, 0x24, 0x8c, 0x5d, 0xf4, 0x37, 0xa9, 0xa0, 0xbb, 0xf3, 0xfd, 0x32, 0x63, 0xf4, 0xb6, 0x3b, 0x9, 0x46, 0xb1, 0x5b, 0x13, 0x95, 0x4f, 0x8f, 0x9f, 0xc4, 0x4f, 0xe3, 0xec, 0x3b, 0x4c, 0xec, 0xbc, 0xb1, 0xb5, 0x1f, 0xe8, 0xa1, 0x2b, 0x57, 0x4b, 0xa, 0x9b, 0xb0, 0xf4, 0xd1, 0xcd, 0x7c, 0x6e, 0xf9, 0x9c, 0xba, 0x9f, 0xa1, 0x88}, types.Tx{0x24, 0x21, 0xc6, 0xa9, 0x8b, 0xf3, 0xe7, 0xb4, 0x61, 0x3b, 0x95, 0x39, 0x7f, 0x9b, 0xad, 0x41, 0x3, 0x9c, 0xde, 0x1b, 0x8e, 0xd4, 0xb2, 0xd4, 0xa9, 0xaa, 0xdc, 0xc2, 0xae, 0xa3, 0x11, 0xe2, 0x6a, 0x8c, 0x52, 0x3a, 0xd6, 0xa0, 0xce, 0xd6, 0xaa, 0x9f, 0xfe, 0x9a, 0xfc, 0x50, 0x49, 0xa4, 0x69, 0x7c, 0x3a, 0xe0, 0xe6, 0x51, 0xf, 0xa7, 0x13, 0x6c, 0xb6, 0x10, 0xe0, 0x1f, 0xbb, 0x36, 0xc6, 0x2b, 0x10, 0x6f, 0x1e, 0x90, 0xa5, 0x1e, 0xd7, 0xbb, 0x93, 0x45, 0xa1, 0x31}, types.Tx{0x29, 0xa, 0xc8, 0xcb, 0x81, 0x3a, 0xfc, 0x15, 0x91, 0x8f, 0x77, 0x83, 0xb3, 0x36, 0x76, 0x82, 0xe9, 0xed, 0xdf, 0xd0, 0xdc, 0x68, 0x31, 0xeb, 0x8d, 0xe1, 0xb9, 0x7c, 0xd6, 0xba, 0xb8, 0x8f, 0x50, 0xd5, 0xfa, 0xca, 0xab, 0x1e, 0x87, 0xcc, 0x52, 0xdc, 0x43, 0x54, 0xb4, 0xce, 0xa7, 0xcd, 0xa5, 0x52, 0x16, 0x1c, 0x96, 0x8b, 0xbe, 0x86, 0xc8, 0x6c, 0x75, 0x1b, 0x7d, 0xb8, 0xa, 0x36, 0x8a, 0x16, 0x64, 0xfd, 0x34, 0xa, 0x4b, 0x55, 0x8d, 0x15, 0x3d, 0xa, 0xf5, 0xc9, 0xca, 0x6b, 0x14, 0xc1, 0x54}, types.Tx{0x6a, 0xc, 0x37, 0x9f, 0xe8, 0x44, 0x87, 0xcd, 0xfb, 0x29, 0xe8, 0x20, 0xe5, 0x39, 0xcd, 0xf, 0xc8, 0xa9, 0x8c, 0x97, 0xd7, 0x74, 0x7d, 0x94, 0x37, 0xe8, 0xc9, 0x36, 0x53, 0xae, 0xb9, 0xe9, 0xca, 0xbe, 0xe6, 0xd8, 0x58, 0xd1, 0x12, 0x30, 0x9, 0x18, 0x8f, 0xe, 0x66, 0x62, 0x32, 0xb9, 0x50, 0x77, 0x32, 0x84, 0xe9, 0xb, 0xba, 0xce, 0x5, 0xb8, 0xe3, 0xce, 0x7b, 0xb5, 0x9c, 0xe8, 0x40, 0x64, 0x4c, 0x2d, 0xaa, 0x3a, 0x10, 0xb8, 0xad, 0xc0, 0xda, 0xf1, 0x2d, 0x8d, 0xdb, 0x2a, 0x95, 0xef, 0x65, 0x54, 0x1b, 0x5b, 0x50, 0xb3, 0x2b, 0xe6, 0x38}, types.Tx{0xb2, 0x25, 0x14, 0xcb, 0x8c, 0x35, 0x15, 0x26, 0xce, 0xd4, 0x14, 0xd1, 0x5, 0xfe, 0x24, 0x99, 0x1b, 0xc7, 0x59, 0x5c, 0x19, 0xc8, 0x3b, 0xc0, 0x1d, 0xfa, 0x51, 0xa4, 0x2b, 0x5d, 0xc0, 0x87, 0x29, 0xd7, 0xe8, 0xbc, 0xbf, 0x23, 0xe0, 0xab, 0x8d, 0x5a, 0xff, 0xf1, 0xa, 0x7a, 0x6, 0x92}, types.Tx{0x7f, 0xba, 0x37, 0x6c, 0x4, 0x65, 0x9, 0x26, 0xb5, 0x85, 0x9a, 0x7, 0x52, 0x7b, 0x56, 0xc1, 0x65, 0x8f, 0x26, 0xdf, 0x13, 0x12, 0x32, 0x17, 0xb8, 0x71, 0x87, 0xc6, 0x14, 0x3f, 0x8f, 0xa7, 0xdc, 0xdc, 0xd8, 0xcf, 0x73, 0x12, 0xba, 0x5b, 0xf, 0xa7, 0x68, 0xb0, 0xb6, 0xf6, 0x19, 0x52, 0x36, 0x83, 0x73, 0xe, 0xdb, 0x32, 0x68, 0xba, 0x99, 0x61, 0x6, 0x18, 0xb8, 0xb2, 0xe6, 0x9}, types.Tx{0xea, 0xb9, 0xda, 0x29, 0x96, 0x34, 0xe4, 0xc9, 0x75, 0xd, 0x7, 0xfd, 0xa9, 0x40, 0x12, 0x5e, 0xd7, 0xd4, 0xbb, 0xfd, 0x7e, 0x39, 0x91, 0xba, 0x7f, 0xe8, 0x41, 0x28, 0x9a, 0x7e, 0x85, 0x19, 0x52, 0xe, 0x1d, 0xe7, 0x73, 0xbd, 0x7a, 0x44, 0x65, 0xef, 0x63, 0xb8, 0x54, 0xf9, 0x90, 0x3d, 0x94, 0x47, 0xe4, 0xe, 0xa9, 0xdd, 0x68, 0x6d, 0x61, 0x49, 0x19, 0x23, 0x7b, 0xdc, 0x7b, 0xcc, 0xf0, 0x99, 0x1f, 0x86, 0x27, 0xfe, 0xde, 0xf6, 0x7a, 0xae, 0x9e, 0x69, 0xb, 0x32, 0x6f, 0xc7, 0xcc, 0x20, 0xb5, 0x79, 0x8d, 0x46, 0x5, 0x5, 0xfc, 0xcf, 0xc9}, types.Tx{0x4c, 0x6a, 0xdd, 0x73, 0x6d, 0xc1, 0x18, 0xe8, 0x63, 0x64, 0xe4, 0xa1, 0x82, 0xa1, 0x7d, 0x3b, 0xd7, 0x5b, 0x38, 0x15, 0x5b, 0xf8, 0x3e, 0x5d, 0x90, 0x15, 0x5d}, types.Tx{0x95, 0xd8, 0xb2, 0x17, 0xd1, 0x45, 0x67, 0xeb, 0xd3, 0x38, 0xdc, 0xab, 0x72, 0xc8, 0xc5, 0xdc, 0x82, 0x94, 0xf3, 0xe8, 0xce, 0x5a}, types.Tx{0x59, 0x9d, 0x99, 0xa1, 0xb9, 0xa7, 0x64, 0x44, 0xdc, 0x15, 0x0, 0xff, 0xd1, 0x3b, 0x1a, 0xb6, 0xf9, 0xf9, 0x24, 0x1a, 0xf9, 0x4d, 0x3b, 0x30, 0x4c, 0xe, 0x18, 0x31, 0xe, 0x73, 0xb, 0x29, 0x81, 0x97, 0x1d, 0x97, 0x66, 0x36, 0x10, 0xe4, 0x42, 0xa6, 0x69, 0x3e, 0xef, 0x19, 0xff, 0x23, 0xc3, 0x35, 0x7a, 0x63, 0x80, 0xed, 0x27, 0x60, 0x1c, 0x9a, 0xee, 0xa0, 0x6b, 0xa1, 0x28, 0x23, 0x7a, 0x9e, 0xa4, 0x82, 0x2b, 0xf, 0x50, 0xa0, 0x69, 0xba, 0x71, 0xbf, 0x62}, types.Tx{0x2c, 0x51, 0x7a, 0x76, 0x9a, 0x76, 0x53, 0x12, 0xa7, 0xc1, 0x66, 0x46, 0x92, 0x38, 0xf4, 0xec, 0xc4, 0xb1, 0xf1, 0x44, 0x27, 0x36, 0x4c, 0xaf, 0xaa, 0xe6, 0xa7, 0xd1, 0x33, 0x10, 0x55, 0x14, 0x27, 0x1e, 0x31, 0x1b, 0x6c, 0xfe, 0xbf, 0x82, 0xf4, 0x8f, 0xff, 0xe6, 0x33, 0xcc, 0xf8, 0x52, 0xd2, 0x4e, 0xd7, 0x3e, 0xe1, 0x96, 0xe7, 0xee, 0x8d, 0x85, 0x35, 0xaa, 0x63, 0x49, 0x53, 0xbf, 0xb4, 0x61, 0xcc, 0xe7, 0xbd}, types.Tx{0xcd, 0xe8, 0x4f, 0x8, 0x18, 0x38, 0x46, 0xcf, 0x30, 0x73, 0x46, 0xaf, 0xed, 0x56, 0xb6, 0x6e, 0xca, 0x86, 0x7a, 0xd6, 0xb1, 0xcf, 0x36, 0x5c, 0xf5, 0xf6, 0x58, 0x80, 0x51, 0xbb, 0x69, 0x6, 0xab, 0x6b, 0x4, 0x73, 0xb5, 0x78, 0xe6, 0x6e, 0x11, 0x3c, 0x4d, 0x54, 0xcb, 0x75, 0x21, 0xac, 0x6f, 0x8f, 0xf6, 0xcc}, types.Tx{0xdb, 0x85, 0x22, 0xc4, 0x9a, 0x70, 0xb0, 0x5b, 0xa2, 0xaf, 0x1d, 0x84, 0x96, 0x46, 0x1e, 0xdd, 0xd6, 0xd3, 0xac, 0x58, 0xc, 0x9c, 0x82, 0x90, 0xe6, 0x4b, 0x21, 0x93, 0x94, 0x8b, 0x2c, 0x6e, 0x56, 0x32, 0xa2, 0x6, 0xd2, 0xb9, 0xf5, 0x21, 0x56, 0x48, 0x1f, 0xae, 0xcc, 0x2, 0xdf, 0x50, 0x2c, 0xfb, 0x52, 0x1e, 0x5, 0x5e, 0x80, 0x2b, 0x82, 0x69, 0x83, 0xb7, 0x15, 0x85, 0x4a, 0x63, 0xe5, 0x30, 0xf1, 0x90, 0x67, 0x71, 0x42, 0xd9, 0xee, 0xd0, 0x9c, 0x21, 0x17, 0x99, 0x3c, 0xe8, 0xde}, types.Tx{0xd0, 0xb2, 0x74, 0xeb, 0x3d, 0x46, 0x69, 0x6d, 0xc5, 0x4c, 0x6d, 0x7b, 0x91, 0x37, 0xe2, 0xdc, 0xac, 0x1, 0x7c, 0xae, 0x69, 0x94, 0x65, 0x21, 0x55, 0x33, 0xac, 0xbe, 0x6, 0xbb, 0xe8, 0xf8, 0x71, 0xa, 0x44, 0x8, 0xf8, 0x8d, 0xfc, 0x73, 0x38, 0xf6, 0xe, 0xbc, 0x33, 0x6e, 0x7c, 0xd8, 0x4, 0x94, 0x65}, types.Tx{0x5, 0x6, 0x49, 0x28, 0x2, 0x5d, 0x81, 0xaa, 0xab, 0xf6, 0x67, 0x20, 0xbe, 0xc, 0xb5, 0x5a, 0xbb, 0x7e, 0x28, 0x32, 0x9, 0x6c, 0x46, 0x12, 0xb5, 0x4e, 0xef, 0x75, 0x5f, 0x7d, 0xd3, 0x56, 0x8c, 0xd0, 0x71, 0x1e, 0x15, 0x22, 0x5a, 0xd6, 0xc1, 0x44, 0xc1, 0xbe, 0xff, 0x54, 0x31, 0x47, 0x37, 0x7c, 0x19, 0x76, 0x10, 0x42, 0xad, 0x5c, 0x91, 0x96, 0x31, 0x76, 0x92, 0x56, 0xd8, 0xe1, 0x14, 0xaa, 0x77, 0x20, 0x33, 0x7e, 0xc8, 0xf2, 0xab, 0x52, 0x24, 0x7a, 0x2, 0x74, 0x5b, 0x34, 0xae, 0x8b, 0x76}, types.Tx{0x9c, 0x2e, 0x6e, 0x67, 0xa4, 0x79, 0xe, 0x90, 0x84, 0xfa, 0x7f, 0xc4, 0x3, 0x48, 0x63, 0x50, 0x1c, 0x16, 0xee, 0x92, 0x89, 0xd6}, types.Tx{0x2c, 0xc1, 0x2, 0x43, 0x4e, 0xfb, 0x10, 0x3f}, types.Tx{0xb3, 0x35, 0xc5, 0x68, 0x87, 0xf4, 0x92, 0x40, 0x22, 0x37, 0x2e, 0x46, 0xa5, 0x58, 0x31, 0x7d, 0x76, 0x4d, 0x36, 0xeb, 0x20, 0x76, 0x58, 0x3e, 0x9, 0x3e, 0x8f, 0xb9, 0x17, 0x64, 0x85, 0x9f, 0x7, 0x97, 0x33, 0xca, 0x22, 0xe8, 0x4e, 0x2f, 0x9d, 0x2c, 0xb4, 0x2c, 0xa4, 0x49, 0xb6, 0xf, 0xa4, 0x84, 0xbe, 0x14, 0xe4, 0x2d, 0xbc, 0xdd, 0xfb, 0xbb, 0x1d, 0x2a, 0x7f, 0x13, 0x85, 0x66, 0xfd, 0x9d, 0x85, 0xb8, 0xfe, 0x5d, 0xab, 0x97, 0x81, 0xb2, 0xb3, 0xb, 0x7d, 0xb2, 0xfb, 0xd8, 0x95, 0xb, 0x25, 0x0, 0xd9, 0x3d, 0xf5, 0xe3, 0x2b, 0x4, 0x9f, 0x93, 0x93, 0x30, 0x99}, types.Tx{0x81, 0xd2, 0x98, 0xcc, 0x78}, types.Tx{0x18, 0xcb, 0xfb, 0x55, 0x5b, 0xe9, 0xd5, 0xd1, 0xb6, 0x1b, 0x3a, 0x83, 0x83, 0xe8, 0x4e, 0xf1, 0x1f, 0xb9, 0xbf, 0x4e, 0x74, 0xfb, 0xeb, 0xaf, 0xd9, 0x89, 0xbf, 0x88, 0x4e, 0x8c, 0x3a, 0xea, 0x32, 0x70, 0x9b, 0x7, 0x4e, 0xe6, 0x4e, 0xb, 0xd9, 0x43, 0x21, 0x54, 0xb3, 0xb2, 0xd, 0x80, 0x6d, 0xa, 0x48, 0x75, 0x51, 0x4, 0x29, 0x3c, 0x85, 0x41, 0x7a, 0x5f, 0xfd, 0x45, 0xdf, 0x13, 0x24, 0xcd, 0xeb, 0x7c, 0x4d, 0x57, 0x24, 0x19, 0x52, 0x6f, 0xb4, 0x83, 0xd5, 0x44, 0x59}, types.Tx{0x4d, 0x5e, 0x50, 0xf3, 0xa9, 0xb7, 0x43, 0x46, 0xb6, 0x6f, 0x50, 0xbf, 0x52, 0xde, 0x86, 0x62, 0x8e, 0x8e, 0xe8, 0xf7, 0x3c, 0x96, 0x93, 0xe4, 0x7, 0x4c, 0xd1, 0xbe, 0x45, 0x5f, 0x89, 0xeb, 0x54, 0x5e, 0xa1, 0x2f, 0x49, 0x94}, types.Tx{0xf1, 0x28, 0x20, 0xd4, 0xd8, 0xf, 0xaa, 0x9a, 0x65, 0x83, 0x6c, 0x0, 0x6, 0xbd, 0x92, 0x4a, 0x38, 0x17, 0x4c, 0x26, 0x2d, 0x15, 0x68, 0x35, 0x58, 0x4c, 0xeb, 0x15, 0x8e, 0x91, 0x92, 0xb1, 0x84, 0x1, 0xec, 0xf7, 0x1d, 0x3, 0x8d, 0xbe, 0xa4, 0x97, 0xec, 0x7d, 0x9b, 0xae, 0x8d, 0x51, 0xd7, 0xfa, 0x50, 0x8a, 0x40, 0x31}, types.Tx{0xf4, 0x25, 0x9c, 0xaa, 0x75, 0x7f, 0xd0, 0xa2, 0x65, 0x3c, 0x45, 0x3, 0x8f, 0xf4, 0x86, 0x16, 0x73, 0x71, 0x34, 0x7a, 0xaa, 0x3b, 0xd3, 0x25, 0x12, 0xb9, 0xd1, 0xd4, 0x9f, 0xc6, 0xf6, 0xf3, 0x78, 0xbf, 0xc7, 0x6, 0x9f, 0x8e, 0x58, 0x89, 0xa, 0x36, 0xb5, 0x0, 0xf4, 0x4d, 0x53, 0x75, 0x6, 0x6, 0x62, 0xf0, 0xe4, 0xc1, 0x51}, types.Tx{0xc2, 0x97, 0x36, 0x4c, 0x24, 0x9f, 0x9c, 0x8c, 0xff, 0x43, 0x0, 0xa6, 0xde, 0x60, 0x33, 0x3d, 0xf3, 0x8a, 0x7e, 0xee, 0x21, 0xc1, 0xfd, 0xe6, 0xae, 0x90, 0x27, 0xe6, 0x6, 0x4c, 0x33, 0x10, 0x50, 0x79, 0x5f, 0x92, 0x88, 0x58, 0xaa, 0x61, 0x42, 0x6e, 0x54, 0x4d, 0x3a, 0x46, 0x21, 0xbc, 0xb, 0x9, 0x60, 0xed, 0xcd, 0xa1, 0xa0, 0x94, 0x54, 0x6c, 0xe8, 0x7f, 0x15, 0x6b, 0x0, 0xe2, 0x90, 0x22, 0x9d, 0x36, 0xc6, 0xb9, 0x90, 0x99, 0x76, 0xf5, 0xc8, 0xf2, 0x24, 0xe8, 0xfb, 0xc8, 0xd5, 0x9f, 0xa6, 0x96, 0x43, 0x7b, 0x3a}, types.Tx{0xe5, 0x7d, 0xbe, 0x6e, 0xa4, 0x77, 0xe1, 0x5d, 0x6b, 0xbc, 0x4b, 0x46, 0xa5, 0x62, 0xd6, 0x9d, 0xc4, 0xab, 0xfc, 0xb1, 0x5f, 0xd, 0x3f, 0xe2, 0xb, 0xbe, 0xff, 0x28, 0x9, 0xd2, 0x53, 0x59, 0x65, 0xcf, 0x78, 0xcb, 0xc0, 0x4e, 0x41, 0x43, 0xf9, 0x32, 0x44, 0xd6, 0x7a, 0x1b, 0x62, 0x79, 0xf8, 0x87, 0x28, 0xcc, 0xdc, 0xcd, 0x46, 0x50, 0x56, 0x7b, 0x9b, 0x63, 0xb2, 0x10, 0xfa, 0x62, 0x9c, 0xe2, 0x2, 0x36, 0xa, 0x5e, 0x90}, types.Tx{0x1f, 0xcf, 0x23, 0xd, 0x7c, 0xa0, 0x98}, types.Tx{0xcd, 0x97, 0x50, 0xc8, 0x13, 0x74, 0xab, 0x88, 0x13, 0xb5, 0x7c, 0x51, 0xf3, 0x36, 0x88, 0x9d, 0x79, 0x61, 0x10, 0x41, 0xb7, 0x39, 0xf0, 0xf4, 0x18, 0x88, 0x16, 0x1a, 0x67, 0xf9, 0x1, 0x8b, 0xf5, 0x7, 0xb5, 0x45, 0xd2, 0x8d, 0x34, 0xf0, 0x3b, 0xda, 0xe9, 0x9a, 0x14, 0xa6, 0x77, 0xd3, 0xc4, 0xa2, 0xc4}, types.Tx{0xb5, 0xfb, 0xcc, 0xfe, 0xb9, 0xb0, 0x80, 0x62, 0x70, 0x83, 0x45, 0x36, 0xc8, 0x6f, 0x96, 0x46, 0xb0, 0x80, 0xd5, 0xba, 0x67, 0xa, 0x29, 0x65, 0xbb, 0xed, 0xef, 0xce, 0x78, 0x76, 0x13, 0x77, 0x9f, 0xd6, 0x43, 0xf, 0xa9, 0xe7, 0xe7, 0xa2, 0x41, 0x7a, 0x70, 0xaa, 0x5f, 0x6d, 0x2c, 0x13, 0x8a, 0xf8, 0x0, 0x75, 0x3, 0x45, 0x8a, 0x7d, 0x40, 0x1e, 0xee, 0xbb, 0xca, 0x63, 0xc2, 0xc5, 0x4a, 0xe1, 0x5c, 0x7b, 0xd6, 0xd, 0x94, 0xc5, 0x8b, 0xe, 0xfe, 0x6f, 0x60, 0xb2}, types.Tx{0x21, 0xac, 0xf3, 0x5c, 0x89, 0xd6, 0x68, 0xcf, 0x96, 0xe0, 0xca, 0x3e, 0x1a, 0xa2, 0xf7, 0x7a, 0x5e, 0x9a, 0x39, 0x3b, 0x6a, 0x7c, 0x4f, 0x4d, 0x1f, 0x9d, 0xa4, 0x25, 0x95, 0x4f, 0x7f, 0xc0, 0x41, 0x92, 0xf9, 0xbc, 0x6c, 0xb3, 0xfe, 0xa2, 0xdb, 0x5b, 0x54, 0x27, 0x7a, 0x5f, 0xed, 0x47, 0x38, 0xf, 0x3b, 0xaa, 0xbf, 0x76, 0xd2, 0x7b, 0xd8, 0x86, 0x74, 0xae, 0xab, 0xe5, 0xa3, 0xbd, 0x3d, 0x3f, 0x26, 0xff, 0x15, 0xbb, 0x62, 0x24, 0x45}, types.Tx{0x11, 0xa, 0xf0, 0xaf, 0x64, 0x15, 0x1f, 0xff, 0x78, 0x3c, 0x9a, 0x8b, 0x26, 0x5d, 0xdd, 0xc5, 0x27, 0x14, 0x38, 0x89, 0x6, 0xbd, 0xab, 0x11, 0x40, 0xf2, 0xf4, 0x33, 0x1b, 0xd9, 0x2c, 0xf9, 0xd8, 0x2d, 0xdf, 0x67, 0x44, 0x44, 0x33, 0x41, 0x44, 0x79, 0xfe, 0x91}, types.Tx{0xa, 0x6d}, types.Tx{0xd4, 0x7c, 0xd0, 0x3e, 0xec, 0xef, 0x9, 0xa6, 0xb7, 0xfb, 0xf9, 0x8c, 0x5f, 0xf7, 0xa2, 0xf4, 0x92, 0x14, 0x4e, 0x7, 0x78, 0x92, 0xc8, 0xfa, 0x45, 0xf5, 0xa0, 0xa1, 0xbe, 0xff, 0x6c, 0xb0, 0x38, 0xa5, 0x3b, 0x6a, 0xeb, 0x94, 0xbe, 0xff, 0x3a, 0x6a, 0xe, 0xa7, 0x3b, 0xe7, 0xf, 0xf0}, types.Tx{0xd4, 0xaf, 0x4c, 0x2c, 0x14, 0x5, 0xf, 0x7f, 0x63, 0x56, 0x7c, 0xa8, 0x88, 0x69, 0x43, 0x9f, 0x1, 0xc1, 0x6d, 0x6b, 0x74, 0xde, 0x5b, 0xd8, 0xb, 0xb8, 0xe0, 0x9, 0x8e, 0xc5, 0xb3, 0x79, 0x1d, 0xe8, 0x3f, 0xd1, 0x74, 0xfe, 0xd6, 0x4f, 0x63, 0xe1, 0x98, 0xe5, 0xf0, 0x70}, types.Tx{0x46, 0xe3, 0x83, 0x86, 0x90, 0x28, 0x1a, 0x36, 0xe, 0x30, 0xba, 0x24, 0xca, 0x88, 0x1c, 0x48, 0xf1, 0xfb, 0x71, 0xed, 0x84, 0x40, 0xce, 0x52, 0x49, 0x2c, 0xe3, 0xe7, 0x13, 0x4b, 0x3f, 0x2d, 0x6, 0x47, 0xa9, 0x11, 0xf4, 0xc2, 0xb1, 0x17, 0x78, 0xeb}, types.Tx{0x6f, 0x98, 0xac, 0xd2, 0x53, 0xee, 0xc6, 0xb, 0x71, 0xa3, 0x87, 0x7b, 0xad, 0x1a, 0xd8, 0x20, 0x90, 0xb9, 0x77, 0x22, 0x9, 0x4d, 0x98, 0x4c, 0x34, 0x2, 0x58, 0x5c, 0x64, 0xac, 0xbc, 0xcd, 0x82, 0xfc, 0x45, 0x4e, 0xbc, 0xe8, 0x40, 0x72, 0x7d, 0xeb, 0xa9, 0x84, 0xd, 0xa, 0x32, 0x21, 0x85, 0xb8, 0xb4, 0x6, 0xa3, 0x59, 0x19, 0x56, 0x67, 0xeb, 0x8e, 0x4b, 0xb1, 0x7a, 0x3f, 0x77, 0x1, 0xce, 0xeb, 0xe7, 0x8c, 0x48, 0xae, 0x23, 0xa6, 0xba}, types.Tx{0x3e, 0xaf, 0x3c, 0x7d, 0xb1, 0x95, 0x6c, 0x7e, 0x3f, 0x9d, 0xe4, 0x8c, 0x6e, 0xb0, 0x25, 0xa5, 0xe, 0x7f, 0xa1, 0xb9, 0xa7, 0xcd, 0x8e, 0xa9, 0x9, 0x7e, 0x73, 0x73, 0xf9, 0xaf, 0x6c, 0xc8, 0x69, 0x12, 0x4e, 0xd6, 0xde, 0x68, 0x8c, 0x6a, 0x2}, types.Tx{0xbe, 0x16, 0xb4, 0xf7, 0x73, 0x64, 0x8b, 0xfe, 0xd2, 0xb, 0x6f, 0xfd, 0x7b, 0xe4, 0xb9, 0x66, 0xbe, 0xfd, 0x1d, 0x51, 0xb4, 0x3e, 0xe5, 0xef, 0x31, 0xd6, 0xad, 0xf0, 0xcd, 0x87, 0x16, 0x8, 0x20, 0x9f, 0x24, 0x1a, 0xc7, 0xaf, 0x8e, 0x16, 0x2, 0x9b, 0xbc, 0xca, 0x37, 0x7c, 0x27, 0x5a, 0x6b, 0x82, 0xcc, 0xec, 0xdb, 0x89, 0x77, 0xdd, 0x69, 0x3c, 0xff, 0x6c, 0x83, 0x4d, 0x3f, 0x95, 0xc, 0x3f, 0x8, 0x90, 0xd2, 0x30, 0x51, 0xa0, 0x51, 0x11, 0xdf, 0xdc, 0xf7, 0x60, 0xf1, 0x49, 0x22, 0xaf, 0xbb, 0x6, 0x6e, 0x80}, types.Tx{0xfb, 0x68, 0x14, 0x98, 0xaa, 0x70, 0x8b, 0x29, 0x44, 0xa5, 0x11, 0xb, 0x1f, 0xd8, 0x6e, 0xe6, 0x77, 0xb0, 0x37, 0x7d, 0x74, 0x13, 0xaf, 0x69, 0x9c, 0x12, 0x6e, 0xc2, 0x9b, 0xd2, 0x48, 0x3c, 0x55, 0xbe}, types.Tx{0xf4, 0x3a, 0x94, 0x97, 0xdc, 0x8c, 0xaa, 0x4f, 0x33, 0xdf, 0xdc, 0xe4, 0x15, 0xac, 0x7d, 0xf7, 0x67, 0xd5, 0xe6, 0xbb, 0xac, 0xa0, 0xbf, 0xff, 0x2b, 0xf9, 0xb2, 0xb2, 0x9c, 0xb4, 0xd5, 0xc1, 0x9a, 0xf1, 0x7e, 0x10, 0x92, 0xb5, 0x61, 0x21, 0x30, 0x4b, 0xd1, 0x5b, 0x17, 0x28, 0xf1, 0x1b, 0x7, 0x99, 0xd8, 0xd, 0xe4, 0x82, 0xd3, 0xe3, 0x44, 0x8d, 0x1e, 0xf, 0x67, 0x87, 0xce, 0xe2, 0xc3, 0x5f, 0x7b, 0xf, 0x58, 0x6e, 0x57, 0x7a, 0x6, 0xc9, 0x95, 0xc7, 0x5c, 0x6a, 0x86, 0x64, 0xaa}, types.Tx{0x59, 0x25, 0xdd, 0xaf, 0x84, 0x23, 0x19, 0xe3, 0x1f, 0xf9, 0xec, 0xed, 0xac, 0xb4, 0x44, 0x69, 0xa8, 0x75, 0x9, 0x9f, 0x15, 0xcc, 0x31, 0x6, 0x87, 0x8a, 0x18, 0x6a, 0x87, 0x8f, 0xc0, 0x28, 0x62, 0x22, 0x12, 0x60, 0x30, 0x52, 0x5f, 0xa8, 0x8e, 0x3f, 0xb6, 0xa5, 0x84, 0xaf, 0x89, 0xdd, 0x2d, 0xf, 0xea, 0xa5, 0x49, 0x43, 0xb2, 0x35, 0xc9, 0xd4, 0xaa, 0xe3, 0x26, 0xa1, 0x2c, 0x8, 0x17, 0x25, 0xa8, 0x6c, 0xae, 0xa9, 0xfa, 0x7e, 0x94, 0xdb, 0x73, 0x85, 0x90, 0xc2, 0x4c, 0x55, 0x84, 0x4d, 0x4e, 0x7e, 0xf7, 0xa8, 0x29, 0x78, 0x6b, 0x24, 0x9f, 0x7, 0x15, 0x7b, 0xc0, 0x5a, 0xc4}, types.Tx{0x65, 0xfd, 0x40, 0x41, 0x62, 0xff, 0x51, 0x21, 0x82, 0xd3, 0x5, 0x6a, 0xb5, 0x81, 0x9c, 0xc9, 0x3b, 0xc9}, types.Tx{0xa3, 0xb2, 0x55, 0x24, 0xb, 0x13, 0x3c, 0x83, 0x1e, 0x98, 0x1e, 0x98, 0x3b, 0x99, 0x5f, 0x58, 0x92, 0x77, 0x6a, 0x4d, 0xdb, 0x1d, 0x1b, 0xcf, 0x78, 0x9c, 0x56, 0x53, 0x64, 0x3, 0xa3, 0xc5, 0xeb, 0x60, 0xbd, 0xf0, 0x2, 0x5, 0xc4, 0x21, 0x8, 0xe5, 0x5c}, types.Tx{0x30, 0x9c, 0x52, 0x32, 0x79, 0xb6, 0x52, 0xaf, 0x3c, 0x8, 0x4a, 0xfe, 0xce, 0xc1, 0xe1, 0x8c, 0x1c, 0xdd, 0xaa, 0xf6, 0x1a, 0x41, 0x9c, 0xf3, 0x17, 0xe4, 0xa2, 0xfb, 0x50, 0x7e, 0xb0, 0x8e, 0xae, 0x21, 0x19, 0x58, 0xe1, 0x4c, 0x1e, 0x72, 0xbf, 0x15, 0x1, 0x4e, 0x15, 0xea, 0x38, 0x73, 0x81, 0x11, 0x77, 0x4c, 0xd, 0x8, 0xf2, 0x51, 0xc6, 0x90, 0xea, 0x83, 0x8f, 0x32, 0xb7, 0x8f, 0xfb, 0x7d, 0xfa, 0x30, 0xf3, 0x6a, 0x75, 0x65, 0xed, 0x93}, types.Tx{0xaf, 0x4b, 0x45, 0x5f, 0x75, 0x78, 0xbc, 0xc6, 0xca, 0x33, 0x6f, 0x6, 0x91, 0x87, 0x9d, 0xdc, 0x1c, 0xb3, 0x85, 0x63, 0x8d, 0x9d, 0x49, 0xd2, 0x23, 0x6b, 0x7a, 0x67, 0xc8, 0xa1}, types.Tx{0xa0, 0x79, 0xef, 0x17, 0xc4, 0x14, 0xd4, 0xd7, 0xd, 0xb8, 0xa2, 0x84, 0xfb, 0xdb, 0x29, 0x74, 0x87, 0x79, 0x3a, 0x82, 0x26, 0xb9, 0x6a, 0xbe, 0x53, 0xaa, 0x9c, 0xcc, 0x1b, 0x48, 0x96, 0xbf, 0x6b, 0xf0, 0x5c, 0xb3, 0xb3, 0xdf, 0xcf, 0xfc, 0x64, 0xe7, 0x5}, types.Tx{0xab, 0x94, 0xe3, 0x92, 0x2, 0xa0, 0x5a, 0x61, 0xa2, 0x90, 0x2e, 0x51, 0x72, 0x30, 0x1e, 0x2e, 0x58, 0x8, 0xa8, 0x76, 0x25, 0x85, 0x1a, 0xc9, 0xc0, 0x68, 0xe4, 0xd8, 0xd7, 0x8b, 0xa7, 0xa, 0xc3, 0xd7, 0x7a, 0x30, 0x49, 0x3c, 0x2d, 0x1a, 0xb0, 0x67, 0x18, 0xa8, 0x71, 0x78, 0x7c, 0xaf, 0xea, 0x1d, 0xb, 0x94, 0x7e, 0x46, 0xdf, 0x19, 0x4f, 0x67, 0x5d, 0x36, 0x12, 0xc1, 0x2c, 0xb5, 0x57, 0x8b, 0x1a, 0x36, 0xd8, 0xaf, 0xc, 0x20, 0x80, 0x46, 0xb0}, types.Tx{0x27, 0xd1, 0x44, 0x73}, types.Tx{0x39, 0x10, 0xff, 0x61, 0x66, 0x6a, 0xc1, 0x2a, 0xe1, 0x13, 0xd, 0x7, 0xea, 0x21, 0x45, 0xf7, 0xa9, 0x34, 0xa, 0x63, 0x8d, 0x99, 0x7c, 0xc9, 0x1d, 0x2c, 0xaa, 0xec, 0x62, 0x14, 0x1d, 0xa4, 0x92, 0xeb, 0xa9, 0x2b, 0x9a, 0xa0, 0x69, 0x8e, 0x17, 0x55, 0x21, 0x41, 0x3a, 0x3c, 0x3d, 0x59, 0x18, 0x58, 0x62, 0x3f, 0xc4, 0xa5, 0xa2, 0x21, 0xb8, 0x89, 0xe8, 0x51, 0x3, 0xf2, 0x47, 0xf7, 0x2b, 0x7d, 0x10, 0x6d, 0xe2, 0xce, 0x1e, 0x3f, 0x98, 0x88, 0xf3, 0x37, 0x13, 0x4a, 0x43, 0x63, 0x6f, 0x7d, 0x22, 0x6c}, types.Tx{0x1f, 0x1, 0x94, 0x99, 0x3a, 0xaf, 0xbc, 0xa3, 0x8b, 0x84, 0x20, 0x1c, 0xa, 0xfa, 0xfe, 0x83, 0xb3, 0x81, 0xaa, 0x39, 0x66, 0x64, 0x3d, 0xf3, 0x38, 0xe3, 0xad, 0x46, 0x57, 0xbd, 0xe7, 0x8a, 0x47, 0x7d, 0x1a, 0x4f, 0x8f, 0x22, 0x53, 0x64, 0xa9, 0xf0, 0xdd, 0x48, 0x19, 0xb7, 0x38, 0x68, 0x8d, 0x44}, types.Tx{0xd8, 0x5f, 0xc2, 0xda, 0x53, 0xec, 0x4b, 0xb3, 0xf8, 0x16, 0xd5}, types.Tx{0x9a, 0x8c, 0xd, 0x43, 0x8f}, types.Tx{0xcf, 0x9c, 0x7a, 0xf, 0xbe, 0xb0, 0x15}, types.Tx{0x5b, 0x2a, 0xf4, 0x7f, 0xe8, 0xf, 0x43, 0xe8, 0xaa, 0x9d, 0xc9, 0xa7, 0x9e, 0x8f, 0xa5, 0x63, 0x49, 0xd8, 0x55, 0xa3, 0x81, 0xca, 0xc8, 0x63, 0x79, 0x9a, 0x82}, types.Tx{0xff, 0x89, 0xd1, 0xa4, 0x49, 0xf4, 0xfe, 0xbd, 0xa2, 0x22, 0x5b, 0x2, 0x58, 0xad, 0x14, 0x12, 0x51, 0x41, 0x13, 0x4e, 0xe5, 0xf6, 0xb4, 0xe4, 0x1f, 0x9a, 0x1b, 0xe, 0x2f, 0x68, 0x2c, 0x73, 0x63, 0xff, 0x89}, types.Tx{0x8c, 0x1e, 0x5d, 0xf7, 0xf0, 0x36, 0x36, 0x9a, 0x3b, 0xb3, 0xc5, 0xe6, 0x7d, 0x74, 0xed, 0x8c, 0x42, 0x37, 0xc1, 0x8, 0xe7, 0x93, 0x79, 0xd2, 0x67, 0xd9, 0xfb, 0x2b, 0xcd, 0xb8, 0xa5, 0x69, 0x9f}, types.Tx{0x68}, types.Tx{0x1e, 0xb1, 0x9f, 0x5a, 0x6f, 0xff, 0x5a, 0xd9, 0xc2, 0x23, 0x1d, 0xb4, 0xff, 0x78, 0x36, 0xe1, 0x4b, 0xa8, 0x4b, 0xe1, 0x66, 0x8c, 0xf9, 0x74, 0x98, 0xb1, 0xd2, 0x72, 0x67, 0x79, 0xdb, 0xb6, 0xcc, 0x27, 0xcc, 0xa0, 0x6a, 0xd4, 0x7d, 0xb1, 0xaa, 0x35, 0xb2, 0x25, 0x45, 0x5e, 0x8d, 0x9f, 0xbf, 0xfb, 0xb0}, types.Tx{0x95, 0xe6, 0x32, 0x9f, 0xda, 0xa1, 0xf2, 0xe3, 0x68, 0x30, 0xb9, 0xd8, 0x81, 0xc1, 0xb7, 0x88, 0xd6, 0x8e, 0x5a, 0xab, 0x4f, 0x1d, 0xef, 0xd9, 0xdc, 0x69, 0x6a, 0x3f, 0xfd, 0x7e, 0x6f, 0x26, 0xda, 0x13, 0x86, 0x41, 0xaa, 0x85, 0xa8, 0xae, 0x2f, 0xc1, 0x1, 0xb0, 0xf4, 0x85, 0x80, 0x71, 0x97, 0x93, 0xf5, 0xdc, 0x3a, 0xcf, 0xea, 0x71, 0xff, 0xa9, 0x34, 0x36, 0x6f, 0x5, 0x14, 0xe0, 0x13, 0x9f, 0x6, 0xf3, 0x83, 0xee, 0x6c, 0x7, 0x20, 0xd0, 0xe1, 0x64, 0xf9, 0xb0, 0xa8, 0x37, 0xab, 0x7a, 0xcd, 0xa1, 0x3e, 0x34, 0x4, 0x3c, 0x93, 0x0, 0x57, 0xe4, 0x3b}, types.Tx{0x56, 0xed, 0xa7, 0x16, 0xdf, 0x6f, 0xe, 0x89, 0x8d, 0x28, 0xf6, 0x21, 0x54}, types.Tx{0x2d, 0x2e, 0xc7, 0x14, 0x1e, 0x28, 0x53, 0xd9, 0xd, 0xed, 0xa1, 0x49, 0xf5, 0xc8, 0x48, 0x2a, 0x57, 0x4, 0x9c, 0x2f, 0x6f, 0x76, 0x3, 0xc4, 0xad, 0x71, 0xb3, 0x2, 0xf, 0x65, 0x43, 0xcb, 0x9f}, types.Tx{0xed, 0x6c, 0x42, 0xb3, 0xb9}, types.Tx{0xa5, 0x73, 0x4e, 0xe9, 0x9d, 0x8c, 0x5e, 0x39, 0x26, 0xac, 0xff, 0x1d, 0x80, 0x7f, 0xf3, 0xdc, 0x72, 0x3b, 0xe7, 0x18, 0xcd, 0x65, 0x5f, 0x74, 0x5d, 0xc2, 0xc9, 0x35, 0x39, 0xb1, 0xcd, 0x75, 0x58, 0x9f, 0x23, 0xf4, 0x1d, 0x84, 0x7d, 0x3c, 0xee, 0x54, 0xde, 0x36, 0x88, 0x94, 0x7c, 0xd3, 0x65, 0x41, 0x7e, 0x5f, 0x2b, 0x61, 0xe6, 0xc3, 0x17, 0xdb, 0xda, 0xe8, 0xa1, 0xbe, 0x2b, 0x17, 0x2b, 0x25, 0x63, 0x45, 0xea, 0x2f, 0xb9, 0x3e, 0x9e, 0x1a, 0x71, 0x3a, 0x2c, 0xf7, 0x44, 0x33, 0xcf, 0x34}, types.Tx{0x1f, 0xed, 0xbf, 0x8, 0xa, 0x61, 0xb3, 0xca, 0xfc, 0x17, 0x85, 0xce, 0x8a, 0xa5, 0x93, 0x9a, 0x2d, 0x41, 0xb, 0x40, 0xde, 0x21, 0xca, 0x83, 0xc4, 0x19, 0xaf, 0xfb, 0x45, 0x40, 0xfe, 0xe9, 0xcb, 0xd8, 0x75, 0xda, 0xad, 0x25, 0x91, 0xdb, 0xa1, 0x97, 0xe6, 0x71, 0xaf, 0x1f, 0x3b, 0xf6, 0x34, 0xb2, 0xc, 0xa, 0xc1, 0x8b, 0x1e, 0x13, 0x28, 0xba, 0xa2, 0x34, 0x7, 0x4c, 0x55, 0x6a, 0x60, 0x3a, 0x0, 0xe1, 0x5, 0x45, 0xf0, 0x39, 0xfd, 0x4c, 0xaf, 0x33, 0x1c, 0xe3, 0xef, 0x91, 0x46, 0x97, 0xd5, 0x3a, 0x25, 0x79, 0x76, 0xe}, types.Tx{0x1c}, types.Tx{0xf6, 0x70, 0xde, 0xa7, 0x22, 0x19, 0x55, 0x66, 0xb7, 0xd7, 0x9d, 0x77, 0xbf, 0x97, 0xfc, 0x2c, 0x86, 0x46, 0xbc, 0x66, 0xa9, 0x69, 0x42, 0x8b, 0x1c, 0xe6, 0x8c, 0x2f, 0x49, 0x48, 0xe, 0xfd, 0x2c, 0x65, 0x36, 0x23, 0x7c, 0x3e, 0x18, 0x79, 0x15, 0x4c, 0x41, 0xf4, 0x88, 0x64, 0x32, 0x20, 0x44, 0x62, 0x1c, 0x18, 0x9a, 0xcf, 0x58, 0x72, 0xbb, 0xfa, 0xf3, 0xcd, 0xc4, 0xc8, 0x13, 0xc4, 0xb, 0xa2, 0xf2, 0x63, 0x2a, 0xb6, 0x90, 0x15, 0xbb, 0x57, 0x4a, 0x24, 0xc9, 0x8a, 0x48, 0xb3, 0x18, 0xa2, 0xb2, 0x42, 0xd8, 0x45, 0x18, 0x1f, 0x33, 0xcb, 0x10, 0x61, 0x2b, 0x72}, types.Tx{0x8f, 0x7c, 0x67, 0x99, 0xd0, 0x75, 0x22, 0xaf, 0xe8, 0xac, 0x43, 0xdc, 0xef, 0x7f, 0x5f, 0xda, 0xf4, 0xc1, 0x6e, 0x88, 0x11, 0x0, 0x60, 0x2e, 0x21, 0x21, 0xb8, 0xc, 0xaf, 0x67, 0x7a, 0x17, 0x1, 0xb, 0xdb, 0x34, 0x1d, 0xc5, 0xc8, 0x4c, 0x28, 0x6c, 0x81, 0x40}, types.Tx{0x23, 0x63, 0x63, 0x24, 0x1c, 0x0, 0x52, 0xd7, 0x65, 0x5, 0x26, 0x10, 0x4d, 0xf9, 0x9d, 0x78, 0x78, 0x82, 0xa9, 0xc8, 0x39, 0xe7, 0xfc, 0x98, 0x3c, 0x3b, 0x47, 0x64, 0x10, 0xf1, 0xb2, 0x75}, types.Tx{0xe0, 0x75, 0x9f, 0xb7, 0xeb, 0x80, 0xfe, 0x73, 0x1f, 0x15, 0x96, 0x3d, 0xbc, 0xcc, 0x22, 0xa5, 0xa1, 0xd0, 0x89, 0x79, 0x3a, 0x48, 0x6b, 0xce, 0x8, 0xf, 0x39, 0x8c, 0x23, 0x9e, 0xe5, 0xa7, 0xa0, 0xb7, 0x29, 0x99, 0xc3, 0x76, 0x9b, 0x6e, 0xd, 0xcc, 0x4d, 0xbe, 0xeb, 0xd7}, types.Tx{0x8a, 0x28, 0x6, 0x80, 0x6e, 0xb0, 0xd, 0x20, 0x4c, 0xfd, 0x63, 0x58, 0x95, 0x59, 0x9, 0x7c, 0x61, 0xb0, 0x40, 0xd2, 0x2b, 0x7f, 0xc4, 0x78, 0x27, 0xbd, 0xd5, 0xe6, 0xf7, 0x9f, 0x0, 0x14, 0x19, 0x54, 0xab, 0x8d, 0x71, 0x0, 0xe5, 0x41, 0xfa, 0x8b, 0x2e, 0x7b, 0x25, 0x5a, 0xef, 0xd5, 0x63, 0xf0, 0x69, 0xe8, 0x68, 0x60, 0x6d, 0xaf, 0x63, 0xbd, 0x87, 0xab, 0xc2, 0x28, 0xeb, 0xc9, 0x60, 0xbf, 0xd, 0xcf, 0x17, 0xe9, 0xdb, 0x22, 0xc2, 0x39, 0x86, 0x81, 0xc1, 0xd6, 0xe6, 0xb7}, types.Tx{0x95, 0x61, 0x39, 0xe3, 0xce, 0x33, 0x77, 0x21, 0x3, 0x61, 0x5c, 0x74, 0x64, 0xb, 0xa1, 0xe4, 0x37, 0x15, 0x88, 0x8c, 0x7d, 0x88, 0x12, 0x24, 0x65, 0x19, 0x29, 0xb8, 0x55, 0x91, 0x36, 0x3a, 0x10, 0xfc, 0xad, 0xcd, 0xe3, 0x7f, 0xcf, 0xc0, 0x9d, 0xec, 0xfb, 0x85, 0x15, 0xaf, 0x57, 0x6b, 0x81, 0xb1, 0x88, 0x69, 0xfc, 0x6d, 0x66, 0x10, 0x25, 0xd1, 0x3a, 0xbe, 0x45, 0xed, 0xbe, 0x66, 0x8b, 0x7e, 0xe5, 0xdf, 0x95, 0x5b, 0xeb, 0x29, 0x67, 0xa5, 0xf7, 0xc4, 0xf9, 0x9f, 0xe0, 0x58, 0x0, 0x84, 0xe1, 0xe, 0x24, 0x75, 0xc3, 0xb0, 0xe4, 0x92, 0x6c, 0xb2, 0xba, 0xd4, 0xd7, 0xb1, 0x7e, 0x88}, types.Tx{0xee, 0x66, 0x8f, 0x38, 0x6b, 0x1c, 0x4c, 0xa1, 0x6b, 0xce, 0x62, 0xa9, 0xcf, 0x1d, 0xfb, 0xb, 0x2e, 0x56, 0x11, 0x1f, 0xb5, 0xd8, 0xcc, 0x61, 0xd0, 0x93, 0x4a, 0xca, 0xe8, 0x84, 0x1f, 0x5e, 0x5a, 0xcf, 0x28, 0xec, 0xc2, 0x3b, 0xd6, 0x3d, 0x4b, 0x64, 0xda, 0x50}, types.Tx{0x79, 0xba, 0x41, 0x38, 0x3a, 0xed, 0xbb, 0xc7}, types.Tx{0xf6, 0xfa, 0xa9, 0xa5, 0x15, 0xe9, 0x9d, 0xc0}, types.Tx{0xe5, 0x7a, 0x9b, 0x9e, 0x21, 0xed, 0x78, 0xdf, 0xda, 0xf8, 0x74, 0x42, 0x32, 0x61, 0xa0, 0x5b, 0x88, 0x1f, 0x4d, 0xf4, 0x7f, 0x66, 0xc5, 0x85, 0x95, 0xa5, 0xd4, 0x7e, 0xae, 0x6d, 0x98, 0x8b, 0x2f, 0xed, 0x19, 0x42, 0x6b, 0x70, 0xa4, 0x36, 0x97, 0x78, 0x23, 0x66, 0x93, 0xba, 0x1b, 0x5e, 0x2b, 0x39, 0x2, 0x4c, 0xd9, 0x16, 0x9c, 0x77, 0x54, 0x0, 0x1, 0x3b, 0x90, 0xdd, 0xe7, 0xe8, 0x31, 0x75, 0xe7, 0x93, 0x8a, 0x46, 0xab, 0xe, 0xd2, 0x8e, 0xae, 0xa7, 0x96, 0xcd}, types.Tx{0x62, 0x7d, 0xe0, 0x31, 0xcf, 0x24, 0x8, 0x65, 0xc3, 0xd2, 0xe4, 0x60, 0x4, 0x9, 0x52, 0x3b, 0x63, 0x9d, 0xb3, 0xb9, 0x7d, 0x2e, 0xd0, 0x26, 0x44, 0xb9, 0x2b, 0xb2, 0x32, 0x12, 0x7f, 0xbf, 0x84}, types.Tx{0xf6, 0x4f, 0xde, 0xa2, 0xb7, 0x39, 0x56, 0xd0, 0x5e, 0x78, 0xcc, 0xa1, 0xd8, 0x79, 0x9e, 0xb5, 0x4d, 0x6, 0x1c, 0x89, 0x9b, 0x6b, 0x75, 0x4c, 0xe9, 0x29, 0xaa, 0x9, 0xa2, 0x3e, 0xa6, 0x84, 0x69, 0x37, 0xfd, 0x2f, 0x2b, 0xfe, 0xab, 0x3f, 0xf7, 0x64, 0xbd, 0xe, 0x67, 0x5f, 0x30, 0xca, 0xfc, 0x9a, 0xc6, 0xe3, 0x5b, 0x87, 0xb1, 0xf5, 0x64, 0x3e, 0x70, 0x97, 0xc7, 0xf4, 0xaf, 0x35, 0x5e, 0x79, 0x82, 0xc2, 0xfa, 0x77, 0x5f, 0xa1, 0x12, 0xc1, 0xf6, 0x40, 0xa9, 0x7b, 0x19, 0x6c}, types.Tx{0x11, 0x9a, 0xd0, 0x60, 0x69, 0x94, 0xfb, 0x3f, 0x2a, 0x42, 0xf0, 0x9e, 0xb3, 0x3e, 0x8e, 0x1f, 0xd6, 0xbe, 0x3d, 0x72, 0x5e, 0x88, 0x80, 0x66, 0x86, 0x94, 0xfd, 0x87, 0xc1, 0x86, 0x2e, 0xfb, 0x16, 0x7, 0x44, 0xdc, 0x98, 0x98, 0x94, 0x49, 0x1e, 0x32, 0x30, 0x85, 0xf7, 0x70, 0xa1, 0x33, 0x66, 0x69, 0x6, 0xb4, 0xe8, 0xc7, 0x79, 0xf6, 0x1e, 0x3e, 0x7d, 0xe1, 0xe7, 0x5b, 0x77, 0x36}, types.Tx{0x3, 0xe5, 0x80, 0x16, 0x15, 0x20, 0x9a, 0xfa, 0x4d, 0xfd, 0x37, 0x68, 0xd2, 0x3c, 0x58, 0x84, 0x8, 0xd}, types.Tx{0xd, 0x27, 0xad}, types.Tx{0x75, 0x6f, 0xf4, 0xbb, 0xa3, 0x4, 0xe0, 0x72, 0x1, 0x4, 0x21, 0xbc, 0x4a, 0xf1, 0x82, 0x7d, 0xc6, 0xb1, 0x5c, 0xae, 0xdd, 0x7f, 0x65, 0xec, 0x1e, 0xf, 0x48, 0xe8, 0xf, 0x0, 0x7b, 0x42, 0xfb, 0x5, 0xba, 0x71, 0x46, 0xd8, 0x81, 0x6, 0x58, 0x46, 0x31, 0xeb, 0x48, 0x7c, 0x7d, 0xe4, 0x35, 0xaa, 0xdd, 0xde, 0xfe, 0x88, 0xc, 0xb5, 0x7a, 0xd5, 0x49, 0xd4, 0x6c, 0x77, 0xbf, 0x8, 0xbd, 0xa7, 0xef, 0x83, 0x9a, 0xf9, 0x18, 0xdd, 0xb6, 0xe5, 0x27, 0xe9, 0x3, 0xeb, 0x37, 0x95, 0xf2, 0x53, 0xa8, 0x80, 0x3c, 0x18, 0x33, 0xdf, 0xed}, types.Tx{0x34, 0x16, 0xfd, 0xe7, 0x6c, 0xef, 0xc5, 0xbd, 0xf1, 0x5, 0x90, 0xde, 0x59, 0x3b, 0x57, 0x2e, 0x7e, 0xaf, 0x21, 0x32, 0x43, 0xc5, 0x13, 0x26, 0xe7, 0x30, 0xb1, 0x92, 0xcf, 0x9a, 0xd9, 0xb2, 0xc, 0x2a, 0x2, 0x44, 0xf6, 0xf1, 0xed, 0xaa, 0xa, 0xb9, 0x9, 0xa0, 0x4c, 0xbb, 0xa1, 0xda, 0xdc, 0x80, 0xc5, 0x74, 0x57, 0xf8, 0xd, 0xb6, 0xdd, 0xc4, 0x19, 0xad, 0xe4, 0xf9, 0xef, 0x4b, 0xc3, 0xe6, 0xb, 0x45, 0xc0, 0x2b, 0xd4, 0x59, 0x24, 0x8c, 0x2b, 0x8e, 0xef, 0x57, 0x73, 0x74, 0xeb, 0xf2, 0xb3, 0x7c, 0x5d, 0xe4, 0x55, 0x82, 0x32, 0xd8, 0x4f, 0x68, 0xb5, 0xb8, 0x7e}, types.Tx{0xbf, 0x1f, 0x24, 0x7b, 0x40, 0xbe, 0x6e, 0x99, 0x9d, 0x4d, 0x12, 0xad, 0xe7, 0x95, 0x54, 0x6c, 0xea, 0xe0, 0x52, 0xcc, 0xc4, 0x6b, 0x62, 0x4f, 0xb3, 0x25, 0x32, 0x50, 0x9a, 0x3e, 0x7d, 0x7, 0x78, 0xb3, 0xf3, 0x8f, 0x25, 0xfb, 0x1b, 0xea, 0x74, 0xa, 0xf1, 0x9f, 0xd1, 0x87, 0xab, 0x69, 0x50, 0x9e, 0x66, 0xbe, 0x9d, 0xd9, 0x9a, 0x33, 0x4b, 0xad, 0x39, 0xb4, 0x58, 0xb8, 0xac, 0xdd, 0x21, 0xfa, 0x84, 0x42, 0x6c, 0x8e, 0x86, 0x3a, 0xad, 0x49}, types.Tx{0xc8, 0x3b, 0x44, 0xfc, 0xd6, 0xf7, 0x18, 0xd5, 0x79, 0xf1, 0x8a, 0x9b, 0xf7, 0x8b, 0x66, 0xea, 0xfb, 0x2d, 0x9d, 0xcc, 0x6, 0x18, 0x2e, 0x5e, 0xd8, 0xe4, 0xb0, 0x2a, 0x38, 0xe7, 0xc6, 0x52, 0xe6, 0x56, 0x8d, 0x29, 0x9a, 0x66, 0x85, 0x4b, 0xac, 0xf7, 0x9a, 0x91, 0xdd, 0x16, 0x2b, 0xc1, 0xe8, 0xff, 0x17, 0x75, 0x11, 0xc3, 0x95, 0xac, 0xf3, 0x8, 0xa1, 0xb4, 0xf4, 0xa0, 0xe4, 0x7, 0xe8, 0xfc, 0x1, 0x3c, 0x4c, 0x22, 0x62, 0xe2, 0x60, 0xa2, 0x87, 0xbf, 0x91, 0x9f, 0x3b, 0x40, 0xb1, 0x92, 0x90, 0x1a, 0xc6, 0x88, 0x62, 0x6a, 0xe5, 0x62, 0xb, 0x7e, 0xbf, 0xe2, 0x7, 0x45}, types.Tx{0x13, 0x32, 0x54, 0xf4, 0xd7, 0xb5, 0x7e, 0xcb, 0x18, 0xe7, 0xb, 0x1d, 0xcc, 0x2a}, types.Tx{0xa2, 0xf9, 0x67, 0x36, 0x24, 0xd, 0x38, 0xbd, 0xa2, 0xec, 0x85, 0x4e, 0x7a, 0x8f, 0x71, 0x87, 0xae, 0x30, 0xdf, 0x2a, 0x14, 0xbc, 0x82, 0xe8, 0x4d, 0xf0, 0x3c, 0x11, 0x78, 0xdc, 0xe0, 0x18, 0xfb, 0x92, 0xa4, 0x83, 0x44, 0xdf, 0x3f, 0x74, 0x62, 0x3, 0xa1, 0xa9, 0xa, 0x56, 0x0, 0x53, 0xdd, 0x5e, 0xda, 0xb, 0xd1, 0xc0, 0xf5, 0x61, 0x6a, 0xb6, 0x56, 0xcd, 0xba, 0xb8, 0x49, 0x94, 0x12, 0xc7, 0xd5, 0x41, 0x58, 0x4f, 0xa1, 0xdc, 0x66, 0x39, 0x45, 0x59, 0xf3, 0x19, 0xe4, 0x6e, 0xed, 0x94, 0x29, 0x3e, 0xa6, 0x54, 0x13, 0x48}, types.Tx{0xd9, 0x10, 0xa, 0xe8, 0xf2, 0x87, 0x55, 0x48, 0x7a, 0x57, 0xb6, 0xed, 0xcd, 0x95, 0x7b, 0xbc, 0xa9, 0xdb, 0xb5, 0xf0, 0xa2, 0x57, 0xc1, 0x7c, 0xe, 0xae, 0xfc, 0x42, 0x57, 0x27, 0x67, 0x62, 0xea, 0x3, 0xd9, 0xf4, 0x54, 0xb9, 0xa6, 0x31, 0xfe, 0x5c, 0x7e, 0x9, 0x6a, 0x77, 0x63, 0x31, 0x32, 0x28, 0x5e, 0xe8, 0xb1, 0xae, 0x3c, 0xec, 0xbb, 0x3, 0x9a, 0x37, 0xd0, 0xa0, 0xd5, 0xbc}, types.Tx{0x3a, 0x78, 0x94, 0x54, 0xf2, 0x91, 0x5e, 0x4d, 0xa3, 0x6d, 0x92, 0xa2, 0xfc, 0x7c, 0x54, 0x90, 0x62, 0xb9, 0x57, 0xd5, 0x12, 0x2, 0x7c, 0x40, 0xa4, 0x79, 0xc7, 0x2e, 0x75, 0xaa, 0x38, 0x8e, 0xec, 0xed, 0xbd, 0x12, 0x76, 0xe, 0x28, 0x2e, 0x7b, 0x17, 0xae, 0xbb, 0xbc, 0xff, 0x4d, 0x36, 0x97, 0xd9, 0x16, 0x9d, 0xaa, 0xc6, 0xcd, 0x7, 0x27, 0xc4, 0x6a, 0x4d, 0x7f, 0xc0, 0xe5, 0x97, 0xad, 0x5d}, types.Tx{0x9f, 0xf1, 0x8a, 0x32, 0xfd, 0x76, 0x23, 0x87, 0x9d, 0xa5, 0x93, 0xc0, 0xcc, 0x7d, 0xa2, 0x39, 0xc0, 0x2b, 0x56}, types.Tx{0x9f, 0x64, 0x3, 0xbe, 0xd0, 0x2b, 0xca, 0x71, 0x2a, 0x66, 0x29, 0x19, 0x44, 0xb5, 0x40, 0x68, 0xac, 0x53, 0xee, 0x3e, 0x65, 0xdc, 0x52, 0xb3, 0x4e, 0x64, 0x1f, 0x21, 0xf2, 0x72, 0xe, 0xe6, 0xa0, 0x21, 0x99, 0x38, 0xf7, 0xfe, 0x53, 0xf8, 0xeb, 0x47, 0xc4, 0x26, 0xb5, 0x21, 0xfa, 0x88, 0x2c, 0x1d, 0xa1, 0x4d, 0xfd, 0x95, 0xda, 0x2d, 0xb4, 0x6d, 0x76, 0x8f, 0x91, 0x77, 0x53, 0x1c, 0x5a, 0x61, 0xf7, 0xd1, 0x6a, 0x66, 0xdd, 0x77, 0xf3, 0x8d, 0x2b, 0x5a, 0x48, 0x8f, 0x5e, 0x46, 0x3e, 0xeb, 0xad, 0xb4, 0x1c, 0xab, 0x5a, 0x1d}, types.Tx{0x5c, 0xf}, types.Tx{0x50, 0xc0, 0x92, 0x8, 0x46, 0xa8, 0x72, 0x39, 0x95, 0xa3, 0xbb, 0xf6, 0x95, 0x2f, 0x5f, 0x37, 0x50, 0x3d, 0x79, 0xa9, 0xc9, 0x8f, 0xef, 0xfb, 0x14, 0xf6, 0x48, 0xfd, 0x51, 0xff, 0xab, 0x15, 0x83, 0x8d, 0x69, 0xc1, 0x62, 0xc2, 0x84, 0xf4, 0xe5, 0xe3, 0x62, 0x47, 0x55, 0x2, 0x65, 0x61, 0x6f, 0x3d, 0xa0, 0x99, 0x74, 0x60, 0xac, 0x8f, 0x7, 0x71, 0x56, 0x63, 0xfe}, types.Tx{0x33, 0x14, 0xa1, 0x2d, 0x82, 0xac, 0x6, 0x85, 0xa6, 0x2d, 0x3, 0xd4, 0xe8, 0x84, 0x93, 0x48, 0xa8, 0xf0, 0x77, 0x6, 0x57, 0xc8, 0x93, 0xe7, 0xb5, 0xdb, 0xff, 0xcb, 0x89, 0xe6, 0x66, 0xd9, 0x96, 0x7d, 0xe3, 0xf1, 0x53, 0xde, 0x91, 0x54, 0x2d, 0xd2, 0xbf, 0xce, 0xe2, 0x77, 0x9, 0x3f, 0x1d, 0xe4, 0xb0, 0x3f, 0x5b, 0x71}}, }, - // { - // name: "one small tx", - // txs: generateRandomlySizedTxs(1, 200), - // }, - // { - // name: "one large tx", - // txs: generateRandomlySizedTxs(1, 2000), - // }, - // { - // name: "many large txs", - // txs: generateRandomlySizedTxs(100, 2000), - // }, + { + name: "one small tx", + txs: generateRandomlySizedTxs(1, 200), + }, + { + name: "one large tx", + txs: generateRandomlySizedTxs(1, 2000), + }, + { + name: "many large txs", + txs: generateRandomlySizedTxs(100, 2000), + }, } type startEndPoints struct { From 1452acf02d23d7802256c4c8402b060a5d2e6caa Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 16:05:21 -0400 Subject: [PATCH 27/38] remove unused helper, improve comments --- pkg/shares/split_compact_shares.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 3d0b6751b1..a153091de1 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -240,15 +240,15 @@ func (css *CompactShareSplitter) isEmptyPendingShare() bool { return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes } +// isPendingShareTheFirstShare returns true if the pending share is the first +// share of this compact share splitter and false otherwise. func (css *CompactShareSplitter) isPendingShareTheFirstShare() bool { return len(css.shares) == 0 } -// pendingShareDataLength returns the length of the data in the pending share. -func (css *CompactShareSplitter) pendingShareDataLength() uint64 { - // HACKHACK this pendingShareDataLength calculation is wrong if the pending share is the first share. - foo := uint64(len(css.pendingShare.Share) - appconsts.NamespaceSize - appconsts.ShareInfoBytes) - return foo +// isEmpty returns whether this compact share splitter is empty. +func (css *CompactShareSplitter) isEmpty() bool { + return len(css.shares) == 0 && css.isEmptyPendingShare() } // Count returns the current number of shares that will be made if exporting. From 4f38d3e12767247bf27fa036c5e5990f51fd8feb Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 16:10:52 -0400 Subject: [PATCH 28/38] use css.isEmpty() --- pkg/shares/split_compact_shares.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index a153091de1..cf725618bd 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -132,7 +132,7 @@ func (css *CompactShareSplitter) stackPending() { // Export finalizes and returns the underlying compact shares. func (css *CompactShareSplitter) Export() NamespacedShares { - if len(css.shares) == 0 && css.isEmptyPendingShare() { + if css.isEmpty() { return []NamespacedShare{} } @@ -182,7 +182,7 @@ func (css *CompactShareSplitter) forceLastShareReserveByteToZero() { // dataLengthVarint returns a varint of the data length written to this compact // share splitter. func (css *CompactShareSplitter) dataLengthVarint(bytesOfPadding int) []byte { - if len(css.shares) == 0 && css.isEmptyPendingShare() { + if css.isEmpty() { return []byte{} } @@ -195,7 +195,7 @@ func (css *CompactShareSplitter) dataLengthVarint(bytesOfPadding int) []byte { } func (css *CompactShareSplitter) writeDataLengthVarintToFirstShare(dataLengthVarint []byte) { - if len(css.shares) == 0 && css.isEmptyPendingShare() { + if css.isEmpty() { return } @@ -251,12 +251,9 @@ func (css *CompactShareSplitter) isEmpty() bool { return len(css.shares) == 0 && css.isEmptyPendingShare() } -// Count returns the current number of shares that will be made if exporting. +// Count returns the number of shares that would be made if `Export` was invoked +// on this compact share splitter. func (css *CompactShareSplitter) Count() (shareCount int) { - if len(css.shares) == 0 && css.isEmptyPendingShare() { - return 0 - } - if !css.isEmptyPendingShare() { // pending share is non-empty, so it will be zero padded and added to shares during export return len(css.shares) + 1 From 4fd8493fee157efa4376520979af068f2620e9b9 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 16:15:22 -0400 Subject: [PATCH 29/38] remove debug logging --- pkg/prove/proof_test.go | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/pkg/prove/proof_test.go b/pkg/prove/proof_test.go index c51baa7b3c..07417a3d7e 100644 --- a/pkg/prove/proof_test.go +++ b/pkg/prove/proof_test.go @@ -2,9 +2,7 @@ package prove import ( "bytes" - "fmt" "math/rand" - "strings" "testing" "github.com/celestiaorg/celestia-app/pkg/appconsts" @@ -124,13 +122,6 @@ func TestTxSharePosition(t *testing.T) { for i, pos := range positions { rawTx := []byte(tt.txs[i]) rawTxDataForRange := stripCompactShares(shares, pos.start, pos.end) - if !strings.Contains(string(rawTxDataForRange), string(rawTx)) { - fmt.Printf("txs: %#v\n", tt.txs) - fmt.Printf("shares: %#v\n", shares) - fmt.Printf("rawTx: %#v\n", rawTx) - fmt.Printf("rawTxDataForRange: %#v\n", rawTxDataForRange) - t.Fatalf("rawTxDataForRange does not contain rawTx") - } assert.Contains( t, string(rawTxDataForRange), @@ -167,8 +158,6 @@ func TestTxShareIndex(t *testing.T) { {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 80) + 247, 82}, // 82 compact shares + two bytes in last share {appconsts.FirstCompactShareContentSize + (appconsts.ContinuationCompactShareContentSize * 80) + 248, 82}, - {20079, 81}, - {20168, 81}, } for _, tt := range tests { @@ -234,13 +223,13 @@ func TestTxShareIndex(t *testing.T) { // assert.Equal(t, rawShares, genShares) // } -// stripCompactShares strips the universal prefix (namespace, info byte) and +// stripCompactShares strips the universal prefix (namespace, info byte, data length) and // reserved byte from a list of compact shares and joins them into a single byte // slice. func stripCompactShares(compactShares [][]byte, start uint64, end uint64) (result []byte) { for i := start; i <= end; i++ { if i == 0 { - // the first transaction share includes a total data length varint + // the first compact share includes a total data length varint result = append(result, compactShares[i][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes+appconsts.CompactShareReservedBytes:]...) } else { result = append(result, compactShares[i][appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareReservedBytes:]...) From 5b5d535cb85f2646beddd78ccf092a154c72f892 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 16:32:00 -0400 Subject: [PATCH 30/38] spin out txLen rename --- pkg/shares/parse_compact_shares.go | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/pkg/shares/parse_compact_shares.go b/pkg/shares/parse_compact_shares.go index 18c48dee41..be6c4691fd 100644 --- a/pkg/shares/parse_compact_shares.go +++ b/pkg/shares/parse_compact_shares.go @@ -49,22 +49,19 @@ func (ss *shareStack) resolve() ([][]byte, error) { return ss.data, err } -// peel recursively parses each unit of data (either a transaction, intermediate -// state root, or evidence) and adds it to the underlying slice of data. -// delimited should be `true` if this is the start of the next unit of data (in -// other words the data contains a unitLen delimiter prefixed to the unit). -// delimited should be `false` if calling peel on an in-progress unit. +// peel recursively parses each chunk of data (either a transaction, +// intermediate state root, or evidence) and adds it to the underlying slice of data. func (ss *shareStack) peel(share []byte, delimited bool) (err error) { if delimited { - var unitLen uint64 - share, unitLen, err = ParseDelimiter(share) + var txLen uint64 + share, txLen, err = ParseDelimiter(share) if err != nil { return err } - if unitLen == 0 { + if txLen == 0 { return nil } - ss.dataLen = unitLen + ss.dataLen = txLen } // safeLen describes the point in the share where it can be safely split. If // split beyond this point, it is possible to break apart a length From 83611138f32f8988a9e070cdef9892afb2e9efa0 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Wed, 28 Sep 2022 16:32:19 -0400 Subject: [PATCH 31/38] revert namespace rename --- pkg/shares/split_compact_shares.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index cf725618bd..0b38c3db29 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -292,7 +292,7 @@ func MarshalDelimitedTx(tx coretypes.Tx) ([]byte, error) { return append(lenBuf[:n], tx...), nil } -func namespacedPaddedShares(namespace []byte, count int) NamespacedShares { +func namespacedPaddedShares(ns []byte, count int) NamespacedShares { infoByte, err := NewInfoReservedByte(appconsts.ShareVersion, true) if err != nil { panic(err) @@ -301,10 +301,10 @@ func namespacedPaddedShares(namespace []byte, count int) NamespacedShares { for i := 0; i < count; i++ { shares[i] = NamespacedShare{ Share: append(append(append( - make([]byte, 0, appconsts.ShareSize), namespace...), + make([]byte, 0, appconsts.ShareSize), ns...), byte(infoByte)), make([]byte, appconsts.SparseShareContentSize)...), - ID: namespace, + ID: ns, } } return shares From fca6cd5034f80534ec946ec8a1ee9e264b1a4004 Mon Sep 17 00:00:00 2001 From: Rootul P Date: Thu, 29 Sep 2022 04:54:42 -0600 Subject: [PATCH 32/38] chore: move `zeroPadIfNecessary` to utils (#811) Addresses: https://github.com/celestiaorg/celestia-app/pull/810#discussion_r982671718 --- pkg/shares/parse_sparse_shares.go | 16 ---------------- pkg/shares/shares_test.go | 30 ------------------------------ pkg/shares/utils.go | 17 +++++++++++++++++ pkg/shares/utils_test.go | 30 ++++++++++++++++++++++++++++++ 4 files changed, 47 insertions(+), 46 deletions(-) diff --git a/pkg/shares/parse_sparse_shares.go b/pkg/shares/parse_sparse_shares.go index 5f6f0c0390..0f61f8b5e4 100644 --- a/pkg/shares/parse_sparse_shares.go +++ b/pkg/shares/parse_sparse_shares.go @@ -108,19 +108,3 @@ func ParseDelimiter(input []byte) (inputWithoutLengthDelimiter []byte, dataLengt // return the input without the length delimiter return input[n:], dataLen, nil } - -// zeroPadIfNecessary pads the share with trailing zero bytes if the provided -// share has fewer bytes than width. Returns the share unmodified if the -// len(share) is greater than or equal to width. -func zeroPadIfNecessary(share []byte, width int) (padded []byte, bytesOfPadding int) { - oldLen := len(share) - if oldLen >= width { - return share, 0 - } - - missingBytes := width - oldLen - padByte := []byte{0} - padding := bytes.Repeat(padByte, missingBytes) - share = append(share, padding...) - return share, missingBytes -} diff --git a/pkg/shares/shares_test.go b/pkg/shares/shares_test.go index 2901f59764..b72d8883e7 100644 --- a/pkg/shares/shares_test.go +++ b/pkg/shares/shares_test.go @@ -4,7 +4,6 @@ import ( "context" "math" "math/rand" - "reflect" "testing" "time" @@ -170,35 +169,6 @@ import ( // } // } -func Test_zeroPadIfNecessary(t *testing.T) { - type args struct { - share []byte - width int - } - tests := []struct { - name string - args args - wantPadded []byte - wantBytesOfPadding int - }{ - {"pad", args{[]byte{1, 2, 3}, 6}, []byte{1, 2, 3, 0, 0, 0}, 3}, - {"not necessary (equal to shareSize)", args{[]byte{1, 2, 3}, 3}, []byte{1, 2, 3}, 0}, - {"not necessary (greater shareSize)", args{[]byte{1, 2, 3}, 2}, []byte{1, 2, 3}, 0}, - } - for _, tt := range tests { - tt := tt // stupid scopelint :-/ - t.Run(tt.name, func(t *testing.T) { - gotPadded, gotBytesOfPadding := zeroPadIfNecessary(tt.args.share, tt.args.width) - if !reflect.DeepEqual(gotPadded, tt.wantPadded) { - t.Errorf("zeroPadIfNecessary gotPadded %v, wantPadded %v", gotPadded, tt.wantPadded) - } - if gotBytesOfPadding != tt.wantBytesOfPadding { - t.Errorf("zeroPadIfNecessary gotBytesOfPadding %v, wantBytesOfPadding %v", gotBytesOfPadding, tt.wantBytesOfPadding) - } - }) - } -} - func TestMerge(t *testing.T) { type test struct { name string diff --git a/pkg/shares/utils.go b/pkg/shares/utils.go index 70af827d7a..d9e9d0401b 100644 --- a/pkg/shares/utils.go +++ b/pkg/shares/utils.go @@ -1,6 +1,7 @@ package shares import ( + "bytes" "encoding/binary" "github.com/celestiaorg/celestia-app/pkg/appconsts" @@ -76,3 +77,19 @@ func TxsFromBytes(txs [][]byte) coretypes.Txs { } return e } + +// zeroPadIfNecessary pads the share with trailing zero bytes if the provided +// share has fewer bytes than width. Returns the share unmodified if the +// len(share) is greater than or equal to width. +func zeroPadIfNecessary(share []byte, width int) (padded []byte, bytesOfPadding int) { + oldLen := len(share) + if oldLen >= width { + return share, 0 + } + + missingBytes := width - oldLen + padByte := []byte{0} + padding := bytes.Repeat(padByte, missingBytes) + share = append(share, padding...) + return share, missingBytes +} diff --git a/pkg/shares/utils_test.go b/pkg/shares/utils_test.go index 348f46409d..a929b09981 100644 --- a/pkg/shares/utils_test.go +++ b/pkg/shares/utils_test.go @@ -1,6 +1,7 @@ package shares import ( + "reflect" "testing" "github.com/stretchr/testify/require" @@ -20,3 +21,32 @@ func FuzzMsgSharesUsed(f *testing.F) { require.Equal(t, len(rawShares), ml) }) } + +func Test_zeroPadIfNecessary(t *testing.T) { + type args struct { + share []byte + width int + } + tests := []struct { + name string + args args + wantPadded []byte + wantBytesOfPadding int + }{ + {"pad", args{[]byte{1, 2, 3}, 6}, []byte{1, 2, 3, 0, 0, 0}, 3}, + {"not necessary (equal to shareSize)", args{[]byte{1, 2, 3}, 3}, []byte{1, 2, 3}, 0}, + {"not necessary (greater shareSize)", args{[]byte{1, 2, 3}, 2}, []byte{1, 2, 3}, 0}, + } + for _, tt := range tests { + tt := tt // stupid scopelint :-/ + t.Run(tt.name, func(t *testing.T) { + gotPadded, gotBytesOfPadding := zeroPadIfNecessary(tt.args.share, tt.args.width) + if !reflect.DeepEqual(gotPadded, tt.wantPadded) { + t.Errorf("zeroPadIfNecessary gotPadded %v, wantPadded %v", gotPadded, tt.wantPadded) + } + if gotBytesOfPadding != tt.wantBytesOfPadding { + t.Errorf("zeroPadIfNecessary gotBytesOfPadding %v, wantBytesOfPadding %v", gotBytesOfPadding, tt.wantBytesOfPadding) + } + }) + } +} From 537d0917a456801b0701162358a4cf05cd89d534 Mon Sep 17 00:00:00 2001 From: Rootul P Date: Thu, 29 Sep 2022 05:02:27 -0600 Subject: [PATCH 33/38] Rename `InfoReservedByte` to `InfoByte` (#805) Closes https://github.com/celestiaorg/celestia-app/issues/787 --- pkg/shares/compact_shares_test.go | 4 ++-- .../{info_reserved_byte.go => info_byte.go} | 20 +++++++++---------- ...eserved_byte_test.go => info_byte_test.go} | 16 +++++++-------- pkg/shares/parse_compact_shares.go | 2 +- pkg/shares/parse_sparse_shares.go | 2 +- pkg/shares/sparse_shares_test.go | 4 ++-- pkg/shares/split_compact_shares.go | 8 ++++---- pkg/shares/split_sparse_shares.go | 6 +++--- 8 files changed, 31 insertions(+), 31 deletions(-) rename pkg/shares/{info_reserved_byte.go => info_byte.go} (57%) rename pkg/shares/{info_reserved_byte_test.go => info_byte_test.go} (82%) diff --git a/pkg/shares/compact_shares_test.go b/pkg/shares/compact_shares_test.go index 7978f956f8..4b6c9336a7 100644 --- a/pkg/shares/compact_shares_test.go +++ b/pkg/shares/compact_shares_test.go @@ -137,7 +137,7 @@ func TestCompactShareContainsInfoByte(t *testing.T) { infoByte := shares[0][appconsts.NamespaceSize : appconsts.NamespaceSize+appconsts.ShareInfoBytes][0] isMessageStart := true - want, err := NewInfoReservedByte(appconsts.ShareVersion, isMessageStart) + want, err := NewInfoByte(appconsts.ShareVersion, isMessageStart) require.NoError(t, err) assert.Equal(t, byte(want), infoByte) @@ -157,7 +157,7 @@ func TestContiguousCompactShareContainsInfoByte(t *testing.T) { infoByte := shares[1][appconsts.NamespaceSize : appconsts.NamespaceSize+appconsts.ShareInfoBytes][0] isMessageStart := false - want, err := NewInfoReservedByte(appconsts.ShareVersion, isMessageStart) + want, err := NewInfoByte(appconsts.ShareVersion, isMessageStart) require.NoError(t, err) assert.Equal(t, byte(want), infoByte) diff --git a/pkg/shares/info_reserved_byte.go b/pkg/shares/info_byte.go similarity index 57% rename from pkg/shares/info_reserved_byte.go rename to pkg/shares/info_byte.go index a52a81dd84..186ea96979 100644 --- a/pkg/shares/info_reserved_byte.go +++ b/pkg/shares/info_byte.go @@ -6,38 +6,38 @@ import ( "github.com/celestiaorg/celestia-app/pkg/appconsts" ) -// InfoReservedByte is a byte with the following structure: the first 7 bits are +// InfoByte is a byte with the following structure: the first 7 bits are // reserved for version information in big endian form (initially `0000000`). // The last bit is a "message start indicator", that is `1` if the share is at // the start of a message and `0` otherwise. -type InfoReservedByte byte +type InfoByte byte -func NewInfoReservedByte(version uint8, isMessageStart bool) (InfoReservedByte, error) { +func NewInfoByte(version uint8, isMessageStart bool) (InfoByte, error) { if version > appconsts.MaxShareVersion { return 0, fmt.Errorf("version %d must be less than or equal to %d", version, appconsts.MaxShareVersion) } prefix := version << 1 if isMessageStart { - return InfoReservedByte(prefix + 1), nil + return InfoByte(prefix + 1), nil } - return InfoReservedByte(prefix), nil + return InfoByte(prefix), nil } -// Version returns the version encoded in this InfoReservedByte. Version is +// Version returns the version encoded in this InfoByte. Version is // expected to be between 0 and appconsts.MaxShareVersion (inclusive). -func (i InfoReservedByte) Version() uint8 { +func (i InfoByte) Version() uint8 { version := uint8(i) >> 1 return version } // IsMessageStart returns whether this share is the start of a message. -func (i InfoReservedByte) IsMessageStart() bool { +func (i InfoByte) IsMessageStart() bool { return uint(i)%2 == 1 } -func ParseInfoReservedByte(i byte) (InfoReservedByte, error) { +func ParseInfoByte(i byte) (InfoByte, error) { isMessageStart := i%2 == 1 version := uint8(i) >> 1 - return NewInfoReservedByte(version, isMessageStart) + return NewInfoByte(version, isMessageStart) } diff --git a/pkg/shares/info_reserved_byte_test.go b/pkg/shares/info_byte_test.go similarity index 82% rename from pkg/shares/info_reserved_byte_test.go rename to pkg/shares/info_byte_test.go index 00350189c8..c167553a64 100644 --- a/pkg/shares/info_reserved_byte_test.go +++ b/pkg/shares/info_byte_test.go @@ -2,7 +2,7 @@ package shares import "testing" -func TestInfoReservedByte(t *testing.T) { +func TestInfoByte(t *testing.T) { messageStart := true notMessageStart := false @@ -23,7 +23,7 @@ func TestInfoReservedByte(t *testing.T) { } for _, test := range tests { - irb, err := NewInfoReservedByte(test.version, test.isMessageStart) + irb, err := NewInfoByte(test.version, test.isMessageStart) if err != nil { t.Errorf("got %v want no error", err) } @@ -36,7 +36,7 @@ func TestInfoReservedByte(t *testing.T) { } } -func TestInfoReservedByteErrors(t *testing.T) { +func TestInfoByteErrors(t *testing.T) { messageStart := true notMessageStart := false @@ -53,26 +53,26 @@ func TestInfoReservedByteErrors(t *testing.T) { } for _, test := range tests { - _, err := NewInfoReservedByte(test.version, false) + _, err := NewInfoByte(test.version, false) if err == nil { t.Errorf("got nil but want error when version > 127") } } } -func FuzzNewInfoReservedByte(f *testing.F) { +func FuzzNewInfoByte(f *testing.F) { f.Fuzz(func(t *testing.T, version uint8, isMessageStart bool) { if version > 127 { t.Skip() } - _, err := NewInfoReservedByte(version, isMessageStart) + _, err := NewInfoByte(version, isMessageStart) if err != nil { t.Errorf("got nil but want error when version > 127") } }) } -func TestParseInfoReservedByte(t *testing.T) { +func TestParseInfoByte(t *testing.T) { type testCase struct { b byte wantVersion uint8 @@ -89,7 +89,7 @@ func TestParseInfoReservedByte(t *testing.T) { } for _, test := range tests { - got, err := ParseInfoReservedByte(test.b) + got, err := ParseInfoByte(test.b) if err != nil { t.Errorf("got %v want no error", err) } diff --git a/pkg/shares/parse_compact_shares.go b/pkg/shares/parse_compact_shares.go index be6c4691fd..c9b1e76726 100644 --- a/pkg/shares/parse_compact_shares.go +++ b/pkg/shares/parse_compact_shares.go @@ -38,7 +38,7 @@ func (ss *shareStack) resolve() ([][]byte, error) { if len(ss.shares) == 0 { return nil, nil } - infoByte, err := ParseInfoReservedByte(ss.shares[0][appconsts.NamespaceSize : appconsts.NamespaceSize+appconsts.ShareInfoBytes][0]) + infoByte, err := ParseInfoByte(ss.shares[0][appconsts.NamespaceSize : appconsts.NamespaceSize+appconsts.ShareInfoBytes][0]) if err != nil { panic(err) } diff --git a/pkg/shares/parse_sparse_shares.go b/pkg/shares/parse_sparse_shares.go index 0f61f8b5e4..c048d707cf 100644 --- a/pkg/shares/parse_sparse_shares.go +++ b/pkg/shares/parse_sparse_shares.go @@ -45,7 +45,7 @@ func parseSparseShares(shares [][]byte) ([]coretypes.Message, error) { } currentMsgLen = int(nextMsgLen) nid := shares[i][:appconsts.NamespaceSize] - infoByte, err := ParseInfoReservedByte(shares[i][appconsts.NamespaceSize : appconsts.NamespaceSize+appconsts.ShareInfoBytes][0]) + infoByte, err := ParseInfoByte(shares[i][appconsts.NamespaceSize : appconsts.NamespaceSize+appconsts.ShareInfoBytes][0]) if err != nil { panic(err) } diff --git a/pkg/shares/sparse_shares_test.go b/pkg/shares/sparse_shares_test.go index 8a8a025c28..1b14975bf6 100644 --- a/pkg/shares/sparse_shares_test.go +++ b/pkg/shares/sparse_shares_test.go @@ -109,7 +109,7 @@ func TestMsgShareContainsInfoByte(t *testing.T) { got := shares[0][appconsts.NamespaceSize : appconsts.NamespaceSize+appconsts.ShareInfoBytes][0] isMessageStart := true - want, err := NewInfoReservedByte(appconsts.ShareVersion, isMessageStart) + want, err := NewInfoByte(appconsts.ShareVersion, isMessageStart) require.NoError(t, err) assert.Equal(t, byte(want), got) @@ -127,7 +127,7 @@ func TestContiguousMsgShareContainsInfoByte(t *testing.T) { got := shares[1][appconsts.NamespaceSize : appconsts.NamespaceSize+appconsts.ShareInfoBytes][0] isMessageStart := false - want, err := NewInfoReservedByte(appconsts.ShareVersion, isMessageStart) + want, err := NewInfoByte(appconsts.ShareVersion, isMessageStart) require.NoError(t, err) assert.Equal(t, byte(want), got) diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 0b38c3db29..8fb53ace69 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -25,7 +25,7 @@ type CompactShareSplitter struct { // namespace. func NewCompactShareSplitter(ns namespace.ID, version uint8) *CompactShareSplitter { pendingShare := NamespacedShare{ID: ns, Share: make([]byte, 0, appconsts.ShareSize)} - infoByte, err := NewInfoReservedByte(version, true) + infoByte, err := NewInfoByte(version, true) if err != nil { panic(err) } @@ -119,7 +119,7 @@ func (css *CompactShareSplitter) stackPending() { css.shares = append(css.shares, css.pendingShare) newPendingShare := make([]byte, 0, appconsts.ShareSize) newPendingShare = append(newPendingShare, css.namespace...) - infoByte, err := NewInfoReservedByte(css.version, false) + infoByte, err := NewInfoByte(css.version, false) if err != nil { panic(err) } @@ -261,7 +261,7 @@ func (css *CompactShareSplitter) Count() (shareCount int) { return len(css.shares) } -var tailPaddingInfo, _ = NewInfoReservedByte(appconsts.ShareVersion, false) +var tailPaddingInfo, _ = NewInfoByte(appconsts.ShareVersion, false) // tail is filler for all tail padded shares // it is allocated once and used everywhere @@ -293,7 +293,7 @@ func MarshalDelimitedTx(tx coretypes.Tx) ([]byte, error) { } func namespacedPaddedShares(ns []byte, count int) NamespacedShares { - infoByte, err := NewInfoReservedByte(appconsts.ShareVersion, true) + infoByte, err := NewInfoByte(appconsts.ShareVersion, true) if err != nil { panic(err) } diff --git a/pkg/shares/split_sparse_shares.go b/pkg/shares/split_sparse_shares.go index 8aa333f872..8bcc906245 100644 --- a/pkg/shares/split_sparse_shares.go +++ b/pkg/shares/split_sparse_shares.go @@ -94,7 +94,7 @@ func (sss *SparseShareSplitter) Count() int { // Used for messages. func AppendToShares(shares []NamespacedShare, nid namespace.ID, rawData []byte) []NamespacedShare { if len(rawData) <= appconsts.SparseShareContentSize { - infoByte, err := NewInfoReservedByte(appconsts.ShareVersion, true) + infoByte, err := NewInfoByte(appconsts.ShareVersion, true) if err != nil { panic(err) } @@ -127,7 +127,7 @@ func MarshalDelimitedMessage(msg coretypes.Message) ([]byte, error) { // namespaced shares func splitMessage(rawData []byte, nid namespace.ID) NamespacedShares { shares := make([]NamespacedShare, 0) - infoByte, err := NewInfoReservedByte(appconsts.ShareVersion, true) + infoByte, err := NewInfoByte(appconsts.ShareVersion, true) if err != nil { panic(err) } @@ -141,7 +141,7 @@ func splitMessage(rawData []byte, nid namespace.ID) NamespacedShares { rawData = rawData[appconsts.SparseShareContentSize:] for len(rawData) > 0 { shareSizeOrLen := min(appconsts.SparseShareContentSize, len(rawData)) - infoByte, err := NewInfoReservedByte(appconsts.ShareVersion, false) + infoByte, err := NewInfoByte(appconsts.ShareVersion, false) if err != nil { panic(err) } From c650400eb1999d1a836f1fa6b9f3e36e05133cd3 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Thu, 29 Sep 2022 11:41:42 -0400 Subject: [PATCH 34/38] test: transaction splitting (#813) Define unit tests for transaction splitting. These should be helpful when we tackle https://github.com/celestiaorg/celestia-app/issues/802 --- pkg/shares/share_splitting_test.go | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index 2705fa71ac..dbf1da8fca 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -26,12 +26,20 @@ func TestSplitTxs(t *testing.T) { want: [][]uint8{ append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id +<<<<<<< HEAD 0x1, // info byte 0x2, 0x0, 0x0, 0x0, // 1 byte (unit) + 1 byte (unit length) = 2 bytes message length 0x0, // BUG: reserved byte should be non-zero 0x1, // unit length of first transaction 0xa, // data of first transaction }, bytes.Repeat([]byte{0}, 240)...), // padding +======= + 0x1, // info byte + 0x0, // reserved byte + 0x1, // unit length of first transaction + 0xa, // data of first transaction + }, bytes.Repeat([]byte{0}, 244)...), // padding +>>>>>>> 5dc1fb8 (test: transaction splitting (#813)) }, }, { @@ -40,18 +48,28 @@ func TestSplitTxs(t *testing.T) { want: [][]uint8{ append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id +<<<<<<< HEAD 0x1, // info byte 0x4, 0x0, 0x0, 0x0, // 2 bytes (first transaction) + 2 bytes (second transaction) = 4 bytes message length 0x0, // BUG: reserved byte should be non-zero +======= + 0x1, // info byte + 0x0, // reserved byte +>>>>>>> 5dc1fb8 (test: transaction splitting (#813)) 0x1, // unit length of first transaction 0xa, // data of first transaction 0x1, // unit length of second transaction 0xb, // data of second transaction +<<<<<<< HEAD }, bytes.Repeat([]byte{0}, 238)...), // padding +======= + }, bytes.Repeat([]byte{0}, 242)...), // padding +>>>>>>> 5dc1fb8 (test: transaction splitting (#813)) }, }, { name: "one large tx that spans two shares", +<<<<<<< HEAD txs: coretypes.Txs{bytes.Repeat([]byte{0xC}, 241)}, want: [][]uint8{ append([]uint8{ @@ -61,6 +79,16 @@ func TestSplitTxs(t *testing.T) { 0x0, // BUG: reserved byte should be non-zero 241, 1, // unit length of first transaction is 241 }, bytes.Repeat([]byte{0xc}, 240)...), // data of first transaction +======= + txs: coretypes.Txs{bytes.Repeat([]byte{0xC}, 245)}, + want: [][]uint8{ + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x1, // info byte + 0x0, // BUG reserved byte should be non-zero see https://github.com/celestiaorg/celestia-app/issues/802 + 245, 1, // unit length of first transaction is 245 + }, bytes.Repeat([]byte{0xc}, 244)...), // data of first transaction +>>>>>>> 5dc1fb8 (test: transaction splitting (#813)) append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x0, // info byte @@ -71,6 +99,7 @@ func TestSplitTxs(t *testing.T) { }, { name: "one small tx then one large tx that spans two shares", +<<<<<<< HEAD txs: coretypes.Txs{coretypes.Tx{0xd}, bytes.Repeat([]byte{0xe}, 241)}, want: [][]uint8{ append([]uint8{ @@ -88,6 +117,24 @@ func TestSplitTxs(t *testing.T) { 0x0, // reserved byte 0xe, 0xe, 0xe, // continuation data of second transaction }, bytes.Repeat([]byte{0x0}, 243)...), // padding +======= + txs: coretypes.Txs{coretypes.Tx{0xd}, bytes.Repeat([]byte{0xe}, 243)}, + want: [][]uint8{ + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x1, // info byte + 0x0, // BUG reserved byte should be non-zero see https://github.com/celestiaorg/celestia-app/issues/802 + 1, // unit length of first transaction + 0xd, // data of first transaction + 243, 1, // unit length of second transaction is 243 + }, bytes.Repeat([]byte{0xe}, 242)...), // data of first transaction + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x0, // info byte + 0x0, // reserved byte + 0xe, // continuation data of second transaction + }, bytes.Repeat([]byte{0x0}, 245)...), // padding +>>>>>>> 5dc1fb8 (test: transaction splitting (#813)) }, }, } From c02ef12c162f8c84b22a5e86994f383f943e84eb Mon Sep 17 00:00:00 2001 From: Rootul P Date: Thu, 29 Sep 2022 08:54:20 -0600 Subject: [PATCH 35/38] chore: rename txLen to unitLen (#814) Spun out of https://github.com/celestiaorg/celestia-app/pull/781 --- pkg/shares/parse_compact_shares.go | 15 ++++++---- pkg/shares/share_splitting_test.go | 47 ------------------------------ 2 files changed, 9 insertions(+), 53 deletions(-) diff --git a/pkg/shares/parse_compact_shares.go b/pkg/shares/parse_compact_shares.go index c9b1e76726..5e0974dc3b 100644 --- a/pkg/shares/parse_compact_shares.go +++ b/pkg/shares/parse_compact_shares.go @@ -49,19 +49,22 @@ func (ss *shareStack) resolve() ([][]byte, error) { return ss.data, err } -// peel recursively parses each chunk of data (either a transaction, -// intermediate state root, or evidence) and adds it to the underlying slice of data. +// peel recursively parses each unit of data (either a transaction, intermediate +// state root, or evidence) and adds it to the underlying slice of data. +// delimited should be `true` if this is the start of the next unit of data (in +// other words the data contains a unitLen delimiter prefixed to the unit). +// delimited should be `false` if calling peel on an in-progress unit. func (ss *shareStack) peel(share []byte, delimited bool) (err error) { if delimited { - var txLen uint64 - share, txLen, err = ParseDelimiter(share) + var unitLen uint64 + share, unitLen, err = ParseDelimiter(share) if err != nil { return err } - if txLen == 0 { + if unitLen == 0 { return nil } - ss.dataLen = txLen + ss.dataLen = unitLen } // safeLen describes the point in the share where it can be safely split. If // split beyond this point, it is possible to break apart a length diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index dbf1da8fca..2705fa71ac 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -26,20 +26,12 @@ func TestSplitTxs(t *testing.T) { want: [][]uint8{ append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id -<<<<<<< HEAD 0x1, // info byte 0x2, 0x0, 0x0, 0x0, // 1 byte (unit) + 1 byte (unit length) = 2 bytes message length 0x0, // BUG: reserved byte should be non-zero 0x1, // unit length of first transaction 0xa, // data of first transaction }, bytes.Repeat([]byte{0}, 240)...), // padding -======= - 0x1, // info byte - 0x0, // reserved byte - 0x1, // unit length of first transaction - 0xa, // data of first transaction - }, bytes.Repeat([]byte{0}, 244)...), // padding ->>>>>>> 5dc1fb8 (test: transaction splitting (#813)) }, }, { @@ -48,28 +40,18 @@ func TestSplitTxs(t *testing.T) { want: [][]uint8{ append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id -<<<<<<< HEAD 0x1, // info byte 0x4, 0x0, 0x0, 0x0, // 2 bytes (first transaction) + 2 bytes (second transaction) = 4 bytes message length 0x0, // BUG: reserved byte should be non-zero -======= - 0x1, // info byte - 0x0, // reserved byte ->>>>>>> 5dc1fb8 (test: transaction splitting (#813)) 0x1, // unit length of first transaction 0xa, // data of first transaction 0x1, // unit length of second transaction 0xb, // data of second transaction -<<<<<<< HEAD }, bytes.Repeat([]byte{0}, 238)...), // padding -======= - }, bytes.Repeat([]byte{0}, 242)...), // padding ->>>>>>> 5dc1fb8 (test: transaction splitting (#813)) }, }, { name: "one large tx that spans two shares", -<<<<<<< HEAD txs: coretypes.Txs{bytes.Repeat([]byte{0xC}, 241)}, want: [][]uint8{ append([]uint8{ @@ -79,16 +61,6 @@ func TestSplitTxs(t *testing.T) { 0x0, // BUG: reserved byte should be non-zero 241, 1, // unit length of first transaction is 241 }, bytes.Repeat([]byte{0xc}, 240)...), // data of first transaction -======= - txs: coretypes.Txs{bytes.Repeat([]byte{0xC}, 245)}, - want: [][]uint8{ - append([]uint8{ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id - 0x1, // info byte - 0x0, // BUG reserved byte should be non-zero see https://github.com/celestiaorg/celestia-app/issues/802 - 245, 1, // unit length of first transaction is 245 - }, bytes.Repeat([]byte{0xc}, 244)...), // data of first transaction ->>>>>>> 5dc1fb8 (test: transaction splitting (#813)) append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x0, // info byte @@ -99,7 +71,6 @@ func TestSplitTxs(t *testing.T) { }, { name: "one small tx then one large tx that spans two shares", -<<<<<<< HEAD txs: coretypes.Txs{coretypes.Tx{0xd}, bytes.Repeat([]byte{0xe}, 241)}, want: [][]uint8{ append([]uint8{ @@ -117,24 +88,6 @@ func TestSplitTxs(t *testing.T) { 0x0, // reserved byte 0xe, 0xe, 0xe, // continuation data of second transaction }, bytes.Repeat([]byte{0x0}, 243)...), // padding -======= - txs: coretypes.Txs{coretypes.Tx{0xd}, bytes.Repeat([]byte{0xe}, 243)}, - want: [][]uint8{ - append([]uint8{ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id - 0x1, // info byte - 0x0, // BUG reserved byte should be non-zero see https://github.com/celestiaorg/celestia-app/issues/802 - 1, // unit length of first transaction - 0xd, // data of first transaction - 243, 1, // unit length of second transaction is 243 - }, bytes.Repeat([]byte{0xe}, 242)...), // data of first transaction - append([]uint8{ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id - 0x0, // info byte - 0x0, // reserved byte - 0xe, // continuation data of second transaction - }, bytes.Repeat([]byte{0x0}, 245)...), // padding ->>>>>>> 5dc1fb8 (test: transaction splitting (#813)) }, }, } From 2ee86a4a1591fec8fe5b2cb9e1644485b7e54178 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Thu, 29 Sep 2022 14:43:54 -0400 Subject: [PATCH 36/38] feat!: stop forcing reserved byte to zero Closes https://github.com/celestiaorg/celestia-app/issues/779 --- pkg/shares/share_splitting_test.go | 4 ++-- pkg/shares/split_compact_shares.go | 31 ------------------------------ 2 files changed, 2 insertions(+), 33 deletions(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index 2705fa71ac..d5d7fcfbd2 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -64,7 +64,7 @@ func TestSplitTxs(t *testing.T) { append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x0, // info byte - 0x0, // reserved byte + 0xb, // BUG: reserved byte should be zero 0xc, // continuation data of first transaction }, bytes.Repeat([]byte{0x0}, 245)...), // padding }, @@ -85,7 +85,7 @@ func TestSplitTxs(t *testing.T) { append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x0, // info byte - 0x0, // reserved byte + 0xd, // BUG: reserved byte should be zero 0xe, 0xe, 0xe, // continuation data of second transaction }, bytes.Repeat([]byte{0x0}, 243)...), // padding }, diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index 8fb53ace69..bf55a304a9 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -145,40 +145,9 @@ func (css *CompactShareSplitter) Export() NamespacedShares { dataLengthVarint := css.dataLengthVarint(bytesOfPadding) css.writeDataLengthVarintToFirstShare(dataLengthVarint) - css.forceLastShareReserveByteToZero() return css.shares } -// forceLastShareReserveByteToZero overwrites the reserve byte of the last share -// with zero. See https://github.com/celestiaorg/celestia-app/issues/779 -func (css *CompactShareSplitter) forceLastShareReserveByteToZero() { - if len(css.shares) == 0 { - return - } - lastShare := css.shares[len(css.shares)-1] - rawLastShare := lastShare.Data() - - for i := 0; i < appconsts.CompactShareReservedBytes; i++ { - // here we force the last share reserved byte to be zero to avoid any - // confusion for light clients parsing these shares, as the rest of the - // data after transaction is padding. See - // https://github.com/celestiaorg/celestia-specs/blob/master/src/specs/data_structures.md#share - if len(css.shares) == 1 { - // the reserved byte is after the namespace, info byte, and data length varint - rawLastShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes+i] = byte(0) - } else { - // the reserved byte is after the namespace, info byte - rawLastShare[appconsts.NamespaceSize+appconsts.ShareInfoBytes+i] = byte(0) - } - } - - newLastShare := NamespacedShare{ - Share: rawLastShare, - ID: lastShare.NamespaceID(), - } - css.shares[len(css.shares)-1] = newLastShare -} - // dataLengthVarint returns a varint of the data length written to this compact // share splitter. func (css *CompactShareSplitter) dataLengthVarint(bytesOfPadding int) []byte { From dbe60c766b61990cdf48cbe1d60ee13cf75afc85 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Thu, 29 Sep 2022 15:56:22 -0400 Subject: [PATCH 37/38] fix: reserved byte for existing test cases --- pkg/shares/share_splitting_test.go | 14 +++---- pkg/shares/split_compact_shares.go | 66 +++++++++++++++++++----------- 2 files changed, 49 insertions(+), 31 deletions(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index d5d7fcfbd2..18d83a7a60 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -28,7 +28,7 @@ func TestSplitTxs(t *testing.T) { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte 0x2, 0x0, 0x0, 0x0, // 1 byte (unit) + 1 byte (unit length) = 2 bytes message length - 0x0, // BUG: reserved byte should be non-zero + 14, // reserved byte 0x1, // unit length of first transaction 0xa, // data of first transaction }, bytes.Repeat([]byte{0}, 240)...), // padding @@ -42,7 +42,7 @@ func TestSplitTxs(t *testing.T) { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte 0x4, 0x0, 0x0, 0x0, // 2 bytes (first transaction) + 2 bytes (second transaction) = 4 bytes message length - 0x0, // BUG: reserved byte should be non-zero + 14, // reserved byte 0x1, // unit length of first transaction 0xa, // data of first transaction 0x1, // unit length of second transaction @@ -58,13 +58,13 @@ func TestSplitTxs(t *testing.T) { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte 243, 1, 0, 0, // 241 (unit) + 2 (unit length) = 243 message length - 0x0, // BUG: reserved byte should be non-zero + 14, // reserved byte 241, 1, // unit length of first transaction is 241 }, bytes.Repeat([]byte{0xc}, 240)...), // data of first transaction append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x0, // info byte - 0xb, // BUG: reserved byte should be zero + 0x0, // reserved byte 0xc, // continuation data of first transaction }, bytes.Repeat([]byte{0x0}, 245)...), // padding }, @@ -77,7 +77,7 @@ func TestSplitTxs(t *testing.T) { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x1, // info byte 245, 1, 0, 0, // 2 bytes (first transaction) + 243 bytes (second transaction) = 245 bytes message length - 0x0, // BUG: reserved byte should be non-zero + 14, // reserved byte 1, // unit length of first transaction 0xd, // data of first transaction 241, 1, // unit length of second transaction is 241 @@ -85,7 +85,7 @@ func TestSplitTxs(t *testing.T) { append([]uint8{ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id 0x0, // info byte - 0xd, // BUG: reserved byte should be zero + 0x0, // reserved byte 0xe, 0xe, 0xe, // continuation data of second transaction }, bytes.Repeat([]byte{0x0}, 243)...), // padding }, @@ -95,7 +95,7 @@ func TestSplitTxs(t *testing.T) { t.Run(tt.name, func(t *testing.T) { got := SplitTxs(tt.txs) if !reflect.DeepEqual(got, tt.want) { - t.Errorf("SplitTxs(%#v) got %#v, want %#v", tt.txs, got, tt.want) + t.Errorf("SplitTxs()\n got %#v\n want %#v", got, tt.want) } }) } diff --git a/pkg/shares/split_compact_shares.go b/pkg/shares/split_compact_shares.go index bf55a304a9..7cb6f9ed09 100644 --- a/pkg/shares/split_compact_shares.go +++ b/pkg/shares/split_compact_shares.go @@ -30,9 +30,12 @@ func NewCompactShareSplitter(ns namespace.ID, version uint8) *CompactShareSplitt panic(err) } placeholderDataLength := make([]byte, appconsts.FirstCompactShareDataLengthBytes) + placeholderReservedBytes := make([]byte, appconsts.CompactShareReservedBytes) + pendingShare.Share = append(pendingShare.Share, ns...) pendingShare.Share = append(pendingShare.Share, byte(infoByte)) pendingShare.Share = append(pendingShare.Share, placeholderDataLength...) + pendingShare.Share = append(pendingShare.Share, placeholderReservedBytes...) return &CompactShareSplitter{pendingShare: pendingShare, namespace: ns} } @@ -59,12 +62,7 @@ func (css *CompactShareSplitter) WriteEvidence(evd coretypes.Evidence) error { // WriteBytes adds the delimited data to the underlying compact shares. func (css *CompactShareSplitter) WriteBytes(rawData []byte) { - // if this is the first time writing to a pending share, we must add the - // reserved bytes - if css.isEmptyPendingShare() { - reservedBytes := make([]byte, appconsts.CompactShareReservedBytes) - css.pendingShare.Share = append(css.pendingShare.Share, reservedBytes...) - } + css.maybeWriteReservedByteToPendingShare() txCursor := len(rawData) for txCursor != 0 { @@ -87,22 +85,6 @@ func (css *CompactShareSplitter) WriteBytes(rawData []byte) { // update the cursor rawData = rawData[pendingLeft:] txCursor = len(rawData) - - // add the share reserved bytes to the new pending share - pendingCursor := len(rawData) + appconsts.NamespaceSize + appconsts.ShareInfoBytes + appconsts.CompactShareReservedBytes - reservedBytes := make([]byte, appconsts.CompactShareReservedBytes) - if pendingCursor >= appconsts.ShareSize { - // the share reserve byte is zero when some compactly written - // data takes up the entire share - for i := range reservedBytes { - reservedBytes[i] = byte(0) - } - } else { - // TODO this must be changed when share size is increased to 512 - reservedBytes[0] = byte(pendingCursor) - } - - css.pendingShare.Share = append(css.pendingShare.Share, reservedBytes...) } // if the share is exactly the correct size, then append to shares @@ -123,7 +105,9 @@ func (css *CompactShareSplitter) stackPending() { if err != nil { panic(err) } + placeholderReservedBytes := make([]byte, appconsts.CompactShareReservedBytes) newPendingShare = append(newPendingShare, byte(infoByte)) + newPendingShare = append(newPendingShare, placeholderReservedBytes...) css.pendingShare = NamespacedShare{ Share: newPendingShare, ID: css.namespace, @@ -183,6 +167,40 @@ func (css *CompactShareSplitter) writeDataLengthVarintToFirstShare(dataLengthVar css.shares[0] = newFirstShare } +// maybeWriteReservedByteToPendingShare will be a no-op if the reserved byte has +// already been populated. If the reserved byte is empty, it will write the +// location of the next unit of data to the reserved byte. +func (css *CompactShareSplitter) maybeWriteReservedByteToPendingShare() { + if !css.isEmptyReservedByte() { + return + } + + locationOfNextUnit := len(css.pendingShare.Share) + if locationOfNextUnit >= appconsts.ShareSize { + panic(fmt.Sprintf("location of next unit %v is greater than or equal to the share size %v", locationOfNextUnit, appconsts.ShareSize)) + } + + // write the location of next unit to the reserved byte of the pending share + if css.isPendingShareTheFirstShare() { + css.pendingShare.Share[appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes : appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareContentSize+appconsts.CompactShareReservedBytes][0] = byte(locationOfNextUnit) + } else { + css.pendingShare.Share[appconsts.NamespaceSize+appconsts.ShareInfoBytes : appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareReservedBytes][0] = byte(locationOfNextUnit) + } +} + +// isEmptyReservedByte returns true if the reserved byte is empty. +func (css *CompactShareSplitter) isEmptyReservedByte() bool { + var reservedByte byte + + if css.isPendingShareTheFirstShare() { + reservedByte = css.pendingShare.Share[appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes : appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareContentSize+appconsts.CompactShareReservedBytes][0] + } else { + reservedByte = css.pendingShare.Share[appconsts.NamespaceSize+appconsts.ShareInfoBytes : appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareReservedBytes][0] + } + + return reservedByte == 0 +} + // dataLength returns the total length in bytes of all units (transactions, // intermediate state roots, or evidence) written to this splitter. // dataLength does not include the # of bytes occupied by the namespace ID or @@ -204,9 +222,9 @@ func (css *CompactShareSplitter) dataLength(bytesOfPadding int) uint64 { // isEmptyPendingShare returns true if the pending share is empty, false otherwise. func (css *CompactShareSplitter) isEmptyPendingShare() bool { if css.isPendingShareTheFirstShare() { - return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes + return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.FirstCompactShareDataLengthBytes+appconsts.CompactShareReservedBytes } - return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes + return len(css.pendingShare.Share) == appconsts.NamespaceSize+appconsts.ShareInfoBytes+appconsts.CompactShareReservedBytes } // isPendingShareTheFirstShare returns true if the pending share is the first From f781496cc0ff6f50308b0377371a73c830ae337e Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Thu, 29 Sep 2022 16:01:22 -0400 Subject: [PATCH 38/38] test: add test case for reserved byte that is not 14 --- pkg/shares/share_splitting_test.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/pkg/shares/share_splitting_test.go b/pkg/shares/share_splitting_test.go index 18d83a7a60..3f826ffdf7 100644 --- a/pkg/shares/share_splitting_test.go +++ b/pkg/shares/share_splitting_test.go @@ -90,6 +90,27 @@ func TestSplitTxs(t *testing.T) { }, bytes.Repeat([]byte{0x0}, 243)...), // padding }, }, + { + name: "one large tx that spans two shares then one small tx", + txs: coretypes.Txs{bytes.Repeat([]byte{0xe}, 241), coretypes.Tx{0xd}}, + want: [][]uint8{ + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x1, // info byte + 245, 1, 0, 0, // 243 bytes (first transaction) + 2 bytes (second transaction) = 245 bytes message length + 14, // reserved byte + 241, 1, // unit length of first transaction is 241 + }, bytes.Repeat([]byte{0xe}, 240)...), // data of first transaction + append([]uint8{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, // namespace id + 0x0, // info byte + 11, // reserved byte + 0xe, // continuation data of first transaction + 1, // unit length of second transaction + 0xd, // data of second transaction + }, bytes.Repeat([]byte{0x0}, 243)...), // padding + }, + }, } for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { @@ -99,4 +120,4 @@ func TestSplitTxs(t *testing.T) { } }) } -} +} //