From 361311bd1d4920ed8641d139df30005cf2272bc7 Mon Sep 17 00:00:00 2001 From: Monica Xu Date: Tue, 1 Dec 2020 18:33:39 -0500 Subject: [PATCH] sql: Added CREATE SEQUENCE AS option. Previously, unimplementedWithIssueDetail error was thrown when an AS option in CREATE SEQUENCE ... AS was encountered. Now we support the AS option for creating sequences which can take on values such as smallint/integer/bigint. Typically (i.e. in Postgres) the AS option allows users to specify an integer type, which dictates the min and max integer values a sequence can take on. Before this change, the only option value we supported was bigint/int8/int/integer, which corresponds to our default min and max values for sequences. NB: In postgres, `integer` corresponds to int4. In cockroach, we use `nakedIntType` which defaults to int8 but can be configured in the cluster settings. Release note (sql change): Added CREATE SEQUENCE AS option. --- .../sql/bnf/alter_sequence_options_stmt.bnf | 4 +- .../sql/bnf/create_sequence_stmt.bnf | 4 +- docs/generated/sql/bnf/stmt_block.bnf | 3 +- pkg/ccl/importccl/import_stmt_test.go | 18 +- pkg/ccl/importccl/read_import_pgdump_test.go | 124 +++ pkg/sql/catalog/descpb/structured.pb.go | 783 +++++++++--------- pkg/sql/catalog/descpb/structured.proto | 5 + .../logictest/testdata/logic_test/sequences | 65 +- pkg/sql/parser/parse_test.go | 11 +- pkg/sql/parser/sql.y | 12 +- pkg/sql/sem/tree/create.go | 7 + pkg/sql/sequence.go | 81 +- pkg/sql/sequence_test.go | 139 ++++ pkg/sql/show_create_clauses.go | 3 + pkg/sql/show_test.go | 32 + 15 files changed, 898 insertions(+), 393 deletions(-) diff --git a/docs/generated/sql/bnf/alter_sequence_options_stmt.bnf b/docs/generated/sql/bnf/alter_sequence_options_stmt.bnf index b396c7e22f8d..6df294f9f398 100644 --- a/docs/generated/sql/bnf/alter_sequence_options_stmt.bnf +++ b/docs/generated/sql/bnf/alter_sequence_options_stmt.bnf @@ -1,3 +1,3 @@ alter_sequence_options_stmt ::= - 'ALTER' 'SEQUENCE' sequence_name ( ( ( 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) ( ( ( 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) )* ) - | 'ALTER' 'SEQUENCE' 'IF' 'EXISTS' sequence_name ( ( ( 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) ( ( ( 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) )* ) + 'ALTER' 'SEQUENCE' sequence_name ( ( ( 'AS' typename | 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) ( ( ( 'AS' typename | 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) )* ) + | 'ALTER' 'SEQUENCE' 'IF' 'EXISTS' sequence_name ( ( ( 'AS' typename | 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) ( ( ( 'AS' typename | 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) )* ) diff --git a/docs/generated/sql/bnf/create_sequence_stmt.bnf b/docs/generated/sql/bnf/create_sequence_stmt.bnf index 9d2b1cfcd281..82fc4b8bd6c5 100644 --- a/docs/generated/sql/bnf/create_sequence_stmt.bnf +++ b/docs/generated/sql/bnf/create_sequence_stmt.bnf @@ -1,3 +1,3 @@ create_sequence_stmt ::= - 'CREATE' opt_temp 'SEQUENCE' sequence_name ( ( ( ( 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) ( ( ( 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) )* ) | ) - | 'CREATE' opt_temp 'SEQUENCE' 'IF' 'NOT' 'EXISTS' sequence_name ( ( ( ( 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) ( ( ( 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) )* ) | ) + 'CREATE' opt_temp 'SEQUENCE' sequence_name ( ( ( ( 'AS' typename | 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) ( ( ( 'AS' typename | 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) )* ) | ) + | 'CREATE' opt_temp 'SEQUENCE' 'IF' 'NOT' 'EXISTS' sequence_name ( ( ( ( 'AS' typename | 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) ( ( ( 'AS' typename | 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_name | 'INCREMENT' integer | 'INCREMENT' 'BY' integer | 'MINVALUE' integer | 'NO' 'MINVALUE' | 'MAXVALUE' integer | 'NO' 'MAXVALUE' | 'START' integer | 'START' 'WITH' integer | 'VIRTUAL' ) ) )* ) | ) diff --git a/docs/generated/sql/bnf/stmt_block.bnf b/docs/generated/sql/bnf/stmt_block.bnf index 7e55db3dd47b..d7084bc2000a 100644 --- a/docs/generated/sql/bnf/stmt_block.bnf +++ b/docs/generated/sql/bnf/stmt_block.bnf @@ -2502,7 +2502,8 @@ alter_index_cmd ::= partition_by sequence_option_elem ::= - 'NO' 'CYCLE' + 'AS' typename + | 'NO' 'CYCLE' | 'OWNED' 'BY' 'NONE' | 'OWNED' 'BY' column_path | 'INCREMENT' signed_iconst64 diff --git a/pkg/ccl/importccl/import_stmt_test.go b/pkg/ccl/importccl/import_stmt_test.go index 09f80d421ac8..d915866df02c 100644 --- a/pkg/ccl/importccl/import_stmt_test.go +++ b/pkg/ccl/importccl/import_stmt_test.go @@ -1502,8 +1502,8 @@ func TestImportRowLimit(t *testing.T) { { name: "pgdump single table with insert", typ: "PGDUMP", - data: `CREATE TABLE t (a INT, b INT); - INSERT INTO t (a, b) VALUES (1, 2), (3, 4); + data: `CREATE TABLE t (a INT, b INT); + INSERT INTO t (a, b) VALUES (1, 2), (3, 4); `, with: `WITH row_limit = '1'`, verifyQuery: `SELECT * from t`, @@ -1526,8 +1526,8 @@ func TestImportRowLimit(t *testing.T) { { name: "mysqldump single table", typ: "MYSQLDUMP", - data: `CREATE TABLE t (a INT, b INT); - INSERT INTO t (a, b) VALUES (5, 6), (7, 8); + data: `CREATE TABLE t (a INT, b INT); + INSERT INTO t (a, b) VALUES (5, 6), (7, 8); `, with: `WITH row_limit = '1'`, verifyQuery: `SELECT * from t`, @@ -1536,11 +1536,11 @@ func TestImportRowLimit(t *testing.T) { { name: "mysqldump multiple inserts same table", typ: "MYSQLDUMP", - data: `CREATE TABLE t (a INT, b INT); - INSERT INTO t (a, b) VALUES (1, 2); - INSERT INTO t (a, b) VALUES (3, 4); - INSERT INTO t (a, b) VALUES (5, 6); - INSERT INTO t (a, b) VALUES (7, 8); + data: `CREATE TABLE t (a INT, b INT); + INSERT INTO t (a, b) VALUES (1, 2); + INSERT INTO t (a, b) VALUES (3, 4); + INSERT INTO t (a, b) VALUES (5, 6); + INSERT INTO t (a, b) VALUES (7, 8); `, with: `WITH row_limit = '2'`, verifyQuery: `SELECT * from t`, diff --git a/pkg/ccl/importccl/read_import_pgdump_test.go b/pkg/ccl/importccl/read_import_pgdump_test.go index 6c357ff687c1..761aeb8e3b04 100644 --- a/pkg/ccl/importccl/read_import_pgdump_test.go +++ b/pkg/ccl/importccl/read_import_pgdump_test.go @@ -9,11 +9,18 @@ package importccl import ( + "context" "fmt" "io" + "net/http" + "net/http/httptest" "strings" "testing" + "github.com/cockroachdb/cockroach/pkg/base" + "github.com/cockroachdb/cockroach/pkg/testutils" + "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" + "github.com/cockroachdb/cockroach/pkg/testutils/testcluster" "github.com/cockroachdb/cockroach/pkg/util/leaktest" "github.com/cockroachdb/cockroach/pkg/util/log" ) @@ -149,3 +156,120 @@ COPY done; t.Fatalf("got %s, expected %s", got, expect) } } + +func TestImportCreateSequenceAs(t *testing.T) { + defer leaktest.AfterTest(t)() + defer log.Scope(t).Close(t) + ctx := context.Background() + baseDir, cleanup := testutils.TempDir(t) + defer cleanup() + tc := testcluster.StartTestCluster( + t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: baseDir}}) + defer tc.Stopper().Stop(ctx) + conn := tc.Conns[0] + sqlDB := sqlutils.MakeSQLRunner(conn) + + var data string + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "GET" { + _, _ = w.Write([]byte(data)) + } + })) + defer srv.Close() + + tests := []struct { + name string + data string + verifyQuery string + err string + expected [][]string + }{ + { + name: "as integer", + data: ` + CREATE SEQUENCE public.a_seq AS integer + START WITH 2 + INCREMENT BY 1 + MINVALUE 0 + MAXVALUE 234567 + CACHE 1;`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + expected: [][]string{{ + "a_seq", `CREATE SEQUENCE public.a_seq AS INT8 MINVALUE 0 MAXVALUE 234567 INCREMENT 1 START 2`, + }}, + }, + { + name: "as integer desc", + data: ` + CREATE SEQUENCE public.a_seq AS integer + START WITH -20000 + INCREMENT BY -1 + MINVALUE -20000 + MAXVALUE 0 + CACHE 1;`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + expected: [][]string{{ + "a_seq", `CREATE SEQUENCE public.a_seq AS INT8 MINVALUE -20000 MAXVALUE 0 INCREMENT -1 START -20000`, + }}, + }, + { + name: "as bigint", + data: ` + CREATE SEQUENCE public.a_seq AS bigint + START WITH 1 + INCREMENT BY 1 + CACHE 1;`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + expected: [][]string{{ + "a_seq", `CREATE SEQUENCE public.a_seq AS INT8 MINVALUE 1 MAXVALUE 9223372036854775807 INCREMENT 1 START 1`, + }}, + }, + { + name: "as smallint", + data: ` + CREATE SEQUENCE public.a_seq AS smallint + START WITH 2 + INCREMENT BY 3 + CACHE 1;`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + expected: [][]string{{ + "a_seq", `CREATE SEQUENCE public.a_seq AS INT2 MINVALUE 1 MAXVALUE 32767 INCREMENT 3 START 2`, + }}, + }, + { + name: `MAXINT overrides integer type default max`, + data: ` + CREATE SEQUENCE public.a_seq + AS integer + START WITH 1 + INCREMENT BY 1 + MAXVALUE 9001 + CACHE 1;`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + expected: [][]string{{ + "a_seq", `CREATE SEQUENCE public.a_seq AS INT8 MINVALUE 1 MAXVALUE 9001 INCREMENT 1 START 1`, + }}, + }, + } + for _, test := range tests { + + t.Run(test.name, func(t *testing.T) { + // Set up clean testing environment. + sqlDB.Exec(t, `DROP SEQUENCE IF EXISTS a_seq`) + + importDumpQuery := `IMPORT PGDUMP ($1)` + data = test.data + + if test.err != "" { + sqlDB.ExpectErr(t, test.err, importDumpQuery, srv.URL) + sqlDB.ExpectErr(t, `relation "a_seq" does not exist`, `DROP SEQUENCE a_seq`) + + } else { + // Import PGDump and verify expected behavior. + sqlDB.Exec(t, importDumpQuery, srv.URL) + sqlDB.CheckQueryResults(t, test.verifyQuery, test.expected) + sqlDB.Exec(t, `DROP SEQUENCE a_seq`) + } + }) + } +} diff --git a/pkg/sql/catalog/descpb/structured.pb.go b/pkg/sql/catalog/descpb/structured.pb.go index 135037fe2662..9c075018afee 100644 --- a/pkg/sql/catalog/descpb/structured.pb.go +++ b/pkg/sql/catalog/descpb/structured.pb.go @@ -75,7 +75,7 @@ func (x *ConstraintValidity) UnmarshalJSON(data []byte) error { return nil } func (ConstraintValidity) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{0} + return fileDescriptor_structured_d5da37259bedf359, []int{0} } // SystemColumnKind is an enum representing the different kind of system @@ -120,7 +120,7 @@ func (x *SystemColumnKind) UnmarshalJSON(data []byte) error { return nil } func (SystemColumnKind) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{1} + return fileDescriptor_structured_d5da37259bedf359, []int{1} } // State indicates whether a descriptor is public (i.e., normally visible, @@ -172,7 +172,7 @@ func (x *DescriptorState) UnmarshalJSON(data []byte) error { return nil } func (DescriptorState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{2} + return fileDescriptor_structured_d5da37259bedf359, []int{2} } // SurvivalGoal is the survival goal for a database. @@ -211,7 +211,7 @@ func (x *SurvivalGoal) UnmarshalJSON(data []byte) error { return nil } func (SurvivalGoal) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{3} + return fileDescriptor_structured_d5da37259bedf359, []int{3} } type ForeignKeyReference_Action int32 @@ -256,7 +256,7 @@ func (x *ForeignKeyReference_Action) UnmarshalJSON(data []byte) error { return nil } func (ForeignKeyReference_Action) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{0, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{0, 0} } // Match is the algorithm used to compare composite keys. @@ -296,7 +296,7 @@ func (x *ForeignKeyReference_Match) UnmarshalJSON(data []byte) error { return nil } func (ForeignKeyReference_Match) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{0, 1} + return fileDescriptor_structured_d5da37259bedf359, []int{0, 1} } // The direction of a column in the index. @@ -333,7 +333,7 @@ func (x *IndexDescriptor_Direction) UnmarshalJSON(data []byte) error { return nil } func (IndexDescriptor_Direction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{8, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{8, 0} } // The type of the index. @@ -370,7 +370,7 @@ func (x *IndexDescriptor_Type) UnmarshalJSON(data []byte) error { return nil } func (IndexDescriptor_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{8, 1} + return fileDescriptor_structured_d5da37259bedf359, []int{8, 1} } type ConstraintToUpdate_ConstraintType int32 @@ -416,7 +416,7 @@ func (x *ConstraintToUpdate_ConstraintType) UnmarshalJSON(data []byte) error { return nil } func (ConstraintToUpdate_ConstraintType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{9, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{9, 0} } // A descriptor within a mutation is unavailable for reads, writes @@ -481,7 +481,7 @@ func (x *DescriptorMutation_State) UnmarshalJSON(data []byte) error { return nil } func (DescriptorMutation_State) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{13, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{13, 0} } // Direction of mutation. @@ -524,7 +524,7 @@ func (x *DescriptorMutation_Direction) UnmarshalJSON(data []byte) error { return nil } func (DescriptorMutation_Direction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{13, 1} + return fileDescriptor_structured_d5da37259bedf359, []int{13, 1} } // AuditMode indicates which auditing actions to take when this table is used. @@ -561,7 +561,7 @@ func (x *TableDescriptor_AuditMode) UnmarshalJSON(data []byte) error { return nil } func (TableDescriptor_AuditMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 0} } // Represents the kind of type that this type descriptor represents. @@ -606,7 +606,7 @@ func (x *TypeDescriptor_Kind) UnmarshalJSON(data []byte) error { return nil } func (TypeDescriptor_Kind) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{17, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{17, 0} } // Represents what operations are allowed on this ENUM member. @@ -647,7 +647,7 @@ func (x *TypeDescriptor_EnumMember_Capability) UnmarshalJSON(data []byte) error return nil } func (TypeDescriptor_EnumMember_Capability) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{17, 0, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{17, 0, 0} } // ForeignKeyReference is deprecated, replaced by ForeignKeyConstraint in v19.2 @@ -677,7 +677,7 @@ func (m *ForeignKeyReference) Reset() { *m = ForeignKeyReference{} } func (m *ForeignKeyReference) String() string { return proto.CompactTextString(m) } func (*ForeignKeyReference) ProtoMessage() {} func (*ForeignKeyReference) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{0} + return fileDescriptor_structured_d5da37259bedf359, []int{0} } func (m *ForeignKeyReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -725,7 +725,7 @@ func (m *ForeignKeyConstraint) Reset() { *m = ForeignKeyConstraint{} } func (m *ForeignKeyConstraint) String() string { return proto.CompactTextString(m) } func (*ForeignKeyConstraint) ProtoMessage() {} func (*ForeignKeyConstraint) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{1} + return fileDescriptor_structured_d5da37259bedf359, []int{1} } func (m *ForeignKeyConstraint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -763,7 +763,7 @@ func (m *UniqueWithoutIndexConstraint) Reset() { *m = UniqueWithoutIndex func (m *UniqueWithoutIndexConstraint) String() string { return proto.CompactTextString(m) } func (*UniqueWithoutIndexConstraint) ProtoMessage() {} func (*UniqueWithoutIndexConstraint) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{2} + return fileDescriptor_structured_d5da37259bedf359, []int{2} } func (m *UniqueWithoutIndexConstraint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -831,7 +831,7 @@ func (m *ColumnDescriptor) Reset() { *m = ColumnDescriptor{} } func (m *ColumnDescriptor) String() string { return proto.CompactTextString(m) } func (*ColumnDescriptor) ProtoMessage() {} func (*ColumnDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{3} + return fileDescriptor_structured_d5da37259bedf359, []int{3} } func (m *ColumnDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -887,7 +887,7 @@ func (m *ColumnFamilyDescriptor) Reset() { *m = ColumnFamilyDescriptor{} func (m *ColumnFamilyDescriptor) String() string { return proto.CompactTextString(m) } func (*ColumnFamilyDescriptor) ProtoMessage() {} func (*ColumnFamilyDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{4} + return fileDescriptor_structured_d5da37259bedf359, []int{4} } func (m *ColumnFamilyDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -933,7 +933,7 @@ func (m *InterleaveDescriptor) Reset() { *m = InterleaveDescriptor{} } func (m *InterleaveDescriptor) String() string { return proto.CompactTextString(m) } func (*InterleaveDescriptor) ProtoMessage() {} func (*InterleaveDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{5} + return fileDescriptor_structured_d5da37259bedf359, []int{5} } func (m *InterleaveDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -977,7 +977,7 @@ func (m *InterleaveDescriptor_Ancestor) Reset() { *m = InterleaveDescrip func (m *InterleaveDescriptor_Ancestor) String() string { return proto.CompactTextString(m) } func (*InterleaveDescriptor_Ancestor) ProtoMessage() {} func (*InterleaveDescriptor_Ancestor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{5, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{5, 0} } func (m *InterleaveDescriptor_Ancestor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1032,7 +1032,7 @@ func (m *ShardedDescriptor) Reset() { *m = ShardedDescriptor{} } func (m *ShardedDescriptor) String() string { return proto.CompactTextString(m) } func (*ShardedDescriptor) ProtoMessage() {} func (*ShardedDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{6} + return fileDescriptor_structured_d5da37259bedf359, []int{6} } func (m *ShardedDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1077,7 +1077,7 @@ func (m *PartitioningDescriptor) Reset() { *m = PartitioningDescriptor{} func (m *PartitioningDescriptor) String() string { return proto.CompactTextString(m) } func (*PartitioningDescriptor) ProtoMessage() {} func (*PartitioningDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{7} + return fileDescriptor_structured_d5da37259bedf359, []int{7} } func (m *PartitioningDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1120,7 +1120,7 @@ func (m *PartitioningDescriptor_List) Reset() { *m = PartitioningDescrip func (m *PartitioningDescriptor_List) String() string { return proto.CompactTextString(m) } func (*PartitioningDescriptor_List) ProtoMessage() {} func (*PartitioningDescriptor_List) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{7, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{7, 0} } func (m *PartitioningDescriptor_List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1165,7 +1165,7 @@ func (m *PartitioningDescriptor_Range) Reset() { *m = PartitioningDescri func (m *PartitioningDescriptor_Range) String() string { return proto.CompactTextString(m) } func (*PartitioningDescriptor_Range) ProtoMessage() {} func (*PartitioningDescriptor_Range) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{7, 1} + return fileDescriptor_structured_d5da37259bedf359, []int{7, 1} } func (m *PartitioningDescriptor_Range) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1332,7 +1332,7 @@ func (m *IndexDescriptor) Reset() { *m = IndexDescriptor{} } func (m *IndexDescriptor) String() string { return proto.CompactTextString(m) } func (*IndexDescriptor) ProtoMessage() {} func (*IndexDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{8} + return fileDescriptor_structured_d5da37259bedf359, []int{8} } func (m *IndexDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1384,7 +1384,7 @@ func (m *ConstraintToUpdate) Reset() { *m = ConstraintToUpdate{} } func (m *ConstraintToUpdate) String() string { return proto.CompactTextString(m) } func (*ConstraintToUpdate) ProtoMessage() {} func (*ConstraintToUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{9} + return fileDescriptor_structured_d5da37259bedf359, []int{9} } func (m *ConstraintToUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1431,7 +1431,7 @@ func (m *PrimaryKeySwap) Reset() { *m = PrimaryKeySwap{} } func (m *PrimaryKeySwap) String() string { return proto.CompactTextString(m) } func (*PrimaryKeySwap) ProtoMessage() {} func (*PrimaryKeySwap) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{10} + return fileDescriptor_structured_d5da37259bedf359, []int{10} } func (m *PrimaryKeySwap) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1471,7 +1471,7 @@ func (m *ComputedColumnSwap) Reset() { *m = ComputedColumnSwap{} } func (m *ComputedColumnSwap) String() string { return proto.CompactTextString(m) } func (*ComputedColumnSwap) ProtoMessage() {} func (*ComputedColumnSwap) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{11} + return fileDescriptor_structured_d5da37259bedf359, []int{11} } func (m *ComputedColumnSwap) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1519,7 +1519,7 @@ func (m *MaterializedViewRefresh) Reset() { *m = MaterializedViewRefresh func (m *MaterializedViewRefresh) String() string { return proto.CompactTextString(m) } func (*MaterializedViewRefresh) ProtoMessage() {} func (*MaterializedViewRefresh) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{12} + return fileDescriptor_structured_d5da37259bedf359, []int{12} } func (m *MaterializedViewRefresh) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1576,7 +1576,7 @@ func (m *DescriptorMutation) Reset() { *m = DescriptorMutation{} } func (m *DescriptorMutation) String() string { return proto.CompactTextString(m) } func (*DescriptorMutation) ProtoMessage() {} func (*DescriptorMutation) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{13} + return fileDescriptor_structured_d5da37259bedf359, []int{13} } func (m *DescriptorMutation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1914,7 +1914,7 @@ func (m *NameInfo) Reset() { *m = NameInfo{} } func (m *NameInfo) String() string { return proto.CompactTextString(m) } func (*NameInfo) ProtoMessage() {} func (*NameInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{14} + return fileDescriptor_structured_d5da37259bedf359, []int{14} } func (m *NameInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2100,7 +2100,7 @@ func (m *TableDescriptor) Reset() { *m = TableDescriptor{} } func (m *TableDescriptor) String() string { return proto.CompactTextString(m) } func (*TableDescriptor) ProtoMessage() {} func (*TableDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15} + return fileDescriptor_structured_d5da37259bedf359, []int{15} } func (m *TableDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2421,7 +2421,7 @@ func (m *TableDescriptor_SchemaChangeLease) Reset() { *m = TableDescript func (m *TableDescriptor_SchemaChangeLease) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_SchemaChangeLease) ProtoMessage() {} func (*TableDescriptor_SchemaChangeLease) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 0} } func (m *TableDescriptor_SchemaChangeLease) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2467,7 +2467,7 @@ func (m *TableDescriptor_CheckConstraint) Reset() { *m = TableDescriptor func (m *TableDescriptor_CheckConstraint) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_CheckConstraint) ProtoMessage() {} func (*TableDescriptor_CheckConstraint) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 1} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 1} } func (m *TableDescriptor_CheckConstraint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2507,7 +2507,7 @@ func (m *TableDescriptor_Reference) Reset() { *m = TableDescriptor_Refer func (m *TableDescriptor_Reference) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_Reference) ProtoMessage() {} func (*TableDescriptor_Reference) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 2} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 2} } func (m *TableDescriptor_Reference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2544,7 +2544,7 @@ func (m *TableDescriptor_MutationJob) Reset() { *m = TableDescriptor_Mut func (m *TableDescriptor_MutationJob) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_MutationJob) ProtoMessage() {} func (*TableDescriptor_MutationJob) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 3} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 3} } func (m *TableDescriptor_MutationJob) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2581,13 +2581,16 @@ type TableDescriptor_SequenceOpts struct { // Whether the sequence is virtual. Virtual bool `protobuf:"varint,5,opt,name=virtual" json:"virtual"` SequenceOwner TableDescriptor_SequenceOpts_SequenceOwner `protobuf:"bytes,6,opt,name=sequence_owner,json=sequenceOwner" json:"sequence_owner"` + // AS option value for CREATE SEQUENCE, which specifies the default + // min and max values a sequence can take on. + AsIntegerType string `protobuf:"bytes,7,opt,name=as_integer_type,json=asIntegerType" json:"as_integer_type"` } func (m *TableDescriptor_SequenceOpts) Reset() { *m = TableDescriptor_SequenceOpts{} } func (m *TableDescriptor_SequenceOpts) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_SequenceOpts) ProtoMessage() {} func (*TableDescriptor_SequenceOpts) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 4} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 4} } func (m *TableDescriptor_SequenceOpts) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2627,7 +2630,7 @@ func (m *TableDescriptor_SequenceOpts_SequenceOwner) String() string { } func (*TableDescriptor_SequenceOpts_SequenceOwner) ProtoMessage() {} func (*TableDescriptor_SequenceOpts_SequenceOwner) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 4, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 4, 0} } func (m *TableDescriptor_SequenceOpts_SequenceOwner) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2667,7 +2670,7 @@ func (m *TableDescriptor_Replacement) Reset() { *m = TableDescriptor_Rep func (m *TableDescriptor_Replacement) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_Replacement) ProtoMessage() {} func (*TableDescriptor_Replacement) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 5} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 5} } func (m *TableDescriptor_Replacement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2704,7 +2707,7 @@ func (m *TableDescriptor_GCDescriptorMutation) Reset() { *m = TableDescr func (m *TableDescriptor_GCDescriptorMutation) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_GCDescriptorMutation) ProtoMessage() {} func (*TableDescriptor_GCDescriptorMutation) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 6} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 6} } func (m *TableDescriptor_GCDescriptorMutation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2741,7 +2744,7 @@ func (m *TableDescriptor_LocalityConfig) Reset() { *m = TableDescriptor_ func (m *TableDescriptor_LocalityConfig) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_LocalityConfig) ProtoMessage() {} func (*TableDescriptor_LocalityConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 7} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 7} } func (m *TableDescriptor_LocalityConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2921,7 +2924,7 @@ func (m *TableDescriptor_LocalityConfig_RegionalByTable) String() string { } func (*TableDescriptor_LocalityConfig_RegionalByTable) ProtoMessage() {} func (*TableDescriptor_LocalityConfig_RegionalByTable) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 7, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 7, 0} } func (m *TableDescriptor_LocalityConfig_RegionalByTable) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2957,7 +2960,7 @@ func (m *TableDescriptor_LocalityConfig_RegionalByRow) String() string { } func (*TableDescriptor_LocalityConfig_RegionalByRow) ProtoMessage() {} func (*TableDescriptor_LocalityConfig_RegionalByRow) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 7, 1} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 7, 1} } func (m *TableDescriptor_LocalityConfig_RegionalByRow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2989,7 +2992,7 @@ func (m *TableDescriptor_LocalityConfig_Global) Reset() { *m = TableDesc func (m *TableDescriptor_LocalityConfig_Global) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_LocalityConfig_Global) ProtoMessage() {} func (*TableDescriptor_LocalityConfig_Global) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 7, 2} + return fileDescriptor_structured_d5da37259bedf359, []int{15, 7, 2} } func (m *TableDescriptor_LocalityConfig_Global) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3040,7 +3043,7 @@ func (m *DatabaseDescriptor) Reset() { *m = DatabaseDescriptor{} } func (m *DatabaseDescriptor) String() string { return proto.CompactTextString(m) } func (*DatabaseDescriptor) ProtoMessage() {} func (*DatabaseDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{16} + return fileDescriptor_structured_d5da37259bedf359, []int{16} } func (m *DatabaseDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3148,7 +3151,7 @@ func (m *DatabaseDescriptor_SchemaInfo) Reset() { *m = DatabaseDescripto func (m *DatabaseDescriptor_SchemaInfo) String() string { return proto.CompactTextString(m) } func (*DatabaseDescriptor_SchemaInfo) ProtoMessage() {} func (*DatabaseDescriptor_SchemaInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{16, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{16, 0} } func (m *DatabaseDescriptor_SchemaInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3188,7 +3191,7 @@ func (m *DatabaseDescriptor_RegionConfig) Reset() { *m = DatabaseDescrip func (m *DatabaseDescriptor_RegionConfig) String() string { return proto.CompactTextString(m) } func (*DatabaseDescriptor_RegionConfig) ProtoMessage() {} func (*DatabaseDescriptor_RegionConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{16, 2} + return fileDescriptor_structured_d5da37259bedf359, []int{16, 2} } func (m *DatabaseDescriptor_RegionConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3251,7 +3254,7 @@ func (m *TypeDescriptor) Reset() { *m = TypeDescriptor{} } func (m *TypeDescriptor) String() string { return proto.CompactTextString(m) } func (*TypeDescriptor) ProtoMessage() {} func (*TypeDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{17} + return fileDescriptor_structured_d5da37259bedf359, []int{17} } func (m *TypeDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3399,7 +3402,7 @@ func (m *TypeDescriptor_EnumMember) Reset() { *m = TypeDescriptor_EnumMe func (m *TypeDescriptor_EnumMember) String() string { return proto.CompactTextString(m) } func (*TypeDescriptor_EnumMember) ProtoMessage() {} func (*TypeDescriptor_EnumMember) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{17, 0} + return fileDescriptor_structured_d5da37259bedf359, []int{17, 0} } func (m *TypeDescriptor_EnumMember) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3435,7 +3438,7 @@ func (m *TypeDescriptor_RegionConfig) Reset() { *m = TypeDescriptor_Regi func (m *TypeDescriptor_RegionConfig) String() string { return proto.CompactTextString(m) } func (*TypeDescriptor_RegionConfig) ProtoMessage() {} func (*TypeDescriptor_RegionConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{17, 1} + return fileDescriptor_structured_d5da37259bedf359, []int{17, 1} } func (m *TypeDescriptor_RegionConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3483,7 +3486,7 @@ func (m *SchemaDescriptor) Reset() { *m = SchemaDescriptor{} } func (m *SchemaDescriptor) String() string { return proto.CompactTextString(m) } func (*SchemaDescriptor) ProtoMessage() {} func (*SchemaDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{18} + return fileDescriptor_structured_d5da37259bedf359, []int{18} } func (m *SchemaDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3586,7 +3589,7 @@ func (m *Descriptor) Reset() { *m = Descriptor{} } func (m *Descriptor) String() string { return proto.CompactTextString(m) } func (*Descriptor) ProtoMessage() {} func (*Descriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_c6d9278eb5f43f16, []int{19} + return fileDescriptor_structured_d5da37259bedf359, []int{19} } func (m *Descriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5190,6 +5193,9 @@ func (this *TableDescriptor_SequenceOpts) Equal(that interface{}) bool { if !this.SequenceOwner.Equal(&that1.SequenceOwner) { return false } + if this.AsIntegerType != that1.AsIntegerType { + return false + } return true } func (this *TableDescriptor_SequenceOpts_SequenceOwner) Equal(that interface{}) bool { @@ -7477,6 +7483,10 @@ func (m *TableDescriptor_SequenceOpts) MarshalTo(dAtA []byte) (int, error) { return 0, err } i += n28 + dAtA[i] = 0x3a + i++ + i = encodeVarintStructured(dAtA, i, uint64(len(m.AsIntegerType))) + i += copy(dAtA[i:], m.AsIntegerType) return i, nil } @@ -8887,6 +8897,8 @@ func (m *TableDescriptor_SequenceOpts) Size() (n int) { n += 2 l = m.SequenceOwner.Size() n += 1 + l + sovStructured(uint64(l)) + l = len(m.AsIntegerType) + n += 1 + l + sovStructured(uint64(l)) return n } @@ -15363,6 +15375,35 @@ func (m *TableDescriptor_SequenceOpts) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AsIntegerType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStructured + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStructured + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AsIntegerType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipStructured(dAtA[iNdEx:]) @@ -17929,327 +17970,329 @@ var ( ) func init() { - proto.RegisterFile("sql/catalog/descpb/structured.proto", fileDescriptor_structured_c6d9278eb5f43f16) + proto.RegisterFile("sql/catalog/descpb/structured.proto", fileDescriptor_structured_d5da37259bedf359) } -var fileDescriptor_structured_c6d9278eb5f43f16 = []byte{ - // 5087 bytes of a gzipped FileDescriptorProto +var fileDescriptor_structured_d5da37259bedf359 = []byte{ + // 5111 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3c, 0x4b, 0x70, 0x1b, 0xe7, 0x79, 0xc4, 0x1b, 0xf8, 0xf0, 0x5a, 0xfe, 0xa2, 0x24, 0x98, 0xb1, 0x49, 0x0a, 0xb2, 0x6c, 0xda, 0x8e, 0x49, 0x99, 0xca, 0x43, 0x89, 0x93, 0x8c, 0x41, 0x00, 0x14, 0xc1, 0x07, 0x40, 0x2f, 0x49, 0xc9, 0x49, 0xda, 0x6c, 0x96, 0xd8, 0x1f, 0xe0, 0x5a, 0x8b, 0x5d, 0x68, 0x77, 0x21, 0x11, 0x9d, - 0x1e, 0x3a, 0xe9, 0xa5, 0xa7, 0xb6, 0x39, 0xf4, 0xd8, 0x69, 0xa6, 0x93, 0x99, 0xe6, 0xd6, 0xc9, - 0xa5, 0xbd, 0xf5, 0xd0, 0x43, 0x27, 0xb7, 0xa6, 0xb7, 0x9c, 0x38, 0x2d, 0x7d, 0xe9, 0xad, 0xbd, - 0x65, 0xc6, 0xa7, 0xce, 0xff, 0xda, 0x07, 0x1e, 0x14, 0x48, 0xba, 0x39, 0xd8, 0xc3, 0xfd, 0x5e, - 0xff, 0xeb, 0x7b, 0xff, 0x3f, 0x04, 0xf7, 0x9d, 0x17, 0xc6, 0x7a, 0x5b, 0x75, 0x55, 0xc3, 0xea, - 0xae, 0x6b, 0xd8, 0x69, 0xf7, 0x4f, 0xd6, 0x1d, 0xd7, 0x1e, 0xb4, 0xdd, 0x81, 0x8d, 0xb5, 0xb5, - 0xbe, 0x6d, 0xb9, 0x16, 0xba, 0xdd, 0xb6, 0xda, 0xcf, 0x6d, 0x4b, 0x6d, 0x9f, 0xae, 0x39, 0x2f, - 0x0c, 0xf2, 0xdf, 0x89, 0xea, 0xe0, 0xc5, 0xd2, 0xc0, 0xd5, 0x8d, 0xf5, 0x53, 0xa3, 0xbd, 0xee, - 0xea, 0x3d, 0xec, 0xb8, 0x6a, 0xaf, 0xcf, 0x18, 0x16, 0xcb, 0x13, 0xa4, 0xf6, 0x6d, 0xfd, 0xa5, - 0x6e, 0xe0, 0x2e, 0xe6, 0x34, 0xb7, 0x09, 0x8d, 0x3b, 0xec, 0x63, 0x87, 0xfd, 0x9f, 0x83, 0xdf, - 0xe8, 0x62, 0x6b, 0xbd, 0x8b, 0x2d, 0xdd, 0xd4, 0xf0, 0xd9, 0x7a, 0xdb, 0x32, 0x3b, 0x7a, 0x97, - 0xa3, 0x16, 0xba, 0x56, 0xd7, 0xa2, 0x7f, 0xae, 0x93, 0xbf, 0x18, 0xb4, 0xfc, 0xb3, 0x04, 0xdc, - 0xda, 0xb2, 0x6c, 0xac, 0x77, 0xcd, 0x5d, 0x3c, 0x94, 0x71, 0x07, 0xdb, 0xd8, 0x6c, 0x63, 0xb4, - 0x02, 0x09, 0x57, 0x3d, 0x31, 0x70, 0x29, 0xb2, 0x12, 0x59, 0xcd, 0x6f, 0xc2, 0x6f, 0xce, 0x97, - 0xe7, 0xbe, 0x3c, 0x5f, 0x8e, 0x36, 0x6a, 0x32, 0x43, 0xa0, 0x07, 0x90, 0xa0, 0xa3, 0x94, 0xa2, - 0x94, 0xa2, 0xc8, 0x29, 0x52, 0x0d, 0x02, 0x24, 0x64, 0x14, 0x8b, 0x4a, 0x10, 0x37, 0xd5, 0x1e, - 0x2e, 0xc5, 0x56, 0x22, 0xab, 0x99, 0xcd, 0x38, 0xa1, 0x92, 0x29, 0x04, 0xed, 0x42, 0xfa, 0xa5, - 0x6a, 0xe8, 0x9a, 0xee, 0x0e, 0x4b, 0xf1, 0x95, 0xc8, 0x6a, 0x61, 0xe3, 0xbd, 0xb5, 0x89, 0x5b, - 0xb5, 0x56, 0xb5, 0x4c, 0xc7, 0xb5, 0x55, 0xdd, 0x74, 0x9f, 0x72, 0x06, 0x2e, 0xc8, 0x13, 0x80, - 0x1e, 0xc2, 0xbc, 0x73, 0xaa, 0xda, 0x58, 0x53, 0xfa, 0x36, 0xee, 0xe8, 0x67, 0x8a, 0x81, 0xcd, - 0x52, 0x62, 0x25, 0xb2, 0x9a, 0xe0, 0xa4, 0x45, 0x86, 0x3e, 0xa0, 0xd8, 0x3d, 0x6c, 0xa2, 0x23, - 0xc8, 0x58, 0xa6, 0xa2, 0x61, 0x03, 0xbb, 0xb8, 0x94, 0xa4, 0xe3, 0x7f, 0x34, 0x65, 0xfc, 0x09, - 0x1b, 0xb4, 0x56, 0x69, 0xbb, 0xba, 0x65, 0x8a, 0x79, 0x58, 0x66, 0x8d, 0x0a, 0xe2, 0x52, 0x07, - 0x7d, 0x4d, 0x75, 0x71, 0x29, 0x75, 0x63, 0xa9, 0xc7, 0x54, 0x10, 0xda, 0x83, 0x44, 0x4f, 0x75, - 0xdb, 0xa7, 0xa5, 0x34, 0x95, 0xf8, 0xf0, 0x0a, 0x12, 0xf7, 0x09, 0x1f, 0x17, 0xc8, 0x84, 0x94, - 0x9f, 0x41, 0x92, 0x8d, 0x83, 0xf2, 0x90, 0x69, 0xb6, 0x94, 0x4a, 0xf5, 0xa8, 0xd1, 0x6a, 0x4a, - 0x73, 0x28, 0x07, 0x69, 0xb9, 0x7e, 0x78, 0x24, 0x37, 0xaa, 0x47, 0x52, 0x84, 0x7c, 0x1d, 0xd6, - 0x8f, 0x94, 0xe6, 0xf1, 0xde, 0x9e, 0x14, 0x45, 0x45, 0xc8, 0x92, 0xaf, 0x5a, 0x7d, 0xab, 0x72, - 0xbc, 0x77, 0x24, 0xc5, 0x50, 0x16, 0x52, 0xd5, 0xca, 0x61, 0xb5, 0x52, 0xab, 0x4b, 0xf1, 0xc5, - 0xf8, 0xaf, 0x7e, 0xb9, 0x34, 0x57, 0x7e, 0x08, 0x09, 0x3a, 0x1c, 0x02, 0x48, 0x1e, 0x36, 0xf6, - 0x0f, 0xf6, 0xea, 0xd2, 0x1c, 0x4a, 0x43, 0x7c, 0x8b, 0x88, 0x88, 0x10, 0x8e, 0x83, 0x8a, 0x7c, - 0xd4, 0xa8, 0xec, 0x49, 0x51, 0xc6, 0xf1, 0xdd, 0xf8, 0x7f, 0xff, 0x62, 0x39, 0x52, 0xfe, 0x8f, - 0x04, 0x2c, 0xf8, 0x73, 0xf7, 0x4f, 0x1b, 0x55, 0xa1, 0x68, 0xd9, 0x7a, 0x57, 0x37, 0x15, 0xaa, - 0x73, 0x8a, 0xae, 0x71, 0x7d, 0xfc, 0x1a, 0x59, 0xcf, 0xc5, 0xf9, 0x72, 0xbe, 0x45, 0xd1, 0x47, - 0x04, 0xdb, 0xa8, 0x71, 0x05, 0xcd, 0x5b, 0x01, 0xa0, 0x86, 0x76, 0x61, 0x9e, 0x0b, 0x69, 0x5b, - 0xc6, 0xa0, 0x67, 0x2a, 0xba, 0xe6, 0x94, 0xa2, 0x2b, 0xb1, 0xd5, 0xfc, 0xe6, 0xf2, 0xc5, 0xf9, - 0x72, 0x91, 0x89, 0xa8, 0x52, 0x5c, 0xa3, 0xe6, 0x7c, 0x79, 0xbe, 0x9c, 0x16, 0x1f, 0x32, 0x1f, - 0x9e, 0x7f, 0x6b, 0x0e, 0x7a, 0x06, 0xb7, 0x6d, 0xb1, 0xb7, 0x5a, 0x50, 0x60, 0x8c, 0x0a, 0xbc, - 0x7f, 0x71, 0xbe, 0x7c, 0xcb, 0xdb, 0x7c, 0x6d, 0xb2, 0xd0, 0x5b, 0xf6, 0x28, 0x81, 0xe6, 0xa0, - 0x16, 0x04, 0xc0, 0xfe, 0x72, 0xe3, 0x74, 0xb9, 0xcb, 0x7c, 0xb9, 0xf3, 0xbe, 0xe8, 0xf0, 0x92, - 0xe7, 0xed, 0x11, 0x84, 0xe6, 0x19, 0x5e, 0xe2, 0x52, 0xc3, 0x4b, 0xde, 0xd4, 0xf0, 0x42, 0x66, - 0x94, 0xfa, 0x7f, 0x31, 0xa3, 0xf4, 0x57, 0x6e, 0x46, 0x99, 0xaf, 0xc0, 0x8c, 0x98, 0xee, 0xee, - 0xc4, 0xd3, 0x20, 0x65, 0x77, 0xe2, 0xe9, 0xac, 0x94, 0xdb, 0x89, 0xa7, 0x73, 0x52, 0x7e, 0x27, - 0x9e, 0xce, 0x4b, 0x85, 0xf2, 0xef, 0x23, 0xf0, 0xe6, 0xb1, 0xa9, 0xbf, 0x18, 0xe0, 0x67, 0xba, - 0x7b, 0x6a, 0x0d, 0x5c, 0xea, 0x17, 0x03, 0xba, 0xfd, 0x10, 0xd2, 0x23, 0x4a, 0x7d, 0x9b, 0x9f, - 0x72, 0x2a, 0x7c, 0xb6, 0x29, 0x97, 0x9f, 0xe8, 0x63, 0x80, 0x31, 0x0d, 0x7e, 0xe3, 0xe2, 0x7c, - 0x39, 0x33, 0x59, 0xcd, 0x32, 0x6d, 0x4f, 0xb9, 0xfe, 0x30, 0x4e, 0x98, 0x5b, 0xf3, 0xcf, 0x13, - 0x20, 0xb1, 0x49, 0xd4, 0xb0, 0xd3, 0xb6, 0xf5, 0xbe, 0x6b, 0xd9, 0xde, 0x0c, 0x22, 0x63, 0x33, - 0x78, 0x07, 0xa2, 0xba, 0xc6, 0x83, 0xc8, 0x1d, 0xbe, 0x03, 0x51, 0xba, 0x78, 0x7f, 0x29, 0x51, - 0x5d, 0x43, 0x6b, 0x10, 0x27, 0x91, 0x8e, 0xae, 0x21, 0xbb, 0xb1, 0x38, 0x3a, 0x4b, 0xdc, 0x5b, - 0x63, 0x81, 0xf0, 0x48, 0xa6, 0x74, 0x68, 0x05, 0xd2, 0xe6, 0xc0, 0x30, 0x68, 0x10, 0x23, 0x2b, - 0x4b, 0x8b, 0xe9, 0x0a, 0x28, 0xba, 0x07, 0x39, 0x0d, 0x77, 0xd4, 0x81, 0xe1, 0x2a, 0xf8, 0xac, - 0x6f, 0x33, 0x4b, 0x91, 0xb3, 0x1c, 0x56, 0x3f, 0xeb, 0xdb, 0xe8, 0x4d, 0x48, 0x9e, 0xea, 0x9a, - 0x86, 0x4d, 0x6a, 0x28, 0x42, 0x04, 0x87, 0xa1, 0x0d, 0x98, 0x1f, 0x38, 0xd8, 0x51, 0x1c, 0xfc, - 0x62, 0x40, 0xb4, 0x84, 0x9e, 0x0b, 0xd0, 0x73, 0x49, 0xf2, 0xc3, 0x2b, 0x12, 0x82, 0x43, 0x8e, - 0x27, 0x47, 0x71, 0x0f, 0x72, 0x6d, 0xab, 0xd7, 0x1f, 0xb8, 0x98, 0x0d, 0x9a, 0x65, 0x83, 0x72, - 0x18, 0x1d, 0x74, 0x03, 0xe6, 0xad, 0x57, 0xe6, 0x88, 0xd8, 0x5c, 0x58, 0x2c, 0x21, 0x08, 0x8a, - 0xfd, 0x04, 0xa4, 0x7e, 0x57, 0x51, 0x5d, 0xd7, 0xd6, 0x4f, 0x88, 0x6c, 0x73, 0xd0, 0x2b, 0xe5, - 0x43, 0x7b, 0x5a, 0x38, 0x78, 0x52, 0x11, 0xe8, 0xe6, 0xa0, 0x27, 0x17, 0xfa, 0xdd, 0xe0, 0x37, - 0xda, 0x82, 0xb7, 0x54, 0xc3, 0xc5, 0xb6, 0x70, 0x6a, 0x64, 0x13, 0x15, 0xdd, 0x54, 0xfa, 0xb6, - 0xd5, 0xb5, 0xb1, 0xe3, 0x94, 0x0a, 0x81, 0x1d, 0x78, 0x83, 0x92, 0xb2, 0xf3, 0x39, 0x1a, 0xf6, - 0x71, 0xc3, 0x3c, 0xe0, 0x64, 0xe8, 0xc7, 0x80, 0x9c, 0xa1, 0xe3, 0xe2, 0x9e, 0x10, 0xf4, 0x5c, - 0x37, 0xb5, 0x52, 0x91, 0xea, 0xd6, 0xbb, 0x53, 0x74, 0xeb, 0x90, 0x32, 0x30, 0x71, 0xbb, 0xba, - 0xa9, 0xf1, 0x51, 0x24, 0x67, 0x04, 0x8e, 0x96, 0x20, 0xf5, 0x52, 0xb7, 0xdd, 0x81, 0x6a, 0x94, - 0xa4, 0xc0, 0x74, 0x04, 0xd0, 0xb3, 0xc9, 0xb4, 0x94, 0xd9, 0x89, 0xa7, 0x33, 0x12, 0xec, 0xc4, - 0xd3, 0x29, 0x29, 0x5d, 0xfe, 0xcb, 0x28, 0xdc, 0x61, 0x62, 0xb6, 0xd4, 0x9e, 0x6e, 0x0c, 0x6f, - 0xaa, 0x99, 0x4c, 0x0a, 0xd7, 0x4c, 0x7a, 0xa4, 0x74, 0xa9, 0x84, 0x8d, 0x85, 0x02, 0x7a, 0xa4, - 0x04, 0xd6, 0x24, 0xa0, 0x11, 0xd3, 0x8d, 0x5f, 0xc1, 0x74, 0x5b, 0x30, 0x2f, 0x94, 0xd4, 0x93, - 0x40, 0x35, 0x35, 0xbf, 0x79, 0x9f, 0xcf, 0xa9, 0x58, 0x63, 0x04, 0x82, 0x3d, 0x1c, 0xc1, 0xb4, - 0x10, 0x52, 0xe3, 0x46, 0xfa, 0xcf, 0x51, 0x58, 0x68, 0x98, 0x2e, 0xb6, 0x0d, 0xac, 0xbe, 0xc4, - 0x81, 0xed, 0xf8, 0x0c, 0x32, 0xaa, 0xd9, 0xc6, 0x8e, 0x6b, 0xd9, 0x4e, 0x29, 0xb2, 0x12, 0x5b, - 0xcd, 0x6e, 0x7c, 0x63, 0xca, 0xa9, 0x4d, 0xe2, 0x5f, 0xab, 0x70, 0x66, 0xbe, 0x93, 0xbe, 0xb0, - 0xc5, 0x7f, 0x89, 0x40, 0x5a, 0x60, 0xaf, 0xe1, 0xfd, 0xbe, 0x09, 0x69, 0x9a, 0x51, 0x2a, 0xde, - 0x99, 0x2c, 0x0a, 0x0e, 0x9e, 0x72, 0x06, 0xb3, 0xcf, 0x14, 0xa5, 0x6d, 0x68, 0xa8, 0x3a, 0x29, - 0x31, 0x8c, 0x51, 0xfe, 0xbb, 0x62, 0xff, 0x0e, 0xc3, 0xa9, 0xe1, 0x58, 0xae, 0xc8, 0xf6, 0x8c, - 0xef, 0xdc, 0x3f, 0x45, 0x60, 0x9e, 0x30, 0x68, 0x58, 0x0b, 0x6c, 0xdb, 0x7d, 0x00, 0xdd, 0x51, - 0x1c, 0x06, 0xa7, 0x2b, 0x12, 0xba, 0x99, 0xd1, 0x1d, 0x4e, 0xee, 0xa9, 0x5a, 0x74, 0x4c, 0xd5, - 0xbe, 0x03, 0x79, 0xca, 0xab, 0x9c, 0x0c, 0xda, 0xcf, 0xb1, 0xeb, 0xd0, 0x19, 0x26, 0x36, 0x17, - 0xf8, 0x0c, 0x73, 0x54, 0xc2, 0x26, 0xc3, 0xc9, 0x39, 0x27, 0xf0, 0x35, 0xa6, 0x7d, 0xf1, 0x31, - 0xed, 0xe3, 0x13, 0xff, 0x7d, 0x0c, 0xee, 0x1c, 0xa8, 0xb6, 0xab, 0x93, 0xd8, 0xa8, 0x9b, 0xdd, - 0xc0, 0xec, 0x1f, 0x40, 0xd6, 0x1c, 0x08, 0x83, 0x75, 0xf8, 0x81, 0xb0, 0xf9, 0x81, 0x39, 0xe0, - 0x06, 0xe8, 0xa0, 0x3d, 0x88, 0x1b, 0xba, 0xe3, 0xd2, 0xd0, 0x93, 0xdd, 0xd8, 0x98, 0xa2, 0x16, - 0x93, 0xc7, 0x58, 0xdb, 0xd3, 0x1d, 0x57, 0xac, 0x99, 0x48, 0x41, 0x2d, 0x48, 0xd8, 0xaa, 0xd9, - 0xc5, 0xd4, 0x5e, 0xb2, 0x1b, 0x8f, 0xae, 0x26, 0x4e, 0x26, 0xac, 0x22, 0x20, 0x53, 0x39, 0x8b, - 0x7f, 0x1b, 0x81, 0x38, 0x19, 0xe5, 0x12, 0x93, 0xbe, 0x03, 0xc9, 0x97, 0xaa, 0x31, 0xc0, 0x2c, - 0x7c, 0xe6, 0x64, 0xfe, 0x85, 0xfe, 0x18, 0x8a, 0xce, 0xe0, 0xa4, 0x1f, 0x18, 0x8a, 0xc7, 0x99, - 0x0f, 0xaf, 0x34, 0x2b, 0xaf, 0xd6, 0x08, 0xcb, 0x62, 0x07, 0xb0, 0xf8, 0x02, 0x12, 0x74, 0xd6, - 0x97, 0xcc, 0xef, 0x1e, 0xe4, 0x5c, 0x4b, 0xc1, 0x67, 0x6d, 0x63, 0xe0, 0xe8, 0x2f, 0x99, 0xa6, - 0xe4, 0xe4, 0xac, 0x6b, 0xd5, 0x05, 0x08, 0x3d, 0x80, 0x42, 0xc7, 0xb6, 0x7a, 0x8a, 0x6e, 0x0a, - 0xa2, 0x18, 0x25, 0xca, 0x13, 0x68, 0x43, 0x00, 0x43, 0x2a, 0xfb, 0x37, 0x39, 0x28, 0x52, 0xc3, - 0x98, 0xc9, 0xed, 0x3d, 0x08, 0xb8, 0xbd, 0xdb, 0x21, 0xb7, 0xe7, 0x59, 0x17, 0xf1, 0x7a, 0x6f, - 0x42, 0x72, 0x40, 0xf3, 0x1b, 0x3a, 0xbe, 0x17, 0x1a, 0x19, 0x6c, 0x06, 0xad, 0x44, 0x5f, 0x07, - 0x44, 0x5c, 0x01, 0x56, 0x42, 0x84, 0x09, 0x4a, 0x28, 0x51, 0x4c, 0x75, 0xaa, 0x07, 0x4d, 0x5e, - 0xc1, 0x83, 0x6e, 0x83, 0x84, 0xcf, 0x5c, 0x5b, 0x0d, 0x66, 0xeb, 0x29, 0xca, 0xbf, 0x44, 0xc2, - 0x62, 0x9d, 0xe0, 0x26, 0x0b, 0x29, 0xe0, 0x00, 0x4e, 0x23, 0x5a, 0x32, 0xcf, 0x65, 0x68, 0xba, - 0x8d, 0x69, 0x8e, 0xe9, 0x94, 0xd2, 0x2b, 0xb1, 0x4b, 0x72, 0xc9, 0x91, 0x6d, 0x5f, 0xab, 0x09, - 0x46, 0x59, 0x62, 0xa2, 0x3c, 0x80, 0x83, 0x0e, 0x21, 0xdb, 0x61, 0xa9, 0xa7, 0xf2, 0x1c, 0x0f, - 0x69, 0x92, 0x9a, 0xdd, 0x78, 0x7f, 0xf6, 0x24, 0x75, 0x33, 0x49, 0x8e, 0xa0, 0x14, 0x91, 0xa1, - 0xe3, 0x21, 0xd1, 0x33, 0xc8, 0x07, 0xea, 0x8a, 0x93, 0x21, 0xcd, 0x4f, 0xae, 0x27, 0x36, 0xe7, - 0x0b, 0xda, 0x1c, 0xa2, 0x4f, 0x01, 0x74, 0x2f, 0x00, 0xd0, 0x34, 0x26, 0xbb, 0xf1, 0xc1, 0x15, - 0x22, 0x85, 0xf0, 0x2f, 0xbe, 0x10, 0xf4, 0x0c, 0x0a, 0xfe, 0x17, 0x9d, 0x6c, 0xee, 0xca, 0x93, - 0x65, 0x52, 0xf3, 0x01, 0x39, 0x9b, 0xa4, 0x48, 0x59, 0x20, 0x09, 0x96, 0xe5, 0xe8, 0x2e, 0x0e, - 0xaa, 0x41, 0x9e, 0xaa, 0x41, 0xf9, 0xe2, 0x7c, 0x19, 0x55, 0x05, 0x7e, 0xb2, 0x2a, 0xa0, 0xf6, - 0x08, 0x9e, 0x29, 0x56, 0x48, 0x81, 0x89, 0xc4, 0x82, 0xaf, 0x58, 0x87, 0xbe, 0x0a, 0x8f, 0x29, - 0x56, 0x40, 0xbd, 0x59, 0x55, 0x99, 0x0b, 0xf9, 0x9e, 0xe2, 0xf5, 0x7d, 0x4f, 0x48, 0x10, 0xaa, - 0xf3, 0xa4, 0x59, 0xa2, 0xe9, 0xd7, 0x07, 0x33, 0x2a, 0x29, 0xc9, 0xe8, 0x84, 0x4b, 0xa0, 0xb9, - 0xf4, 0x23, 0x40, 0x6d, 0x1b, 0xab, 0x2e, 0xd6, 0x48, 0xd2, 0x6a, 0xe8, 0x6d, 0xdd, 0x35, 0x86, - 0xa5, 0xf9, 0x80, 0xdd, 0xcf, 0x73, 0x7c, 0xdd, 0x43, 0xa3, 0xc7, 0x90, 0x7a, 0x89, 0x6d, 0x47, - 0xb7, 0xcc, 0x12, 0xa2, 0xce, 0x64, 0x89, 0xb7, 0x88, 0xee, 0x8c, 0x8c, 0xf7, 0x94, 0x51, 0xc9, - 0x82, 0x1c, 0x6d, 0x43, 0x1e, 0x9b, 0x6d, 0x4b, 0xd3, 0xcd, 0x2e, 0x4d, 0x43, 0x4b, 0xb7, 0xfc, - 0x7c, 0xe7, 0xcb, 0xf3, 0xe5, 0xaf, 0x8d, 0xf0, 0xd7, 0x39, 0x2d, 0x99, 0xb6, 0x9c, 0xc3, 0x81, - 0x2f, 0xb4, 0x0d, 0x29, 0x11, 0x93, 0x17, 0xe8, 0x9e, 0xae, 0x4e, 0xcb, 0x40, 0x47, 0x23, 0xba, - 0xc8, 0x2c, 0x39, 0x3b, 0x29, 0x27, 0x34, 0xdd, 0x21, 0xb9, 0x88, 0x56, 0xba, 0x1d, 0x2c, 0x27, - 0x04, 0x14, 0x55, 0x01, 0xba, 0xd8, 0x52, 0x58, 0xd3, 0xad, 0x74, 0x87, 0x0e, 0xb7, 0x14, 0x18, - 0xae, 0x8b, 0xad, 0x35, 0xd1, 0x9a, 0x23, 0xd5, 0x54, 0x47, 0xef, 0x8a, 0x14, 0xa1, 0x8b, 0x2d, - 0x06, 0x40, 0x65, 0xc8, 0xf4, 0x6d, 0xac, 0xe9, 0x6d, 0x52, 0xf8, 0xde, 0x0d, 0xf8, 0x66, 0x1f, - 0x5c, 0x5e, 0x82, 0x8c, 0xe7, 0x35, 0x50, 0x0a, 0x62, 0x95, 0xc3, 0x2a, 0xeb, 0xb3, 0xd4, 0xea, - 0x87, 0x55, 0x29, 0x52, 0xbe, 0x07, 0x71, 0xba, 0xf8, 0x2c, 0xa4, 0xb6, 0x5a, 0xf2, 0xb3, 0x8a, - 0x5c, 0x63, 0xbd, 0x9d, 0x46, 0xf3, 0x69, 0x5d, 0x3e, 0xaa, 0xd7, 0x24, 0x11, 0x17, 0xce, 0xe3, - 0x80, 0xfc, 0xb2, 0xee, 0xc8, 0xe2, 0x65, 0x72, 0x17, 0x8a, 0x6d, 0x0f, 0xca, 0x0e, 0x20, 0xb2, - 0x12, 0x5d, 0x2d, 0x6c, 0x3c, 0x7e, 0x6d, 0x69, 0x28, 0x64, 0x04, 0x41, 0xbe, 0x32, 0x15, 0xda, - 0x21, 0x68, 0x20, 0x1f, 0x8a, 0x8e, 0xc4, 0x20, 0x19, 0x12, 0xed, 0x53, 0xdc, 0x7e, 0xce, 0xa3, - 0xf0, 0xb7, 0xa6, 0x0c, 0x4c, 0x53, 0xc5, 0x80, 0xe2, 0x56, 0x09, 0x8f, 0x3f, 0xb4, 0x48, 0x0f, - 0xa8, 0x28, 0x24, 0x87, 0xdd, 0x6b, 0xfc, 0x52, 0x8f, 0x35, 0xa9, 0x1d, 0x25, 0x3c, 0x56, 0xc0, - 0xbb, 0x3e, 0x86, 0xa2, 0x69, 0xb9, 0x0a, 0x29, 0x29, 0xb9, 0x17, 0xa0, 0x85, 0x62, 0x7e, 0x53, - 0xe2, 0xba, 0xea, 0xdb, 0x7c, 0xde, 0xb4, 0xdc, 0xe6, 0xc0, 0x30, 0x18, 0x00, 0xfd, 0x59, 0x04, - 0x96, 0x59, 0xac, 0x54, 0x5e, 0xb1, 0x06, 0x81, 0xc2, 0xd2, 0x5b, 0x7f, 0x8f, 0x68, 0x3b, 0x65, - 0x7a, 0x62, 0x74, 0x59, 0x77, 0x81, 0x4f, 0xf5, 0xcd, 0xc1, 0x25, 0x34, 0xe5, 0x23, 0x28, 0x84, - 0x8f, 0x09, 0x65, 0x20, 0x51, 0xdd, 0xae, 0x57, 0x77, 0xa5, 0x39, 0x54, 0x84, 0xec, 0x56, 0x4b, - 0xae, 0x37, 0x9e, 0x34, 0x95, 0xdd, 0xfa, 0x0f, 0x59, 0x3b, 0xb0, 0xd9, 0xf2, 0xda, 0x81, 0x25, - 0x58, 0x38, 0x6e, 0x36, 0x3e, 0x3d, 0xae, 0x2b, 0xcf, 0x1a, 0x47, 0xdb, 0xad, 0xe3, 0x23, 0xa5, - 0xd1, 0xac, 0xd5, 0x3f, 0x93, 0x62, 0x5e, 0x09, 0x96, 0x90, 0x92, 0xe5, 0x5f, 0x47, 0xa1, 0x70, - 0x60, 0xeb, 0x3d, 0xd5, 0x1e, 0xee, 0xe2, 0xe1, 0xe1, 0x2b, 0xb5, 0x8f, 0x3e, 0x81, 0x05, 0x13, - 0xbf, 0x52, 0xfa, 0x0c, 0xaa, 0x78, 0x29, 0x7d, 0x64, 0x72, 0x17, 0x79, 0xde, 0xc4, 0xaf, 0xb8, - 0x84, 0x06, 0xcf, 0xe8, 0xbf, 0x0e, 0x59, 0xcb, 0xd0, 0x18, 0x27, 0x16, 0x7d, 0x90, 0x6c, 0x90, - 0x09, 0x2c, 0x43, 0x6b, 0x30, 0x34, 0xa1, 0x26, 0xe3, 0x09, 0xea, 0xd8, 0x04, 0x6a, 0x13, 0xbf, - 0x12, 0xd4, 0x9f, 0xc0, 0x02, 0x91, 0x3d, 0x36, 0xbb, 0xf8, 0x94, 0xd9, 0x59, 0x86, 0x36, 0x32, - 0xbb, 0xef, 0xc0, 0x9d, 0xf1, 0xf5, 0x8d, 0x35, 0xe2, 0x6e, 0x8d, 0x2c, 0x8b, 0xe4, 0x38, 0xdc, - 0x28, 0xff, 0x31, 0x02, 0x34, 0x18, 0x0d, 0x5c, 0xd1, 0x1e, 0xa4, 0xfb, 0xf6, 0x0d, 0xc8, 0x13, - 0xb9, 0x7e, 0x0d, 0x18, 0x99, 0xa2, 0x67, 0x64, 0xb9, 0x22, 0xb2, 0x10, 0x2e, 0xb2, 0x1e, 0x9f, - 0x2b, 0x3a, 0x8d, 0xcb, 0x32, 0xbc, 0x66, 0x24, 0x7a, 0x17, 0x72, 0xba, 0x49, 0x9c, 0x31, 0xef, - 0x51, 0x04, 0xdb, 0x46, 0x59, 0x8e, 0xa9, 0x9f, 0xf5, 0x6d, 0x3e, 0xe3, 0x5f, 0x47, 0xe1, 0xee, - 0xbe, 0xea, 0x62, 0x5b, 0x57, 0x0d, 0xfd, 0x4f, 0xb0, 0xf6, 0x54, 0xc7, 0xaf, 0x64, 0xdc, 0xb1, - 0xb1, 0x73, 0x8a, 0x3e, 0x83, 0xf9, 0xb1, 0xed, 0xa0, 0x53, 0xcf, 0x6e, 0xbc, 0x33, 0x5b, 0x34, - 0x12, 0x39, 0xf5, 0xc8, 0x8e, 0xa1, 0xfd, 0xf0, 0xc1, 0xb2, 0x9a, 0xe4, 0x6a, 0x32, 0x83, 0x27, - 0xff, 0x18, 0x12, 0xaa, 0xa3, 0x58, 0x1d, 0xee, 0x71, 0xde, 0x0a, 0x08, 0x1a, 0xb8, 0xba, 0xb1, - 0x76, 0x6a, 0xb4, 0xd7, 0x8e, 0xc4, 0x45, 0x8d, 0xf0, 0x55, 0xaa, 0xd3, 0xea, 0xa0, 0x0f, 0xa1, - 0xe8, 0x9c, 0x5a, 0x03, 0x43, 0x53, 0x4e, 0xd4, 0xf6, 0xf3, 0x8e, 0x6e, 0x18, 0xa1, 0x7e, 0x53, - 0x81, 0x21, 0x37, 0x39, 0x8e, 0xef, 0xd9, 0x5f, 0xa5, 0x00, 0xf9, 0xf3, 0xd9, 0x1f, 0xb8, 0x2a, - 0xf5, 0xe6, 0x15, 0x48, 0x72, 0x37, 0xc2, 0xf6, 0xe8, 0xdd, 0xa9, 0x1e, 0x37, 0xdc, 0x5f, 0xdb, - 0x9e, 0x93, 0x39, 0x23, 0xfa, 0x41, 0xf0, 0x5e, 0x66, 0xe6, 0x1d, 0xd9, 0x9e, 0x13, 0x17, 0x36, - 0xbb, 0x90, 0x70, 0x5c, 0x12, 0x7d, 0x62, 0x34, 0x67, 0x58, 0x9f, 0xc2, 0x3f, 0x3e, 0xf9, 0xb5, - 0x43, 0xc2, 0x26, 0x7c, 0x2e, 0x95, 0x81, 0x9e, 0x41, 0xc6, 0x4b, 0x95, 0x79, 0x7f, 0xf1, 0xd1, - 0xec, 0x02, 0xbd, 0x28, 0x27, 0x62, 0xa0, 0x27, 0x0b, 0x55, 0x20, 0xdb, 0xe3, 0x64, 0x7e, 0x43, - 0x64, 0x85, 0x57, 0x2b, 0x20, 0x24, 0xd0, 0xaa, 0x25, 0xf0, 0x25, 0x83, 0x60, 0x6a, 0xd0, 0x88, - 0x6e, 0x5b, 0x86, 0x41, 0x0e, 0x8d, 0x7a, 0x5a, 0x2f, 0xa2, 0x0b, 0x28, 0xda, 0x25, 0x35, 0x87, - 0xe7, 0x8d, 0xd3, 0x74, 0x3f, 0xdf, 0x9b, 0x39, 0x06, 0x6e, 0xcf, 0xc9, 0x01, 0x76, 0xd4, 0x82, - 0x42, 0x3f, 0xe4, 0x0a, 0x79, 0x82, 0xff, 0x60, 0x5a, 0x96, 0x17, 0x22, 0xde, 0x9e, 0x93, 0x47, - 0xd8, 0xd1, 0x8f, 0x01, 0xb5, 0xc7, 0xfc, 0x44, 0x09, 0x5e, 0x33, 0xcb, 0x51, 0x86, 0xed, 0x39, - 0x79, 0x82, 0x18, 0xf4, 0x39, 0xdc, 0xed, 0x4d, 0x36, 0x69, 0x9e, 0xea, 0xaf, 0x4d, 0x19, 0x61, - 0x8a, 0x23, 0xd8, 0x9e, 0x93, 0xa7, 0x09, 0x2c, 0x7f, 0x02, 0x09, 0xaa, 0x3a, 0x24, 0x61, 0x39, - 0x6e, 0xee, 0x36, 0x5b, 0xcf, 0x9a, 0x2c, 0x00, 0xd5, 0xea, 0x7b, 0xf5, 0xa3, 0xba, 0xd2, 0x6a, - 0xee, 0x91, 0x00, 0xf4, 0x06, 0xdc, 0xe6, 0x80, 0x4a, 0xb3, 0xa6, 0x3c, 0x93, 0x1b, 0x02, 0x15, - 0x2d, 0xaf, 0x06, 0x33, 0xa2, 0x34, 0xc4, 0x9b, 0xad, 0x66, 0x5d, 0x9a, 0xa3, 0xb9, 0x51, 0xad, - 0x26, 0x45, 0x68, 0x6e, 0x24, 0xb7, 0x0e, 0xa4, 0x28, 0xb3, 0xbe, 0xcd, 0x1c, 0x80, 0xe6, 0xa9, - 0xdb, 0x4e, 0x3c, 0x9d, 0x94, 0x52, 0xe5, 0x7f, 0x88, 0x40, 0x9a, 0xb8, 0xe1, 0x86, 0xd9, 0xb1, - 0xd0, 0x23, 0xc8, 0xf4, 0x55, 0x1b, 0x9b, 0xae, 0xef, 0x69, 0x45, 0x07, 0x30, 0x7d, 0x40, 0x11, - 0x5e, 0x83, 0x2a, 0xcd, 0x08, 0x1b, 0x97, 0xb5, 0x77, 0xb6, 0x40, 0xe2, 0xe2, 0x9c, 0xf6, 0x29, - 0xee, 0xa9, 0x44, 0x2a, 0xeb, 0x41, 0xbd, 0xe9, 0x75, 0x67, 0x29, 0xfe, 0x90, 0xa2, 0x3d, 0xd9, - 0x85, 0x7e, 0x10, 0x2a, 0x7a, 0x77, 0xff, 0xfb, 0x0e, 0x14, 0x47, 0x32, 0x9f, 0x4b, 0xca, 0xf9, - 0x15, 0x5a, 0xce, 0xc7, 0x7c, 0xbf, 0xef, 0x95, 0xf3, 0x51, 0x5e, 0xc9, 0x87, 0x16, 0x1b, 0x9f, - 0x71, 0xb1, 0x8f, 0xfc, 0xec, 0x9e, 0x19, 0xdf, 0x1b, 0x3c, 0xa6, 0xcc, 0x5f, 0x92, 0xd8, 0x1f, - 0xc0, 0x7c, 0xcf, 0xd2, 0xf4, 0x0e, 0xc9, 0x63, 0x89, 0xe5, 0xba, 0x7a, 0x0f, 0xf3, 0x2c, 0x67, - 0x26, 0x87, 0x2b, 0x05, 0xb9, 0x09, 0x12, 0x3d, 0x81, 0x94, 0xe8, 0x5a, 0xa5, 0x69, 0x04, 0x98, - 0xd5, 0x63, 0x8a, 0xfc, 0x9e, 0x73, 0xa3, 0x2d, 0x28, 0x98, 0xf8, 0x2c, 0xd8, 0x64, 0xcd, 0x84, - 0x7c, 0x4a, 0xae, 0x89, 0xcf, 0x26, 0x77, 0x58, 0x73, 0xa6, 0x8f, 0xd1, 0xd0, 0xa7, 0x90, 0x0f, - 0x07, 0x3b, 0xb8, 0x46, 0xb0, 0xcb, 0xf5, 0x83, 0x91, 0x6e, 0x0b, 0x52, 0x22, 0xca, 0x65, 0xaf, - 0x11, 0xe5, 0x04, 0x33, 0xda, 0x24, 0x29, 0xc4, 0x99, 0xeb, 0x67, 0x35, 0x39, 0xbf, 0x2c, 0xbb, - 0x38, 0x5f, 0xce, 0x92, 0x15, 0x4e, 0x68, 0xa5, 0x66, 0x4d, 0x0f, 0xae, 0xa1, 0x1d, 0x00, 0xef, - 0x29, 0x82, 0x43, 0x6f, 0x18, 0xa6, 0x97, 0xe7, 0x07, 0x82, 0xd0, 0x9f, 0x92, 0x1c, 0xe0, 0x46, - 0xfb, 0x90, 0x11, 0xee, 0x98, 0x15, 0xce, 0xd3, 0xfd, 0xd6, 0x78, 0x70, 0x10, 0x21, 0xc1, 0x93, - 0x40, 0x6a, 0x06, 0x03, 0xab, 0x0e, 0xe6, 0xd5, 0xf3, 0xe3, 0x19, 0x6b, 0x06, 0x66, 0x5c, 0xd5, - 0x53, 0xd5, 0xec, 0xe2, 0x3d, 0xc2, 0xbf, 0x19, 0x2d, 0x45, 0x64, 0x26, 0x0a, 0x35, 0x41, 0xa2, - 0x5b, 0x16, 0x8c, 0x35, 0x12, 0xdd, 0xb5, 0xb7, 0x85, 0xe1, 0x92, 0x5d, 0x9b, 0x1a, 0x6f, 0xa8, - 0x4e, 0xed, 0xfb, 0x31, 0xe7, 0x7b, 0x50, 0xe8, 0x58, 0x76, 0x4f, 0x75, 0x15, 0x61, 0x3c, 0xf3, - 0x7e, 0x9f, 0xed, 0xcb, 0xf3, 0xe5, 0xfc, 0x16, 0xc5, 0x0a, 0xc3, 0xc9, 0x77, 0x82, 0x9f, 0x68, - 0x53, 0x84, 0xe6, 0x5b, 0x34, 0x92, 0xbe, 0xf3, 0xda, 0xcd, 0x9a, 0x10, 0x91, 0x9b, 0x90, 0xa4, - 0xe5, 0x90, 0x53, 0x5a, 0xa0, 0x3b, 0x7e, 0xcd, 0xd2, 0x4a, 0xe6, 0x52, 0xd0, 0x1e, 0x14, 0x34, - 0x02, 0x21, 0xb5, 0x3a, 0xeb, 0xe0, 0xdd, 0xa6, 0x72, 0x97, 0xa7, 0xc8, 0x15, 0x2e, 0x56, 0x34, - 0x6a, 0x04, 0x33, 0xeb, 0xf2, 0xb5, 0x20, 0xdd, 0x51, 0x7b, 0xba, 0xa1, 0x63, 0xa7, 0x74, 0x87, - 0xca, 0xf9, 0xf0, 0x52, 0x7b, 0x1e, 0xbd, 0xcd, 0x11, 0x21, 0x5c, 0x08, 0xf1, 0xcc, 0x9a, 0x02, - 0x86, 0xe4, 0xf8, 0xee, 0x8e, 0x9b, 0xb5, 0xb8, 0xcd, 0x09, 0xdd, 0xec, 0x50, 0xb3, 0xe6, 0x5f, - 0x1a, 0xba, 0x0f, 0xf0, 0x52, 0xc7, 0xaf, 0x94, 0x17, 0x03, 0x6c, 0x0f, 0x4b, 0xa5, 0x60, 0x61, - 0x4e, 0xe0, 0x9f, 0x12, 0x30, 0xfa, 0x08, 0x32, 0x1a, 0xee, 0x63, 0x53, 0x73, 0x5a, 0x66, 0xe9, - 0x0d, 0x5a, 0x69, 0xdc, 0xba, 0x38, 0x5f, 0xce, 0xd4, 0x04, 0x90, 0x7b, 0x51, 0x9f, 0x0a, 0x7d, - 0x0e, 0x39, 0xf6, 0x81, 0xb5, 0x96, 0xb9, 0x39, 0x2c, 0x2d, 0xd2, 0x45, 0x3f, 0x9c, 0xf1, 0x50, - 0xfc, 0xb6, 0x97, 0x77, 0x53, 0x50, 0x0b, 0x48, 0x93, 0x43, 0xb2, 0xd1, 0x1f, 0x41, 0x4e, 0xe8, - 0xf1, 0x8e, 0x75, 0xe2, 0x94, 0xbe, 0x76, 0x69, 0x1b, 0x7f, 0x74, 0xac, 0x7d, 0x9f, 0x55, 0x78, - 0xa9, 0xa0, 0x34, 0xf4, 0x19, 0xe4, 0xbd, 0x0b, 0x4b, 0xab, 0xef, 0x3a, 0xa5, 0x37, 0x2f, 0xad, - 0x5e, 0xc7, 0xcc, 0x90, 0xf3, 0xb6, 0xfa, 0xf4, 0x86, 0x23, 0xf0, 0x85, 0xee, 0x41, 0x46, 0xb3, - 0xad, 0x3e, 0x8b, 0x16, 0x6f, 0xad, 0x44, 0x56, 0x63, 0x5e, 0xef, 0xc5, 0xb6, 0xfa, 0x34, 0x0c, - 0x28, 0x50, 0xb0, 0x71, 0xdf, 0x50, 0xdb, 0xb8, 0x47, 0xe2, 0x98, 0xd5, 0x29, 0x2d, 0xd1, 0xd1, - 0x37, 0x66, 0xde, 0x48, 0x8f, 0x59, 0x28, 0x66, 0x40, 0x5e, 0xab, 0x83, 0x8e, 0x01, 0xd4, 0x81, - 0xa6, 0xbb, 0x4a, 0xcf, 0xd2, 0x70, 0x69, 0xf9, 0xd2, 0xf7, 0x03, 0xa3, 0xc2, 0x2b, 0x84, 0x71, - 0xdf, 0xd2, 0xb0, 0x77, 0x27, 0x26, 0x00, 0xe8, 0x23, 0xc8, 0xd2, 0xa5, 0x7d, 0x6e, 0x9d, 0x10, - 0xdd, 0x5c, 0xa1, 0x8b, 0x9b, 0xe7, 0x67, 0x99, 0xa9, 0xd9, 0x56, 0x7f, 0xc7, 0x3a, 0xa1, 0x1a, - 0xc3, 0xff, 0xd4, 0x90, 0x03, 0xb9, 0x6e, 0x5b, 0xf1, 0x1d, 0xe7, 0x3d, 0x7a, 0x8a, 0x1f, 0xcf, - 0x38, 0x97, 0x27, 0xd5, 0x09, 0xae, 0xf4, 0x96, 0x88, 0x00, 0x4f, 0xaa, 0x02, 0xe6, 0xc8, 0xd9, - 0x6e, 0xdb, 0xfb, 0x20, 0x15, 0x21, 0x6b, 0xf0, 0x71, 0x03, 0x28, 0x07, 0x2b, 0x42, 0x86, 0x61, - 0x26, 0xd0, 0x04, 0xde, 0x09, 0x54, 0x68, 0x35, 0xc5, 0xce, 0xec, 0xfe, 0xec, 0x11, 0xbe, 0xc0, - 0xb8, 0x2b, 0x4e, 0xab, 0x43, 0x0f, 0xb6, 0x0d, 0x39, 0x6b, 0xe0, 0x9e, 0x58, 0x03, 0x53, 0x53, - 0x3a, 0xcf, 0x9d, 0xd2, 0xdb, 0x74, 0xb5, 0x57, 0xea, 0xda, 0x78, 0xab, 0x6b, 0x71, 0x41, 0x5b, - 0xbb, 0x8e, 0x9c, 0x15, 0x52, 0xb7, 0x9e, 0x3b, 0xe8, 0xa7, 0x90, 0xd5, 0x4d, 0x7f, 0x8c, 0x07, - 0x57, 0x1f, 0x03, 0x89, 0xca, 0xa3, 0x61, 0x7a, 0x43, 0x00, 0x97, 0x49, 0x46, 0xf8, 0x00, 0x0a, - 0x56, 0xa7, 0x63, 0xe8, 0x26, 0x56, 0x6c, 0xac, 0x3a, 0x96, 0x59, 0x7a, 0x27, 0xb0, 0x83, 0x79, - 0x8e, 0x93, 0x29, 0x0a, 0x95, 0x21, 0xe3, 0xe2, 0x5e, 0xdf, 0xb2, 0x55, 0x7b, 0x58, 0x7a, 0x37, - 0x78, 0x95, 0xe8, 0x81, 0xd1, 0x09, 0x2c, 0x0e, 0x4c, 0x7c, 0xd6, 0xb7, 0x1c, 0xac, 0x29, 0x63, - 0xb9, 0xe5, 0x2a, 0xf5, 0x71, 0x0f, 0xf8, 0xa4, 0xee, 0x1e, 0x0b, 0xca, 0x89, 0x49, 0xe6, 0xdd, - 0xc1, 0x44, 0xb4, 0x86, 0xbe, 0x05, 0x0b, 0xba, 0xa3, 0x04, 0xb3, 0x76, 0x85, 0xf8, 0xba, 0xd2, - 0x7b, 0x81, 0x29, 0x21, 0xdd, 0x19, 0xcd, 0xf8, 0xd1, 0x4f, 0xa0, 0x68, 0x58, 0x6d, 0xd5, 0xd0, - 0xdd, 0xa1, 0xe8, 0x86, 0xbe, 0x4f, 0x35, 0xe0, 0x9b, 0x33, 0x2a, 0xe9, 0x1e, 0xe7, 0x66, 0x3d, - 0x51, 0xb9, 0x60, 0x84, 0xbe, 0xd1, 0xcf, 0x22, 0xb0, 0xf2, 0x9a, 0xd6, 0x99, 0x53, 0xfa, 0xe0, - 0xd2, 0x4b, 0xc5, 0x19, 0x7a, 0x67, 0x6f, 0x5d, 0xd6, 0x3b, 0x73, 0x16, 0x7f, 0x15, 0x81, 0xf9, - 0xb1, 0xd4, 0x01, 0xfd, 0x04, 0x52, 0xa6, 0xa5, 0x05, 0x6e, 0xb5, 0xeb, 0xfc, 0x0c, 0x92, 0x4d, - 0x4b, 0x63, 0x97, 0xda, 0x8f, 0xba, 0xba, 0x7b, 0x3a, 0x38, 0x59, 0x6b, 0x5b, 0xbd, 0x75, 0x6f, - 0x72, 0xda, 0x89, 0xff, 0xf7, 0x7a, 0xff, 0x79, 0x77, 0x9d, 0xfe, 0xd5, 0x3f, 0x59, 0x63, 0x6c, - 0x72, 0x92, 0x48, 0x6d, 0x68, 0xe8, 0x43, 0x28, 0xe2, 0xb3, 0xbe, 0x6e, 0x07, 0xd2, 0xe7, 0x68, - 0xc0, 0x21, 0x16, 0x7c, 0x24, 0xb1, 0x1e, 0x7e, 0xef, 0xf8, 0xeb, 0x28, 0x14, 0x47, 0xc2, 0x37, - 0xa9, 0x17, 0x68, 0x6b, 0x27, 0x54, 0x2f, 0x10, 0xc8, 0x25, 0x55, 0x4c, 0xf0, 0xad, 0x50, 0xec, - 0xa6, 0xef, 0xc6, 0xc2, 0xf7, 0x79, 0x89, 0x2b, 0xdc, 0xe7, 0x7d, 0x07, 0xee, 0xe8, 0x8e, 0x62, - 0x5a, 0xa6, 0x68, 0xbb, 0x7a, 0x15, 0x7a, 0xf0, 0x8d, 0xce, 0x2d, 0xdd, 0x69, 0x5a, 0x26, 0x6b, - 0xb8, 0x7a, 0xab, 0xf6, 0x9f, 0xf3, 0xa4, 0xc6, 0x9f, 0xf3, 0x78, 0x9d, 0xcb, 0xb8, 0x94, 0x58, - 0xfc, 0x65, 0x04, 0x32, 0xc1, 0xd7, 0xb0, 0xd1, 0x70, 0xc7, 0x6d, 0xac, 0x86, 0xba, 0xe6, 0xeb, - 0x84, 0xf0, 0x2e, 0xc4, 0x66, 0xdf, 0x05, 0x7e, 0xb4, 0x7f, 0x0a, 0xd9, 0x40, 0x5c, 0x1e, 0xed, - 0x8a, 0x44, 0xae, 0xd1, 0x15, 0x79, 0x1b, 0x92, 0x3c, 0x18, 0x31, 0xc5, 0xca, 0x73, 0xee, 0x04, - 0x0b, 0x44, 0x89, 0xcf, 0x49, 0x10, 0xe2, 0xa3, 0xff, 0x7b, 0x0c, 0x72, 0xc1, 0xb8, 0x4d, 0x3c, - 0x97, 0x6e, 0xb6, 0x6d, 0x1a, 0x34, 0xe9, 0xe8, 0x31, 0xef, 0x11, 0x84, 0x00, 0x93, 0x68, 0xde, - 0xd3, 0x4d, 0x85, 0x5e, 0xbc, 0x87, 0x94, 0x37, 0xdd, 0xd3, 0xcd, 0xa7, 0x04, 0x4a, 0x49, 0xd4, - 0x33, 0x4e, 0x12, 0x0b, 0x91, 0xa8, 0x67, 0x8c, 0x64, 0x91, 0xa6, 0xc2, 0xb6, 0x4b, 0xeb, 0xd5, - 0x58, 0x20, 0xc5, 0xb5, 0xdd, 0xe0, 0x23, 0xa1, 0xc4, 0x84, 0x47, 0x42, 0xc8, 0x84, 0x82, 0x9f, - 0xa9, 0xbc, 0x32, 0xb1, 0x4d, 0x15, 0x27, 0xbb, 0x51, 0xb9, 0x46, 0xaa, 0xe2, 0x7f, 0x10, 0x41, - 0xc2, 0x9f, 0x3b, 0x41, 0xe0, 0xe2, 0xdf, 0x47, 0x20, 0x1f, 0x22, 0x43, 0x0d, 0x28, 0xd2, 0x81, - 0xc7, 0xda, 0xb9, 0xf7, 0xbc, 0x77, 0xad, 0x04, 0x3d, 0xb1, 0xdc, 0xcc, 0x5b, 0x01, 0x94, 0x86, - 0x3e, 0x81, 0x02, 0x13, 0xe5, 0x3d, 0xa7, 0x09, 0xab, 0x5f, 0x8e, 0x4a, 0x0a, 0xbf, 0xa9, 0xc9, - 0x59, 0x3e, 0x4c, 0x0b, 0xbe, 0x14, 0x58, 0x34, 0x21, 0x1b, 0x48, 0x85, 0x66, 0xd0, 0xfb, 0x6f, - 0x43, 0xdc, 0xf3, 0x42, 0xb3, 0x76, 0x4d, 0x5d, 0xdf, 0x35, 0xfd, 0x22, 0x02, 0x0b, 0x93, 0x52, - 0x92, 0x90, 0x3d, 0x31, 0x45, 0x9a, 0xc9, 0x9e, 0xee, 0x07, 0x53, 0x45, 0xa6, 0x5c, 0xe2, 0xf6, - 0xda, 0x4f, 0x16, 0xdf, 0xf1, 0x54, 0x9c, 0xe9, 0x56, 0x31, 0xa4, 0xe2, 0xa4, 0xf8, 0x0b, 0x2a, - 0xf9, 0xbf, 0xc6, 0xa0, 0x10, 0x0e, 0x48, 0xe8, 0x29, 0x24, 0xbb, 0x86, 0x75, 0xa2, 0x1a, 0xbc, - 0x4b, 0xfb, 0xbd, 0x6b, 0xc5, 0xb5, 0xb5, 0x27, 0x54, 0xc6, 0xf6, 0x9c, 0xcc, 0xa5, 0x21, 0x07, - 0xe6, 0x6d, 0xdc, 0xd5, 0x2d, 0x53, 0x35, 0x94, 0x93, 0x21, 0x3b, 0x51, 0xbe, 0xb3, 0xf5, 0xeb, - 0x0d, 0x21, 0x73, 0x71, 0x9b, 0x43, 0x4a, 0xb8, 0x3d, 0x27, 0x17, 0xed, 0x30, 0x08, 0xf5, 0xa0, - 0x18, 0x1c, 0xd4, 0xb6, 0x5e, 0xf1, 0x16, 0x78, 0xf5, 0xa6, 0x43, 0xca, 0xd6, 0xab, 0x6d, 0x9a, - 0x48, 0x07, 0x00, 0x8b, 0x1f, 0x43, 0x71, 0x64, 0x52, 0xa8, 0x0c, 0x49, 0x46, 0xc3, 0xa3, 0x11, - 0x7c, 0x79, 0xbe, 0x9c, 0x64, 0x44, 0x32, 0xc7, 0xf0, 0xb3, 0xb8, 0x0d, 0xf9, 0x90, 0x78, 0x0e, - 0x2e, 0x40, 0x92, 0xed, 0x65, 0x50, 0x97, 0x37, 0x01, 0xd2, 0x22, 0x71, 0x28, 0xaf, 0x42, 0xc6, - 0xcb, 0xc2, 0x51, 0x0e, 0xd2, 0xb5, 0xc6, 0x61, 0x65, 0x73, 0xaf, 0x5e, 0x93, 0xe6, 0x50, 0x1e, - 0x32, 0x72, 0xbd, 0x52, 0xa3, 0xfd, 0x44, 0x29, 0xf2, 0xdd, 0xf4, 0x5f, 0xfc, 0x62, 0x39, 0xc2, - 0x03, 0x41, 0x52, 0x4a, 0xed, 0xc4, 0xd3, 0x48, 0xba, 0x55, 0xfe, 0x9f, 0x34, 0xa0, 0x9a, 0xea, - 0xaa, 0x64, 0x03, 0xae, 0xd0, 0x75, 0x8b, 0x5e, 0x62, 0x39, 0xe1, 0x4e, 0x4a, 0xec, 0x46, 0x9d, - 0x94, 0x89, 0x7d, 0xb5, 0xf8, 0x4d, 0xfa, 0x6a, 0xd7, 0x6a, 0xef, 0x8d, 0xf7, 0x02, 0x92, 0x37, - 0xe8, 0x05, 0x3c, 0x85, 0x14, 0xcb, 0x68, 0xd9, 0x73, 0x9d, 0xe9, 0xad, 0x8a, 0xf1, 0x83, 0xe1, - 0x4d, 0x1d, 0xa7, 0x6e, 0xba, 0xf6, 0xd0, 0xbb, 0xc9, 0x67, 0x30, 0xbf, 0x8b, 0x92, 0xbe, 0x7e, - 0x17, 0x65, 0x3c, 0x9f, 0xcf, 0x4c, 0xcf, 0xe7, 0x7f, 0x0c, 0xdc, 0x06, 0x44, 0x36, 0x0c, 0x97, - 0x5e, 0x6a, 0x4f, 0x58, 0x0e, 0x53, 0x7a, 0x9e, 0x0e, 0xe7, 0xec, 0xc0, 0xd7, 0xe2, 0x11, 0x00, - 0x4f, 0xd8, 0xcd, 0x8e, 0x35, 0x83, 0xc3, 0x5e, 0x82, 0x14, 0x71, 0x84, 0x7d, 0xcc, 0xb4, 0xd3, - 0x0b, 0x8e, 0x1c, 0xc8, 0x2d, 0xaa, 0x0f, 0xb9, 0xe0, 0x16, 0x22, 0x09, 0x62, 0xcf, 0xf1, 0x90, - 0xe9, 0xb9, 0x4c, 0xfe, 0x44, 0x3b, 0x90, 0xf0, 0x43, 0xf8, 0xf4, 0x37, 0xa2, 0x53, 0xcf, 0x86, - 0x4c, 0x57, 0x66, 0x22, 0xbe, 0x1b, 0x7d, 0x1c, 0x59, 0xfc, 0xf3, 0x28, 0xe4, 0x82, 0xcb, 0x44, - 0x6f, 0x43, 0x8a, 0x2d, 0x94, 0x3d, 0x43, 0x0d, 0xbb, 0x05, 0x81, 0x42, 0x4d, 0xc8, 0x3b, 0x03, - 0xfb, 0xa5, 0xfe, 0x52, 0x35, 0x94, 0xae, 0xa5, 0x1a, 0x74, 0x3a, 0x85, 0x8d, 0xfb, 0xd3, 0x9e, - 0x79, 0x70, 0xda, 0x27, 0x96, 0x6a, 0x88, 0x2e, 0x86, 0x13, 0x80, 0xa1, 0x6f, 0x7a, 0xb7, 0x34, - 0x0a, 0xf7, 0x49, 0xec, 0xf2, 0xb3, 0xc0, 0xd5, 0x5f, 0x4c, 0x40, 0x34, 0x79, 0xd9, 0x27, 0x89, - 0xc2, 0xfc, 0x88, 0xb1, 0x39, 0xe8, 0xf9, 0x7d, 0x74, 0x2f, 0x0a, 0x33, 0xba, 0xba, 0x39, 0xe8, - 0xf9, 0x51, 0xd8, 0xf6, 0x61, 0x22, 0x0a, 0x7b, 0xde, 0xa7, 0xfc, 0x6f, 0x59, 0x28, 0x1c, 0x0d, - 0xfb, 0x41, 0x6f, 0x73, 0xad, 0x4b, 0x89, 0x49, 0x57, 0x0f, 0xd1, 0xab, 0x5f, 0x3d, 0x5c, 0xf2, - 0x13, 0x02, 0xa6, 0x73, 0xf1, 0x4b, 0x74, 0xae, 0x06, 0x71, 0xfa, 0x08, 0x3c, 0x41, 0xcf, 0x66, - 0x9a, 0x93, 0x0b, 0xaf, 0x76, 0x2d, 0xf0, 0x0e, 0x9c, 0x72, 0xa3, 0x1f, 0x42, 0x8e, 0x6e, 0x6e, - 0x0f, 0xf7, 0x4e, 0xb0, 0x2d, 0x7c, 0xcb, 0xc3, 0xd9, 0xa4, 0x91, 0x5d, 0xde, 0xa7, 0x8c, 0xa2, - 0x6b, 0x81, 0x3d, 0x88, 0x83, 0x1e, 0x42, 0x42, 0x35, 0x74, 0xea, 0x68, 0x5e, 0xf7, 0xe3, 0x02, - 0x46, 0x88, 0xbe, 0x0f, 0x79, 0xd5, 0xb6, 0xd5, 0x21, 0x7f, 0x26, 0xaf, 0x51, 0x67, 0xc2, 0xbd, - 0xe4, 0xc5, 0xf9, 0x72, 0xb6, 0x42, 0x90, 0xf4, 0x65, 0xbc, 0xd8, 0x88, 0xac, 0xea, 0x81, 0x42, - 0xb7, 0x27, 0x99, 0x9b, 0xdd, 0x9e, 0xc0, 0x4d, 0xbc, 0xfc, 0xb8, 0xc3, 0xce, 0xde, 0xc0, 0x61, - 0xff, 0x14, 0x16, 0xc5, 0x0b, 0x41, 0x22, 0xd0, 0xbf, 0x61, 0x0b, 0xfc, 0x80, 0xa1, 0x7c, 0x71, - 0xbe, 0x5c, 0x92, 0x7d, 0x2a, 0x7f, 0xb9, 0xac, 0xd6, 0x21, 0x3b, 0x55, 0xb2, 0x27, 0xe2, 0xb5, - 0x80, 0xeb, 0xce, 0x5f, 0xdf, 0x75, 0x87, 0xe3, 0x6e, 0xe1, 0x46, 0x71, 0x77, 0x3c, 0x0c, 0x14, - 0xa7, 0x87, 0x81, 0x67, 0xa3, 0x61, 0x40, 0xba, 0xbc, 0x45, 0x19, 0x56, 0xe0, 0x4b, 0x42, 0xc0, - 0xcf, 0xa3, 0x00, 0xbe, 0x7e, 0xa3, 0x6f, 0xc3, 0xdd, 0xfe, 0xe9, 0xd0, 0xd1, 0xdb, 0xaa, 0xa1, - 0xd8, 0xb8, 0x6f, 0x63, 0x07, 0x9b, 0x2c, 0xab, 0xa6, 0x4e, 0x23, 0x27, 0xdf, 0x11, 0x68, 0x39, - 0x84, 0x45, 0x1f, 0xc3, 0x1d, 0xc3, 0xea, 0x4e, 0xe2, 0x0b, 0xf6, 0x02, 0x6e, 0x73, 0x9a, 0x11, - 0x66, 0x15, 0xa0, 0xad, 0xf6, 0xd5, 0x13, 0xdd, 0xf0, 0xdb, 0x03, 0x1f, 0x5f, 0xd5, 0x36, 0xd7, - 0xaa, 0x9e, 0x08, 0xf1, 0x44, 0xc3, 0x17, 0x5a, 0x7e, 0x1b, 0xc0, 0xc7, 0xd3, 0xcb, 0xdd, 0xbd, - 0x3d, 0x3f, 0x81, 0xe3, 0xd7, 0xc4, 0x3c, 0x80, 0xed, 0x8e, 0x44, 0x93, 0x71, 0xbf, 0x1e, 0x99, - 0xc1, 0xaf, 0xf3, 0x0b, 0xd7, 0x8f, 0x20, 0x4e, 0x7f, 0x7d, 0x92, 0x86, 0x78, 0xbd, 0x79, 0xbc, - 0x2f, 0xcd, 0xa1, 0x0c, 0x24, 0x2a, 0x7b, 0x8d, 0xca, 0xa1, 0x14, 0x41, 0x0b, 0x20, 0xed, 0x1f, - 0xef, 0x1d, 0x35, 0xe4, 0xfa, 0x93, 0x46, 0xab, 0xa9, 0x50, 0x82, 0x68, 0xc0, 0x91, 0xff, 0x5d, - 0x1c, 0x24, 0xe6, 0x45, 0x6f, 0xea, 0xca, 0xa7, 0x77, 0x66, 0x5e, 0x7f, 0xc7, 0x1b, 0xd6, 0xfa, - 0xf8, 0x57, 0x9f, 0x6d, 0x26, 0xbe, 0xa2, 0x6c, 0x33, 0x79, 0x83, 0x6c, 0x33, 0x75, 0x03, 0xe7, - 0xf5, 0x87, 0xce, 0x0a, 0x03, 0x1a, 0xf2, 0xcb, 0x28, 0x40, 0x40, 0x37, 0x7e, 0x10, 0xfc, 0xe9, - 0xf5, 0xf4, 0xcb, 0xde, 0x91, 0x32, 0x6c, 0x7b, 0x4e, 0xfc, 0x30, 0xfb, 0x09, 0xa4, 0x35, 0x9e, - 0x75, 0xf1, 0xe4, 0xec, 0xbd, 0x99, 0x93, 0xb3, 0xed, 0x39, 0xd9, 0x63, 0x46, 0x1f, 0x87, 0x7e, - 0x71, 0xf7, 0x60, 0x26, 0x63, 0xde, 0x16, 0x4f, 0x86, 0x2b, 0x90, 0x64, 0x09, 0x07, 0x57, 0xb6, - 0xa9, 0x3f, 0xfd, 0x1a, 0x31, 0x0d, 0x52, 0x0e, 0x33, 0x46, 0x5e, 0xc6, 0xa5, 0x20, 0x31, 0x30, - 0x75, 0xcb, 0x7c, 0x5f, 0x0e, 0x3e, 0x56, 0x15, 0x7d, 0x45, 0x62, 0xfd, 0xf4, 0x6f, 0xd5, 0xc5, - 0x1a, 0x7b, 0x35, 0x72, 0x6c, 0xbe, 0xf4, 0x00, 0x11, 0x54, 0x00, 0xe0, 0x78, 0xdd, 0xec, 0x4a, - 0x51, 0x5a, 0xfc, 0x91, 0x54, 0x97, 0x7c, 0xc5, 0xde, 0xff, 0x3e, 0x48, 0xa3, 0xbf, 0x3d, 0x0b, - 0xbc, 0x1f, 0x99, 0x87, 0xfc, 0xfe, 0xd3, 0x6a, 0xf5, 0xa8, 0xb1, 0x5f, 0x3f, 0x3c, 0xaa, 0xec, - 0x1f, 0xb0, 0x57, 0x90, 0x47, 0xa4, 0x72, 0x6c, 0x35, 0x6a, 0x52, 0xf4, 0xfd, 0xef, 0x43, 0x71, - 0x44, 0x21, 0x10, 0x40, 0xf2, 0xe0, 0x78, 0x73, 0xaf, 0x51, 0x9d, 0xf8, 0xfe, 0x04, 0x65, 0x21, - 0xd5, 0xda, 0xda, 0xda, 0x6b, 0x34, 0xeb, 0x52, 0xec, 0xfd, 0x6f, 0x40, 0x2e, 0x98, 0x90, 0x22, - 0x09, 0x72, 0x3f, 0x6a, 0x35, 0xeb, 0xca, 0x56, 0xa5, 0xb1, 0x77, 0x2c, 0x93, 0x19, 0x20, 0x28, - 0x70, 0xbf, 0x22, 0x60, 0x91, 0xcd, 0xd5, 0xdf, 0xfc, 0xd7, 0xd2, 0xdc, 0x6f, 0x2e, 0x96, 0x22, - 0xbf, 0xbd, 0x58, 0x8a, 0xfc, 0xee, 0x62, 0x29, 0xf2, 0x9f, 0x17, 0x4b, 0x91, 0xbf, 0xfe, 0x62, - 0x69, 0xee, 0xb7, 0x5f, 0x2c, 0xcd, 0xfd, 0xee, 0x8b, 0xa5, 0xb9, 0x1f, 0x25, 0xd9, 0x3f, 0x1a, - 0xf0, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x4a, 0xa9, 0x99, 0xd2, 0x9f, 0x40, 0x00, 0x00, + 0x1e, 0x3a, 0xe9, 0xa5, 0xa7, 0xb6, 0x39, 0xf4, 0xd8, 0x36, 0xd3, 0xc9, 0x4c, 0x73, 0xeb, 0xe4, + 0xd2, 0xde, 0x7a, 0xe8, 0xa1, 0x93, 0x63, 0x7a, 0xcb, 0x89, 0xd3, 0xd2, 0x97, 0xde, 0x7a, 0xcc, + 0x8c, 0x67, 0x3a, 0xd3, 0xf9, 0x5f, 0xfb, 0xc0, 0x83, 0x02, 0x49, 0x37, 0x07, 0x7b, 0xb8, 0xdf, + 0xeb, 0x7f, 0x7d, 0xef, 0xff, 0x87, 0xe0, 0xbe, 0xf3, 0xc2, 0x58, 0x6f, 0xab, 0xae, 0x6a, 0x58, + 0xdd, 0x75, 0x0d, 0x3b, 0xed, 0xfe, 0xc9, 0xba, 0xe3, 0xda, 0x83, 0xb6, 0x3b, 0xb0, 0xb1, 0xb6, + 0xd6, 0xb7, 0x2d, 0xd7, 0x42, 0xb7, 0xdb, 0x56, 0xfb, 0xb9, 0x6d, 0xa9, 0xed, 0xd3, 0x35, 0xe7, + 0x85, 0x41, 0xfe, 0x3b, 0x51, 0x1d, 0xbc, 0x58, 0x1a, 0xb8, 0xba, 0xb1, 0x7e, 0x6a, 0xb4, 0xd7, + 0x5d, 0xbd, 0x87, 0x1d, 0x57, 0xed, 0xf5, 0x19, 0xc3, 0x62, 0x79, 0x82, 0xd4, 0xbe, 0xad, 0xbf, + 0xd4, 0x0d, 0xdc, 0xc5, 0x9c, 0xe6, 0x36, 0xa1, 0x71, 0x87, 0x7d, 0xec, 0xb0, 0xff, 0x73, 0xf0, + 0x1b, 0x5d, 0x6c, 0xad, 0x77, 0xb1, 0xa5, 0x9b, 0x1a, 0x3e, 0x5b, 0x6f, 0x5b, 0x66, 0x47, 0xef, + 0x72, 0xd4, 0x42, 0xd7, 0xea, 0x5a, 0xf4, 0xcf, 0x75, 0xf2, 0x17, 0x83, 0x96, 0x7f, 0x96, 0x80, + 0x5b, 0x5b, 0x96, 0x8d, 0xf5, 0xae, 0xb9, 0x8b, 0x87, 0x32, 0xee, 0x60, 0x1b, 0x9b, 0x6d, 0x8c, + 0x56, 0x20, 0xe1, 0xaa, 0x27, 0x06, 0x2e, 0x45, 0x56, 0x22, 0xab, 0xf9, 0x4d, 0xf8, 0xcd, 0xf9, + 0xf2, 0xdc, 0x97, 0xe7, 0xcb, 0xd1, 0x46, 0x4d, 0x66, 0x08, 0xf4, 0x00, 0x12, 0x74, 0x94, 0x52, + 0x94, 0x52, 0x14, 0x39, 0x45, 0xaa, 0x41, 0x80, 0x84, 0x8c, 0x62, 0x51, 0x09, 0xe2, 0xa6, 0xda, + 0xc3, 0xa5, 0xd8, 0x4a, 0x64, 0x35, 0xb3, 0x19, 0x27, 0x54, 0x32, 0x85, 0xa0, 0x5d, 0x48, 0xbf, + 0x54, 0x0d, 0x5d, 0xd3, 0xdd, 0x61, 0x29, 0xbe, 0x12, 0x59, 0x2d, 0x6c, 0xbc, 0xb7, 0x36, 0x71, + 0xab, 0xd6, 0xaa, 0x96, 0xe9, 0xb8, 0xb6, 0xaa, 0x9b, 0xee, 0x53, 0xce, 0xc0, 0x05, 0x79, 0x02, + 0xd0, 0x43, 0x98, 0x77, 0x4e, 0x55, 0x1b, 0x6b, 0x4a, 0xdf, 0xc6, 0x1d, 0xfd, 0x4c, 0x31, 0xb0, + 0x59, 0x4a, 0xac, 0x44, 0x56, 0x13, 0x9c, 0xb4, 0xc8, 0xd0, 0x07, 0x14, 0xbb, 0x87, 0x4d, 0x74, + 0x04, 0x19, 0xcb, 0x54, 0x34, 0x6c, 0x60, 0x17, 0x97, 0x92, 0x74, 0xfc, 0x8f, 0xa6, 0x8c, 0x3f, + 0x61, 0x83, 0xd6, 0x2a, 0x6d, 0x57, 0xb7, 0x4c, 0x31, 0x0f, 0xcb, 0xac, 0x51, 0x41, 0x5c, 0xea, + 0xa0, 0xaf, 0xa9, 0x2e, 0x2e, 0xa5, 0x6e, 0x2c, 0xf5, 0x98, 0x0a, 0x42, 0x7b, 0x90, 0xe8, 0xa9, + 0x6e, 0xfb, 0xb4, 0x94, 0xa6, 0x12, 0x1f, 0x5e, 0x41, 0xe2, 0x3e, 0xe1, 0xe3, 0x02, 0x99, 0x90, + 0xf2, 0x33, 0x48, 0xb2, 0x71, 0x50, 0x1e, 0x32, 0xcd, 0x96, 0x52, 0xa9, 0x1e, 0x35, 0x5a, 0x4d, + 0x69, 0x0e, 0xe5, 0x20, 0x2d, 0xd7, 0x0f, 0x8f, 0xe4, 0x46, 0xf5, 0x48, 0x8a, 0x90, 0xaf, 0xc3, + 0xfa, 0x91, 0xd2, 0x3c, 0xde, 0xdb, 0x93, 0xa2, 0xa8, 0x08, 0x59, 0xf2, 0x55, 0xab, 0x6f, 0x55, + 0x8e, 0xf7, 0x8e, 0xa4, 0x18, 0xca, 0x42, 0xaa, 0x5a, 0x39, 0xac, 0x56, 0x6a, 0x75, 0x29, 0xbe, + 0x18, 0xff, 0xd5, 0x2f, 0x97, 0xe6, 0xca, 0x0f, 0x21, 0x41, 0x87, 0x43, 0x00, 0xc9, 0xc3, 0xc6, + 0xfe, 0xc1, 0x5e, 0x5d, 0x9a, 0x43, 0x69, 0x88, 0x6f, 0x11, 0x11, 0x11, 0xc2, 0x71, 0x50, 0x91, + 0x8f, 0x1a, 0x95, 0x3d, 0x29, 0xca, 0x38, 0xbe, 0x1b, 0xff, 0xef, 0x5f, 0x2c, 0x47, 0xca, 0xff, + 0x91, 0x80, 0x05, 0x7f, 0xee, 0xfe, 0x69, 0xa3, 0x2a, 0x14, 0x2d, 0x5b, 0xef, 0xea, 0xa6, 0x42, + 0x75, 0x4e, 0xd1, 0x35, 0xae, 0x8f, 0x5f, 0x23, 0xeb, 0xb9, 0x38, 0x5f, 0xce, 0xb7, 0x28, 0xfa, + 0x88, 0x60, 0x1b, 0x35, 0xae, 0xa0, 0x79, 0x2b, 0x00, 0xd4, 0xd0, 0x2e, 0xcc, 0x73, 0x21, 0x6d, + 0xcb, 0x18, 0xf4, 0x4c, 0x45, 0xd7, 0x9c, 0x52, 0x74, 0x25, 0xb6, 0x9a, 0xdf, 0x5c, 0xbe, 0x38, + 0x5f, 0x2e, 0x32, 0x11, 0x55, 0x8a, 0x6b, 0xd4, 0x9c, 0x2f, 0xcf, 0x97, 0xd3, 0xe2, 0x43, 0xe6, + 0xc3, 0xf3, 0x6f, 0xcd, 0x41, 0xcf, 0xe0, 0xb6, 0x2d, 0xf6, 0x56, 0x0b, 0x0a, 0x8c, 0x51, 0x81, + 0xf7, 0x2f, 0xce, 0x97, 0x6f, 0x79, 0x9b, 0xaf, 0x4d, 0x16, 0x7a, 0xcb, 0x1e, 0x25, 0xd0, 0x1c, + 0xd4, 0x82, 0x00, 0xd8, 0x5f, 0x6e, 0x9c, 0x2e, 0x77, 0x99, 0x2f, 0x77, 0xde, 0x17, 0x1d, 0x5e, + 0xf2, 0xbc, 0x3d, 0x82, 0xd0, 0x3c, 0xc3, 0x4b, 0x5c, 0x6a, 0x78, 0xc9, 0x9b, 0x1a, 0x5e, 0xc8, + 0x8c, 0x52, 0xff, 0x2f, 0x66, 0x94, 0xfe, 0xca, 0xcd, 0x28, 0xf3, 0x15, 0x98, 0x11, 0xd3, 0xdd, + 0x9d, 0x78, 0x1a, 0xa4, 0xec, 0x4e, 0x3c, 0x9d, 0x95, 0x72, 0x3b, 0xf1, 0x74, 0x4e, 0xca, 0xef, + 0xc4, 0xd3, 0x79, 0xa9, 0x50, 0xfe, 0x7d, 0x04, 0xde, 0x3c, 0x36, 0xf5, 0x17, 0x03, 0xfc, 0x4c, + 0x77, 0x4f, 0xad, 0x81, 0x4b, 0xfd, 0x62, 0x40, 0xb7, 0x1f, 0x42, 0x7a, 0x44, 0xa9, 0x6f, 0xf3, + 0x53, 0x4e, 0x85, 0xcf, 0x36, 0xe5, 0xf2, 0x13, 0x7d, 0x0c, 0x30, 0xa6, 0xc1, 0x6f, 0x5c, 0x9c, + 0x2f, 0x67, 0x26, 0xab, 0x59, 0xa6, 0xed, 0x29, 0xd7, 0x1f, 0xc6, 0x09, 0x73, 0x6b, 0xfe, 0x79, + 0x02, 0x24, 0x36, 0x89, 0x1a, 0x76, 0xda, 0xb6, 0xde, 0x77, 0x2d, 0xdb, 0x9b, 0x41, 0x64, 0x6c, + 0x06, 0xef, 0x40, 0x54, 0xd7, 0x78, 0x10, 0xb9, 0xc3, 0x77, 0x20, 0x4a, 0x17, 0xef, 0x2f, 0x25, + 0xaa, 0x6b, 0x68, 0x0d, 0xe2, 0x24, 0xd2, 0xd1, 0x35, 0x64, 0x37, 0x16, 0x47, 0x67, 0x89, 0x7b, + 0x6b, 0x2c, 0x10, 0x1e, 0xc9, 0x94, 0x0e, 0xad, 0x40, 0xda, 0x1c, 0x18, 0x06, 0x0d, 0x62, 0x64, + 0x65, 0x69, 0x31, 0x5d, 0x01, 0x45, 0xf7, 0x20, 0xa7, 0xe1, 0x8e, 0x3a, 0x30, 0x5c, 0x05, 0x9f, + 0xf5, 0x6d, 0x66, 0x29, 0x72, 0x96, 0xc3, 0xea, 0x67, 0x7d, 0x1b, 0xbd, 0x09, 0xc9, 0x53, 0x5d, + 0xd3, 0xb0, 0x49, 0x0d, 0x45, 0x88, 0xe0, 0x30, 0xb4, 0x01, 0xf3, 0x03, 0x07, 0x3b, 0x8a, 0x83, + 0x5f, 0x0c, 0x88, 0x96, 0xd0, 0x73, 0x01, 0x7a, 0x2e, 0x49, 0x7e, 0x78, 0x45, 0x42, 0x70, 0xc8, + 0xf1, 0xe4, 0x28, 0xee, 0x41, 0xae, 0x6d, 0xf5, 0xfa, 0x03, 0x17, 0xb3, 0x41, 0xb3, 0x6c, 0x50, + 0x0e, 0xa3, 0x83, 0x6e, 0xc0, 0xbc, 0xf5, 0xca, 0x1c, 0x11, 0x9b, 0x0b, 0x8b, 0x25, 0x04, 0x41, + 0xb1, 0x9f, 0x80, 0xd4, 0xef, 0x2a, 0xaa, 0xeb, 0xda, 0xfa, 0x09, 0x91, 0x6d, 0x0e, 0x7a, 0xa5, + 0x7c, 0x68, 0x4f, 0x0b, 0x07, 0x4f, 0x2a, 0x02, 0xdd, 0x1c, 0xf4, 0xe4, 0x42, 0xbf, 0x1b, 0xfc, + 0x46, 0x5b, 0xf0, 0x96, 0x6a, 0xb8, 0xd8, 0x16, 0x4e, 0x8d, 0x6c, 0xa2, 0xa2, 0x9b, 0x4a, 0xdf, + 0xb6, 0xba, 0x36, 0x76, 0x9c, 0x52, 0x21, 0xb0, 0x03, 0x6f, 0x50, 0x52, 0x76, 0x3e, 0x47, 0xc3, + 0x3e, 0x6e, 0x98, 0x07, 0x9c, 0x0c, 0xfd, 0x18, 0x90, 0x33, 0x74, 0x5c, 0xdc, 0x13, 0x82, 0x9e, + 0xeb, 0xa6, 0x56, 0x2a, 0x52, 0xdd, 0x7a, 0x77, 0x8a, 0x6e, 0x1d, 0x52, 0x06, 0x26, 0x6e, 0x57, + 0x37, 0x35, 0x3e, 0x8a, 0xe4, 0x8c, 0xc0, 0xd1, 0x12, 0xa4, 0x5e, 0xea, 0xb6, 0x3b, 0x50, 0x8d, + 0x92, 0x14, 0x98, 0x8e, 0x00, 0x7a, 0x36, 0x99, 0x96, 0x32, 0x3b, 0xf1, 0x74, 0x46, 0x82, 0x9d, + 0x78, 0x3a, 0x25, 0xa5, 0xcb, 0x7f, 0x19, 0x85, 0x3b, 0x4c, 0xcc, 0x96, 0xda, 0xd3, 0x8d, 0xe1, + 0x4d, 0x35, 0x93, 0x49, 0xe1, 0x9a, 0x49, 0x8f, 0x94, 0x2e, 0x95, 0xb0, 0xb1, 0x50, 0x40, 0x8f, + 0x94, 0xc0, 0x9a, 0x04, 0x34, 0x62, 0xba, 0xf1, 0x2b, 0x98, 0x6e, 0x0b, 0xe6, 0x85, 0x92, 0x7a, + 0x12, 0xa8, 0xa6, 0xe6, 0x37, 0xef, 0xf3, 0x39, 0x15, 0x6b, 0x8c, 0x40, 0xb0, 0x87, 0x23, 0x98, + 0x16, 0x42, 0x6a, 0xdc, 0x48, 0xff, 0x25, 0x0a, 0x0b, 0x0d, 0xd3, 0xc5, 0xb6, 0x81, 0xd5, 0x97, + 0x38, 0xb0, 0x1d, 0x9f, 0x41, 0x46, 0x35, 0xdb, 0xd8, 0x71, 0x2d, 0xdb, 0x29, 0x45, 0x56, 0x62, + 0xab, 0xd9, 0x8d, 0x6f, 0x4c, 0x39, 0xb5, 0x49, 0xfc, 0x6b, 0x15, 0xce, 0xcc, 0x77, 0xd2, 0x17, + 0xb6, 0xf8, 0xaf, 0x11, 0x48, 0x0b, 0xec, 0x35, 0xbc, 0xdf, 0x37, 0x21, 0x4d, 0x33, 0x4a, 0xc5, + 0x3b, 0x93, 0x45, 0xc1, 0xc1, 0x53, 0xce, 0x60, 0xf6, 0x99, 0xa2, 0xb4, 0x0d, 0x0d, 0x55, 0x27, + 0x25, 0x86, 0x31, 0xca, 0x7f, 0x57, 0xec, 0xdf, 0x61, 0x38, 0x35, 0x1c, 0xcb, 0x15, 0xd9, 0x9e, + 0xf1, 0x9d, 0xfb, 0xe7, 0x08, 0xcc, 0x13, 0x06, 0x0d, 0x6b, 0x81, 0x6d, 0xbb, 0x0f, 0xa0, 0x3b, + 0x8a, 0xc3, 0xe0, 0x74, 0x45, 0x42, 0x37, 0x33, 0xba, 0xc3, 0xc9, 0x3d, 0x55, 0x8b, 0x8e, 0xa9, + 0xda, 0x77, 0x20, 0x4f, 0x79, 0x95, 0x93, 0x41, 0xfb, 0x39, 0x76, 0x1d, 0x3a, 0xc3, 0xc4, 0xe6, + 0x02, 0x9f, 0x61, 0x8e, 0x4a, 0xd8, 0x64, 0x38, 0x39, 0xe7, 0x04, 0xbe, 0xc6, 0xb4, 0x2f, 0x3e, + 0xa6, 0x7d, 0x7c, 0xe2, 0xbf, 0x8f, 0xc1, 0x9d, 0x03, 0xd5, 0x76, 0x75, 0x12, 0x1b, 0x75, 0xb3, + 0x1b, 0x98, 0xfd, 0x03, 0xc8, 0x9a, 0x03, 0x61, 0xb0, 0x0e, 0x3f, 0x10, 0x36, 0x3f, 0x30, 0x07, + 0xdc, 0x00, 0x1d, 0xb4, 0x07, 0x71, 0x43, 0x77, 0x5c, 0x1a, 0x7a, 0xb2, 0x1b, 0x1b, 0x53, 0xd4, + 0x62, 0xf2, 0x18, 0x6b, 0x7b, 0xba, 0xe3, 0x8a, 0x35, 0x13, 0x29, 0xa8, 0x05, 0x09, 0x5b, 0x35, + 0xbb, 0x98, 0xda, 0x4b, 0x76, 0xe3, 0xd1, 0xd5, 0xc4, 0xc9, 0x84, 0x55, 0x04, 0x64, 0x2a, 0x67, + 0xf1, 0x6f, 0x23, 0x10, 0x27, 0xa3, 0x5c, 0x62, 0xd2, 0x77, 0x20, 0xf9, 0x52, 0x35, 0x06, 0x98, + 0x85, 0xcf, 0x9c, 0xcc, 0xbf, 0xd0, 0x1f, 0x43, 0xd1, 0x19, 0x9c, 0xf4, 0x03, 0x43, 0xf1, 0x38, + 0xf3, 0xe1, 0x95, 0x66, 0xe5, 0xd5, 0x1a, 0x61, 0x59, 0xec, 0x00, 0x16, 0x5f, 0x40, 0x82, 0xce, + 0xfa, 0x92, 0xf9, 0xdd, 0x83, 0x9c, 0x6b, 0x29, 0xf8, 0xac, 0x6d, 0x0c, 0x1c, 0xfd, 0x25, 0xd3, + 0x94, 0x9c, 0x9c, 0x75, 0xad, 0xba, 0x00, 0xa1, 0x07, 0x50, 0xe8, 0xd8, 0x56, 0x4f, 0xd1, 0x4d, + 0x41, 0x14, 0xa3, 0x44, 0x79, 0x02, 0x6d, 0x08, 0x60, 0x48, 0x65, 0xff, 0x26, 0x07, 0x45, 0x6a, + 0x18, 0x33, 0xb9, 0xbd, 0x07, 0x01, 0xb7, 0x77, 0x3b, 0xe4, 0xf6, 0x3c, 0xeb, 0x22, 0x5e, 0xef, + 0x4d, 0x48, 0x0e, 0x68, 0x7e, 0x43, 0xc7, 0xf7, 0x42, 0x23, 0x83, 0xcd, 0xa0, 0x95, 0xe8, 0xeb, + 0x80, 0x88, 0x2b, 0xc0, 0x4a, 0x88, 0x30, 0x41, 0x09, 0x25, 0x8a, 0xa9, 0x4e, 0xf5, 0xa0, 0xc9, + 0x2b, 0x78, 0xd0, 0x6d, 0x90, 0xf0, 0x99, 0x6b, 0xab, 0xc1, 0x6c, 0x3d, 0x45, 0xf9, 0x97, 0x48, + 0x58, 0xac, 0x13, 0xdc, 0x64, 0x21, 0x05, 0x1c, 0xc0, 0x69, 0x44, 0x4b, 0xe6, 0xb9, 0x0c, 0x4d, + 0xb7, 0x31, 0xcd, 0x31, 0x9d, 0x52, 0x7a, 0x25, 0x76, 0x49, 0x2e, 0x39, 0xb2, 0xed, 0x6b, 0x35, + 0xc1, 0x28, 0x4b, 0x4c, 0x94, 0x07, 0x70, 0xd0, 0x21, 0x64, 0x3b, 0x2c, 0xf5, 0x54, 0x9e, 0xe3, + 0x21, 0x4d, 0x52, 0xb3, 0x1b, 0xef, 0xcf, 0x9e, 0xa4, 0x6e, 0x26, 0xc9, 0x11, 0x94, 0x22, 0x32, + 0x74, 0x3c, 0x24, 0x7a, 0x06, 0xf9, 0x40, 0x5d, 0x71, 0x32, 0xa4, 0xf9, 0xc9, 0xf5, 0xc4, 0xe6, + 0x7c, 0x41, 0x9b, 0x43, 0xf4, 0x29, 0x80, 0xee, 0x05, 0x00, 0x9a, 0xc6, 0x64, 0x37, 0x3e, 0xb8, + 0x42, 0xa4, 0x10, 0xfe, 0xc5, 0x17, 0x82, 0x9e, 0x41, 0xc1, 0xff, 0xa2, 0x93, 0xcd, 0x5d, 0x79, + 0xb2, 0x4c, 0x6a, 0x3e, 0x20, 0x67, 0x93, 0x14, 0x29, 0x0b, 0x24, 0xc1, 0xb2, 0x1c, 0xdd, 0xc5, + 0x41, 0x35, 0xc8, 0x53, 0x35, 0x28, 0x5f, 0x9c, 0x2f, 0xa3, 0xaa, 0xc0, 0x4f, 0x56, 0x05, 0xd4, + 0x1e, 0xc1, 0x33, 0xc5, 0x0a, 0x29, 0x30, 0x91, 0x58, 0xf0, 0x15, 0xeb, 0xd0, 0x57, 0xe1, 0x31, + 0xc5, 0x0a, 0xa8, 0x37, 0xab, 0x2a, 0x73, 0x21, 0xdf, 0x53, 0xbc, 0xbe, 0xef, 0x09, 0x09, 0x42, + 0x75, 0x9e, 0x34, 0x4b, 0x34, 0xfd, 0xfa, 0x60, 0x46, 0x25, 0x25, 0x19, 0x9d, 0x70, 0x09, 0x34, + 0x97, 0x7e, 0x04, 0xa8, 0x6d, 0x63, 0xd5, 0xc5, 0x1a, 0x49, 0x5a, 0x0d, 0xbd, 0xad, 0xbb, 0xc6, + 0xb0, 0x34, 0x1f, 0xb0, 0xfb, 0x79, 0x8e, 0xaf, 0x7b, 0x68, 0xf4, 0x18, 0x52, 0x2f, 0xb1, 0xed, + 0xe8, 0x96, 0x59, 0x42, 0xd4, 0x99, 0x2c, 0xf1, 0x16, 0xd1, 0x9d, 0x91, 0xf1, 0x9e, 0x32, 0x2a, + 0x59, 0x90, 0xa3, 0x6d, 0xc8, 0x63, 0xb3, 0x6d, 0x69, 0xba, 0xd9, 0xa5, 0x69, 0x68, 0xe9, 0x96, + 0x9f, 0xef, 0x7c, 0x79, 0xbe, 0xfc, 0xb5, 0x11, 0xfe, 0x3a, 0xa7, 0x25, 0xd3, 0x96, 0x73, 0x38, + 0xf0, 0x85, 0xb6, 0x21, 0x25, 0x62, 0xf2, 0x02, 0xdd, 0xd3, 0xd5, 0x69, 0x19, 0xe8, 0x68, 0x44, + 0x17, 0x99, 0x25, 0x67, 0x27, 0xe5, 0x84, 0xa6, 0x3b, 0x24, 0x17, 0xd1, 0x4a, 0xb7, 0x83, 0xe5, + 0x84, 0x80, 0xa2, 0x2a, 0x40, 0x17, 0x5b, 0x0a, 0x6b, 0xba, 0x95, 0xee, 0xd0, 0xe1, 0x96, 0x02, + 0xc3, 0x75, 0xb1, 0xb5, 0x26, 0x5a, 0x73, 0xa4, 0x9a, 0xea, 0xe8, 0x5d, 0x91, 0x22, 0x74, 0xb1, + 0xc5, 0x00, 0xa8, 0x0c, 0x99, 0xbe, 0x8d, 0x35, 0xbd, 0x4d, 0x0a, 0xdf, 0xbb, 0x01, 0xdf, 0xec, + 0x83, 0xcb, 0x4b, 0x90, 0xf1, 0xbc, 0x06, 0x4a, 0x41, 0xac, 0x72, 0x58, 0x65, 0x7d, 0x96, 0x5a, + 0xfd, 0xb0, 0x2a, 0x45, 0xca, 0xf7, 0x20, 0x4e, 0x17, 0x9f, 0x85, 0xd4, 0x56, 0x4b, 0x7e, 0x56, + 0x91, 0x6b, 0xac, 0xb7, 0xd3, 0x68, 0x3e, 0xad, 0xcb, 0x47, 0xf5, 0x9a, 0x24, 0xe2, 0xc2, 0x79, + 0x1c, 0x90, 0x5f, 0xd6, 0x1d, 0x59, 0xbc, 0x4c, 0xee, 0x42, 0xb1, 0xed, 0x41, 0xd9, 0x01, 0x44, + 0x56, 0xa2, 0xab, 0x85, 0x8d, 0xc7, 0xaf, 0x2d, 0x0d, 0x85, 0x8c, 0x20, 0xc8, 0x57, 0xa6, 0x42, + 0x3b, 0x04, 0x0d, 0xe4, 0x43, 0xd1, 0x91, 0x18, 0x24, 0x43, 0xa2, 0x7d, 0x8a, 0xdb, 0xcf, 0x79, + 0x14, 0xfe, 0xd6, 0x94, 0x81, 0x69, 0xaa, 0x18, 0x50, 0xdc, 0x2a, 0xe1, 0xf1, 0x87, 0x16, 0xe9, + 0x01, 0x15, 0x85, 0xe4, 0xb0, 0x7b, 0x8d, 0x5f, 0xea, 0xb1, 0x26, 0xb5, 0xa3, 0x84, 0xc7, 0x0a, + 0x78, 0xd7, 0xc7, 0x50, 0x34, 0x2d, 0x57, 0x21, 0x25, 0x25, 0xf7, 0x02, 0xb4, 0x50, 0xcc, 0x6f, + 0x4a, 0x5c, 0x57, 0x7d, 0x9b, 0xcf, 0x9b, 0x96, 0xdb, 0x1c, 0x18, 0x06, 0x03, 0xa0, 0x3f, 0x8b, + 0xc0, 0x32, 0x8b, 0x95, 0xca, 0x2b, 0xd6, 0x20, 0x50, 0x58, 0x7a, 0xeb, 0xef, 0x11, 0x6d, 0xa7, + 0x4c, 0x4f, 0x8c, 0x2e, 0xeb, 0x2e, 0xf0, 0xa9, 0xbe, 0x39, 0xb8, 0x84, 0xa6, 0x7c, 0x04, 0x85, + 0xf0, 0x31, 0xa1, 0x0c, 0x24, 0xaa, 0xdb, 0xf5, 0xea, 0xae, 0x34, 0x87, 0x8a, 0x90, 0xdd, 0x6a, + 0xc9, 0xf5, 0xc6, 0x93, 0xa6, 0xb2, 0x5b, 0xff, 0x21, 0x6b, 0x07, 0x36, 0x5b, 0x5e, 0x3b, 0xb0, + 0x04, 0x0b, 0xc7, 0xcd, 0xc6, 0xa7, 0xc7, 0x75, 0xe5, 0x59, 0xe3, 0x68, 0xbb, 0x75, 0x7c, 0xa4, + 0x34, 0x9a, 0xb5, 0xfa, 0x67, 0x52, 0xcc, 0x2b, 0xc1, 0x12, 0x52, 0xb2, 0xfc, 0xeb, 0x28, 0x14, + 0x0e, 0x6c, 0xbd, 0xa7, 0xda, 0xc3, 0x5d, 0x3c, 0x3c, 0x7c, 0xa5, 0xf6, 0xd1, 0x27, 0xb0, 0x60, + 0xe2, 0x57, 0x4a, 0x9f, 0x41, 0x15, 0x2f, 0xa5, 0x8f, 0x4c, 0xee, 0x22, 0xcf, 0x9b, 0xf8, 0x15, + 0x97, 0xd0, 0xe0, 0x19, 0xfd, 0xd7, 0x21, 0x6b, 0x19, 0x1a, 0xe3, 0xc4, 0xa2, 0x0f, 0x92, 0x0d, + 0x32, 0x81, 0x65, 0x68, 0x0d, 0x86, 0x26, 0xd4, 0x64, 0x3c, 0x41, 0x1d, 0x9b, 0x40, 0x6d, 0xe2, + 0x57, 0x82, 0xfa, 0x13, 0x58, 0x20, 0xb2, 0xc7, 0x66, 0x17, 0x9f, 0x32, 0x3b, 0xcb, 0xd0, 0x46, + 0x66, 0xf7, 0x1d, 0xb8, 0x33, 0xbe, 0xbe, 0xb1, 0x46, 0xdc, 0xad, 0x91, 0x65, 0x91, 0x1c, 0x87, + 0x1b, 0xe5, 0x3f, 0x45, 0x80, 0x06, 0xa3, 0x81, 0x2b, 0xda, 0x83, 0x74, 0xdf, 0xbe, 0x01, 0x79, + 0x22, 0xd7, 0xaf, 0x01, 0x23, 0x53, 0xf4, 0x8c, 0x2c, 0x57, 0x44, 0x16, 0xc2, 0x45, 0xd6, 0xe3, + 0x73, 0x45, 0xa7, 0x71, 0x59, 0x86, 0xd7, 0x8c, 0x44, 0xef, 0x42, 0x4e, 0x37, 0x89, 0x33, 0xe6, + 0x3d, 0x8a, 0x60, 0xdb, 0x28, 0xcb, 0x31, 0xf5, 0xb3, 0xbe, 0xcd, 0x67, 0xfc, 0xeb, 0x28, 0xdc, + 0xdd, 0x57, 0x5d, 0x6c, 0xeb, 0xaa, 0xa1, 0xff, 0x09, 0xd6, 0x9e, 0xea, 0xf8, 0x95, 0x8c, 0x3b, + 0x36, 0x76, 0x4e, 0xd1, 0x67, 0x30, 0x3f, 0xb6, 0x1d, 0x74, 0xea, 0xd9, 0x8d, 0x77, 0x66, 0x8b, + 0x46, 0x22, 0xa7, 0x1e, 0xd9, 0x31, 0xb4, 0x1f, 0x3e, 0x58, 0x56, 0x93, 0x5c, 0x4d, 0x66, 0xf0, + 0xe4, 0x1f, 0x43, 0x42, 0x75, 0x14, 0xab, 0xc3, 0x3d, 0xce, 0x5b, 0x01, 0x41, 0x03, 0x57, 0x37, + 0xd6, 0x4e, 0x8d, 0xf6, 0xda, 0x91, 0xb8, 0xa8, 0x11, 0xbe, 0x4a, 0x75, 0x5a, 0x1d, 0xf4, 0x21, + 0x14, 0x9d, 0x53, 0x6b, 0x60, 0x68, 0xca, 0x89, 0xda, 0x7e, 0xde, 0xd1, 0x0d, 0x23, 0xd4, 0x6f, + 0x2a, 0x30, 0xe4, 0x26, 0xc7, 0xf1, 0x3d, 0xfb, 0xab, 0x14, 0x20, 0x7f, 0x3e, 0xfb, 0x03, 0x57, + 0xa5, 0xde, 0xbc, 0x02, 0x49, 0xee, 0x46, 0xd8, 0x1e, 0xbd, 0x3b, 0xd5, 0xe3, 0x86, 0xfb, 0x6b, + 0xdb, 0x73, 0x32, 0x67, 0x44, 0x3f, 0x08, 0xde, 0xcb, 0xcc, 0xbc, 0x23, 0xdb, 0x73, 0xe2, 0xc2, + 0x66, 0x17, 0x12, 0x8e, 0x4b, 0xa2, 0x4f, 0x8c, 0xe6, 0x0c, 0xeb, 0x53, 0xf8, 0xc7, 0x27, 0xbf, + 0x76, 0x48, 0xd8, 0x84, 0xcf, 0xa5, 0x32, 0xd0, 0x33, 0xc8, 0x78, 0xa9, 0x32, 0xef, 0x2f, 0x3e, + 0x9a, 0x5d, 0xa0, 0x17, 0xe5, 0x44, 0x0c, 0xf4, 0x64, 0xa1, 0x0a, 0x64, 0x7b, 0x9c, 0xcc, 0x6f, + 0x88, 0xac, 0xf0, 0x6a, 0x05, 0x84, 0x04, 0x5a, 0xb5, 0x04, 0xbe, 0x64, 0x10, 0x4c, 0x0d, 0x1a, + 0xd1, 0x6d, 0xcb, 0x30, 0xc8, 0xa1, 0x51, 0x4f, 0xeb, 0x45, 0x74, 0x01, 0x45, 0xbb, 0xa4, 0xe6, + 0xf0, 0xbc, 0x71, 0x9a, 0xee, 0xe7, 0x7b, 0x33, 0xc7, 0xc0, 0xed, 0x39, 0x39, 0xc0, 0x8e, 0x5a, + 0x50, 0xe8, 0x87, 0x5c, 0x21, 0x4f, 0xf0, 0x1f, 0x4c, 0xcb, 0xf2, 0x42, 0xc4, 0xdb, 0x73, 0xf2, + 0x08, 0x3b, 0xfa, 0x31, 0xa0, 0xf6, 0x98, 0x9f, 0x28, 0xc1, 0x6b, 0x66, 0x39, 0xca, 0xb0, 0x3d, + 0x27, 0x4f, 0x10, 0x83, 0x3e, 0x87, 0xbb, 0xbd, 0xc9, 0x26, 0xcd, 0x53, 0xfd, 0xb5, 0x29, 0x23, + 0x4c, 0x71, 0x04, 0xdb, 0x73, 0xf2, 0x34, 0x81, 0xe5, 0x4f, 0x20, 0x41, 0x55, 0x87, 0x24, 0x2c, + 0xc7, 0xcd, 0xdd, 0x66, 0xeb, 0x59, 0x93, 0x05, 0xa0, 0x5a, 0x7d, 0xaf, 0x7e, 0x54, 0x57, 0x5a, + 0xcd, 0x3d, 0x12, 0x80, 0xde, 0x80, 0xdb, 0x1c, 0x50, 0x69, 0xd6, 0x94, 0x67, 0x72, 0x43, 0xa0, + 0xa2, 0xe5, 0xd5, 0x60, 0x46, 0x94, 0x86, 0x78, 0xb3, 0xd5, 0xac, 0x4b, 0x73, 0x34, 0x37, 0xaa, + 0xd5, 0xa4, 0x08, 0xcd, 0x8d, 0xe4, 0xd6, 0x81, 0x14, 0x65, 0xd6, 0xb7, 0x99, 0x03, 0xd0, 0x3c, + 0x75, 0xdb, 0x89, 0xa7, 0x93, 0x52, 0xaa, 0xfc, 0x8f, 0x11, 0x48, 0x13, 0x37, 0xdc, 0x30, 0x3b, + 0x16, 0x7a, 0x04, 0x99, 0xbe, 0x6a, 0x63, 0xd3, 0xf5, 0x3d, 0xad, 0xe8, 0x00, 0xa6, 0x0f, 0x28, + 0xc2, 0x6b, 0x50, 0xa5, 0x19, 0x61, 0xe3, 0xb2, 0xf6, 0xce, 0x16, 0x48, 0x5c, 0x9c, 0xd3, 0x3e, + 0xc5, 0x3d, 0x95, 0x48, 0x65, 0x3d, 0xa8, 0x37, 0xbd, 0xee, 0x2c, 0xc5, 0x1f, 0x52, 0xb4, 0x27, + 0xbb, 0xd0, 0x0f, 0x42, 0x45, 0xef, 0xee, 0xef, 0xde, 0x85, 0xe2, 0x48, 0xe6, 0x73, 0x49, 0x39, + 0xbf, 0x42, 0xcb, 0xf9, 0x98, 0xef, 0xf7, 0xbd, 0x72, 0x3e, 0xca, 0x2b, 0xf9, 0xd0, 0x62, 0xe3, + 0x33, 0x2e, 0xf6, 0x91, 0x9f, 0xdd, 0x33, 0xe3, 0x7b, 0x83, 0xc7, 0x94, 0xf9, 0x4b, 0x12, 0xfb, + 0x03, 0x98, 0xef, 0x59, 0x9a, 0xde, 0x21, 0x79, 0x2c, 0xb1, 0x5c, 0x57, 0xef, 0x61, 0x9e, 0xe5, + 0xcc, 0xe4, 0x70, 0xa5, 0x20, 0x37, 0x41, 0xa2, 0x27, 0x90, 0x12, 0x5d, 0xab, 0x34, 0x8d, 0x00, + 0xb3, 0x7a, 0x4c, 0x91, 0xdf, 0x73, 0x6e, 0xb4, 0x05, 0x05, 0x13, 0x9f, 0x05, 0x9b, 0xac, 0x99, + 0x90, 0x4f, 0xc9, 0x35, 0xf1, 0xd9, 0xe4, 0x0e, 0x6b, 0xce, 0xf4, 0x31, 0x1a, 0xfa, 0x14, 0xf2, + 0xe1, 0x60, 0x07, 0xd7, 0x08, 0x76, 0xb9, 0x7e, 0x30, 0xd2, 0x6d, 0x41, 0x4a, 0x44, 0xb9, 0xec, + 0x35, 0xa2, 0x9c, 0x60, 0x46, 0x9b, 0x24, 0x85, 0x38, 0x73, 0xfd, 0xac, 0x26, 0xe7, 0x97, 0x65, + 0x17, 0xe7, 0xcb, 0x59, 0xb2, 0xc2, 0x09, 0xad, 0xd4, 0xac, 0xe9, 0xc1, 0x35, 0xb4, 0x03, 0xe0, + 0x3d, 0x45, 0x70, 0xe8, 0x0d, 0xc3, 0xf4, 0xf2, 0xfc, 0x40, 0x10, 0xfa, 0x53, 0x92, 0x03, 0xdc, + 0x68, 0x1f, 0x32, 0xc2, 0x1d, 0xb3, 0xc2, 0x79, 0xba, 0xdf, 0x1a, 0x0f, 0x0e, 0x22, 0x24, 0x78, + 0x12, 0x48, 0xcd, 0x60, 0x60, 0xd5, 0xc1, 0xbc, 0x7a, 0x7e, 0x3c, 0x63, 0xcd, 0xc0, 0x8c, 0xab, + 0x7a, 0xaa, 0x9a, 0x5d, 0xbc, 0x47, 0xf8, 0x37, 0xa3, 0xa5, 0x88, 0xcc, 0x44, 0xa1, 0x26, 0x48, + 0x74, 0xcb, 0x82, 0xb1, 0x46, 0xa2, 0xbb, 0xf6, 0xb6, 0x30, 0x5c, 0xb2, 0x6b, 0x53, 0xe3, 0x0d, + 0xd5, 0xa9, 0x7d, 0x3f, 0xe6, 0x7c, 0x0f, 0x0a, 0x1d, 0xcb, 0xee, 0xa9, 0xae, 0x22, 0x8c, 0x67, + 0xde, 0xef, 0xb3, 0x7d, 0x79, 0xbe, 0x9c, 0xdf, 0xa2, 0x58, 0x61, 0x38, 0xf9, 0x4e, 0xf0, 0x13, + 0x6d, 0x8a, 0xd0, 0x7c, 0x8b, 0x46, 0xd2, 0x77, 0x5e, 0xbb, 0x59, 0x13, 0x22, 0x72, 0x13, 0x92, + 0xb4, 0x1c, 0x72, 0x4a, 0x0b, 0x74, 0xc7, 0xaf, 0x59, 0x5a, 0xc9, 0x5c, 0x0a, 0xda, 0x83, 0x82, + 0x46, 0x20, 0xa4, 0x56, 0x67, 0x1d, 0xbc, 0xdb, 0x54, 0xee, 0xf2, 0x14, 0xb9, 0xc2, 0xc5, 0x8a, + 0x46, 0x8d, 0x60, 0x66, 0x5d, 0xbe, 0x16, 0xa4, 0x3b, 0x6a, 0x4f, 0x37, 0x74, 0xec, 0x94, 0xee, + 0x50, 0x39, 0x1f, 0x5e, 0x6a, 0xcf, 0xa3, 0xb7, 0x39, 0x22, 0x84, 0x0b, 0x21, 0x9e, 0x59, 0x53, + 0xc0, 0x90, 0x1c, 0xdf, 0xdd, 0x71, 0xb3, 0x16, 0xb7, 0x39, 0xa1, 0x9b, 0x1d, 0x6a, 0xd6, 0xfc, + 0x4b, 0x43, 0xf7, 0x01, 0x5e, 0xea, 0xf8, 0x95, 0xf2, 0x62, 0x80, 0xed, 0x61, 0xa9, 0x14, 0x2c, + 0xcc, 0x09, 0xfc, 0x53, 0x02, 0x46, 0x1f, 0x41, 0x46, 0xc3, 0x7d, 0x6c, 0x6a, 0x4e, 0xcb, 0x2c, + 0xbd, 0x41, 0x2b, 0x8d, 0x5b, 0x17, 0xe7, 0xcb, 0x99, 0x9a, 0x00, 0x72, 0x2f, 0xea, 0x53, 0xa1, + 0xcf, 0x21, 0xc7, 0x3e, 0xb0, 0xd6, 0x32, 0x37, 0x87, 0xa5, 0x45, 0xba, 0xe8, 0x87, 0x33, 0x1e, + 0x8a, 0xdf, 0xf6, 0xf2, 0x6e, 0x0a, 0x6a, 0x01, 0x69, 0x72, 0x48, 0x36, 0xfa, 0x23, 0xc8, 0x09, + 0x3d, 0xde, 0xb1, 0x4e, 0x9c, 0xd2, 0xd7, 0x2e, 0x6d, 0xe3, 0x8f, 0x8e, 0xb5, 0xef, 0xb3, 0x0a, + 0x2f, 0x15, 0x94, 0x86, 0x3e, 0x83, 0xbc, 0x77, 0x61, 0x69, 0xf5, 0x5d, 0xa7, 0xf4, 0xe6, 0xa5, + 0xd5, 0xeb, 0x98, 0x19, 0x72, 0xde, 0x56, 0x9f, 0xde, 0x70, 0x04, 0xbe, 0xd0, 0x3d, 0xc8, 0x68, + 0xb6, 0xd5, 0x67, 0xd1, 0xe2, 0xad, 0x95, 0xc8, 0x6a, 0xcc, 0xeb, 0xbd, 0xd8, 0x56, 0x9f, 0x86, + 0x01, 0x05, 0x0a, 0x36, 0xee, 0x1b, 0x6a, 0x1b, 0xf7, 0x48, 0x1c, 0xb3, 0x3a, 0xa5, 0x25, 0x3a, + 0xfa, 0xc6, 0xcc, 0x1b, 0xe9, 0x31, 0x0b, 0xc5, 0x0c, 0xc8, 0x6b, 0x75, 0xd0, 0x31, 0x80, 0x3a, + 0xd0, 0x74, 0x57, 0xe9, 0x59, 0x1a, 0x2e, 0x2d, 0x5f, 0xfa, 0x7e, 0x60, 0x54, 0x78, 0x85, 0x30, + 0xee, 0x5b, 0x1a, 0xf6, 0xee, 0xc4, 0x04, 0x00, 0x7d, 0x04, 0x59, 0xba, 0xb4, 0xcf, 0xad, 0x13, + 0xa2, 0x9b, 0x2b, 0x74, 0x71, 0xf3, 0xfc, 0x2c, 0x33, 0x35, 0xdb, 0xea, 0xef, 0x58, 0x27, 0x54, + 0x63, 0xf8, 0x9f, 0x1a, 0x72, 0x20, 0xd7, 0x6d, 0x2b, 0xbe, 0xe3, 0xbc, 0x47, 0x4f, 0xf1, 0xe3, + 0x19, 0xe7, 0xf2, 0xa4, 0x3a, 0xc1, 0x95, 0xde, 0x12, 0x11, 0xe0, 0x49, 0x55, 0xc0, 0x1c, 0x39, + 0xdb, 0x6d, 0x7b, 0x1f, 0xa4, 0x22, 0x64, 0x0d, 0x3e, 0x6e, 0x00, 0xe5, 0x60, 0x45, 0xc8, 0x30, + 0xcc, 0x04, 0x9a, 0xc0, 0x3b, 0x81, 0x0a, 0xad, 0xa6, 0xd8, 0x99, 0xdd, 0x9f, 0x3d, 0xc2, 0x17, + 0x18, 0x77, 0xc5, 0x69, 0x75, 0xe8, 0xc1, 0xb6, 0x21, 0x67, 0x0d, 0xdc, 0x13, 0x6b, 0x60, 0x6a, + 0x4a, 0xe7, 0xb9, 0x53, 0x7a, 0x9b, 0xae, 0xf6, 0x4a, 0x5d, 0x1b, 0x6f, 0x75, 0x2d, 0x2e, 0x68, + 0x6b, 0xd7, 0x91, 0xb3, 0x42, 0xea, 0xd6, 0x73, 0x07, 0xfd, 0x14, 0xb2, 0xba, 0xe9, 0x8f, 0xf1, + 0xe0, 0xea, 0x63, 0x20, 0x51, 0x79, 0x34, 0x4c, 0x6f, 0x08, 0xe0, 0x32, 0xc9, 0x08, 0x1f, 0x40, + 0xc1, 0xea, 0x74, 0x0c, 0xdd, 0xc4, 0x8a, 0x8d, 0x55, 0xc7, 0x32, 0x4b, 0xef, 0x04, 0x76, 0x30, + 0xcf, 0x71, 0x32, 0x45, 0xa1, 0x32, 0x64, 0x5c, 0xdc, 0xeb, 0x5b, 0xb6, 0x6a, 0x0f, 0x4b, 0xef, + 0x06, 0xaf, 0x12, 0x3d, 0x30, 0x3a, 0x81, 0xc5, 0x81, 0x89, 0xcf, 0xfa, 0x96, 0x83, 0x35, 0x65, + 0x2c, 0xb7, 0x5c, 0xa5, 0x3e, 0xee, 0x01, 0x9f, 0xd4, 0xdd, 0x63, 0x41, 0x39, 0x31, 0xc9, 0xbc, + 0x3b, 0x98, 0x88, 0xd6, 0xd0, 0xb7, 0x60, 0x41, 0x77, 0x94, 0x60, 0xd6, 0xae, 0x10, 0x5f, 0x57, + 0x7a, 0x2f, 0x30, 0x25, 0xa4, 0x3b, 0xa3, 0x19, 0x3f, 0xfa, 0x09, 0x14, 0x0d, 0xab, 0xad, 0x1a, + 0xba, 0x3b, 0x14, 0xdd, 0xd0, 0xf7, 0xa9, 0x06, 0x7c, 0x73, 0x46, 0x25, 0xdd, 0xe3, 0xdc, 0xac, + 0x27, 0x2a, 0x17, 0x8c, 0xd0, 0x37, 0xfa, 0x59, 0x04, 0x56, 0x5e, 0xd3, 0x3a, 0x73, 0x4a, 0x1f, + 0x5c, 0x7a, 0xa9, 0x38, 0x43, 0xef, 0xec, 0xad, 0xcb, 0x7a, 0x67, 0xce, 0xe2, 0xaf, 0x22, 0x30, + 0x3f, 0x96, 0x3a, 0xa0, 0x9f, 0x40, 0xca, 0xb4, 0xb4, 0xc0, 0xad, 0x76, 0x9d, 0x9f, 0x41, 0xb2, + 0x69, 0x69, 0xec, 0x52, 0xfb, 0x51, 0x57, 0x77, 0x4f, 0x07, 0x27, 0x6b, 0x6d, 0xab, 0xb7, 0xee, + 0x4d, 0x4e, 0x3b, 0xf1, 0xff, 0x5e, 0xef, 0x3f, 0xef, 0xae, 0xd3, 0xbf, 0xfa, 0x27, 0x6b, 0x8c, + 0x4d, 0x4e, 0x12, 0xa9, 0x0d, 0x0d, 0x7d, 0x08, 0x45, 0x7c, 0xd6, 0xd7, 0xed, 0x40, 0xfa, 0x1c, + 0x0d, 0x38, 0xc4, 0x82, 0x8f, 0x24, 0xd6, 0xc3, 0xef, 0x1d, 0x7f, 0x1d, 0x85, 0xe2, 0x48, 0xf8, + 0x26, 0xf5, 0x02, 0x6d, 0xed, 0x84, 0xea, 0x05, 0x02, 0xb9, 0xa4, 0x8a, 0x09, 0xbe, 0x15, 0x8a, + 0xdd, 0xf4, 0xdd, 0x58, 0xf8, 0x3e, 0x2f, 0x71, 0x85, 0xfb, 0xbc, 0xef, 0xc0, 0x1d, 0xdd, 0x51, + 0x4c, 0xcb, 0x14, 0x6d, 0x57, 0xaf, 0x42, 0x0f, 0xbe, 0xd1, 0xb9, 0xa5, 0x3b, 0x4d, 0xcb, 0x64, + 0x0d, 0x57, 0x6f, 0xd5, 0xfe, 0x73, 0x9e, 0xd4, 0xf8, 0x73, 0x1e, 0xaf, 0x73, 0x19, 0x97, 0x12, + 0x8b, 0xbf, 0x8c, 0x40, 0x26, 0xf8, 0x1a, 0x36, 0x1a, 0xee, 0xb8, 0x8d, 0xd5, 0x50, 0xd7, 0x7c, + 0x9d, 0x10, 0xde, 0x85, 0xd8, 0xec, 0xbb, 0xc0, 0x8f, 0xf6, 0x4f, 0x21, 0x1b, 0x88, 0xcb, 0xa3, + 0x5d, 0x91, 0xc8, 0x35, 0xba, 0x22, 0x6f, 0x43, 0x92, 0x07, 0x23, 0xa6, 0x58, 0x79, 0xce, 0x9d, + 0x60, 0x81, 0x28, 0xf1, 0x39, 0x09, 0x42, 0x7c, 0xf4, 0xff, 0x8d, 0x41, 0x2e, 0x18, 0xb7, 0x89, + 0xe7, 0xd2, 0xcd, 0xb6, 0x4d, 0x83, 0x26, 0x1d, 0x3d, 0xe6, 0x3d, 0x82, 0x10, 0x60, 0x12, 0xcd, + 0x7b, 0xba, 0xa9, 0xd0, 0x8b, 0xf7, 0x90, 0xf2, 0xa6, 0x7b, 0xba, 0xf9, 0x94, 0x40, 0x29, 0x89, + 0x7a, 0xc6, 0x49, 0x62, 0x21, 0x12, 0xf5, 0x8c, 0x91, 0x2c, 0xd2, 0x54, 0xd8, 0x76, 0x69, 0xbd, + 0x1a, 0x0b, 0xa4, 0xb8, 0xb6, 0x1b, 0x7c, 0x24, 0x94, 0x98, 0xf0, 0x48, 0x08, 0x99, 0x50, 0xf0, + 0x33, 0x95, 0x57, 0x26, 0xb6, 0xa9, 0xe2, 0x64, 0x37, 0x2a, 0xd7, 0x48, 0x55, 0xfc, 0x0f, 0x22, + 0x48, 0xf8, 0x73, 0x27, 0x08, 0x44, 0x5f, 0x87, 0xa2, 0xea, 0x28, 0xba, 0xe9, 0xe2, 0x2e, 0xb6, + 0xd9, 0x7d, 0x4a, 0x2a, 0xe8, 0xfd, 0x55, 0xa7, 0xc1, 0x70, 0x47, 0xc3, 0x3e, 0x5e, 0xfc, 0x87, + 0x08, 0xe4, 0x43, 0x42, 0x51, 0x03, 0x8a, 0x74, 0x9a, 0x63, 0xcd, 0xdf, 0x7b, 0xde, 0x2b, 0x58, + 0x82, 0x9e, 0x58, 0x9c, 0xe6, 0xad, 0x00, 0x4a, 0x43, 0x9f, 0x40, 0x81, 0x89, 0xf2, 0x1e, 0xdf, + 0x84, 0x95, 0x35, 0x47, 0x25, 0x85, 0x5f, 0xe0, 0xe4, 0x2c, 0x1f, 0xa6, 0x05, 0xdf, 0x15, 0x2c, + 0x9a, 0x90, 0x0d, 0x24, 0x4e, 0x33, 0x58, 0xc9, 0xb7, 0x21, 0xee, 0xf9, 0xac, 0x59, 0x7b, 0xac, + 0xae, 0xef, 0xc8, 0x7e, 0x11, 0x81, 0x85, 0x49, 0x09, 0x4c, 0xc8, 0xfa, 0x98, 0xda, 0xcd, 0x64, + 0x7d, 0xf7, 0x83, 0x89, 0x25, 0x53, 0x45, 0x71, 0xd7, 0xed, 0xa7, 0x96, 0xef, 0x78, 0x06, 0xc1, + 0x34, 0xb1, 0x18, 0x32, 0x08, 0x52, 0x2a, 0x06, 0x4d, 0xe2, 0xdf, 0x62, 0x50, 0x08, 0x87, 0x2f, + 0xf4, 0x14, 0x92, 0x5d, 0xc3, 0x3a, 0x51, 0x0d, 0xde, 0xd3, 0xfd, 0xde, 0xb5, 0xa2, 0xe0, 0xda, + 0x13, 0x2a, 0x63, 0x7b, 0x4e, 0xe6, 0xd2, 0x90, 0x03, 0xf3, 0x36, 0xee, 0xea, 0x96, 0xa9, 0x1a, + 0xca, 0xc9, 0x90, 0x9d, 0x28, 0xdf, 0xd9, 0xfa, 0xf5, 0x86, 0x90, 0xb9, 0xb8, 0xcd, 0x21, 0x25, + 0xdc, 0x9e, 0x93, 0x8b, 0x76, 0x18, 0x84, 0x7a, 0x50, 0x0c, 0x0e, 0x6a, 0x5b, 0xaf, 0x78, 0xc3, + 0xbc, 0x7a, 0xd3, 0x21, 0x65, 0xeb, 0xd5, 0x36, 0x4d, 0xbb, 0x03, 0x80, 0xc5, 0x8f, 0xa1, 0x38, + 0x32, 0x29, 0x54, 0x86, 0x24, 0xa3, 0xe1, 0xb1, 0x0b, 0xbe, 0x3c, 0x5f, 0x4e, 0x32, 0x22, 0x99, + 0x63, 0xf8, 0x59, 0xdc, 0x86, 0x7c, 0x48, 0x3c, 0x07, 0x17, 0x20, 0xc9, 0xf6, 0x32, 0xa8, 0xcb, + 0x9b, 0x00, 0x69, 0x91, 0x66, 0x94, 0x57, 0x21, 0xe3, 0xe5, 0xec, 0x28, 0x07, 0xe9, 0x5a, 0xe3, + 0xb0, 0xb2, 0xb9, 0x57, 0xaf, 0x49, 0x73, 0x28, 0x0f, 0x19, 0xb9, 0x5e, 0xa9, 0xd1, 0xee, 0xa3, + 0x14, 0xf9, 0x6e, 0xfa, 0x2f, 0x7e, 0xb1, 0x1c, 0xe1, 0x61, 0x23, 0x29, 0xa5, 0x76, 0xe2, 0x69, + 0x24, 0xdd, 0x2a, 0xff, 0x4f, 0x1a, 0x50, 0x4d, 0x75, 0x55, 0xb2, 0x01, 0x57, 0xe8, 0xd1, 0x45, + 0x2f, 0xb1, 0x9c, 0x70, 0xdf, 0x25, 0x76, 0xa3, 0xbe, 0xcb, 0xc4, 0x2e, 0x5c, 0xfc, 0x26, 0x5d, + 0xb8, 0x6b, 0x35, 0x03, 0xc7, 0x3b, 0x07, 0xc9, 0x1b, 0x74, 0x0e, 0x9e, 0x42, 0x8a, 0xe5, 0xbf, + 0xec, 0x71, 0xcf, 0xf4, 0xc6, 0xc6, 0xf8, 0xc1, 0xf0, 0x16, 0x90, 0x53, 0x37, 0x5d, 0x7b, 0xe8, + 0xdd, 0xfb, 0x33, 0x98, 0xdf, 0x73, 0x49, 0x5f, 0xbf, 0xe7, 0x32, 0x9e, 0xfd, 0x67, 0xa6, 0x67, + 0xff, 0x3f, 0x06, 0x6e, 0x03, 0x22, 0x77, 0x86, 0x4b, 0xaf, 0xc0, 0x27, 0x2c, 0x87, 0x29, 0x3d, + 0x4f, 0x9e, 0x73, 0x76, 0xe0, 0x6b, 0xf1, 0x08, 0x80, 0xa7, 0xf7, 0x66, 0xc7, 0x9a, 0xc1, 0x61, + 0x2f, 0x41, 0x8a, 0x38, 0xc2, 0x3e, 0x66, 0xda, 0xe9, 0x85, 0x52, 0x0e, 0xe4, 0x16, 0xd5, 0x87, + 0x5c, 0x70, 0x0b, 0x91, 0x04, 0xb1, 0xe7, 0x78, 0xc8, 0xf4, 0x5c, 0x26, 0x7f, 0xa2, 0x1d, 0x48, + 0xf8, 0x01, 0x7f, 0xfa, 0x8b, 0xd2, 0xa9, 0x67, 0x43, 0xa6, 0x2b, 0x33, 0x11, 0xdf, 0x8d, 0x3e, + 0x8e, 0x2c, 0xfe, 0x79, 0x14, 0x72, 0xc1, 0x65, 0xa2, 0xb7, 0x21, 0xc5, 0x16, 0xca, 0x1e, 0xad, + 0x86, 0xdd, 0x82, 0x40, 0xa1, 0x26, 0xe4, 0x9d, 0x81, 0xfd, 0x52, 0x7f, 0xa9, 0x1a, 0x4a, 0xd7, + 0x52, 0x0d, 0x3a, 0x9d, 0xc2, 0xc6, 0xfd, 0x69, 0x8f, 0x42, 0x38, 0xed, 0x13, 0x4b, 0x35, 0x44, + 0xcf, 0xc3, 0x09, 0xc0, 0xd0, 0x37, 0xbd, 0x3b, 0x1d, 0x85, 0xfb, 0x24, 0x76, 0x55, 0x5a, 0xe0, + 0xea, 0x2f, 0x26, 0x20, 0x5a, 0xc2, 0xec, 0x93, 0x44, 0x61, 0x7e, 0xc4, 0xd8, 0x1c, 0xf4, 0xfc, + 0xae, 0xbb, 0x17, 0x85, 0x19, 0x5d, 0xdd, 0x1c, 0xf4, 0xfc, 0x28, 0x6c, 0xfb, 0x30, 0x11, 0x85, + 0x3d, 0xef, 0x53, 0xfe, 0xf7, 0x2c, 0x14, 0x48, 0xf6, 0x10, 0xf0, 0x36, 0xd7, 0xba, 0xc2, 0x98, + 0x74, 0x51, 0x11, 0xbd, 0xfa, 0x45, 0xc5, 0x25, 0x3f, 0x38, 0x60, 0x3a, 0x17, 0xbf, 0x44, 0xe7, + 0x6a, 0x10, 0xa7, 0x4f, 0xc6, 0x13, 0xf4, 0x6c, 0xa6, 0x39, 0xb9, 0xf0, 0x6a, 0xd7, 0x02, 0xaf, + 0xc6, 0x29, 0x37, 0xfa, 0x21, 0xe4, 0xe8, 0xe6, 0xf6, 0x70, 0xef, 0x04, 0xdb, 0xc2, 0xb7, 0x3c, + 0x9c, 0x4d, 0x1a, 0xd9, 0xe5, 0x7d, 0xca, 0x28, 0x7a, 0x1c, 0xd8, 0x83, 0x38, 0xe8, 0x21, 0x24, + 0x54, 0x43, 0xa7, 0x8e, 0xe6, 0x75, 0x3f, 0x45, 0x60, 0x84, 0xe8, 0xfb, 0x90, 0x57, 0x6d, 0x5b, + 0x1d, 0xf2, 0x47, 0xf5, 0x1a, 0x75, 0x26, 0xdc, 0x4b, 0x5e, 0x9c, 0x2f, 0x67, 0x2b, 0x04, 0x49, + 0xdf, 0xd1, 0x8b, 0x8d, 0xc8, 0xaa, 0x1e, 0x28, 0x74, 0xd7, 0x92, 0xb9, 0xd9, 0x5d, 0x0b, 0xdc, + 0xc4, 0xcb, 0x8f, 0x3b, 0xec, 0xec, 0x0d, 0x1c, 0xf6, 0x4f, 0x61, 0x51, 0xbc, 0x27, 0x24, 0x02, + 0xfd, 0xfb, 0xb8, 0xc0, 0xcf, 0x1d, 0xca, 0x17, 0xe7, 0xcb, 0x25, 0xd9, 0xa7, 0xf2, 0x97, 0xcb, + 0x2a, 0x23, 0xb2, 0x53, 0x25, 0x7b, 0x22, 0x5e, 0x0b, 0xb8, 0xee, 0xfc, 0xf5, 0x5d, 0x77, 0x38, + 0xee, 0x16, 0x6e, 0x14, 0x77, 0xc7, 0xc3, 0x40, 0x71, 0x7a, 0x18, 0x78, 0x36, 0x1a, 0x06, 0xa4, + 0xcb, 0x1b, 0x9a, 0x61, 0x05, 0xbe, 0x24, 0x04, 0xfc, 0x3c, 0x0a, 0xe0, 0xeb, 0x37, 0xfa, 0x36, + 0xdc, 0xed, 0x9f, 0x0e, 0x1d, 0xbd, 0xad, 0x1a, 0x8a, 0x8d, 0xfb, 0x36, 0x76, 0xb0, 0xc9, 0xb2, + 0x6a, 0xea, 0x34, 0x72, 0xf2, 0x1d, 0x81, 0x96, 0x43, 0x58, 0xf4, 0x31, 0xdc, 0x31, 0xac, 0xee, + 0x24, 0xbe, 0x60, 0xe7, 0xe0, 0x36, 0xa7, 0x19, 0x61, 0x56, 0x01, 0xda, 0x6a, 0x5f, 0x3d, 0xd1, + 0x0d, 0xbf, 0x99, 0xf0, 0xf1, 0x55, 0x6d, 0x73, 0xad, 0xea, 0x89, 0x10, 0x0f, 0x3a, 0x7c, 0xa1, + 0xe5, 0xb7, 0x01, 0x7c, 0x3c, 0xbd, 0x0a, 0xde, 0xdb, 0xf3, 0x13, 0x38, 0x7e, 0xa9, 0xcc, 0x03, + 0xd8, 0xee, 0x48, 0x34, 0x19, 0xf7, 0xeb, 0x91, 0x19, 0xfc, 0x3a, 0xbf, 0x9e, 0xfd, 0x08, 0xe2, + 0xf4, 0xb7, 0x2a, 0x69, 0x88, 0xd7, 0x9b, 0xc7, 0xfb, 0xd2, 0x1c, 0xca, 0x40, 0xa2, 0xb2, 0xd7, + 0xa8, 0x1c, 0x4a, 0x11, 0xb4, 0x00, 0xd2, 0xfe, 0xf1, 0xde, 0x51, 0x43, 0xae, 0x3f, 0x69, 0xb4, + 0x9a, 0x0a, 0x25, 0x88, 0x06, 0x1c, 0xf9, 0xdf, 0xc7, 0x41, 0x62, 0x5e, 0xf4, 0xa6, 0xae, 0x7c, + 0x7a, 0x1f, 0xe7, 0xf5, 0x37, 0xc2, 0x61, 0xad, 0x8f, 0x7f, 0xf5, 0xd9, 0x66, 0xe2, 0x2b, 0xca, + 0x36, 0x93, 0x37, 0xc8, 0x36, 0x53, 0x37, 0x70, 0x5e, 0x7f, 0xe8, 0xac, 0x30, 0xa0, 0x21, 0xbf, + 0x8c, 0x02, 0x04, 0x74, 0xe3, 0x07, 0xc1, 0x1f, 0x6a, 0x4f, 0xbf, 0x1a, 0x1e, 0x29, 0xc3, 0xb6, + 0xe7, 0xc4, 0xcf, 0xb8, 0x9f, 0x40, 0x5a, 0xe3, 0x59, 0x17, 0x4f, 0xce, 0xde, 0x9b, 0x39, 0x39, + 0xdb, 0x9e, 0x93, 0x3d, 0x66, 0xf4, 0x71, 0xe8, 0xf7, 0x79, 0x0f, 0x66, 0x32, 0xe6, 0x6d, 0xf1, + 0xc0, 0xb8, 0x02, 0x49, 0x96, 0x70, 0x70, 0x65, 0x9b, 0xfa, 0x43, 0xb1, 0x11, 0xd3, 0x20, 0xe5, + 0x30, 0x63, 0xe4, 0x65, 0x5c, 0x0a, 0x12, 0x03, 0x53, 0xb7, 0xcc, 0xf7, 0xe5, 0xe0, 0xd3, 0x56, + 0xd1, 0x85, 0x24, 0xd6, 0x4f, 0xff, 0x56, 0x5d, 0xac, 0xb1, 0x37, 0x26, 0xc7, 0xe6, 0x4b, 0x0f, + 0x10, 0x41, 0x05, 0x00, 0x8e, 0xd7, 0xcd, 0xae, 0x14, 0xa5, 0xc5, 0x1f, 0x49, 0x75, 0xc9, 0x57, + 0xec, 0xfd, 0xef, 0x83, 0x34, 0xfa, 0x4b, 0xb5, 0xc0, 0x6b, 0x93, 0x79, 0xc8, 0xef, 0x3f, 0xad, + 0x56, 0x8f, 0x1a, 0xfb, 0xf5, 0xc3, 0xa3, 0xca, 0xfe, 0x01, 0x7b, 0x33, 0x79, 0x44, 0x2a, 0xc7, + 0x56, 0xa3, 0x26, 0x45, 0xdf, 0xff, 0x3e, 0x14, 0x47, 0x14, 0x02, 0x01, 0x24, 0x0f, 0x8e, 0x37, + 0xf7, 0x1a, 0xd5, 0x89, 0xaf, 0x55, 0x50, 0x16, 0x52, 0xad, 0xad, 0xad, 0xbd, 0x46, 0xb3, 0x2e, + 0xc5, 0xde, 0xff, 0x06, 0xe4, 0x82, 0x09, 0x29, 0x92, 0x20, 0xf7, 0xa3, 0x56, 0xb3, 0xae, 0x6c, + 0x55, 0x1a, 0x7b, 0xc7, 0x32, 0x99, 0x01, 0x82, 0x02, 0xf7, 0x2b, 0x02, 0x16, 0xd9, 0x5c, 0xfd, + 0xcd, 0x7f, 0x2d, 0xcd, 0xfd, 0xe6, 0x62, 0x29, 0xf2, 0xdb, 0x8b, 0xa5, 0xc8, 0xef, 0x2e, 0x96, + 0x22, 0xff, 0x79, 0xb1, 0x14, 0xf9, 0xeb, 0x2f, 0x96, 0xe6, 0x7e, 0xfb, 0xc5, 0xd2, 0xdc, 0xef, + 0xbe, 0x58, 0x9a, 0xfb, 0x51, 0x92, 0xfd, 0x13, 0x03, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x7d, + 0x2e, 0xdd, 0x4e, 0xcd, 0x40, 0x00, 0x00, } diff --git a/pkg/sql/catalog/descpb/structured.proto b/pkg/sql/catalog/descpb/structured.proto index 0d3f6bbd2e99..aff97c1a61e2 100644 --- a/pkg/sql/catalog/descpb/structured.proto +++ b/pkg/sql/catalog/descpb/structured.proto @@ -983,6 +983,11 @@ message TableDescriptor { } optional SequenceOwner sequence_owner = 6 [(gogoproto.nullable) = false]; + + // AS option value for CREATE SEQUENCE, which specifies the default + // min and max values a sequence can take on. + optional string as_integer_type = 7 [(gogoproto.nullable) = false]; + } // The presence of sequence_opts indicates that this descriptor is for a sequence. diff --git a/pkg/sql/logictest/testdata/logic_test/sequences b/pkg/sql/logictest/testdata/logic_test/sequences index ac45217471ff..932662ed5bf2 100644 --- a/pkg/sql/logictest/testdata/logic_test/sequences +++ b/pkg/sql/logictest/testdata/logic_test/sequences @@ -84,10 +84,6 @@ CREATE SEQUENCE zero_test INCREMENT 0 statement ok CREATE SEQUENCE high_minvalue_test MINVALUE 5 -# Test unimplemented syntax. -statement error at or near "EOF": syntax error: unimplemented -CREATE SEQUENCE err_test AS INT2 - # Verify validation of START vs MINVALUE/MAXVALUE. statement error pgcode 22023 START value \(11\) cannot be greater than MAXVALUE \(10\) @@ -1278,3 +1274,64 @@ ALTER SEQUENCE db2.seq OWNED BY db1.t.a statement ok CREATE SEQUENCE db2.seq2 OWNED BY db1.t.a + +# Verify CREATE SEQUENCE ... AS +statement ok +CREATE SEQUENCE seqas_0 AS smallint + +statement ok +CREATE SEQUENCE seqas_1 AS int4 + +statement ok +CREATE SEQUENCE seqas_2 AS bigint + +statement ok +CREATE SEQUENCE public.seqas_3 AS int2 START WITH -4 INCREMENT BY -3 + +query TT colnames +SHOW CREATE SEQUENCE seqas_3 +---- +table_name create_statement +seqas_3 CREATE SEQUENCE public.seqas_3 AS INT2 MINVALUE -32768 MAXVALUE -1 INCREMENT -3 START -4 + +statement ok +CREATE SEQUENCE seqas_4 AS integer + +query TT colnames +SHOW CREATE SEQUENCE seqas_4 +---- +table_name create_statement +seqas_4 CREATE SEQUENCE public.seqas_4 AS INT8 MINVALUE 1 MAXVALUE 9223372036854775807 INCREMENT 1 START 1 + +statement ok +CREATE SEQUENCE seqas_5 AS int8 + +statement error pgcode 22023 pq: MAXVALUE \(2000000\) must be less than \(32767\) for type INT2 +CREATE SEQUENCE public.seqas_6 AS smallint MAXVALUE 2000000 + +statement error pgcode 22023 pq: MINVALUE \(-2000000\) must be greater than \(-32768\) for type INT2 +CREATE SEQUENCE public.seqas_7 AS smallint MINVALUE -2000000 + +statement error pgcode 22023 pq: MINVALUE \(-9999999999999999\) must be greater than \(-2147483648\) for type INT4 +CREATE SEQUENCE seqas_8 as int4 INCREMENT BY -1 MINVALUE -9999999999999999; + +statement ok +SET default_int_size=4 + +statement ok +CREATE SEQUENCE seqas_9 AS integer + +query TT colnames +SHOW CREATE SEQUENCE seqas_9 +---- +table_name create_statement +seqas_9 CREATE SEQUENCE public.seqas_9 AS INT4 MINVALUE 1 MAXVALUE 2147483647 INCREMENT 1 START 1 + +statement ok +ALTER SEQUENCE seqas_9 AS smallint + +query TT colnames +SHOW CREATE SEQUENCE seqas_9 +---- +table_name create_statement +seqas_9 CREATE SEQUENCE public.seqas_9 AS INT2 MINVALUE 1 MAXVALUE 32767 INCREMENT 1 START 1 \ No newline at end of file diff --git a/pkg/sql/parser/parse_test.go b/pkg/sql/parser/parse_test.go index c63f5a975cfc..957262e00c8e 100644 --- a/pkg/sql/parser/parse_test.go +++ b/pkg/sql/parser/parse_test.go @@ -392,6 +392,9 @@ func TestParse(t *testing.T) { {`CREATE TEMPORARY SEQUENCE a`}, {`CREATE SEQUENCE a OWNED BY b`}, {`CREATE SEQUENCE a OWNED BY NONE`}, + {`CREATE SEQUENCE a AS INT2`}, + {`CREATE SEQUENCE a AS INT4`}, + {`CREATE SEQUENCE a AS INT8`}, {`CREATE EXTENSION bob`}, {`CREATE EXTENSION IF NOT EXISTS bob`}, @@ -1865,6 +1868,12 @@ func TestParse2(t *testing.T) { {`CREATE TABLE a (b INT, FOREIGN KEY (b) REFERENCES other (b) NOT VALID)`, `CREATE TABLE a (b INT8, FOREIGN KEY (b) REFERENCES other (b))`}, + // `int` and `integer` are based on `default_int_size` in cluster settings. + {`CREATE SEQUENCE a AS integer`, `CREATE SEQUENCE a AS INT8`}, + {`CREATE SEQUENCE a AS int`, `CREATE SEQUENCE a AS INT8`}, + {`CREATE SEQUENCE a AS bigint`, `CREATE SEQUENCE a AS INT8`}, + {`CREATE SEQUENCE a AS smallint`, `CREATE SEQUENCE a AS INT2`}, + {`CREATE STATISTICS a ON col1 FROM t AS OF SYSTEM TIME '2016-01-01'`, `CREATE STATISTICS a ON col1 FROM t WITH OPTIONS AS OF SYSTEM TIME '2016-01-01'`}, @@ -3226,8 +3235,6 @@ func TestUnimplementedSyntax(t *testing.T) { {`CREATE TEMP TABLE IF NOT EXISTS b AS SELECT a FROM a ON COMMIT DROP`, 46556, `drop`, ``}, {`CREATE TEMP TABLE IF NOT EXISTS b AS SELECT a FROM a ON COMMIT DELETE ROWS`, 46556, `delete rows`, ``}, - {`CREATE SEQUENCE a AS DOUBLE PRECISION`, 25110, `FLOAT8`, ``}, - {`CREATE RECURSIVE VIEW a AS SELECT b`, 0, `create recursive view`, ``}, {`CREATE TYPE a AS (b)`, 27792, ``, ``}, diff --git a/pkg/sql/parser/sql.y b/pkg/sql/parser/sql.y index 152a1e9ac817..e4d3c0032fd8 100644 --- a/pkg/sql/parser/sql.y +++ b/pkg/sql/parser/sql.y @@ -1429,6 +1429,7 @@ alter_view_stmt: // %Category: DDL // %Text: // ALTER SEQUENCE [IF EXISTS] +// [AS ] // [INCREMENT ] // [MINVALUE | NO MINVALUE] // [MAXVALUE | NO MAXVALUE] @@ -6516,6 +6517,7 @@ reference_action: // %Category: DDL // %Text: // CREATE [TEMPORARY | TEMP] SEQUENCE +// [AS ] // [INCREMENT ] // [MINVALUE | NO MINVALUE] // [MAXVALUE | NO MAXVALUE] @@ -6555,7 +6557,15 @@ sequence_option_list: | sequence_option_list sequence_option_elem { $$.val = append($1.seqOpts(), $2.seqOpt()) } sequence_option_elem: - AS typename { return unimplementedWithIssueDetail(sqllex, 25110, $2.typeReference().SQLString()) } + AS typename { + // Valid option values must be integer types (ex. int2, bigint) + parsedType := $2.colType() + if parsedType.Family() != types.IntFamily { + sqllex.Error(fmt.Sprintf("invalid integer type: %q", $2)) + return 1 + } + $$.val = tree.SequenceOption{Name: tree.SeqOptAs, AsIntegerType: parsedType} + } | CYCLE { /* SKIP DOC */ $$.val = tree.SequenceOption{Name: tree.SeqOptCycle} } | NO CYCLE { $$.val = tree.SequenceOption{Name: tree.SeqOptNoCycle} } diff --git a/pkg/sql/sem/tree/create.go b/pkg/sql/sem/tree/create.go index f98bcc900f9e..93550500ecef 100644 --- a/pkg/sql/sem/tree/create.go +++ b/pkg/sql/sem/tree/create.go @@ -1409,6 +1409,10 @@ func (node *SequenceOptions) Format(ctx *FmtCtx) { option := &(*node)[i] ctx.WriteByte(' ') switch option.Name { + case SeqOptAs: + ctx.WriteString(option.Name) + ctx.WriteByte(' ') + ctx.WriteString(option.AsIntegerType.SQLString()) case SeqOptCycle, SeqOptNoCycle: ctx.WriteString(option.Name) case SeqOptCache: @@ -1459,6 +1463,9 @@ func (node *SequenceOptions) Format(ctx *FmtCtx) { type SequenceOption struct { Name string + // AsIntegerType specifies default min and max values of a sequence. + AsIntegerType *types.T + IntVal *int64 OptionalWord bool diff --git a/pkg/sql/sequence.go b/pkg/sql/sequence.go index c7e548fbe05b..2bae9313c1f5 100644 --- a/pkg/sql/sequence.go +++ b/pkg/sql/sequence.go @@ -29,6 +29,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/privilege" "github.com/cockroachdb/cockroach/pkg/sql/sem/builtins" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" + "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/cockroach/pkg/util/errorutil/unimplemented" "github.com/cockroachdb/cockroach/pkg/util/log" "github.com/cockroachdb/cockroach/pkg/util/sequence" @@ -228,6 +229,55 @@ func readOnlyError(s string) error { "cannot execute %s in a read-only transaction", s) } +func setSequenceIntegerBounds( + opts *descpb.TableDescriptor_SequenceOpts, + integerType *types.T, + isAscending bool, + lowerIntBound *int64, + upperIntBound *int64, +) error { + opts.MinValue = math.MinInt64 + opts.MaxValue = math.MaxInt64 + + if isAscending { + opts.MinValue = 1 + + switch integerType { + case types.Int2: + opts.MaxValue = math.MaxInt16 + *upperIntBound = math.MaxInt16 + *lowerIntBound = math.MinInt16 + case types.Int4: + opts.MaxValue = math.MaxInt32 + *upperIntBound = math.MaxInt32 + *lowerIntBound = math.MinInt32 + case types.Int: + // Do nothing, it's the default. + default: + return pgerror.Newf(pgcode.InvalidParameterValue, + "CREATE SEQUENCE option AS received type %s, must be integer", integerType) + } + } else { + opts.MaxValue = -1 + switch integerType { + case types.Int2: + opts.MinValue = math.MinInt16 + *upperIntBound = math.MaxInt16 + *lowerIntBound = math.MinInt16 + case types.Int4: + opts.MinValue = math.MinInt32 + *upperIntBound = math.MaxInt32 + *lowerIntBound = math.MinInt32 + case types.Int: + // Do nothing, it's the default. + default: + return pgerror.Newf(pgcode.InvalidParameterValue, + "CREATE SEQUENCE option AS received type %s, must be integer", integerType) + } + } + return nil +} + // assignSequenceOptions moves options from the AST node to the sequence options descriptor, // starting with defaults and overriding them with user-provided options. func assignSequenceOptions( @@ -238,11 +288,21 @@ func assignSequenceOptions( sequenceID descpb.ID, sequenceParentID descpb.ID, ) error { - // All other defaults are dependent on the value of increment, - // i.e. whether the sequence is ascending or descending. + + // Set the default integer type of a sequence. + var integerType = types.Int + var upperIntBound = int64(math.MaxInt64) + var lowerIntBound = int64(math.MinInt64) + + // All other defaults are dependent on the value of increment + // and the AS integerType. (i.e. whether the sequence is ascending + // or descending, bigint vs. smallint) for _, option := range optsNode { if option.Name == tree.SeqOptIncrement { opts.Increment = *option.IntVal + } else if option.Name == tree.SeqOptAs { + integerType = option.AsIntegerType + opts.AsIntegerType = integerType.SQLString() } } if opts.Increment == 0 { @@ -264,6 +324,13 @@ func assignSequenceOptions( } } + // Set default MINVALUE and MAXVALUE if AS option value for integer type is specified. + if opts.AsIntegerType != "" { + if err := setSequenceIntegerBounds(opts, integerType, isAscending, &lowerIntBound, &upperIntBound); err != nil { + return err + } + } + // Fill in all other options. optionsSeen := map[string]bool{} for _, option := range optsNode { @@ -298,11 +365,21 @@ func assignSequenceOptions( // A value of nil represents the user explicitly saying `NO MINVALUE`. if option.IntVal != nil { opts.MinValue = *option.IntVal + if *option.IntVal < lowerIntBound { + return pgerror.Newf(pgcode.InvalidParameterValue, + "MINVALUE (%d) must be greater than (%d) for type %s", + *option.IntVal, lowerIntBound, integerType.SQLString()) + } } case tree.SeqOptMaxValue: // A value of nil represents the user explicitly saying `NO MAXVALUE`. if option.IntVal != nil { opts.MaxValue = *option.IntVal + if *option.IntVal > upperIntBound { + return pgerror.Newf(pgcode.InvalidParameterValue, + "MAXVALUE (%d) must be less than (%d) for type %s", + *option.IntVal, upperIntBound, integerType.SQLString()) + } } case tree.SeqOptStart: opts.Start = *option.IntVal diff --git a/pkg/sql/sequence_test.go b/pkg/sql/sequence_test.go index 8f523ccba7a9..8a387df67894 100644 --- a/pkg/sql/sequence_test.go +++ b/pkg/sql/sequence_test.go @@ -21,9 +21,11 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/catalogkeys" "github.com/cockroachdb/cockroach/pkg/sql/catalog/catalogkv" "github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc" + "github.com/cockroachdb/cockroach/pkg/sql/tests" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" "github.com/cockroachdb/cockroach/pkg/util/leaktest" + "github.com/cockroachdb/cockroach/pkg/util/log" "github.com/stretchr/testify/require" ) @@ -406,3 +408,140 @@ func breakOwnershipMapping( ) require.NoError(t, err) } + +func TestSequenceAsOption(t *testing.T) { + defer leaktest.AfterTest(t)() + defer log.Scope(t).Close(t) + + ctx := context.Background() + params, _ := tests.CreateTestServerParams() + s, sqlDBRaw, _ := serverutils.StartServer(t, params) + sqlDB := sqlutils.MakeSQLRunner(sqlDBRaw) + defer s.Stopper().Stop(ctx) + + tests := []struct { + name string + data string + verifyQuery string + err string + expected [][]string + }{ + { + name: "as integer", + data: ` + CREATE SEQUENCE public.a_seq AS integer + START WITH 2 + INCREMENT BY 1 + MINVALUE 0 + MAXVALUE 234567 + CACHE 1;`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + expected: [][]string{{ + "a_seq", `CREATE SEQUENCE public.a_seq AS INT8 MINVALUE 0 MAXVALUE 234567 INCREMENT 1 START 2`, + }}, + }, + { + name: "as smallint desc", + data: ` + CREATE SEQUENCE public.a_seq AS smallint + START WITH -4 + INCREMENT BY -3`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + expected: [][]string{{ + "a_seq", `CREATE SEQUENCE public.a_seq AS INT2 MINVALUE -32768 MAXVALUE -1 INCREMENT -3 START -4`, + }}, + }, + { + name: "start value out of bounds", + data: ` + CREATE SEQUENCE public.a_seq AS smallint + START WITH 45678 + INCREMENT BY 1;`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + err: `START value`, + }, + { + name: "invalid syntax string", + data: ` + CREATE SEQUENCE public.a_seq + AS string + START WITH 1 + INCREMENT BY 1 + CACHE 1;`, + err: `syntax error`, + }, + { + name: "min out of inttype bounds", + data: ` + CREATE SEQUENCE public.a_seq + AS smallint + START WITH 1 + INCREMENT BY 1 + MINVALUE -1000000 + CACHE 1;`, + err: `must be greater than`, + }, + { + name: "max out of inttype bounds", + data: ` + CREATE SEQUENCE public.a_seq + AS smallint + START WITH 1 + INCREMENT BY 1 + MAXVALUE 123456 + CACHE 1;`, + err: `must be less than`, + }, + { + name: `MAXINT overrides integer type default max`, + data: `CREATE SEQUENCE public.a_seq + AS integer + START WITH 1 + INCREMENT BY 1 + MAXVALUE 9001 + CACHE 1;`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + expected: [][]string{{ + "a_seq", `CREATE SEQUENCE public.a_seq AS INT8 MINVALUE 1 MAXVALUE 9001 INCREMENT 1 START 1`, + }}, + }, + { + name: `alter sequence`, + data: `CREATE SEQUENCE public.a_seq AS integer; + ALTER SEQUENCE public.a_seq AS smallint`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + expected: [][]string{{ + "a_seq", `CREATE SEQUENCE public.a_seq AS INT2 MINVALUE 1 MAXVALUE 32767 INCREMENT 1 START 1`, + }}, + }, + { + name: `alter sequence desc`, + data: `CREATE SEQUENCE public.a_seq AS integer; + ALTER SEQUENCE public.a_seq AS smallint INCREMENT -1`, + verifyQuery: `SHOW CREATE SEQUENCE a_seq`, + expected: [][]string{{ + "a_seq", `CREATE SEQUENCE public.a_seq AS INT2 MINVALUE -32768 MAXVALUE -1 INCREMENT -1 START -1`, + }}, + }, + } + for _, test := range tests { + + t.Run(test.name, func(t *testing.T) { + // Set up clean testing environment. + sqlDB.Exec(t, `DROP SEQUENCE IF EXISTS a_seq`) + query := test.data + + if test.err != "" { + sqlDB.ExpectErr(t, test.err, query) + sqlDB.ExpectErr(t, `relation "a_seq" does not exist`, `DROP SEQUENCE a_seq`) + + } else { + + // Verify expected behavior of CREATE SEQUENCE AS option. + sqlDB.Exec(t, query) + sqlDB.CheckQueryResults(t, test.verifyQuery, test.expected) + sqlDB.Exec(t, `DROP SEQUENCE a_seq`) + } + }) + } +} diff --git a/pkg/sql/show_create_clauses.go b/pkg/sql/show_create_clauses.go index 4044d4bed0e5..f02a67ba9eae 100644 --- a/pkg/sql/show_create_clauses.go +++ b/pkg/sql/show_create_clauses.go @@ -234,6 +234,9 @@ func ShowCreateSequence( f.WriteString("SEQUENCE ") f.FormatNode(tn) opts := desc.GetSequenceOpts() + if opts.AsIntegerType != "" { + f.Printf(" AS %s", opts.AsIntegerType) + } f.Printf(" MINVALUE %d", opts.MinValue) f.Printf(" MAXVALUE %d", opts.MaxValue) f.Printf(" INCREMENT %d", opts.Increment) diff --git a/pkg/sql/show_test.go b/pkg/sql/show_test.go index 44739cf68b77..a9189518ca20 100644 --- a/pkg/sql/show_test.go +++ b/pkg/sql/show_test.go @@ -461,6 +461,38 @@ func TestShowCreateSequence(t *testing.T) { `CREATE SEQUENCE %s INCREMENT 5 MAXVALUE 10000 START 10 MINVALUE 0`, `CREATE SEQUENCE public.%s MINVALUE 0 MAXVALUE 10000 INCREMENT 5 START 10`, }, + { + `CREATE SEQUENCE %s AS smallint`, + `CREATE SEQUENCE public.%s AS INT2 MINVALUE 1 MAXVALUE 32767 INCREMENT 1 START 1`, + }, + { + `CREATE SEQUENCE %s AS int2`, + `CREATE SEQUENCE public.%s AS INT2 MINVALUE 1 MAXVALUE 32767 INCREMENT 1 START 1`, + }, + // Int type is determined by `default_int_size` in cluster settings. Default is int8. + { + `CREATE SEQUENCE %s AS int`, + `CREATE SEQUENCE public.%s AS INT8 MINVALUE 1 MAXVALUE 9223372036854775807 INCREMENT 1 START 1`, + }, + { + `CREATE SEQUENCE %s AS bigint`, + `CREATE SEQUENCE public.%s AS INT8 MINVALUE 1 MAXVALUE 9223372036854775807 INCREMENT 1 START 1`, + }, + // Override int/bigint's max value with user configured max value. + { + `CREATE SEQUENCE %s AS integer MINVALUE -5 MAXVALUE 9001`, + `CREATE SEQUENCE public.%s AS INT8 MINVALUE -5 MAXVALUE 9001 INCREMENT 1 START -5`, + }, + { + ` + CREATE SEQUENCE %s AS integer + START WITH -20000 + INCREMENT BY -1 + MINVALUE -20000 + MAXVALUE 0 + CACHE 1;`, + `CREATE SEQUENCE public.%s AS INT8 MINVALUE -20000 MAXVALUE 0 INCREMENT -1 START -20000`, + }, } for i, test := range tests { t.Run(fmt.Sprint(i), func(t *testing.T) {