diff --git a/go/cmd/vtgateclienttest/services/callerid.go b/go/cmd/vtgateclienttest/services/callerid.go index 41c80a80582..0e4a7da8495 100644 --- a/go/cmd/vtgateclienttest/services/callerid.go +++ b/go/cmd/vtgateclienttest/services/callerid.go @@ -17,21 +17,19 @@ limitations under the License. package services import ( + "context" "encoding/json" "fmt" "strings" - "context" - "google.golang.org/protobuf/proto" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/callerid" - "vitess.io/vitess/go/vt/vtgate/vtgateservice" - querypb "vitess.io/vitess/go/vt/proto/query" vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/vtgate/vtgateservice" ) // CallerIDPrefix is the prefix to send with queries so they go @@ -77,11 +75,11 @@ func (c *callerIDClient) checkCallerID(ctx context.Context, received string) (bo return true, fmt.Errorf("SUCCESS: callerid matches") } -func (c *callerIDClient) Execute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { +func (c *callerIDClient) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { if ok, err := c.checkCallerID(ctx, sql); ok { return session, nil, err } - return c.fallbackClient.Execute(ctx, session, sql, bindVariables) + return c.fallbackClient.Execute(ctx, mysqlCtx, session, sql, bindVariables) } func (c *callerIDClient) ExecuteBatch(ctx context.Context, session *vtgatepb.Session, sqlList []string, bindVariablesList []map[string]*querypb.BindVariable) (*vtgatepb.Session, []sqltypes.QueryResponse, error) { @@ -93,9 +91,9 @@ func (c *callerIDClient) ExecuteBatch(ctx context.Context, session *vtgatepb.Ses return c.fallbackClient.ExecuteBatch(ctx, session, sqlList, bindVariablesList) } -func (c *callerIDClient) StreamExecute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { +func (c *callerIDClient) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { if ok, err := c.checkCallerID(ctx, sql); ok { return session, err } - return c.fallbackClient.StreamExecute(ctx, session, sql, bindVariables, callback) + return c.fallbackClient.StreamExecute(ctx, mysqlCtx, session, sql, bindVariables, callback) } diff --git a/go/cmd/vtgateclienttest/services/echo.go b/go/cmd/vtgateclienttest/services/echo.go index 5b7f5177ade..eec08305674 100644 --- a/go/cmd/vtgateclienttest/services/echo.go +++ b/go/cmd/vtgateclienttest/services/echo.go @@ -18,13 +18,12 @@ package services import ( "bytes" + "context" "fmt" "reflect" "sort" "strings" - "context" - "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/callerid" "vitess.io/vitess/go/vt/vtgate/vtgateservice" @@ -98,7 +97,7 @@ func echoQueryResult(vals map[string]any) *sqltypes.Result { return qr } -func (c *echoClient) Execute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { +func (c *echoClient) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { if strings.HasPrefix(sql, EchoPrefix) { return session, echoQueryResult(map[string]any{ "callerId": callerid.EffectiveCallerIDFromContext(ctx), @@ -107,10 +106,10 @@ func (c *echoClient) Execute(ctx context.Context, session *vtgatepb.Session, sql "session": session, }), nil } - return c.fallbackClient.Execute(ctx, session, sql, bindVariables) + return c.fallbackClient.Execute(ctx, mysqlCtx, session, sql, bindVariables) } -func (c *echoClient) StreamExecute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { +func (c *echoClient) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { if strings.HasPrefix(sql, EchoPrefix) { callback(echoQueryResult(map[string]any{ "callerId": callerid.EffectiveCallerIDFromContext(ctx), @@ -120,7 +119,7 @@ func (c *echoClient) StreamExecute(ctx context.Context, session *vtgatepb.Sessio })) return session, nil } - return c.fallbackClient.StreamExecute(ctx, session, sql, bindVariables, callback) + return c.fallbackClient.StreamExecute(ctx, mysqlCtx, session, sql, bindVariables, callback) } func (c *echoClient) ExecuteBatch(ctx context.Context, session *vtgatepb.Session, sqlList []string, bindVariablesList []map[string]*querypb.BindVariable) (*vtgatepb.Session, []sqltypes.QueryResponse, error) { diff --git a/go/cmd/vtgateclienttest/services/errors.go b/go/cmd/vtgateclienttest/services/errors.go index b8eed8ac6ca..ad877054850 100644 --- a/go/cmd/vtgateclienttest/services/errors.go +++ b/go/cmd/vtgateclienttest/services/errors.go @@ -17,9 +17,8 @@ limitations under the License. package services import ( - "strings" - "context" + "strings" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/vterrors" @@ -111,14 +110,14 @@ func trimmedRequestToError(received string) error { } } -func (c *errorClient) Execute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { +func (c *errorClient) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { if err := requestToPartialError(sql, session); err != nil { return session, nil, err } if err := requestToError(sql); err != nil { return session, nil, err } - return c.fallbackClient.Execute(ctx, session, sql, bindVariables) + return c.fallbackClient.Execute(ctx, mysqlCtx, session, sql, bindVariables) } func (c *errorClient) ExecuteBatch(ctx context.Context, session *vtgatepb.Session, sqlList []string, bindVariablesList []map[string]*querypb.BindVariable) (*vtgatepb.Session, []sqltypes.QueryResponse, error) { @@ -133,11 +132,11 @@ func (c *errorClient) ExecuteBatch(ctx context.Context, session *vtgatepb.Sessio return c.fallbackClient.ExecuteBatch(ctx, session, sqlList, bindVariablesList) } -func (c *errorClient) StreamExecute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { +func (c *errorClient) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { if err := requestToError(sql); err != nil { return session, err } - return c.fallbackClient.StreamExecute(ctx, session, sql, bindVariables, callback) + return c.fallbackClient.StreamExecute(ctx, mysqlCtx, session, sql, bindVariables, callback) } func (c *errorClient) Prepare(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, []*querypb.Field, error) { diff --git a/go/cmd/vtgateclienttest/services/fallback.go b/go/cmd/vtgateclienttest/services/fallback.go index 401d5986175..72175fe01ce 100644 --- a/go/cmd/vtgateclienttest/services/fallback.go +++ b/go/cmd/vtgateclienttest/services/fallback.go @@ -40,16 +40,16 @@ func newFallbackClient(fallback vtgateservice.VTGateService) fallbackClient { return fallbackClient{fallback: fallback} } -func (c fallbackClient) Execute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { - return c.fallback.Execute(ctx, session, sql, bindVariables) +func (c fallbackClient) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { + return c.fallback.Execute(ctx, mysqlCtx, session, sql, bindVariables) } func (c fallbackClient) ExecuteBatch(ctx context.Context, session *vtgatepb.Session, sqlList []string, bindVariablesList []map[string]*querypb.BindVariable) (*vtgatepb.Session, []sqltypes.QueryResponse, error) { return c.fallback.ExecuteBatch(ctx, session, sqlList, bindVariablesList) } -func (c fallbackClient) StreamExecute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { - return c.fallback.StreamExecute(ctx, session, sql, bindVariables, callback) +func (c fallbackClient) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { + return c.fallback.StreamExecute(ctx, mysqlCtx, session, sql, bindVariables, callback) } func (c fallbackClient) Prepare(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, []*querypb.Field, error) { diff --git a/go/cmd/vtgateclienttest/services/terminal.go b/go/cmd/vtgateclienttest/services/terminal.go index 72b17879e31..7245be547ac 100644 --- a/go/cmd/vtgateclienttest/services/terminal.go +++ b/go/cmd/vtgateclienttest/services/terminal.go @@ -17,10 +17,11 @@ limitations under the License. package services import ( + "context" "errors" "fmt" - "context" + "vitess.io/vitess/go/vt/vtgate/vtgateservice" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/tb" @@ -42,7 +43,7 @@ func newTerminalClient() *terminalClient { return &terminalClient{} } -func (c *terminalClient) Execute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { +func (c *terminalClient) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { if sql == "quit://" { log.Fatal("Received quit:// query. Going down.") } @@ -58,7 +59,7 @@ func (c *terminalClient) ExecuteBatch(ctx context.Context, session *vtgatepb.Ses return session, nil, errTerminal } -func (c *terminalClient) StreamExecute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { +func (c *terminalClient) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { return session, errTerminal } diff --git a/go/flags/endtoend/vtgate.txt b/go/flags/endtoend/vtgate.txt index 469e6506eef..51d55c3cbea 100644 --- a/go/flags/endtoend/vtgate.txt +++ b/go/flags/endtoend/vtgate.txt @@ -1,4 +1,5 @@ Usage of vtgate: + --allow-kill-statement Allows the execution of kill statement --allowed_tablet_types strings Specifies the tablet types this vtgate is allowed to route queries to. Should be provided as a comma-separated set of tablet types. --alsologtostderr log to standard error as well as files --buffer_drain_concurrency int Maximum number of requests retried simultaneously. More concurrency will increase the load on the PRIMARY vttablet when draining the buffer. (default 1) diff --git a/go/mysql/conn.go b/go/mysql/conn.go index 9fb47da189e..3dfc96398c9 100644 --- a/go/mysql/conn.go +++ b/go/mysql/conn.go @@ -18,6 +18,7 @@ package mysql import ( "bufio" + "context" "crypto/tls" "crypto/x509" "errors" @@ -29,11 +30,9 @@ import ( "sync/atomic" "time" + "vitess.io/vitess/go/bucketpool" "vitess.io/vitess/go/mysql/collations" - "vitess.io/vitess/go/sqlescape" - - "vitess.io/vitess/go/bucketpool" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/log" querypb "vitess.io/vitess/go/vt/proto/query" @@ -199,6 +198,15 @@ type Conn struct { // enableQueryInfo controls whether we parse the INFO field in QUERY_OK packets // See: ConnParams.EnableQueryInfo enableQueryInfo bool + + // mu protects the fields below + mu sync.Mutex + // cancel keep the cancel function for the current executing query. + // this is used by `kill [query|connection] ID` command from other connection. + cancel context.CancelFunc + // this is used to mark the connection to be closed so that the command phase for the connection can be stopped and + // the connection gets closed. + closing bool } // splitStatementFunciton is the function that is used to split the statement in case of a multi-statement query. @@ -767,7 +775,7 @@ func (c *Conn) writeOKPacketWithHeader(packetOk *PacketOK, headerType byte) erro bytes, pos := c.startEphemeralPacketWithHeader(length) data := &coder{data: bytes, pos: pos} - data.writeByte(headerType) //header - OK or EOF + data.writeByte(headerType) // header - OK or EOF data.writeLenEncInt(packetOk.affectedRows) data.writeLenEncInt(packetOk.lastInsertID) data.writeUint16(packetOk.statusFlags) @@ -896,6 +904,10 @@ func (c *Conn) handleNextCommand(handler Handler) bool { if len(data) == 0 { return false } + // before continue to process the packet, check if the connection should be closed or not. + if c.IsMarkedForClose() { + return false + } switch data[0] { case ComQuit: @@ -1632,3 +1644,38 @@ func (c *Conn) IsUnixSocket() bool { func (c *Conn) GetRawConn() net.Conn { return c.conn } + +// CancelCtx aborts an existing running query +func (c *Conn) CancelCtx() { + c.mu.Lock() + defer c.mu.Unlock() + if c.cancel != nil { + c.cancel() + } +} + +// UpdateCancelCtx updates the cancel function on the connection. +func (c *Conn) UpdateCancelCtx(cancel context.CancelFunc) { + c.mu.Lock() + defer c.mu.Unlock() + c.cancel = cancel +} + +// MarkForClose marks the connection for close. +func (c *Conn) MarkForClose() { + c.mu.Lock() + defer c.mu.Unlock() + c.closing = true +} + +// IsMarkedForClose return true if the connection should be closed. +func (c *Conn) IsMarkedForClose() bool { + c.mu.Lock() + defer c.mu.Unlock() + return c.closing +} + +// GetTestConn returns a conn for testing purpose only. +func GetTestConn() *Conn { + return newConn(testConn{}) +} diff --git a/go/mysql/conn_fake.go b/go/mysql/conn_fake.go new file mode 100644 index 00000000000..72d944c2f3b --- /dev/null +++ b/go/mysql/conn_fake.go @@ -0,0 +1,83 @@ +/* +Copyright 2023 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package mysql + +import ( + "fmt" + "net" + "time" +) + +// testConn to be used for testing only as net.Conn interface implementation. +type testConn struct { + writeToPass []bool + pos int + queryPacket []byte +} + +func (t testConn) Read(b []byte) (n int, err error) { + copy(b, t.queryPacket) + return len(b), nil +} + +func (t testConn) Write(b []byte) (n int, err error) { + t.pos = t.pos + 1 + if t.writeToPass[t.pos] { + return 0, nil + } + return 0, fmt.Errorf("error in writing to connection") +} + +func (t testConn) Close() error { + return nil +} + +func (t testConn) LocalAddr() net.Addr { + panic("implement me") +} + +func (t testConn) RemoteAddr() net.Addr { + return mockAddress{s: "a"} +} + +func (t testConn) SetDeadline(t1 time.Time) error { + panic("implement me") +} + +func (t testConn) SetReadDeadline(t1 time.Time) error { + panic("implement me") +} + +func (t testConn) SetWriteDeadline(t1 time.Time) error { + panic("implement me") +} + +var _ net.Conn = (*testConn)(nil) + +type mockAddress struct { + s string +} + +func (m mockAddress) Network() string { + return m.s +} + +func (m mockAddress) String() string { + return m.s +} + +var _ net.Addr = (*mockAddress)(nil) diff --git a/go/mysql/conn_flaky_test.go b/go/mysql/conn_flaky_test.go index e73e566dad3..a22cdfd8700 100644 --- a/go/mysql/conn_flaky_test.go +++ b/go/mysql/conn_flaky_test.go @@ -842,7 +842,7 @@ func TestMultiStatement(t *testing.T) { // panic if the query contains "panic" and it will return selectRowsResult in case of any other query handler := &testRun{t: t, err: NewSQLError(CRMalformedPacket, SSUnknownSQLState, "cannot get column number")} res := sConn.handleNextCommand(handler) - //The queries run will be select 1; and select 2; These queries do not return any errors, so the connection should still be open + // The queries run will be select 1; and select 2; These queries do not return any errors, so the connection should still be open require.True(t, res, "we should not break the connection in case of no errors") // Read the result of the query and assert that it is indeed what we want. This will contain the result of the first query. data, more, _, err := cConn.ReadQueryResult(100, true) @@ -992,67 +992,6 @@ func TestConnectionErrorWhileWritingComStmtExecute(t *testing.T) { require.False(t, res, "we should beak the connection in case of error writing error packet") } -var _ Handler = (*testRun)(nil) - -type testConn struct { - writeToPass []bool - pos int - queryPacket []byte -} - -func (t testConn) Read(b []byte) (n int, err error) { - copy(b, t.queryPacket) - return len(b), nil -} - -func (t testConn) Write(b []byte) (n int, err error) { - t.pos = t.pos + 1 - if t.writeToPass[t.pos] { - return 0, nil - } - return 0, fmt.Errorf("error in writing to connection") -} - -func (t testConn) Close() error { - panic("implement me") -} - -func (t testConn) LocalAddr() net.Addr { - panic("implement me") -} - -func (t testConn) RemoteAddr() net.Addr { - return mockAddress{s: "a"} -} - -func (t testConn) SetDeadline(t1 time.Time) error { - panic("implement me") -} - -func (t testConn) SetReadDeadline(t1 time.Time) error { - panic("implement me") -} - -func (t testConn) SetWriteDeadline(t1 time.Time) error { - panic("implement me") -} - -var _ net.Conn = (*testConn)(nil) - -type mockAddress struct { - s string -} - -func (m mockAddress) Network() string { - return m.s -} - -func (m mockAddress) String() string { - return m.s -} - -var _ net.Addr = (*mockAddress)(nil) - var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") func randSeq(n int) string { diff --git a/go/mysql/server.go b/go/mysql/server.go index e17bd82ef90..92be26161ee 100644 --- a/go/mysql/server.go +++ b/go/mysql/server.go @@ -25,20 +25,18 @@ import ( "sync/atomic" "time" - "vitess.io/vitess/go/mysql/collations" - "vitess.io/vitess/go/vt/servenv" - - "vitess.io/vitess/go/sqlescape" - proxyproto "github.com/pires/go-proxyproto" + "vitess.io/vitess/go/mysql/collations" "vitess.io/vitess/go/netutil" + "vitess.io/vitess/go/sqlescape" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/stats" "vitess.io/vitess/go/tb" "vitess.io/vitess/go/vt/log" querypb "vitess.io/vitess/go/vt/proto/query" "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/vterrors" ) @@ -525,7 +523,8 @@ func (l *Listener) handle(conn net.Conn, connectionID uint32, acceptTime time.Ti for { kontinue := c.handleNextCommand(l.handler) - if !kontinue { + // before going for next command check if the connection should be closed or not. + if !kontinue || c.IsMarkedForClose() { return } } diff --git a/go/mysql/sql_error.go b/go/mysql/sql_error.go index ac988033e3d..da093b75bd7 100644 --- a/go/mysql/sql_error.go +++ b/go/mysql/sql_error.go @@ -240,6 +240,7 @@ var stateToMysqlCode = map[vterrors.State]mysqlCode{ vterrors.RegexpInvalidCaptureGroup: {num: ERRegexpInvalidCaptureGroup, state: SSUnknownSQLState}, vterrors.CharacterSetMismatch: {num: ERCharacterSetMismatch, state: SSUnknownSQLState}, vterrors.WrongParametersToNativeFct: {num: ERWrongParametersToNativeFct, state: SSUnknownSQLState}, + vterrors.KillDeniedError: {num: ERKillDenied, state: SSUnknownSQLState}, } func getStateToMySQLState(state vterrors.State) mysqlCode { diff --git a/go/test/endtoend/utils/utils.go b/go/test/endtoend/utils/utils.go index 2e44292504d..270c262538f 100644 --- a/go/test/endtoend/utils/utils.go +++ b/go/test/endtoend/utils/utils.go @@ -174,6 +174,12 @@ func ExecAllowError(t *testing.T, conn *mysql.Conn, query string) (*sqltypes.Res return conn.ExecuteFetch(query, 1000, true) } +// ExecWithRowCount is similar to ExecAllowError with max row count provided. +func ExecWithRowCount(t testing.TB, conn *mysql.Conn, query string, rowCount int) (*sqltypes.Result, error) { + t.Helper() + return conn.ExecuteFetch(query, rowCount, true) +} + // SkipIfBinaryIsBelowVersion skips the given test if the binary's major version is below majorVersion. func SkipIfBinaryIsBelowVersion(t *testing.T, majorVersion int, binary string) { version, err := cluster.GetMajorVersion(binary) diff --git a/go/test/endtoend/vtgate/queries/kill/kill_test.go b/go/test/endtoend/vtgate/queries/kill/kill_test.go new file mode 100644 index 00000000000..ad57722dd97 --- /dev/null +++ b/go/test/endtoend/vtgate/queries/kill/kill_test.go @@ -0,0 +1,246 @@ +/* +Copyright 2023 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kill + +import ( + "context" + "fmt" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/test/endtoend/utils" +) + +// TestKillConnection kills its own connection and checks the error message received. +func TestKillOwnConnection(t *testing.T) { + conn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer conn.Close() + + _, err = utils.ExecAllowError(t, conn, fmt.Sprintf("kill %d", conn.ConnectionID)) + require.NoError(t, err) + + // the connection should be closed. + _, err = utils.ExecAllowError(t, conn, "select 1") + require.ErrorContains(t, err, "EOF (errno 2013) (sqlstate HY000)") +} + +// TestKillDifferentConnection kills different connection and check relevant error messages. +func TestKillDifferentConnection(t *testing.T) { + conn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer conn.Close() + + killConn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer killConn.Close() + + // connection does not exist + _, err = utils.ExecAllowError(t, killConn, "kill 12345") + require.ErrorContains(t, err, "Unknown thread id: 12345 (errno 1094) (sqlstate HY000)") + + // connection exist + _, err = utils.ExecAllowError(t, killConn, fmt.Sprintf("kill %d", conn.ConnectionID)) + require.NoError(t, err) + + // executing on closed connection + _, err = utils.ExecAllowError(t, conn, "select 1") + require.ErrorContains(t, err, "EOF (errno 2013) (sqlstate HY000)") +} + +// TestKillOwnQuery kills the kill statement itself +func TestKillOwnQuery(t *testing.T) { + conn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer conn.Close() + + _, err = utils.ExecAllowError(t, conn, fmt.Sprintf("kill query %d", conn.ConnectionID)) + // TODO: does not really change anything, but expect to receive Queery Interrupted error + // "(errno 1317) (sqlstate 70100)" + require.NoError(t, err) +} + +// TestKillDifferentConnectionQuery kills query on different connection and check relevant error messages. +func TestKillDifferentConnectionQuery(t *testing.T) { + setupData(t, false) + defer dropData(t) + + conn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer conn.Close() + + killConn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer killConn.Close() + + // killing query on non-existent connection + _, err = utils.ExecAllowError(t, killConn, "kill query 12345") + require.ErrorContains(t, err, "Unknown thread id: 12345 (errno 1094) (sqlstate HY000)") + + done := make(chan error) + go func() { + // 20 seconds sleep. Should be stopped by kill statement. + _, err := utils.ExecAllowError(t, conn, "select sleep(20) from test") + done <- err + }() + + for { + select { + case execErr := <-done: + require.ErrorContains(t, execErr, "context canceled (errno 1317) (sqlstate 70100)") + return + case <-time.After(100 * time.Millisecond): + _, err = utils.ExecAllowError(t, killConn, fmt.Sprintf("kill query %d", conn.ConnectionID)) + require.NoError(t, err) + case <-time.After(5 * time.Second): + t.Fatal("test did not complete in 5 seconds.") + } + } +} + +// TestKillOnHungQuery test that any hung query should return. +func TestKillOnHungQuery(t *testing.T) { + + execFunc := func(conn *mysql.Conn) error { + utils.Exec(t, conn, "begin") + _, err := utils.ExecAllowError(t, conn, "insert into test(id, msg, extra) values (1, 'a', 'e')") + require.Error(t, err) + return err + } + + t.Run("connection close", func(t *testing.T) { + testHungQuery(t, execFunc, func(hungConn *mysql.Conn, _ *mysql.Conn) { + // closing the hung query connection. + hungConn.Close() + }, "(errno 2013) (sqlstate HY000)") + }) + + t.Run("connection kill", func(t *testing.T) { + testHungQuery(t, execFunc, func(hungConn *mysql.Conn, killConn *mysql.Conn) { + // kill the hung connection + utils.ExecAllowError(t, killConn, fmt.Sprintf("kill %d", hungConn.ConnectionID)) + }, "context canceled") + }) + + t.Run("query kill", func(t *testing.T) { + testHungQuery(t, execFunc, func(hungConn *mysql.Conn, killConn *mysql.Conn) { + // kill the hung query + utils.ExecAllowError(t, killConn, fmt.Sprintf("kill query %d", hungConn.ConnectionID)) + }, "context canceled") + }) +} + +func testHungQuery(t *testing.T, execFunc func(*mysql.Conn) error, killFunc func(*mysql.Conn, *mysql.Conn), errMsgs ...string) { + killConn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer killConn.Close() + + utils.Exec(t, killConn, "begin") + utils.Exec(t, killConn, "insert into test(id, msg, extra) values (1, 'a', 'e')") + + hungConn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer hungConn.Close() + + runQueryInGoRoutineAndCheckError(t, hungConn, killConn, execFunc, killFunc, errMsgs) +} + +// TestKillStmtOnHugeData tests different kill scenario on huge data. +func TestKillStmtOnHugeData(t *testing.T) { + setupData(t, true) + defer dropData(t) + + execFunc := func(conn *mysql.Conn) error { + _, err := utils.ExecWithRowCount(t, conn, "select * from test", 640000) + require.Error(t, err) + return err + } + + t.Run("oltp - kill conn", func(t *testing.T) { + testHugeData(t, "oltp", execFunc, func(conn *mysql.Conn, killConn *mysql.Conn) { + utils.ExecAllowError(t, killConn, fmt.Sprintf("kill query %d", conn.ConnectionID)) + }, "context canceled (errno 1317) (sqlstate 70100)") + }) + + t.Run("oltp - kill query", func(t *testing.T) { + testHugeData(t, "oltp", execFunc, func(conn *mysql.Conn, killConn *mysql.Conn) { + utils.ExecAllowError(t, killConn, fmt.Sprintf("kill query %d", conn.ConnectionID)) + }, "(errno 1317) (sqlstate 70100)") + }) + + t.Run("olap - kill conn", func(t *testing.T) { + testHugeData(t, "olap", execFunc, func(conn *mysql.Conn, killConn *mysql.Conn) { + utils.ExecAllowError(t, killConn, fmt.Sprintf("kill query %d", conn.ConnectionID)) + }, "context canceled (errno 1317) (sqlstate 70100)", "EOF (errno 2013) (sqlstate HY000)") + }) + + t.Run("olap - kill query", func(t *testing.T) { + testHugeData(t, "olap", execFunc, func(conn *mysql.Conn, killConn *mysql.Conn) { + utils.ExecAllowError(t, killConn, fmt.Sprintf("kill query %d", conn.ConnectionID)) + }, "context canceled (errno 1317) (sqlstate 70100)", "EOF (errno 2013) (sqlstate HY000)") + }) +} + +func testHugeData(t *testing.T, workload string, execFunc func(*mysql.Conn) error, killFunc func(*mysql.Conn, *mysql.Conn), errMsgs ...string) { + conn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer conn.Close() + utils.Exec(t, conn, fmt.Sprintf("set workload = %s", workload)) + + killConn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer killConn.Close() + utils.Exec(t, killConn, fmt.Sprintf("set workload = %s", workload)) + + runQueryInGoRoutineAndCheckError(t, conn, killConn, execFunc, killFunc, errMsgs) +} + +func runQueryInGoRoutineAndCheckError(t *testing.T, conn *mysql.Conn, killConn *mysql.Conn, execFunc func(*mysql.Conn) error, killFunc func(*mysql.Conn, *mysql.Conn), errMsgs []string) { + done := make(chan bool) + go func() { + err := execFunc(conn) + // if exec has failed, marking channel done to fail fast. + if t.Failed() { + done <- true + } + // going through all the expected error messages and if it matches any then test passes. + for _, errMsg := range errMsgs { + if strings.Contains(err.Error(), errMsg) { + done <- true + return + } + } + require.Failf(t, "error message does not match", "%v does not contain any of %v", err.Error(), errMsgs) + done <- true + }() + + totalTime := time.After(5 * time.Second) + for { + select { + case <-done: + return + case <-time.After(20 * time.Millisecond): + killFunc(conn, killConn) + case <-totalTime: + t.Fatal("test did not complete in 5 seconds.") + } + } +} diff --git a/go/test/endtoend/vtgate/queries/kill/main_test.go b/go/test/endtoend/vtgate/queries/kill/main_test.go new file mode 100644 index 00000000000..836603c91ee --- /dev/null +++ b/go/test/endtoend/vtgate/queries/kill/main_test.go @@ -0,0 +1,148 @@ +/* +Copyright 2019 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kill + +import ( + "context" + _ "embed" + "flag" + "fmt" + "math/rand" + "os" + "strconv" + "strings" + "testing" + + "github.com/stretchr/testify/require" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/test/endtoend/utils" + "vitess.io/vitess/go/vt/vtgate/planbuilder" +) + +var ( + clusterInstance *cluster.LocalProcessCluster + vtParams mysql.ConnParams + cell = "zone1" + hostname = "localhost" + ks = "ks" + + //go:embed schema.sql + schema string + + //go:embed vschema.json + vschema string +) + +func TestMain(m *testing.M) { + defer cluster.PanicHandler(nil) + flag.Parse() + + exitCode := func() int { + clusterInstance = cluster.NewCluster(cell, hostname) + defer clusterInstance.Teardown() + + // Start topo server + if err := clusterInstance.StartTopo(); err != nil { + return 1 + } + + // Start keyspace + keyspace := &cluster.Keyspace{ + Name: ks, + SchemaSQL: schema, + VSchema: vschema, + } + var maxGrpcSize int64 = 256 * 1024 * 1024 + clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs, + "--queryserver-config-max-result-size", "10000000", + "--grpc_max_message_size", strconv.FormatInt(maxGrpcSize, 10)) + if err := clusterInstance.StartKeyspace(*keyspace, []string{"-80", "80-"}, 0, false); err != nil { + return 1 + } + + // Start vtgate + clusterInstance.VtGatePlannerVersion = planbuilder.Gen4 + clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs, + "--grpc_max_message_size", strconv.FormatInt(maxGrpcSize, 10), + "--max_memory_rows", "999999", + "--allow-kill-statement") + if err := clusterInstance.StartVtgate(); err != nil { + return 1 + } + + vtParams = clusterInstance.GetVTParams(ks) + + return m.Run() + }() + os.Exit(exitCode) +} + +func setupData(t *testing.T, huge bool) { + conn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer conn.Close() + + initialRow := 9999 + multiplier := 32 + if !huge { + initialRow = 4 + multiplier = 0 + } + r1 := getRandomString(10) + r2 := getRandomString(20) + r3 := getRandomString(30) + r4 := getRandomString(40) + + for i := 0; i < initialRow; i += 4 { + utils.Exec(t, conn, fmt.Sprintf("insert into test(id, msg, extra) values (%d, '%s', '%s'),(%d, '%s', '%s'),(%d, '%s', '%s'),(%d, '%s', '%s')", + i, r1, r2, + i+1, r2, r3, + i+2, r3, r4, + i+3, r4, r1)) + } + if !huge { + utils.AssertMatches(t, conn, `select count(*), min(id), max(id) from test`, `[[INT64(4) INT64(0) INT64(3)]]`) + return + } + + utils.AssertMatches(t, conn, `select count(*), min(id), max(id) from test`, `[[INT64(10000) INT64(0) INT64(9999)]]`) + for i := 1; i < multiplier; i = i << 1 { + utils.Exec(t, conn, fmt.Sprintf("insert into test(id, msg, extra) select id+%d, msg, extra from test", (initialRow+1)*i)) + } + utils.AssertMatches(t, conn, `select count(*), min(id), max(id) from test`, `[[INT64(320000) INT64(0) INT64(319999)]]`) +} + +func dropData(t *testing.T) { + conn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer conn.Close() + + utils.Exec(t, conn, "drop table if exists test") + utils.Exec(t, conn, schema) +} + +func getRandomString(size int) string { + var str strings.Builder + + for i := 0; i < size; i++ { + str.WriteByte(byte((rand.Int() % 26) + 97)) + } + + return str.String() +} diff --git a/go/test/endtoend/vtgate/queries/kill/schema.sql b/go/test/endtoend/vtgate/queries/kill/schema.sql new file mode 100644 index 00000000000..21a059f69ac --- /dev/null +++ b/go/test/endtoend/vtgate/queries/kill/schema.sql @@ -0,0 +1,16 @@ +create table test +( + id bigint not null, + msg varchar(50) not null, + extra varchar(100), + primary key (id), + index(msg) +) ENGINE=InnoDB; + +create table test_idx +( + msg varchar(50) not null, + id bigint not null, + keyspace_id varbinary(50), + primary key (msg, id) +) ENGINE=InnoDB; \ No newline at end of file diff --git a/go/test/endtoend/vtgate/queries/kill/vschema.json b/go/test/endtoend/vtgate/queries/kill/vschema.json new file mode 100644 index 00000000000..3173d8c7819 --- /dev/null +++ b/go/test/endtoend/vtgate/queries/kill/vschema.json @@ -0,0 +1,42 @@ +{ + "sharded": true, + "vindexes": { + "unicode_loose_xxhash" : { + "type": "unicode_loose_xxhash" + }, + "xxhash" : { + "type": "xxhash" + }, + "test_vdx": { + "type": "consistent_lookup", + "params": { + "table": "test_idx", + "from": "msg,id", + "to": "keyspace_id" + }, + "owner": "test" + } + }, + "tables": { + "test": { + "column_vindexes": [ + { + "column": "id", + "name": "xxhash" + }, + { + "columns": ["msg", "id"], + "name": "test_vdx" + } + ] + }, + "test_idx": { + "column_vindexes": [ + { + "column": "msg", + "name": "unicode_loose_xxhash" + } + ] + } + } +} diff --git a/go/vt/sqlparser/analyzer.go b/go/vt/sqlparser/analyzer.go index 3d13c580d6d..59cc1c1834d 100644 --- a/go/vt/sqlparser/analyzer.go +++ b/go/vt/sqlparser/analyzer.go @@ -62,6 +62,7 @@ const ( StmtPrepare StmtExecute StmtDeallocate + StmtKill ) // ASTToStatementType returns a StatementType from an AST stmt @@ -123,6 +124,8 @@ func ASTToStatementType(stmt Statement) StatementType { return StmtExecute case *DeallocateStmt: return StmtDeallocate + case *Kill: + return StmtKill default: return StmtUnknown } @@ -250,6 +253,8 @@ func Preview(sql string) StatementType { return StmtRelease case "rollback": return StmtSRollback + case "kill": + return StmtKill } return StmtUnknown } @@ -314,6 +319,8 @@ func (s StatementType) String() string { return "EXECUTE" case StmtDeallocate: return "DEALLOCATE PREPARE" + case StmtKill: + return "KILL" default: return "UNKNOWN" } diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index abc72f3f05b..68a42935d16 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -694,6 +694,15 @@ type ( CommentOnly struct { Comments []string } + + // KillType is an enum for Kill.Type + KillType int8 + + // Kill represents a kill statement + Kill struct { + Type KillType + ProcesslistID uint64 + } ) func (*Union) iStatement() {} @@ -746,6 +755,7 @@ func (*PrepareStmt) iStatement() {} func (*ExecuteStmt) iStatement() {} func (*DeallocateStmt) iStatement() {} func (*PurgeBinaryLogs) iStatement() {} +func (*Kill) iStatement() {} func (*CreateView) iDDLStatement() {} func (*AlterView) iDDLStatement() {} diff --git a/go/vt/sqlparser/ast_clone.go b/go/vt/sqlparser/ast_clone.go index 5aac8b78427..f98cb44fab8 100644 --- a/go/vt/sqlparser/ast_clone.go +++ b/go/vt/sqlparser/ast_clone.go @@ -287,6 +287,8 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfJtOnResponse(in) case *KeyState: return CloneRefOfKeyState(in) + case *Kill: + return CloneRefOfKill(in) case *LagLeadExpr: return CloneRefOfLagLeadExpr(in) case *Limit: @@ -1987,6 +1989,15 @@ func CloneRefOfKeyState(n *KeyState) *KeyState { return &out } +// CloneRefOfKill creates a deep clone of the input. +func CloneRefOfKill(n *Kill) *Kill { + if n == nil { + return nil + } + out := *n + return &out +} + // CloneRefOfLagLeadExpr creates a deep clone of the input. func CloneRefOfLagLeadExpr(n *LagLeadExpr) *LagLeadExpr { if n == nil { @@ -4161,6 +4172,8 @@ func CloneStatement(in Statement) Statement { return CloneRefOfFlush(in) case *Insert: return CloneRefOfInsert(in) + case *Kill: + return CloneRefOfKill(in) case *Load: return CloneRefOfLoad(in) case *LockTables: diff --git a/go/vt/sqlparser/ast_copy_on_rewrite.go b/go/vt/sqlparser/ast_copy_on_rewrite.go index 0032704de3a..fed49abba0b 100644 --- a/go/vt/sqlparser/ast_copy_on_rewrite.go +++ b/go/vt/sqlparser/ast_copy_on_rewrite.go @@ -286,6 +286,8 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfJtOnResponse(n, parent) case *KeyState: return c.copyOnRewriteRefOfKeyState(n, parent) + case *Kill: + return c.copyOnRewriteRefOfKill(n, parent) case *LagLeadExpr: return c.copyOnRewriteRefOfLagLeadExpr(n, parent) case *Limit: @@ -3643,6 +3645,18 @@ func (c *cow) copyOnRewriteRefOfKeyState(n *KeyState, parent SQLNode) (out SQLNo } return } +func (c *cow) copyOnRewriteRefOfKill(n *Kill, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfLagLeadExpr(n *LagLeadExpr, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -7343,6 +7357,8 @@ func (c *cow) copyOnRewriteStatement(n Statement, parent SQLNode) (out SQLNode, return c.copyOnRewriteRefOfFlush(n, parent) case *Insert: return c.copyOnRewriteRefOfInsert(n, parent) + case *Kill: + return c.copyOnRewriteRefOfKill(n, parent) case *Load: return c.copyOnRewriteRefOfLoad(n, parent) case *LockTables: diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go index 3cea771b1b7..dff5094ff6b 100644 --- a/go/vt/sqlparser/ast_equals.go +++ b/go/vt/sqlparser/ast_equals.go @@ -818,6 +818,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfKeyState(a, b) + case *Kill: + b, ok := inB.(*Kill) + if !ok { + return false + } + return cmp.RefOfKill(a, b) case *LagLeadExpr: b, ok := inB.(*LagLeadExpr) if !ok { @@ -3293,6 +3299,18 @@ func (cmp *Comparator) RefOfKeyState(a, b *KeyState) bool { return a.Enable == b.Enable } +// RefOfKill does deep equals between the two objects. +func (cmp *Comparator) RefOfKill(a, b *Kill) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return a.ProcesslistID == b.ProcesslistID && + a.Type == b.Type +} + // RefOfLagLeadExpr does deep equals between the two objects. func (cmp *Comparator) RefOfLagLeadExpr(a, b *LagLeadExpr) bool { if a == b { @@ -6865,6 +6883,12 @@ func (cmp *Comparator) Statement(inA, inB Statement) bool { return false } return cmp.RefOfInsert(a, b) + case *Kill: + b, ok := inB.(*Kill) + if !ok { + return false + } + return cmp.RefOfKill(a, b) case *Load: b, ok := inB.(*Load) if !ok { diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index 769c527a598..af290f7784b 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -2942,3 +2942,8 @@ func (node *GeomFromGeoJSONExpr) Format(buf *TrackedBuffer) { } buf.WriteByte(')') } + +// Format formats the kill statement +func (node *Kill) Format(buf *TrackedBuffer) { + buf.astPrintf(node, "kill %s %d", node.Type.ToString(), node.ProcesslistID) +} diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index e5414d0cce7..b5a05b053a1 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -3894,3 +3894,11 @@ func (node *GeomFromGeoJSONExpr) formatFast(buf *TrackedBuffer) { } buf.WriteByte(')') } + +// formatFast formats the kill statement +func (node *Kill) formatFast(buf *TrackedBuffer) { + buf.WriteString("kill ") + buf.WriteString(node.Type.ToString()) + buf.WriteByte(' ') + buf.WriteString(fmt.Sprintf("%d", node.ProcesslistID)) +} diff --git a/go/vt/sqlparser/ast_funcs.go b/go/vt/sqlparser/ast_funcs.go index aab5479bb97..521ebf0f486 100644 --- a/go/vt/sqlparser/ast_funcs.go +++ b/go/vt/sqlparser/ast_funcs.go @@ -2251,6 +2251,11 @@ func convertStringToInt(integer string) int { return val } +func convertStringToUInt64(integer string) uint64 { + val, _ := strconv.ParseUint(integer, 10, 64) + return val +} + // SplitAndExpression breaks up the Expr into AND-separated conditions // and appends them to filters. Outer parenthesis are removed. Precedence // should be taken into account if expressions are recombined. @@ -2513,3 +2518,13 @@ func IsDistinct(f AggrFunc) bool { } return da.IsDistinct() } + +// ToString returns the type as a string +func (ty KillType) ToString() string { + switch ty { + case QueryType: + return QueryStr + default: + return ConnectionStr + } +} diff --git a/go/vt/sqlparser/ast_rewrite.go b/go/vt/sqlparser/ast_rewrite.go index 72a1cdafdc7..0266876e201 100644 --- a/go/vt/sqlparser/ast_rewrite.go +++ b/go/vt/sqlparser/ast_rewrite.go @@ -286,6 +286,8 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfJtOnResponse(parent, node, replacer) case *KeyState: return a.rewriteRefOfKeyState(parent, node, replacer) + case *Kill: + return a.rewriteRefOfKill(parent, node, replacer) case *LagLeadExpr: return a.rewriteRefOfLagLeadExpr(parent, node, replacer) case *Limit: @@ -4768,6 +4770,30 @@ func (a *application) rewriteRefOfKeyState(parent SQLNode, node *KeyState, repla } return true } +func (a *application) rewriteRefOfKill(parent SQLNode, node *Kill, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.pre(&a.cur) { + return true + } + } + if a.post != nil { + if a.pre == nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + } + if !a.post(&a.cur) { + return false + } + } + return true +} func (a *application) rewriteRefOfLagLeadExpr(parent SQLNode, node *LagLeadExpr, replacer replacerFunc) bool { if node == nil { return true @@ -9704,6 +9730,8 @@ func (a *application) rewriteStatement(parent SQLNode, node Statement, replacer return a.rewriteRefOfFlush(parent, node, replacer) case *Insert: return a.rewriteRefOfInsert(parent, node, replacer) + case *Kill: + return a.rewriteRefOfKill(parent, node, replacer) case *Load: return a.rewriteRefOfLoad(parent, node, replacer) case *LockTables: diff --git a/go/vt/sqlparser/ast_visit.go b/go/vt/sqlparser/ast_visit.go index e4dc21d1183..d791700d656 100644 --- a/go/vt/sqlparser/ast_visit.go +++ b/go/vt/sqlparser/ast_visit.go @@ -286,6 +286,8 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfJtOnResponse(in, f) case *KeyState: return VisitRefOfKeyState(in, f) + case *Kill: + return VisitRefOfKill(in, f) case *LagLeadExpr: return VisitRefOfLagLeadExpr(in, f) case *Limit: @@ -2498,6 +2500,15 @@ func VisitRefOfKeyState(in *KeyState, f Visit) error { } return nil } +func VisitRefOfKill(in *Kill, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + return nil +} func VisitRefOfLagLeadExpr(in *LagLeadExpr, f Visit) error { if in == nil { return nil @@ -5104,6 +5115,8 @@ func VisitStatement(in Statement, f Visit) error { return VisitRefOfFlush(in, f) case *Insert: return VisitRefOfInsert(in, f) + case *Kill: + return VisitRefOfKill(in, f) case *Load: return VisitRefOfLoad(in, f) case *LockTables: diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go index ec816085caa..1f688d91524 100644 --- a/go/vt/sqlparser/cached_size.go +++ b/go/vt/sqlparser/cached_size.go @@ -2546,6 +2546,16 @@ func (cached *KeyState) CachedSize(alloc bool) int64 { } return size } +func (cached *Kill) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(16) + } + return size +} func (cached *LagLeadExpr) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) diff --git a/go/vt/sqlparser/constants.go b/go/vt/sqlparser/constants.go index 23607156975..f9eeafb363d 100644 --- a/go/vt/sqlparser/constants.go +++ b/go/vt/sqlparser/constants.go @@ -463,6 +463,10 @@ const ( LatitudeFromHashStr = "st_latfromgeohash" LongitudeFromHashStr = "st_longfromgeohash" PointFromHashStr = "st_pointfromgeohash" + + // KillType strings + ConnectionStr = "connection" + QueryStr = "query" ) // Constants for Enum Type - Insert.Action @@ -1016,3 +1020,9 @@ const ( IntervalDateExprBinarySub IntervalDateExprTimestampadd ) + +// Constant for Enum Type - KillType +const ( + ConnectionType KillType = iota + QueryType +) diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go index 04b3c1e405f..36c329d8e0a 100644 --- a/go/vt/sqlparser/keywords.go +++ b/go/vt/sqlparser/keywords.go @@ -387,7 +387,7 @@ var keywords = []keyword{ {"keys", KEYS}, {"keyspaces", KEYSPACES}, {"key_block_size", KEY_BLOCK_SIZE}, - {"kill", UNUSED}, + {"kill", KILL}, {"lag", LAG}, {"language", LANGUAGE}, {"last", LAST}, diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index b512b7d9934..516d3c28e53 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -3649,6 +3649,13 @@ var ( }, { input: `select * from t1 where col1 like 'ks\_' and col2 = 'ks\_' and col1 like 'ks_' and col2 = 'ks_'`, output: `select * from t1 where col1 like 'ks\_' and col2 = 'ks\_' and col1 like 'ks_' and col2 = 'ks_'`, + }, { + input: `kill connection 18446744073709551615`, + }, { + input: `kill query 18446744073709551615`, + }, { + input: `kill 18446744073709551615`, + output: `kill connection 18446744073709551615`, }} ) diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 50b0121e09c..eac852ae9e6 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -159,590 +159,591 @@ const STORED = 57468 const BOTH = 57469 const LEADING = 57470 const TRAILING = 57471 -const EMPTY_FROM_CLAUSE = 57472 -const LOWER_THAN_CHARSET = 57473 -const CHARSET = 57474 -const UNIQUE = 57475 -const KEY = 57476 -const EXPRESSION_PREC_SETTER = 57477 -const OR = 57478 -const XOR = 57479 -const AND = 57480 -const NOT = 57481 -const BETWEEN = 57482 -const CASE = 57483 -const WHEN = 57484 -const THEN = 57485 -const ELSE = 57486 -const END = 57487 -const LE = 57488 -const GE = 57489 -const NE = 57490 -const NULL_SAFE_EQUAL = 57491 -const IS = 57492 -const LIKE = 57493 -const REGEXP = 57494 -const RLIKE = 57495 -const IN = 57496 -const ASSIGNMENT_OPT = 57497 -const SHIFT_LEFT = 57498 -const SHIFT_RIGHT = 57499 -const DIV = 57500 -const MOD = 57501 -const UNARY = 57502 -const COLLATE = 57503 -const BINARY = 57504 -const UNDERSCORE_ARMSCII8 = 57505 -const UNDERSCORE_ASCII = 57506 -const UNDERSCORE_BIG5 = 57507 -const UNDERSCORE_BINARY = 57508 -const UNDERSCORE_CP1250 = 57509 -const UNDERSCORE_CP1251 = 57510 -const UNDERSCORE_CP1256 = 57511 -const UNDERSCORE_CP1257 = 57512 -const UNDERSCORE_CP850 = 57513 -const UNDERSCORE_CP852 = 57514 -const UNDERSCORE_CP866 = 57515 -const UNDERSCORE_CP932 = 57516 -const UNDERSCORE_DEC8 = 57517 -const UNDERSCORE_EUCJPMS = 57518 -const UNDERSCORE_EUCKR = 57519 -const UNDERSCORE_GB18030 = 57520 -const UNDERSCORE_GB2312 = 57521 -const UNDERSCORE_GBK = 57522 -const UNDERSCORE_GEOSTD8 = 57523 -const UNDERSCORE_GREEK = 57524 -const UNDERSCORE_HEBREW = 57525 -const UNDERSCORE_HP8 = 57526 -const UNDERSCORE_KEYBCS2 = 57527 -const UNDERSCORE_KOI8R = 57528 -const UNDERSCORE_KOI8U = 57529 -const UNDERSCORE_LATIN1 = 57530 -const UNDERSCORE_LATIN2 = 57531 -const UNDERSCORE_LATIN5 = 57532 -const UNDERSCORE_LATIN7 = 57533 -const UNDERSCORE_MACCE = 57534 -const UNDERSCORE_MACROMAN = 57535 -const UNDERSCORE_SJIS = 57536 -const UNDERSCORE_SWE7 = 57537 -const UNDERSCORE_TIS620 = 57538 -const UNDERSCORE_UCS2 = 57539 -const UNDERSCORE_UJIS = 57540 -const UNDERSCORE_UTF16 = 57541 -const UNDERSCORE_UTF16LE = 57542 -const UNDERSCORE_UTF32 = 57543 -const UNDERSCORE_UTF8 = 57544 -const UNDERSCORE_UTF8MB4 = 57545 -const UNDERSCORE_UTF8MB3 = 57546 -const INTERVAL = 57547 -const WINDOW_EXPR = 57548 -const JSON_EXTRACT_OP = 57549 -const JSON_UNQUOTE_EXTRACT_OP = 57550 -const CREATE = 57551 -const ALTER = 57552 -const DROP = 57553 -const RENAME = 57554 -const ANALYZE = 57555 -const ADD = 57556 -const FLUSH = 57557 -const CHANGE = 57558 -const MODIFY = 57559 -const DEALLOCATE = 57560 -const REVERT = 57561 -const QUERIES = 57562 -const SCHEMA = 57563 -const TABLE = 57564 -const INDEX = 57565 -const VIEW = 57566 -const TO = 57567 -const IGNORE = 57568 -const IF = 57569 -const PRIMARY = 57570 -const COLUMN = 57571 -const SPATIAL = 57572 -const FULLTEXT = 57573 -const KEY_BLOCK_SIZE = 57574 -const CHECK = 57575 -const INDEXES = 57576 -const ACTION = 57577 -const CASCADE = 57578 -const CONSTRAINT = 57579 -const FOREIGN = 57580 -const NO = 57581 -const REFERENCES = 57582 -const RESTRICT = 57583 -const SHOW = 57584 -const DESCRIBE = 57585 -const EXPLAIN = 57586 -const DATE = 57587 -const ESCAPE = 57588 -const REPAIR = 57589 -const OPTIMIZE = 57590 -const TRUNCATE = 57591 -const COALESCE = 57592 -const EXCHANGE = 57593 -const REBUILD = 57594 -const PARTITIONING = 57595 -const REMOVE = 57596 -const PREPARE = 57597 -const EXECUTE = 57598 -const MAXVALUE = 57599 -const PARTITION = 57600 -const REORGANIZE = 57601 -const LESS = 57602 -const THAN = 57603 -const PROCEDURE = 57604 -const TRIGGER = 57605 -const VINDEX = 57606 -const VINDEXES = 57607 -const DIRECTORY = 57608 -const NAME = 57609 -const UPGRADE = 57610 -const STATUS = 57611 -const VARIABLES = 57612 -const WARNINGS = 57613 -const CASCADED = 57614 -const DEFINER = 57615 -const OPTION = 57616 -const SQL = 57617 -const UNDEFINED = 57618 -const SEQUENCE = 57619 -const MERGE = 57620 -const TEMPORARY = 57621 -const TEMPTABLE = 57622 -const INVOKER = 57623 -const SECURITY = 57624 -const FIRST = 57625 -const AFTER = 57626 -const LAST = 57627 -const VITESS_MIGRATION = 57628 -const CANCEL = 57629 -const RETRY = 57630 -const LAUNCH = 57631 -const COMPLETE = 57632 -const CLEANUP = 57633 -const THROTTLE = 57634 -const UNTHROTTLE = 57635 -const EXPIRE = 57636 -const RATIO = 57637 -const VITESS_THROTTLER = 57638 -const BEGIN = 57639 -const START = 57640 -const TRANSACTION = 57641 -const COMMIT = 57642 -const ROLLBACK = 57643 -const SAVEPOINT = 57644 -const RELEASE = 57645 -const WORK = 57646 -const CONSISTENT = 57647 -const SNAPSHOT = 57648 -const BIT = 57649 -const TINYINT = 57650 -const SMALLINT = 57651 -const MEDIUMINT = 57652 -const INT = 57653 -const INTEGER = 57654 -const BIGINT = 57655 -const INTNUM = 57656 -const REAL = 57657 -const DOUBLE = 57658 -const FLOAT_TYPE = 57659 -const FLOAT4_TYPE = 57660 -const FLOAT8_TYPE = 57661 -const DECIMAL_TYPE = 57662 -const NUMERIC = 57663 -const TIME = 57664 -const TIMESTAMP = 57665 -const DATETIME = 57666 -const YEAR = 57667 -const CHAR = 57668 -const VARCHAR = 57669 -const BOOL = 57670 -const CHARACTER = 57671 -const VARBINARY = 57672 -const NCHAR = 57673 -const TEXT = 57674 -const TINYTEXT = 57675 -const MEDIUMTEXT = 57676 -const LONGTEXT = 57677 -const BLOB = 57678 -const TINYBLOB = 57679 -const MEDIUMBLOB = 57680 -const LONGBLOB = 57681 -const JSON = 57682 -const JSON_SCHEMA_VALID = 57683 -const JSON_SCHEMA_VALIDATION_REPORT = 57684 -const ENUM = 57685 -const GEOMETRY = 57686 -const POINT = 57687 -const LINESTRING = 57688 -const POLYGON = 57689 -const GEOMCOLLECTION = 57690 -const GEOMETRYCOLLECTION = 57691 -const MULTIPOINT = 57692 -const MULTILINESTRING = 57693 -const MULTIPOLYGON = 57694 -const ASCII = 57695 -const UNICODE = 57696 -const NULLX = 57697 -const AUTO_INCREMENT = 57698 -const APPROXNUM = 57699 -const SIGNED = 57700 -const UNSIGNED = 57701 -const ZEROFILL = 57702 -const PURGE = 57703 -const BEFORE = 57704 -const CODE = 57705 -const COLLATION = 57706 -const COLUMNS = 57707 -const DATABASES = 57708 -const ENGINES = 57709 -const EVENT = 57710 -const EXTENDED = 57711 -const FIELDS = 57712 -const FULL = 57713 -const FUNCTION = 57714 -const GTID_EXECUTED = 57715 -const KEYSPACES = 57716 -const OPEN = 57717 -const PLUGINS = 57718 -const PRIVILEGES = 57719 -const PROCESSLIST = 57720 -const SCHEMAS = 57721 -const TABLES = 57722 -const TRIGGERS = 57723 -const USER = 57724 -const VGTID_EXECUTED = 57725 -const VITESS_KEYSPACES = 57726 -const VITESS_METADATA = 57727 -const VITESS_MIGRATIONS = 57728 -const VITESS_REPLICATION_STATUS = 57729 -const VITESS_SHARDS = 57730 -const VITESS_TABLETS = 57731 -const VITESS_TARGET = 57732 -const VSCHEMA = 57733 -const VITESS_THROTTLED_APPS = 57734 -const NAMES = 57735 -const GLOBAL = 57736 -const SESSION = 57737 -const ISOLATION = 57738 -const LEVEL = 57739 -const READ = 57740 -const WRITE = 57741 -const ONLY = 57742 -const REPEATABLE = 57743 -const COMMITTED = 57744 -const UNCOMMITTED = 57745 -const SERIALIZABLE = 57746 -const ADDDATE = 57747 -const CURRENT_TIMESTAMP = 57748 -const DATABASE = 57749 -const CURRENT_DATE = 57750 -const CURDATE = 57751 -const DATE_ADD = 57752 -const DATE_SUB = 57753 -const NOW = 57754 -const SUBDATE = 57755 -const CURTIME = 57756 -const CURRENT_TIME = 57757 -const LOCALTIME = 57758 -const LOCALTIMESTAMP = 57759 -const CURRENT_USER = 57760 -const UTC_DATE = 57761 -const UTC_TIME = 57762 -const UTC_TIMESTAMP = 57763 -const SYSDATE = 57764 -const DAY = 57765 -const DAY_HOUR = 57766 -const DAY_MICROSECOND = 57767 -const DAY_MINUTE = 57768 -const DAY_SECOND = 57769 -const HOUR = 57770 -const HOUR_MICROSECOND = 57771 -const HOUR_MINUTE = 57772 -const HOUR_SECOND = 57773 -const MICROSECOND = 57774 -const MINUTE = 57775 -const MINUTE_MICROSECOND = 57776 -const MINUTE_SECOND = 57777 -const MONTH = 57778 -const QUARTER = 57779 -const SECOND = 57780 -const SECOND_MICROSECOND = 57781 -const YEAR_MONTH = 57782 -const WEEK = 57783 -const SQL_TSI_DAY = 57784 -const SQL_TSI_WEEK = 57785 -const SQL_TSI_HOUR = 57786 -const SQL_TSI_MINUTE = 57787 -const SQL_TSI_MONTH = 57788 -const SQL_TSI_QUARTER = 57789 -const SQL_TSI_SECOND = 57790 -const SQL_TSI_MICROSECOND = 57791 -const SQL_TSI_YEAR = 57792 -const REPLACE = 57793 -const CONVERT = 57794 -const CAST = 57795 -const SUBSTR = 57796 -const SUBSTRING = 57797 -const SEPARATOR = 57798 -const TIMESTAMPADD = 57799 -const TIMESTAMPDIFF = 57800 -const WEIGHT_STRING = 57801 -const LTRIM = 57802 -const RTRIM = 57803 -const TRIM = 57804 -const JSON_ARRAY = 57805 -const JSON_OBJECT = 57806 -const JSON_QUOTE = 57807 -const JSON_DEPTH = 57808 -const JSON_TYPE = 57809 -const JSON_LENGTH = 57810 -const JSON_VALID = 57811 -const JSON_ARRAY_APPEND = 57812 -const JSON_ARRAY_INSERT = 57813 -const JSON_INSERT = 57814 -const JSON_MERGE = 57815 -const JSON_MERGE_PATCH = 57816 -const JSON_MERGE_PRESERVE = 57817 -const JSON_REMOVE = 57818 -const JSON_REPLACE = 57819 -const JSON_SET = 57820 -const JSON_UNQUOTE = 57821 -const COUNT = 57822 -const AVG = 57823 -const MAX = 57824 -const MIN = 57825 -const SUM = 57826 -const GROUP_CONCAT = 57827 -const BIT_AND = 57828 -const BIT_OR = 57829 -const BIT_XOR = 57830 -const STD = 57831 -const STDDEV = 57832 -const STDDEV_POP = 57833 -const STDDEV_SAMP = 57834 -const VAR_POP = 57835 -const VAR_SAMP = 57836 -const VARIANCE = 57837 -const ANY_VALUE = 57838 -const REGEXP_INSTR = 57839 -const REGEXP_LIKE = 57840 -const REGEXP_REPLACE = 57841 -const REGEXP_SUBSTR = 57842 -const ExtractValue = 57843 -const UpdateXML = 57844 -const GET_LOCK = 57845 -const RELEASE_LOCK = 57846 -const RELEASE_ALL_LOCKS = 57847 -const IS_FREE_LOCK = 57848 -const IS_USED_LOCK = 57849 -const LOCATE = 57850 -const POSITION = 57851 -const ST_GeometryCollectionFromText = 57852 -const ST_GeometryFromText = 57853 -const ST_LineStringFromText = 57854 -const ST_MultiLineStringFromText = 57855 -const ST_MultiPointFromText = 57856 -const ST_MultiPolygonFromText = 57857 -const ST_PointFromText = 57858 -const ST_PolygonFromText = 57859 -const ST_GeometryCollectionFromWKB = 57860 -const ST_GeometryFromWKB = 57861 -const ST_LineStringFromWKB = 57862 -const ST_MultiLineStringFromWKB = 57863 -const ST_MultiPointFromWKB = 57864 -const ST_MultiPolygonFromWKB = 57865 -const ST_PointFromWKB = 57866 -const ST_PolygonFromWKB = 57867 -const ST_AsBinary = 57868 -const ST_AsText = 57869 -const ST_Dimension = 57870 -const ST_Envelope = 57871 -const ST_IsSimple = 57872 -const ST_IsEmpty = 57873 -const ST_GeometryType = 57874 -const ST_X = 57875 -const ST_Y = 57876 -const ST_Latitude = 57877 -const ST_Longitude = 57878 -const ST_EndPoint = 57879 -const ST_IsClosed = 57880 -const ST_Length = 57881 -const ST_NumPoints = 57882 -const ST_StartPoint = 57883 -const ST_PointN = 57884 -const ST_Area = 57885 -const ST_Centroid = 57886 -const ST_ExteriorRing = 57887 -const ST_InteriorRingN = 57888 -const ST_NumInteriorRings = 57889 -const ST_NumGeometries = 57890 -const ST_GeometryN = 57891 -const ST_LongFromGeoHash = 57892 -const ST_PointFromGeoHash = 57893 -const ST_LatFromGeoHash = 57894 -const ST_GeoHash = 57895 -const ST_AsGeoJSON = 57896 -const ST_GeomFromGeoJSON = 57897 -const MATCH = 57898 -const AGAINST = 57899 -const BOOLEAN = 57900 -const LANGUAGE = 57901 -const WITH = 57902 -const QUERY = 57903 -const EXPANSION = 57904 -const WITHOUT = 57905 -const VALIDATION = 57906 -const UNUSED = 57907 -const ARRAY = 57908 -const BYTE = 57909 -const CUME_DIST = 57910 -const DESCRIPTION = 57911 -const DENSE_RANK = 57912 -const EMPTY = 57913 -const EXCEPT = 57914 -const FIRST_VALUE = 57915 -const GROUPING = 57916 -const GROUPS = 57917 -const JSON_TABLE = 57918 -const LAG = 57919 -const LAST_VALUE = 57920 -const LATERAL = 57921 -const LEAD = 57922 -const NTH_VALUE = 57923 -const NTILE = 57924 -const OF = 57925 -const OVER = 57926 -const PERCENT_RANK = 57927 -const RANK = 57928 -const RECURSIVE = 57929 -const ROW_NUMBER = 57930 -const SYSTEM = 57931 -const WINDOW = 57932 -const ACTIVE = 57933 -const ADMIN = 57934 -const AUTOEXTEND_SIZE = 57935 -const BUCKETS = 57936 -const CLONE = 57937 -const COLUMN_FORMAT = 57938 -const COMPONENT = 57939 -const DEFINITION = 57940 -const ENFORCED = 57941 -const ENGINE_ATTRIBUTE = 57942 -const EXCLUDE = 57943 -const FOLLOWING = 57944 -const GET_MASTER_PUBLIC_KEY = 57945 -const HISTOGRAM = 57946 -const HISTORY = 57947 -const INACTIVE = 57948 -const INVISIBLE = 57949 -const LOCKED = 57950 -const MASTER_COMPRESSION_ALGORITHMS = 57951 -const MASTER_PUBLIC_KEY_PATH = 57952 -const MASTER_TLS_CIPHERSUITES = 57953 -const MASTER_ZSTD_COMPRESSION_LEVEL = 57954 -const NESTED = 57955 -const NETWORK_NAMESPACE = 57956 -const NOWAIT = 57957 -const NULLS = 57958 -const OJ = 57959 -const OLD = 57960 -const OPTIONAL = 57961 -const ORDINALITY = 57962 -const ORGANIZATION = 57963 -const OTHERS = 57964 -const PARTIAL = 57965 -const PATH = 57966 -const PERSIST = 57967 -const PERSIST_ONLY = 57968 -const PRECEDING = 57969 -const PRIVILEGE_CHECKS_USER = 57970 -const PROCESS = 57971 -const RANDOM = 57972 -const REFERENCE = 57973 -const REQUIRE_ROW_FORMAT = 57974 -const RESOURCE = 57975 -const RESPECT = 57976 -const RESTART = 57977 -const RETAIN = 57978 -const REUSE = 57979 -const ROLE = 57980 -const SECONDARY = 57981 -const SECONDARY_ENGINE = 57982 -const SECONDARY_ENGINE_ATTRIBUTE = 57983 -const SECONDARY_LOAD = 57984 -const SECONDARY_UNLOAD = 57985 -const SIMPLE = 57986 -const SKIP = 57987 -const SRID = 57988 -const THREAD_PRIORITY = 57989 -const TIES = 57990 -const UNBOUNDED = 57991 -const VCPU = 57992 -const VISIBLE = 57993 -const RETURNING = 57994 -const FORMAT_BYTES = 57995 -const FORMAT_PICO_TIME = 57996 -const PS_CURRENT_THREAD_ID = 57997 -const PS_THREAD_ID = 57998 -const GTID_SUBSET = 57999 -const GTID_SUBTRACT = 58000 -const WAIT_FOR_EXECUTED_GTID_SET = 58001 -const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58002 -const FORMAT = 58003 -const TREE = 58004 -const VITESS = 58005 -const TRADITIONAL = 58006 -const VTEXPLAIN = 58007 -const VEXPLAIN = 58008 -const PLAN = 58009 -const LOCAL = 58010 -const LOW_PRIORITY = 58011 -const NO_WRITE_TO_BINLOG = 58012 -const LOGS = 58013 -const ERROR = 58014 -const GENERAL = 58015 -const HOSTS = 58016 -const OPTIMIZER_COSTS = 58017 -const USER_RESOURCES = 58018 -const SLOW = 58019 -const CHANNEL = 58020 -const RELAY = 58021 -const EXPORT = 58022 -const CURRENT = 58023 -const ROW = 58024 -const ROWS = 58025 -const AVG_ROW_LENGTH = 58026 -const CONNECTION = 58027 -const CHECKSUM = 58028 -const DELAY_KEY_WRITE = 58029 -const ENCRYPTION = 58030 -const ENGINE = 58031 -const INSERT_METHOD = 58032 -const MAX_ROWS = 58033 -const MIN_ROWS = 58034 -const PACK_KEYS = 58035 -const PASSWORD = 58036 -const FIXED = 58037 -const DYNAMIC = 58038 -const COMPRESSED = 58039 -const REDUNDANT = 58040 -const COMPACT = 58041 -const ROW_FORMAT = 58042 -const STATS_AUTO_RECALC = 58043 -const STATS_PERSISTENT = 58044 -const STATS_SAMPLE_PAGES = 58045 -const STORAGE = 58046 -const MEMORY = 58047 -const DISK = 58048 -const PARTITIONS = 58049 -const LINEAR = 58050 -const RANGE = 58051 -const LIST = 58052 -const SUBPARTITION = 58053 -const SUBPARTITIONS = 58054 -const HASH = 58055 +const KILL = 57472 +const EMPTY_FROM_CLAUSE = 57473 +const LOWER_THAN_CHARSET = 57474 +const CHARSET = 57475 +const UNIQUE = 57476 +const KEY = 57477 +const EXPRESSION_PREC_SETTER = 57478 +const OR = 57479 +const XOR = 57480 +const AND = 57481 +const NOT = 57482 +const BETWEEN = 57483 +const CASE = 57484 +const WHEN = 57485 +const THEN = 57486 +const ELSE = 57487 +const END = 57488 +const LE = 57489 +const GE = 57490 +const NE = 57491 +const NULL_SAFE_EQUAL = 57492 +const IS = 57493 +const LIKE = 57494 +const REGEXP = 57495 +const RLIKE = 57496 +const IN = 57497 +const ASSIGNMENT_OPT = 57498 +const SHIFT_LEFT = 57499 +const SHIFT_RIGHT = 57500 +const DIV = 57501 +const MOD = 57502 +const UNARY = 57503 +const COLLATE = 57504 +const BINARY = 57505 +const UNDERSCORE_ARMSCII8 = 57506 +const UNDERSCORE_ASCII = 57507 +const UNDERSCORE_BIG5 = 57508 +const UNDERSCORE_BINARY = 57509 +const UNDERSCORE_CP1250 = 57510 +const UNDERSCORE_CP1251 = 57511 +const UNDERSCORE_CP1256 = 57512 +const UNDERSCORE_CP1257 = 57513 +const UNDERSCORE_CP850 = 57514 +const UNDERSCORE_CP852 = 57515 +const UNDERSCORE_CP866 = 57516 +const UNDERSCORE_CP932 = 57517 +const UNDERSCORE_DEC8 = 57518 +const UNDERSCORE_EUCJPMS = 57519 +const UNDERSCORE_EUCKR = 57520 +const UNDERSCORE_GB18030 = 57521 +const UNDERSCORE_GB2312 = 57522 +const UNDERSCORE_GBK = 57523 +const UNDERSCORE_GEOSTD8 = 57524 +const UNDERSCORE_GREEK = 57525 +const UNDERSCORE_HEBREW = 57526 +const UNDERSCORE_HP8 = 57527 +const UNDERSCORE_KEYBCS2 = 57528 +const UNDERSCORE_KOI8R = 57529 +const UNDERSCORE_KOI8U = 57530 +const UNDERSCORE_LATIN1 = 57531 +const UNDERSCORE_LATIN2 = 57532 +const UNDERSCORE_LATIN5 = 57533 +const UNDERSCORE_LATIN7 = 57534 +const UNDERSCORE_MACCE = 57535 +const UNDERSCORE_MACROMAN = 57536 +const UNDERSCORE_SJIS = 57537 +const UNDERSCORE_SWE7 = 57538 +const UNDERSCORE_TIS620 = 57539 +const UNDERSCORE_UCS2 = 57540 +const UNDERSCORE_UJIS = 57541 +const UNDERSCORE_UTF16 = 57542 +const UNDERSCORE_UTF16LE = 57543 +const UNDERSCORE_UTF32 = 57544 +const UNDERSCORE_UTF8 = 57545 +const UNDERSCORE_UTF8MB4 = 57546 +const UNDERSCORE_UTF8MB3 = 57547 +const INTERVAL = 57548 +const WINDOW_EXPR = 57549 +const JSON_EXTRACT_OP = 57550 +const JSON_UNQUOTE_EXTRACT_OP = 57551 +const CREATE = 57552 +const ALTER = 57553 +const DROP = 57554 +const RENAME = 57555 +const ANALYZE = 57556 +const ADD = 57557 +const FLUSH = 57558 +const CHANGE = 57559 +const MODIFY = 57560 +const DEALLOCATE = 57561 +const REVERT = 57562 +const QUERIES = 57563 +const SCHEMA = 57564 +const TABLE = 57565 +const INDEX = 57566 +const VIEW = 57567 +const TO = 57568 +const IGNORE = 57569 +const IF = 57570 +const PRIMARY = 57571 +const COLUMN = 57572 +const SPATIAL = 57573 +const FULLTEXT = 57574 +const KEY_BLOCK_SIZE = 57575 +const CHECK = 57576 +const INDEXES = 57577 +const ACTION = 57578 +const CASCADE = 57579 +const CONSTRAINT = 57580 +const FOREIGN = 57581 +const NO = 57582 +const REFERENCES = 57583 +const RESTRICT = 57584 +const SHOW = 57585 +const DESCRIBE = 57586 +const EXPLAIN = 57587 +const DATE = 57588 +const ESCAPE = 57589 +const REPAIR = 57590 +const OPTIMIZE = 57591 +const TRUNCATE = 57592 +const COALESCE = 57593 +const EXCHANGE = 57594 +const REBUILD = 57595 +const PARTITIONING = 57596 +const REMOVE = 57597 +const PREPARE = 57598 +const EXECUTE = 57599 +const MAXVALUE = 57600 +const PARTITION = 57601 +const REORGANIZE = 57602 +const LESS = 57603 +const THAN = 57604 +const PROCEDURE = 57605 +const TRIGGER = 57606 +const VINDEX = 57607 +const VINDEXES = 57608 +const DIRECTORY = 57609 +const NAME = 57610 +const UPGRADE = 57611 +const STATUS = 57612 +const VARIABLES = 57613 +const WARNINGS = 57614 +const CASCADED = 57615 +const DEFINER = 57616 +const OPTION = 57617 +const SQL = 57618 +const UNDEFINED = 57619 +const SEQUENCE = 57620 +const MERGE = 57621 +const TEMPORARY = 57622 +const TEMPTABLE = 57623 +const INVOKER = 57624 +const SECURITY = 57625 +const FIRST = 57626 +const AFTER = 57627 +const LAST = 57628 +const VITESS_MIGRATION = 57629 +const CANCEL = 57630 +const RETRY = 57631 +const LAUNCH = 57632 +const COMPLETE = 57633 +const CLEANUP = 57634 +const THROTTLE = 57635 +const UNTHROTTLE = 57636 +const EXPIRE = 57637 +const RATIO = 57638 +const VITESS_THROTTLER = 57639 +const BEGIN = 57640 +const START = 57641 +const TRANSACTION = 57642 +const COMMIT = 57643 +const ROLLBACK = 57644 +const SAVEPOINT = 57645 +const RELEASE = 57646 +const WORK = 57647 +const CONSISTENT = 57648 +const SNAPSHOT = 57649 +const BIT = 57650 +const TINYINT = 57651 +const SMALLINT = 57652 +const MEDIUMINT = 57653 +const INT = 57654 +const INTEGER = 57655 +const BIGINT = 57656 +const INTNUM = 57657 +const REAL = 57658 +const DOUBLE = 57659 +const FLOAT_TYPE = 57660 +const FLOAT4_TYPE = 57661 +const FLOAT8_TYPE = 57662 +const DECIMAL_TYPE = 57663 +const NUMERIC = 57664 +const TIME = 57665 +const TIMESTAMP = 57666 +const DATETIME = 57667 +const YEAR = 57668 +const CHAR = 57669 +const VARCHAR = 57670 +const BOOL = 57671 +const CHARACTER = 57672 +const VARBINARY = 57673 +const NCHAR = 57674 +const TEXT = 57675 +const TINYTEXT = 57676 +const MEDIUMTEXT = 57677 +const LONGTEXT = 57678 +const BLOB = 57679 +const TINYBLOB = 57680 +const MEDIUMBLOB = 57681 +const LONGBLOB = 57682 +const JSON = 57683 +const JSON_SCHEMA_VALID = 57684 +const JSON_SCHEMA_VALIDATION_REPORT = 57685 +const ENUM = 57686 +const GEOMETRY = 57687 +const POINT = 57688 +const LINESTRING = 57689 +const POLYGON = 57690 +const GEOMCOLLECTION = 57691 +const GEOMETRYCOLLECTION = 57692 +const MULTIPOINT = 57693 +const MULTILINESTRING = 57694 +const MULTIPOLYGON = 57695 +const ASCII = 57696 +const UNICODE = 57697 +const NULLX = 57698 +const AUTO_INCREMENT = 57699 +const APPROXNUM = 57700 +const SIGNED = 57701 +const UNSIGNED = 57702 +const ZEROFILL = 57703 +const PURGE = 57704 +const BEFORE = 57705 +const CODE = 57706 +const COLLATION = 57707 +const COLUMNS = 57708 +const DATABASES = 57709 +const ENGINES = 57710 +const EVENT = 57711 +const EXTENDED = 57712 +const FIELDS = 57713 +const FULL = 57714 +const FUNCTION = 57715 +const GTID_EXECUTED = 57716 +const KEYSPACES = 57717 +const OPEN = 57718 +const PLUGINS = 57719 +const PRIVILEGES = 57720 +const PROCESSLIST = 57721 +const SCHEMAS = 57722 +const TABLES = 57723 +const TRIGGERS = 57724 +const USER = 57725 +const VGTID_EXECUTED = 57726 +const VITESS_KEYSPACES = 57727 +const VITESS_METADATA = 57728 +const VITESS_MIGRATIONS = 57729 +const VITESS_REPLICATION_STATUS = 57730 +const VITESS_SHARDS = 57731 +const VITESS_TABLETS = 57732 +const VITESS_TARGET = 57733 +const VSCHEMA = 57734 +const VITESS_THROTTLED_APPS = 57735 +const NAMES = 57736 +const GLOBAL = 57737 +const SESSION = 57738 +const ISOLATION = 57739 +const LEVEL = 57740 +const READ = 57741 +const WRITE = 57742 +const ONLY = 57743 +const REPEATABLE = 57744 +const COMMITTED = 57745 +const UNCOMMITTED = 57746 +const SERIALIZABLE = 57747 +const ADDDATE = 57748 +const CURRENT_TIMESTAMP = 57749 +const DATABASE = 57750 +const CURRENT_DATE = 57751 +const CURDATE = 57752 +const DATE_ADD = 57753 +const DATE_SUB = 57754 +const NOW = 57755 +const SUBDATE = 57756 +const CURTIME = 57757 +const CURRENT_TIME = 57758 +const LOCALTIME = 57759 +const LOCALTIMESTAMP = 57760 +const CURRENT_USER = 57761 +const UTC_DATE = 57762 +const UTC_TIME = 57763 +const UTC_TIMESTAMP = 57764 +const SYSDATE = 57765 +const DAY = 57766 +const DAY_HOUR = 57767 +const DAY_MICROSECOND = 57768 +const DAY_MINUTE = 57769 +const DAY_SECOND = 57770 +const HOUR = 57771 +const HOUR_MICROSECOND = 57772 +const HOUR_MINUTE = 57773 +const HOUR_SECOND = 57774 +const MICROSECOND = 57775 +const MINUTE = 57776 +const MINUTE_MICROSECOND = 57777 +const MINUTE_SECOND = 57778 +const MONTH = 57779 +const QUARTER = 57780 +const SECOND = 57781 +const SECOND_MICROSECOND = 57782 +const YEAR_MONTH = 57783 +const WEEK = 57784 +const SQL_TSI_DAY = 57785 +const SQL_TSI_WEEK = 57786 +const SQL_TSI_HOUR = 57787 +const SQL_TSI_MINUTE = 57788 +const SQL_TSI_MONTH = 57789 +const SQL_TSI_QUARTER = 57790 +const SQL_TSI_SECOND = 57791 +const SQL_TSI_MICROSECOND = 57792 +const SQL_TSI_YEAR = 57793 +const REPLACE = 57794 +const CONVERT = 57795 +const CAST = 57796 +const SUBSTR = 57797 +const SUBSTRING = 57798 +const SEPARATOR = 57799 +const TIMESTAMPADD = 57800 +const TIMESTAMPDIFF = 57801 +const WEIGHT_STRING = 57802 +const LTRIM = 57803 +const RTRIM = 57804 +const TRIM = 57805 +const JSON_ARRAY = 57806 +const JSON_OBJECT = 57807 +const JSON_QUOTE = 57808 +const JSON_DEPTH = 57809 +const JSON_TYPE = 57810 +const JSON_LENGTH = 57811 +const JSON_VALID = 57812 +const JSON_ARRAY_APPEND = 57813 +const JSON_ARRAY_INSERT = 57814 +const JSON_INSERT = 57815 +const JSON_MERGE = 57816 +const JSON_MERGE_PATCH = 57817 +const JSON_MERGE_PRESERVE = 57818 +const JSON_REMOVE = 57819 +const JSON_REPLACE = 57820 +const JSON_SET = 57821 +const JSON_UNQUOTE = 57822 +const COUNT = 57823 +const AVG = 57824 +const MAX = 57825 +const MIN = 57826 +const SUM = 57827 +const GROUP_CONCAT = 57828 +const BIT_AND = 57829 +const BIT_OR = 57830 +const BIT_XOR = 57831 +const STD = 57832 +const STDDEV = 57833 +const STDDEV_POP = 57834 +const STDDEV_SAMP = 57835 +const VAR_POP = 57836 +const VAR_SAMP = 57837 +const VARIANCE = 57838 +const ANY_VALUE = 57839 +const REGEXP_INSTR = 57840 +const REGEXP_LIKE = 57841 +const REGEXP_REPLACE = 57842 +const REGEXP_SUBSTR = 57843 +const ExtractValue = 57844 +const UpdateXML = 57845 +const GET_LOCK = 57846 +const RELEASE_LOCK = 57847 +const RELEASE_ALL_LOCKS = 57848 +const IS_FREE_LOCK = 57849 +const IS_USED_LOCK = 57850 +const LOCATE = 57851 +const POSITION = 57852 +const ST_GeometryCollectionFromText = 57853 +const ST_GeometryFromText = 57854 +const ST_LineStringFromText = 57855 +const ST_MultiLineStringFromText = 57856 +const ST_MultiPointFromText = 57857 +const ST_MultiPolygonFromText = 57858 +const ST_PointFromText = 57859 +const ST_PolygonFromText = 57860 +const ST_GeometryCollectionFromWKB = 57861 +const ST_GeometryFromWKB = 57862 +const ST_LineStringFromWKB = 57863 +const ST_MultiLineStringFromWKB = 57864 +const ST_MultiPointFromWKB = 57865 +const ST_MultiPolygonFromWKB = 57866 +const ST_PointFromWKB = 57867 +const ST_PolygonFromWKB = 57868 +const ST_AsBinary = 57869 +const ST_AsText = 57870 +const ST_Dimension = 57871 +const ST_Envelope = 57872 +const ST_IsSimple = 57873 +const ST_IsEmpty = 57874 +const ST_GeometryType = 57875 +const ST_X = 57876 +const ST_Y = 57877 +const ST_Latitude = 57878 +const ST_Longitude = 57879 +const ST_EndPoint = 57880 +const ST_IsClosed = 57881 +const ST_Length = 57882 +const ST_NumPoints = 57883 +const ST_StartPoint = 57884 +const ST_PointN = 57885 +const ST_Area = 57886 +const ST_Centroid = 57887 +const ST_ExteriorRing = 57888 +const ST_InteriorRingN = 57889 +const ST_NumInteriorRings = 57890 +const ST_NumGeometries = 57891 +const ST_GeometryN = 57892 +const ST_LongFromGeoHash = 57893 +const ST_PointFromGeoHash = 57894 +const ST_LatFromGeoHash = 57895 +const ST_GeoHash = 57896 +const ST_AsGeoJSON = 57897 +const ST_GeomFromGeoJSON = 57898 +const MATCH = 57899 +const AGAINST = 57900 +const BOOLEAN = 57901 +const LANGUAGE = 57902 +const WITH = 57903 +const QUERY = 57904 +const EXPANSION = 57905 +const WITHOUT = 57906 +const VALIDATION = 57907 +const UNUSED = 57908 +const ARRAY = 57909 +const BYTE = 57910 +const CUME_DIST = 57911 +const DESCRIPTION = 57912 +const DENSE_RANK = 57913 +const EMPTY = 57914 +const EXCEPT = 57915 +const FIRST_VALUE = 57916 +const GROUPING = 57917 +const GROUPS = 57918 +const JSON_TABLE = 57919 +const LAG = 57920 +const LAST_VALUE = 57921 +const LATERAL = 57922 +const LEAD = 57923 +const NTH_VALUE = 57924 +const NTILE = 57925 +const OF = 57926 +const OVER = 57927 +const PERCENT_RANK = 57928 +const RANK = 57929 +const RECURSIVE = 57930 +const ROW_NUMBER = 57931 +const SYSTEM = 57932 +const WINDOW = 57933 +const ACTIVE = 57934 +const ADMIN = 57935 +const AUTOEXTEND_SIZE = 57936 +const BUCKETS = 57937 +const CLONE = 57938 +const COLUMN_FORMAT = 57939 +const COMPONENT = 57940 +const DEFINITION = 57941 +const ENFORCED = 57942 +const ENGINE_ATTRIBUTE = 57943 +const EXCLUDE = 57944 +const FOLLOWING = 57945 +const GET_MASTER_PUBLIC_KEY = 57946 +const HISTOGRAM = 57947 +const HISTORY = 57948 +const INACTIVE = 57949 +const INVISIBLE = 57950 +const LOCKED = 57951 +const MASTER_COMPRESSION_ALGORITHMS = 57952 +const MASTER_PUBLIC_KEY_PATH = 57953 +const MASTER_TLS_CIPHERSUITES = 57954 +const MASTER_ZSTD_COMPRESSION_LEVEL = 57955 +const NESTED = 57956 +const NETWORK_NAMESPACE = 57957 +const NOWAIT = 57958 +const NULLS = 57959 +const OJ = 57960 +const OLD = 57961 +const OPTIONAL = 57962 +const ORDINALITY = 57963 +const ORGANIZATION = 57964 +const OTHERS = 57965 +const PARTIAL = 57966 +const PATH = 57967 +const PERSIST = 57968 +const PERSIST_ONLY = 57969 +const PRECEDING = 57970 +const PRIVILEGE_CHECKS_USER = 57971 +const PROCESS = 57972 +const RANDOM = 57973 +const REFERENCE = 57974 +const REQUIRE_ROW_FORMAT = 57975 +const RESOURCE = 57976 +const RESPECT = 57977 +const RESTART = 57978 +const RETAIN = 57979 +const REUSE = 57980 +const ROLE = 57981 +const SECONDARY = 57982 +const SECONDARY_ENGINE = 57983 +const SECONDARY_ENGINE_ATTRIBUTE = 57984 +const SECONDARY_LOAD = 57985 +const SECONDARY_UNLOAD = 57986 +const SIMPLE = 57987 +const SKIP = 57988 +const SRID = 57989 +const THREAD_PRIORITY = 57990 +const TIES = 57991 +const UNBOUNDED = 57992 +const VCPU = 57993 +const VISIBLE = 57994 +const RETURNING = 57995 +const FORMAT_BYTES = 57996 +const FORMAT_PICO_TIME = 57997 +const PS_CURRENT_THREAD_ID = 57998 +const PS_THREAD_ID = 57999 +const GTID_SUBSET = 58000 +const GTID_SUBTRACT = 58001 +const WAIT_FOR_EXECUTED_GTID_SET = 58002 +const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58003 +const FORMAT = 58004 +const TREE = 58005 +const VITESS = 58006 +const TRADITIONAL = 58007 +const VTEXPLAIN = 58008 +const VEXPLAIN = 58009 +const PLAN = 58010 +const LOCAL = 58011 +const LOW_PRIORITY = 58012 +const NO_WRITE_TO_BINLOG = 58013 +const LOGS = 58014 +const ERROR = 58015 +const GENERAL = 58016 +const HOSTS = 58017 +const OPTIMIZER_COSTS = 58018 +const USER_RESOURCES = 58019 +const SLOW = 58020 +const CHANNEL = 58021 +const RELAY = 58022 +const EXPORT = 58023 +const CURRENT = 58024 +const ROW = 58025 +const ROWS = 58026 +const AVG_ROW_LENGTH = 58027 +const CONNECTION = 58028 +const CHECKSUM = 58029 +const DELAY_KEY_WRITE = 58030 +const ENCRYPTION = 58031 +const ENGINE = 58032 +const INSERT_METHOD = 58033 +const MAX_ROWS = 58034 +const MIN_ROWS = 58035 +const PACK_KEYS = 58036 +const PASSWORD = 58037 +const FIXED = 58038 +const DYNAMIC = 58039 +const COMPRESSED = 58040 +const REDUNDANT = 58041 +const COMPACT = 58042 +const ROW_FORMAT = 58043 +const STATS_AUTO_RECALC = 58044 +const STATS_PERSISTENT = 58045 +const STATS_SAMPLE_PAGES = 58046 +const STORAGE = 58047 +const MEMORY = 58048 +const DISK = 58049 +const PARTITIONS = 58050 +const LINEAR = 58051 +const RANGE = 58052 +const LIST = 58053 +const SUBPARTITION = 58054 +const SUBPARTITIONS = 58055 +const HASH = 58056 var yyToknames = [...]string{ "$end", @@ -877,6 +878,7 @@ var yyToknames = [...]string{ "BOTH", "LEADING", "TRAILING", + "KILL", "EMPTY_FROM_CLAUSE", "LOWER_THAN_CHARSET", "CHARSET", @@ -1490,1235 +1492,1204 @@ var yyExca = [...]int{ 1, -1, -2, 0, -1, 2, - 13, 50, - 14, 50, - -2, 39, - -1, 51, - 1, 158, - 731, 158, - -2, 166, + 13, 51, + 14, 51, + -2, 40, -1, 52, - 135, 166, - 177, 166, - 346, 166, - -2, 522, - -1, 60, - 36, 771, - 240, 771, - 251, 771, - 286, 785, - 287, 785, - -2, 773, - -1, 65, - 242, 809, - -2, 807, - -1, 120, - 239, 1584, - -2, 132, - -1, 122, 1, 159, - 731, 159, - -2, 166, - -1, 133, - 136, 407, - 245, 407, - -2, 511, - -1, 152, - 135, 166, - 177, 166, - 346, 166, - -2, 531, - -1, 731, - 163, 40, - -2, 44, - -1, 937, - 87, 1601, - -2, 1455, - -1, 938, - 87, 1602, - 222, 1606, - -2, 1456, + 732, 159, + -2, 167, + -1, 53, + 136, 167, + 178, 167, + 347, 167, + -2, 523, + -1, 61, + 36, 772, + 241, 772, + 252, 772, + 287, 786, + 288, 786, + -2, 774, + -1, 66, + 243, 810, + -2, 808, + -1, 122, + 240, 1585, + -2, 133, + -1, 124, + 1, 160, + 732, 160, + -2, 167, + -1, 135, + 137, 408, + 246, 408, + -2, 512, + -1, 154, + 136, 167, + 178, 167, + 347, 167, + -2, 532, + -1, 733, + 164, 41, + -2, 45, -1, 939, - 222, 1605, - -2, 41, - -1, 1019, - 60, 883, - -2, 898, - -1, 1106, - 250, 42, - 255, 42, - -2, 418, - -1, 1191, - 1, 579, - 731, 579, - -2, 166, - -1, 1492, - 222, 1606, + 87, 1602, -2, 1456, - -1, 1700, + -1, 940, + 87, 1603, + 223, 1607, + -2, 1457, + -1, 941, + 223, 1606, + -2, 42, + -1, 1024, 60, 884, - -2, 903, - -1, 1701, + -2, 899, + -1, 1111, + 251, 43, + 256, 43, + -2, 419, + -1, 1196, + 1, 580, + 732, 580, + -2, 167, + -1, 1498, + 223, 1607, + -2, 1457, + -1, 1707, 60, 885, -2, 904, - -1, 1752, - 135, 166, - 177, 166, - 346, 166, - -2, 457, - -1, 1833, - 136, 407, - 245, 407, - -2, 511, - -1, 1842, - 250, 43, - 255, 43, - -2, 419, - -1, 2279, - 222, 1610, - -2, 1604, - -1, 2280, - 222, 1606, - -2, 1602, - -1, 2380, - 135, 166, - 177, 166, - 346, 166, + -1, 1708, + 60, 886, + -2, 905, + -1, 1759, + 136, 167, + 178, 167, + 347, 167, -2, 458, + -1, 1840, + 137, 408, + 246, 408, + -2, 512, + -1, 1849, + 251, 44, + 256, 44, + -2, 420, + -1, 2286, + 223, 1611, + -2, 1605, + -1, 2287, + 223, 1607, + -2, 1603, -1, 2387, - 26, 187, - -2, 189, - -1, 2840, - 78, 97, - 88, 97, - -2, 962, - -1, 2909, - 706, 695, - -2, 669, - -1, 3116, - 50, 1552, - -2, 1546, - -1, 3930, - 706, 695, - -2, 683, - -1, 4017, - 90, 627, - 95, 627, - 105, 627, - 179, 627, - 180, 627, - 181, 627, - 182, 627, - 183, 627, - 184, 627, - 185, 627, - 186, 627, - 187, 627, - 188, 627, - 189, 627, - 190, 627, - 191, 627, - 192, 627, - 193, 627, - 194, 627, - 195, 627, - 196, 627, - 197, 627, - 198, 627, - 199, 627, - 200, 627, - 201, 627, - 202, 627, - 203, 627, - 204, 627, - 205, 627, - 206, 627, - 207, 627, - 208, 627, - 209, 627, - 210, 627, - 211, 627, - 212, 627, - 213, 627, - 214, 627, - 215, 627, - 216, 627, - 217, 627, - 218, 627, - 219, 627, - 220, 627, - -2, 1968, + 136, 167, + 178, 167, + 347, 167, + -2, 459, + -1, 2394, + 26, 188, + -2, 190, + -1, 2847, + 78, 98, + 88, 98, + -2, 963, + -1, 2916, + 707, 696, + -2, 670, + -1, 3123, + 50, 1553, + -2, 1547, + -1, 3937, + 707, 696, + -2, 684, + -1, 4024, + 90, 628, + 95, 628, + 105, 628, + 180, 628, + 181, 628, + 182, 628, + 183, 628, + 184, 628, + 185, 628, + 186, 628, + 187, 628, + 188, 628, + 189, 628, + 190, 628, + 191, 628, + 192, 628, + 193, 628, + 194, 628, + 195, 628, + 196, 628, + 197, 628, + 198, 628, + 199, 628, + 200, 628, + 201, 628, + 202, 628, + 203, 628, + 204, 628, + 205, 628, + 206, 628, + 207, 628, + 208, 628, + 209, 628, + 210, 628, + 211, 628, + 212, 628, + 213, 628, + 214, 628, + 215, 628, + 216, 628, + 217, 628, + 218, 628, + 219, 628, + 220, 628, + 221, 628, + -2, 1974, } const yyPrivate = 57344 -const yyLast = 55033 +const yyLast = 55379 var yyAct = [...]int{ - 953, 3592, 3593, 85, 3591, 4092, 3911, 3996, 3266, 4105, - 941, 4060, 4059, 1258, 948, 1961, 940, 2073, 3543, 2377, - 3984, 3895, 4015, 3226, 3168, 3175, 3231, 3394, 3820, 3228, - 2085, 2308, 3227, 3225, 1755, 3230, 1256, 3217, 3129, 3893, - 3229, 3530, 2736, 2310, 3246, 3183, 2451, 3961, 3069, 2016, - 3245, 735, 5, 3133, 3130, 3439, 3433, 3630, 2972, 2332, - 3117, 2800, 902, 901, 762, 730, 3248, 2348, 906, 2874, - 3127, 41, 2954, 1811, 2414, 1715, 3272, 2906, 2439, 2419, - 2351, 1068, 2875, 2482, 1017, 2876, 85, 161, 2365, 2352, - 1036, 1014, 1858, 1702, 2353, 3459, 2825, 42, 2806, 1114, - 2776, 1138, 40, 2231, 2792, 1017, 2024, 2275, 2230, 2263, - 2069, 2108, 2946, 2460, 2438, 2813, 1840, 147, 2421, 2867, - 1078, 1101, 1096, 2340, 2499, 1744, 2842, 1724, 2355, 1682, - 1504, 2112, 102, 103, 2044, 98, 2328, 1431, 1416, 1847, - 729, 1075, 1072, 1957, 3425, 745, 3132, 1107, 2436, 1076, - 1939, 2410, 1016, 1102, 1020, 1103, 1104, 2411, 1743, 1053, - 1729, 1055, 1026, 3625, 2181, 1488, 2139, 1035, 2120, 1464, - 3883, 1023, 2774, 1038, 83, 2015, 1247, 105, 2276, 740, - 1968, 2333, 125, 1022, 165, 1806, 123, 130, 1021, 1012, - 124, 131, 1187, 1832, 1048, 720, 903, 733, 1024, 732, - 739, 97, 96, 4093, 1254, 1233, 1508, 3531, 82, 2453, - 2454, 2455, 1513, 3214, 2453, 3946, 2929, 2928, 104, 91, - 2897, 1043, 1047, 2497, 1924, 3523, 4042, 2962, 2963, 3941, - 3942, 2305, 2306, 1029, 1118, 3486, 126, 2031, 2030, 1069, - 1143, 3947, 665, 2029, 1678, 2028, 132, 2027, 2026, 1999, - 1203, 1140, 723, 2544, 724, 4036, 1151, 2772, 3113, 4063, - 1427, 1085, 3073, 1080, 1157, 1158, 1159, 721, 1162, 1163, - 1164, 1165, 4115, 2486, 1168, 1169, 1170, 1171, 1172, 1173, - 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, - 1184, 1117, 1015, 3596, 1062, 1204, 1063, 2, 4098, 3920, - 1030, 1013, 4058, 2899, 2802, 1092, 93, 126, 1093, 1091, - 1144, 1147, 1148, 1090, 3236, 4083, 3596, 2485, 725, 4046, - 705, 4044, 3399, 4097, 1037, 3398, 93, 3233, 705, 2922, - 3942, 3896, 2737, 2036, 3236, 3291, 93, 1448, 3816, 3815, - 907, 109, 110, 111, 4045, 114, 4043, 1160, 120, 699, - 188, 189, 1142, 1141, 659, 2047, 93, 3536, 4073, 4040, - 3537, 3826, 1061, 1065, 905, 3555, 718, 719, 2919, 1418, - 3234, 3544, 699, 1709, 127, 126, 1008, 1009, 1010, 1011, - 3595, 3985, 1019, 84, 3993, 2479, 3825, 170, 2078, 3311, - 3234, 1094, 4020, 957, 958, 959, 3240, 1821, 2773, 957, - 958, 959, 3171, 3595, 3165, 3166, 699, 2816, 84, 3164, - 1050, 1051, 1061, 1065, 905, 696, 3240, 2851, 84, 2961, - 2850, 2484, 2550, 2852, 2372, 2373, 2945, 2553, 2008, 2009, - 2856, 2371, 2817, 1089, 1251, 1196, 1197, 1745, 1223, 1746, - 1228, 1229, 3997, 167, 1006, 2430, 168, 3172, 1005, 1211, - 1211, 1186, 4025, 3912, 1212, 1212, 699, 3643, 2863, 3268, - 3554, 93, 1210, 681, 1209, 2390, 2389, 1199, 2424, 187, - 4023, 3174, 1445, 1428, 1446, 1447, 679, 2809, 2810, 4029, - 4030, 2148, 3007, 699, 3299, 1964, 93, 3185, 3186, 3169, - 699, 1087, 2551, 3925, 4024, 84, 93, 3297, 86, 699, - 2542, 1224, 2307, 2007, 713, 2011, 3185, 3186, 717, 3237, - 1741, 4064, 1240, 3170, 1242, 711, 676, 1217, 4001, 3273, - 1945, 2947, 2907, 1686, 4001, 691, 2336, 2461, 1914, 3237, - 2973, 1417, 4065, 3867, 3261, 3868, 4095, 1465, 2500, 2932, - 686, 1161, 3262, 1940, 1230, 1226, 1227, 3176, 1249, 1250, - 689, 3269, 1239, 1241, 1231, 2505, 3270, 1244, 2949, 3288, - 700, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1474, 1473, - 1475, 1476, 1915, 93, 1916, 2545, 2546, 2548, 2547, 2140, - 1232, 1192, 171, 700, 2142, 3525, 2502, 1054, 2147, 2143, - 3524, 177, 2144, 2145, 2146, 1225, 3184, 2141, 2149, 2150, - 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2523, 3187, 1167, - 2506, 1218, 1166, 3800, 2975, 3184, 2423, 700, 666, 1088, - 668, 682, 1965, 702, 2504, 701, 672, 3187, 670, 674, - 683, 675, 2520, 669, 2521, 680, 2522, 3521, 671, 684, - 685, 688, 692, 693, 694, 690, 687, 3008, 678, 703, - 2464, 4037, 2900, 1097, 2936, 2937, 3600, 1098, 1237, 2349, - 1479, 1825, 1238, 1098, 1136, 1135, 2503, 700, 1134, 1133, - 3072, 1132, 1243, 2512, 2508, 2510, 2511, 2509, 2513, 2514, - 1131, 1064, 1058, 1056, 2985, 2984, 2983, 1130, 1129, 2977, - 1124, 2981, 1689, 2976, 700, 2974, 1255, 1236, 1255, 1255, - 2979, 700, 1137, 3187, 4116, 4070, 1073, 1146, 3436, 2978, - 700, 1110, 1073, 1109, 1073, 162, 1071, 1145, 2334, 2335, - 1109, 1958, 2437, 1049, 2950, 1819, 2490, 2980, 2982, 2489, - 1954, 1064, 1058, 1056, 1948, 1742, 1946, 1947, 1419, 1949, - 1950, 1154, 3207, 3173, 2931, 1818, 2966, 1817, 1017, 1489, - 1494, 1495, 3520, 1498, 1500, 1501, 1502, 1503, 2917, 1506, - 1507, 1509, 1509, 1955, 1509, 1509, 1514, 1514, 1514, 1517, - 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, + 955, 3599, 3600, 87, 3598, 4099, 3918, 4003, 3273, 4112, + 943, 4067, 4066, 1263, 950, 1968, 942, 2080, 3550, 2384, + 3991, 3902, 4022, 3233, 3175, 3182, 3238, 3401, 3827, 3235, + 2092, 2315, 1261, 3234, 1762, 3136, 3232, 2023, 3237, 3236, + 5, 3224, 3900, 3537, 3076, 2317, 3253, 3968, 737, 2743, + 2458, 3140, 3190, 3252, 3137, 3446, 3440, 3637, 2979, 2339, + 3124, 2807, 904, 903, 764, 2355, 3255, 2421, 908, 2881, + 1722, 42, 2961, 1818, 732, 2913, 2426, 3279, 2446, 1073, + 2882, 2489, 2883, 2358, 3432, 3466, 1022, 163, 87, 2372, + 1119, 2832, 2360, 41, 2813, 1041, 1019, 2799, 1143, 2783, + 1865, 2282, 2238, 43, 2359, 2115, 1709, 1022, 2270, 2237, + 3134, 2031, 2076, 2467, 2445, 2953, 1847, 149, 2428, 2347, + 1106, 2874, 1083, 2506, 1101, 1751, 2849, 1731, 2362, 1688, + 100, 2820, 1510, 2119, 2051, 1437, 2335, 1422, 104, 105, + 1964, 731, 1854, 1080, 747, 3139, 1077, 2443, 1112, 1081, + 1946, 2417, 1107, 1108, 1021, 1109, 1025, 2418, 1750, 1058, + 1736, 1060, 1031, 3632, 2188, 1494, 2146, 1040, 2127, 1470, + 3890, 2022, 2781, 107, 2340, 1043, 1028, 742, 2283, 85, + 1252, 1026, 1975, 127, 167, 125, 1813, 1839, 132, 99, + 1017, 1027, 126, 1192, 734, 133, 905, 1053, 1029, 93, + 741, 98, 4100, 3538, 1259, 1238, 1514, 2460, 2461, 2462, + 2460, 3221, 1519, 3953, 84, 2904, 106, 1048, 1052, 2504, + 722, 2936, 2935, 3530, 4049, 1931, 1438, 1123, 1016, 2969, + 1034, 2970, 3949, 735, 3948, 2038, 667, 128, 3493, 3954, + 1074, 134, 1148, 2037, 1684, 2036, 2035, 2034, 2033, 1156, + 1145, 2312, 2313, 2006, 1208, 725, 4043, 726, 2551, 2779, + 3603, 3120, 4070, 1162, 1163, 1164, 3603, 1167, 1168, 1169, + 1170, 2493, 2809, 1173, 1174, 1175, 1176, 1177, 1178, 1179, + 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, + 1035, 1068, 1122, 723, 1067, 1209, 1454, 1433, 3080, 2, + 1020, 1018, 3927, 1098, 95, 2906, 1042, 4105, 1097, 128, + 1096, 1149, 1152, 1153, 1090, 2492, 4053, 1095, 4051, 727, + 3243, 1085, 4122, 1716, 707, 4065, 701, 95, 707, 3243, + 95, 4090, 4104, 3240, 1448, 3949, 3406, 3405, 2929, 3903, + 909, 4052, 1165, 4050, 111, 112, 113, 3602, 116, 2054, + 2744, 122, 1015, 3602, 191, 2043, 3298, 661, 3823, 1066, + 1070, 907, 95, 3822, 3543, 1147, 1146, 3544, 1099, 720, + 721, 4080, 2926, 701, 3833, 4047, 3241, 128, 3562, 1010, + 1011, 1012, 1013, 1424, 86, 3241, 1024, 86, 3551, 959, + 960, 961, 959, 960, 961, 3992, 4000, 2486, 3832, 2085, + 4027, 3318, 3247, 1828, 701, 1066, 1070, 907, 2823, 3172, + 3173, 3247, 2379, 2380, 1055, 1056, 698, 86, 2858, 3171, + 2560, 2857, 2780, 3561, 2859, 2015, 2016, 1752, 2968, 1753, + 2557, 4032, 1451, 2824, 1452, 1453, 3650, 2378, 2952, 4004, + 1233, 1234, 1444, 1228, 1008, 1436, 1007, 3919, 2491, 4030, + 701, 2907, 1094, 1229, 1201, 1202, 1256, 2870, 4036, 4037, + 3275, 2437, 95, 1222, 683, 95, 1216, 3192, 3193, 3306, + 1216, 1217, 2397, 2396, 4031, 1217, 3304, 681, 701, 1215, + 2549, 1214, 2816, 2817, 2431, 2558, 1204, 715, 1971, 3014, + 2018, 86, 3932, 2112, 88, 95, 701, 701, 701, 719, + 2014, 713, 1438, 3874, 3280, 3875, 1191, 1748, 2954, 1921, + 1092, 1434, 1692, 2914, 4071, 4008, 3244, 678, 4008, 2468, + 2939, 2343, 2314, 3268, 2507, 3244, 693, 4102, 1952, 1947, + 1249, 3269, 2980, 1254, 1471, 4072, 1237, 702, 2956, 2343, + 1166, 688, 1231, 1232, 1235, 1423, 1197, 1230, 3532, 3531, + 2530, 691, 3276, 1922, 1236, 1923, 3295, 1223, 1472, 1473, + 1474, 1475, 1476, 1477, 1478, 1480, 1479, 1481, 1482, 95, + 2527, 1255, 2528, 2512, 2529, 1172, 3191, 3277, 1171, 2509, + 2552, 2553, 2555, 2554, 702, 1059, 3807, 2471, 3194, 3528, + 1695, 2104, 2093, 2094, 2095, 2096, 2106, 2097, 2098, 2099, + 2111, 2107, 2100, 2101, 2108, 2109, 2110, 2102, 2103, 2105, + 1448, 2511, 3607, 1102, 2356, 702, 2982, 1103, 4123, 668, + 1103, 670, 684, 1141, 704, 1972, 703, 674, 2513, 672, + 676, 685, 677, 2430, 671, 1140, 682, 1832, 1093, 673, + 686, 687, 690, 694, 695, 696, 692, 689, 3443, 680, + 705, 1142, 4044, 2510, 3015, 1139, 2943, 2944, 1138, 3194, + 1137, 702, 2519, 2515, 2517, 2518, 2516, 2520, 2521, 4077, + 1136, 1135, 1134, 1078, 1129, 1078, 1114, 1965, 1115, 1069, + 1063, 1061, 2444, 3214, 1054, 2957, 2992, 2991, 2990, 702, + 1078, 2984, 2497, 2988, 1076, 2983, 2496, 2981, 1260, 1961, + 1260, 1260, 2986, 1425, 3527, 1159, 3079, 702, 702, 702, + 1151, 2985, 2938, 2341, 2342, 1826, 1114, 1825, 1444, 1824, + 1150, 2924, 4045, 1962, 1822, 1069, 1063, 1061, 665, 2987, + 2989, 2341, 2342, 1749, 660, 3915, 1443, 1440, 1441, 1442, + 1447, 1449, 1446, 1955, 1445, 1953, 1954, 2908, 1956, 1957, + 1022, 1495, 1500, 1501, 1439, 1504, 1506, 1507, 1508, 1509, + 3480, 1512, 1513, 1515, 1515, 3462, 1515, 1515, 1520, 1520, + 1520, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, + 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, + 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, + 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, + 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, + 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, + 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, + 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, + 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, + 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, + 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, + 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, + 1642, 1643, 1644, 1250, 1492, 3926, 1100, 1645, 2905, 1647, + 1648, 1649, 1650, 1651, 1416, 1417, 1933, 1932, 1934, 1935, + 1936, 1520, 1520, 1520, 1520, 1520, 1520, 956, 3601, 3491, + 3492, 2490, 1415, 706, 3601, 3560, 1658, 1659, 1660, 1661, + 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, + 956, 1132, 1213, 956, 699, 2872, 3444, 1496, 2558, 1130, + 1505, 89, 1195, 94, 1062, 4035, 94, 1685, 1432, 700, + 4006, 2434, 3389, 4006, 1212, 2928, 1218, 1219, 1220, 1221, + 1516, 3296, 1517, 1518, 1226, 2559, 1203, 1488, 1489, 1490, + 1491, 1521, 1522, 1200, 3245, 3246, 94, 1502, 1485, 1485, + 1257, 1258, 4005, 3245, 3246, 4005, 3178, 3249, 1853, 4034, + 1062, 2435, 2941, 1715, 2784, 2786, 3249, 2488, 2433, 2927, + 1691, 2854, 1443, 1440, 1441, 1442, 1447, 1449, 1446, 1022, + 1445, 2819, 2951, 1022, 1682, 2950, 4116, 2756, 1089, 1022, + 1439, 1091, 1245, 124, 1247, 2960, 2088, 3088, 1121, 1740, + 1646, 3179, 2436, 1486, 1487, 3087, 2155, 1206, 2814, 1683, + 1951, 666, 2432, 2385, 1485, 1482, 1690, 3170, 1716, 1465, + 94, 2583, 2128, 1253, 1037, 3181, 1477, 1478, 1480, 1479, + 1481, 1482, 1244, 1246, 2973, 2572, 2129, 1239, 1121, 2056, + 1976, 3000, 119, 3176, 3940, 2897, 1144, 1699, 3523, 3456, + 1133, 1703, 2120, 2057, 1483, 1484, 2055, 1021, 1131, 4081, + 1158, 3192, 3193, 2508, 1211, 2027, 1958, 1852, 3177, 1094, + 1190, 1754, 1452, 1453, 2963, 663, 1683, 1701, 1702, 2962, + 1453, 104, 105, 1652, 1653, 1654, 1655, 1656, 1657, 2120, + 1094, 2592, 1086, 2485, 3646, 1009, 1689, 2583, 3498, 1088, + 1087, 1120, 3183, 3497, 2147, 2475, 1862, 1861, 1851, 2149, + 2483, 1676, 1132, 2154, 2150, 120, 107, 2151, 2152, 2153, + 1130, 4073, 2148, 2156, 2157, 2158, 2159, 2160, 2161, 2162, + 2163, 2164, 1121, 2785, 1194, 2480, 4124, 1079, 1242, 1225, + 2480, 1120, 1243, 3481, 1033, 1697, 1124, 1114, 1092, 1845, + 1227, 1126, 1248, 4118, 1121, 1127, 1125, 1829, 1830, 1831, + 1948, 2963, 1949, 2487, 1454, 1950, 2962, 2126, 1855, 1855, + 3191, 1700, 1121, 1941, 2484, 2589, 1718, 1241, 1698, 2482, + 1970, 1916, 3194, 1838, 3970, 1240, 1196, 1686, 1977, 1721, + 1867, 3908, 1868, 1898, 1870, 1872, 1857, 1018, 1876, 1878, + 1880, 1882, 1884, 1020, 1121, 3815, 3814, 4114, 1210, 1260, + 4115, 3805, 4113, 1745, 1746, 2045, 2047, 2048, 2564, 2565, + 2566, 1856, 3573, 4125, 1906, 1907, 1454, 3572, 3505, 3971, + 1912, 1913, 1939, 1928, 1454, 1120, 3909, 1940, 1821, 1193, + 2046, 1114, 1117, 1118, 3557, 1078, 3558, 1454, 2588, 1111, + 1115, 3504, 1835, 1836, 1716, 1093, 2275, 1120, 1848, 3494, + 1834, 2125, 1124, 1114, 959, 960, 961, 1126, 3222, 2619, + 1110, 1127, 1125, 3210, 2879, 1120, 1093, 1157, 2878, 1859, + 2877, 1154, 3272, 1704, 1475, 1476, 1477, 1478, 1480, 1479, + 1481, 1482, 1128, 2440, 1902, 1942, 1938, 1927, 3180, 1471, + 1451, 1926, 1452, 1453, 1966, 1925, 1894, 1120, 1924, 1897, + 1914, 1899, 1908, 1114, 1117, 1118, 1905, 1078, 4086, 1716, + 1904, 1111, 1115, 1472, 1473, 1474, 1475, 1476, 1477, 1478, + 1480, 1479, 1481, 1482, 1903, 1874, 1696, 3488, 707, 707, + 1097, 128, 1096, 1419, 1454, 2861, 707, 2456, 2455, 1095, + 1827, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1480, 1479, + 1481, 1482, 1451, 1748, 1452, 1453, 1725, 1982, 2348, 2349, + 1451, 3002, 1452, 1453, 4074, 1260, 1260, 2454, 2453, 3935, + 1978, 1979, 1454, 1451, 3934, 1452, 1453, 3912, 1454, 87, + 2004, 3911, 87, 1454, 1983, 1471, 2452, 2451, 1467, 3910, + 1468, 1990, 1991, 1992, 2805, 4101, 1716, 1454, 3928, 1471, + 2579, 2972, 1726, 2003, 1469, 1483, 1484, 1466, 1454, 1472, + 1473, 1474, 1475, 1476, 1477, 1478, 1480, 1479, 1481, 1482, + 3841, 1454, 190, 1472, 1473, 1474, 1475, 1476, 1477, 1478, + 1480, 1479, 1481, 1482, 1473, 1474, 1475, 1476, 1477, 1478, + 1480, 1479, 1481, 1482, 4061, 1716, 129, 42, 1450, 1716, + 42, 2083, 2083, 2081, 2081, 2084, 4084, 1716, 101, 172, + 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1456, 1980, 102, + 1451, 2581, 1452, 1453, 3810, 1984, 3794, 1986, 1987, 1988, + 1989, 2580, 2049, 95, 1993, 3793, 2275, 110, 2805, 3999, + 2272, 2112, 4014, 1716, 3840, 1454, 2005, 3645, 109, 2274, + 108, 3643, 2863, 2805, 3978, 4012, 1716, 3798, 1451, 103, + 1452, 1453, 3569, 954, 1451, 169, 1452, 1453, 170, 1451, + 101, 1452, 1453, 2166, 1716, 1682, 1681, 103, 3184, 2805, + 3974, 102, 3188, 1451, 1680, 1452, 1453, 1679, 2629, 3187, + 3502, 189, 3961, 1716, 1451, 3487, 1452, 1453, 1450, 1716, + 1683, 110, 3281, 2028, 3278, 85, 3213, 1451, 85, 1452, + 1453, 2053, 109, 3212, 108, 3541, 3925, 3797, 1716, 2011, + 2012, 3818, 1716, 3189, 2805, 3806, 1454, 2888, 3185, 4010, + 1716, 1454, 2875, 3186, 3541, 1716, 1716, 2058, 1678, 2104, + 2093, 2094, 2095, 2096, 2106, 2097, 2098, 2099, 2111, 2107, + 2100, 2101, 2108, 2109, 2110, 2102, 2103, 2105, 2805, 3539, + 2286, 2087, 2285, 2059, 2540, 2061, 2062, 2063, 2064, 2065, + 2066, 2068, 2070, 2071, 2072, 2073, 2074, 2075, 2539, 2284, + 2502, 1451, 1716, 1452, 1453, 2501, 2114, 2116, 2338, 1454, + 2480, 1716, 1496, 2130, 2131, 2132, 2133, 3460, 1716, 1471, + 2627, 2271, 2320, 2060, 103, 173, 2007, 2144, 2165, 2121, + 1471, 1716, 2571, 1973, 179, 3887, 1716, 1199, 1937, 1205, + 1929, 2631, 1207, 1472, 1473, 1474, 1475, 1476, 1477, 1478, + 1480, 1479, 1481, 1482, 1472, 1473, 1474, 1475, 1476, 1477, + 1478, 1480, 1479, 1481, 1482, 1919, 2364, 2180, 2711, 1716, + 2289, 2290, 1915, 1454, 2286, 1911, 2353, 3203, 3202, 1471, + 3200, 3201, 1451, 1716, 1452, 1453, 1910, 1451, 1909, 1452, + 1453, 1729, 1727, 2284, 1716, 3198, 3199, 1427, 104, 105, + 2273, 1454, 2394, 1472, 1473, 1474, 1475, 1476, 1477, 1478, + 1480, 1479, 1481, 1482, 2850, 2178, 3198, 3197, 2801, 104, + 105, 2829, 1716, 1454, 1251, 2189, 3549, 2052, 2558, 2937, + 1817, 2918, 1454, 103, 2366, 2915, 2331, 1454, 1083, 2911, + 2912, 2850, 2805, 2804, 2893, 1451, 2288, 1452, 1453, 2291, + 2292, 2585, 1716, 2403, 2404, 2405, 2406, 1728, 164, 2821, + 2389, 2398, 1454, 2399, 2400, 2401, 2402, 2388, 1454, 1034, + 2828, 1083, 2393, 1454, 2086, 1716, 2319, 2851, 2370, 2409, + 2410, 2411, 2412, 1817, 1816, 3885, 1716, 2853, 2325, 3455, + 2326, 2585, 3165, 2307, 2821, 2262, 2263, 2264, 2265, 2266, + 2423, 2392, 2558, 2333, 2851, 2330, 1450, 3882, 1716, 1451, + 1454, 1452, 1453, 2469, 2558, 2429, 3864, 1716, 2351, 3135, + 1454, 3431, 1716, 1760, 1759, 2829, 3457, 2375, 2376, 2374, + 3455, 2829, 2481, 2391, 2390, 3966, 1454, 1451, 3939, 1452, + 1453, 1454, 1068, 2805, 2466, 1067, 3424, 1716, 2829, 109, + 2309, 3410, 3421, 1716, 1123, 3200, 2189, 3836, 2439, 1451, + 1454, 1452, 1453, 3108, 1855, 2377, 3455, 2585, 1451, 1454, + 1452, 1453, 2711, 1451, 2616, 1452, 1453, 3506, 2615, 2480, + 2424, 1454, 2420, 2463, 2413, 2415, 2416, 2438, 2474, 2346, + 2480, 2477, 2442, 2478, 3475, 2450, 1720, 2494, 1451, 1454, + 1452, 1453, 2310, 2086, 1451, 4075, 1452, 1453, 1454, 1451, + 2029, 1452, 1453, 2013, 2473, 2424, 2476, 2472, 1450, 1122, + 3419, 1716, 1960, 1747, 1105, 3381, 1716, 1454, 3507, 3508, + 3509, 1454, 2495, 4040, 1890, 2498, 190, 1104, 3981, 2499, + 2500, 1454, 3829, 1023, 3379, 1716, 1451, 2909, 1452, 1453, + 1717, 1719, 4096, 3375, 1716, 1723, 1451, 3795, 1452, 1453, + 129, 3657, 151, 3522, 2563, 3372, 1716, 3519, 3500, 3323, + 3322, 1819, 1451, 172, 1452, 1453, 2505, 1451, 1454, 1452, + 1453, 2422, 3225, 3370, 1716, 1891, 1892, 1893, 1506, 1454, + 1506, 2885, 3368, 1716, 3270, 165, 1451, 1454, 1452, 1453, + 3227, 3223, 177, 2919, 162, 1451, 2575, 1452, 1453, 2419, + 150, 3366, 1716, 1454, 1195, 3364, 1716, 1451, 2414, 1452, + 1453, 95, 2286, 2533, 2285, 3362, 1716, 2408, 2407, 169, + 1744, 1944, 170, 1850, 1846, 1451, 1815, 1452, 1453, 121, + 3274, 2578, 3830, 185, 1451, 2437, 1452, 1453, 2323, 1761, + 4094, 1841, 1842, 161, 160, 189, 3467, 3468, 4068, 3947, + 3510, 3869, 3426, 1451, 3470, 1452, 1453, 1451, 2009, 1452, + 1453, 2548, 3219, 3360, 1716, 1886, 3218, 1451, 2884, 1452, + 1453, 3358, 1716, 3217, 3135, 2556, 166, 171, 168, 174, + 175, 176, 178, 180, 181, 182, 183, 3356, 1716, 2898, + 2534, 3473, 184, 186, 187, 188, 1454, 3511, 3512, 3513, + 2567, 1724, 1454, 3157, 1451, 3472, 1452, 1453, 3158, 3154, + 2053, 3153, 1887, 1888, 1889, 1451, 2885, 1452, 1453, 1454, + 2010, 3943, 1900, 1451, 3461, 1452, 1453, 3831, 2834, 2837, + 2838, 2839, 2835, 1454, 2836, 2840, 2337, 2329, 3155, 1451, + 3113, 1452, 1453, 3156, 3112, 1454, 155, 1843, 158, 3907, + 1840, 1454, 156, 157, 3636, 3125, 3127, 1945, 1454, 173, + 3451, 2568, 2591, 2570, 3128, 3627, 1454, 3626, 179, 3448, + 3313, 3638, 2573, 3122, 2574, 1454, 1959, 3447, 1006, 1454, + 3354, 1716, 2889, 1038, 2542, 2543, 3352, 1716, 1454, 2545, + 1981, 1039, 1454, 2576, 2868, 2755, 1161, 1985, 2546, 3196, + 1160, 2569, 1454, 3350, 1716, 1418, 1454, 3289, 1996, 1997, + 1998, 1999, 2000, 2001, 2002, 3625, 2625, 3348, 1716, 3159, + 101, 2838, 2839, 2884, 2966, 1454, 2925, 2787, 129, 3346, + 1716, 102, 1451, 2128, 1452, 1453, 1716, 3453, 1451, 103, + 1452, 1453, 3344, 1716, 1454, 1022, 2083, 2129, 2081, 2790, + 3342, 1716, 2348, 2349, 101, 1451, 4110, 1452, 1453, 3328, + 1716, 103, 3215, 3311, 1716, 102, 2826, 2827, 1454, 1451, + 2537, 1452, 1453, 3923, 2788, 2364, 2776, 1716, 1022, 2846, + 4019, 1451, 2598, 1452, 1453, 3924, 3422, 1451, 3825, 1452, + 1453, 3802, 164, 3195, 1451, 2842, 1452, 1453, 2334, 2613, + 1046, 1047, 1451, 2825, 1452, 1453, 2052, 2526, 2806, 2774, + 1716, 1451, 1454, 1452, 1453, 1451, 1454, 1452, 1453, 2525, + 2524, 2523, 2522, 3433, 1451, 1454, 1452, 1453, 1451, 3524, + 1452, 1453, 2562, 3895, 42, 108, 3894, 3872, 1451, 1454, + 1452, 1453, 1451, 2843, 1452, 1453, 2845, 2815, 2802, 1689, + 2778, 1454, 2749, 1716, 110, 109, 1454, 3644, 2844, 3642, + 3641, 1451, 1454, 1452, 1453, 109, 3633, 108, 1683, 2871, + 2873, 2798, 3441, 2791, 1454, 2793, 103, 3634, 3111, 3520, + 1451, 1454, 1452, 1453, 2818, 2864, 3110, 3452, 159, 2803, + 3611, 2848, 2923, 3450, 3228, 1454, 2726, 1716, 2464, 1454, + 2718, 1716, 1833, 2032, 1451, 1045, 1452, 1453, 2852, 2709, + 1716, 4097, 2821, 2855, 110, 110, 2429, 4098, 4097, 3, + 2865, 2862, 1454, 2707, 1716, 109, 109, 108, 2934, 2123, + 2801, 3016, 1454, 4098, 2124, 2694, 1716, 1454, 2617, 2887, + 2876, 2880, 2321, 1454, 2890, 2891, 2692, 1716, 1451, 1741, + 1452, 1453, 1451, 1733, 1452, 1453, 2886, 1454, 2690, 1716, + 3913, 1451, 3486, 1452, 1453, 2688, 1716, 114, 115, 1454, + 2184, 2894, 2899, 2900, 2901, 1451, 2895, 1452, 1453, 2686, + 1716, 2931, 1036, 2684, 1716, 2026, 97, 1451, 10, 1452, + 1453, 1838, 1451, 1, 1452, 1453, 152, 1014, 1451, 153, + 1452, 1453, 2920, 2921, 1454, 1421, 2682, 1716, 1454, 1420, + 1451, 2910, 1452, 1453, 2976, 2977, 3387, 1451, 2930, 1452, + 1453, 2680, 1716, 2024, 3490, 1454, 9, 2678, 1716, 165, + 1454, 1451, 4029, 1452, 1453, 1451, 177, 1452, 1453, 679, + 2025, 2676, 1716, 8, 2311, 1687, 4069, 1454, 4025, 2993, + 2268, 2955, 4026, 2674, 1716, 2958, 2974, 1454, 1451, 1930, + 1452, 1453, 1920, 3552, 2236, 3826, 1454, 3231, 1451, 2470, + 1452, 1453, 3518, 1451, 2427, 1452, 1453, 185, 1113, 1451, + 2301, 1452, 1453, 154, 2386, 2387, 3994, 1454, 2672, 1716, + 118, 1454, 3383, 1451, 1071, 1452, 1453, 1717, 2308, 117, + 1116, 2997, 1224, 2932, 2994, 1451, 2465, 1452, 1453, 2670, + 1716, 3542, 2869, 2395, 2668, 1716, 1766, 1454, 1764, 1765, + 166, 171, 168, 174, 175, 176, 178, 180, 181, 182, + 183, 3320, 2332, 1454, 1763, 1768, 184, 186, 187, 188, + 1451, 3319, 1452, 1453, 1451, 1767, 1452, 1453, 3297, 2618, + 2666, 1716, 3018, 3388, 2017, 3074, 714, 2964, 2841, 708, + 2965, 1451, 192, 1452, 1453, 1755, 1451, 1734, 1452, 1453, + 3402, 2664, 1716, 1155, 669, 2662, 1716, 3204, 2503, 675, + 2978, 1503, 2008, 1451, 3109, 1452, 1453, 2856, 2995, 1065, + 1057, 2322, 2792, 1451, 1064, 1452, 1453, 3803, 3143, 3092, + 2350, 3316, 1451, 3083, 1452, 1453, 3081, 3445, 2354, 3121, + 2357, 3123, 2364, 2032, 3009, 2808, 2975, 2660, 1716, 1454, + 2271, 3126, 2271, 1451, 3054, 1452, 1453, 1451, 3119, 1452, + 1453, 3906, 3635, 3979, 2441, 3142, 2866, 87, 1730, 2996, + 2364, 2364, 2364, 2364, 2364, 1454, 3409, 3064, 3065, 3066, + 3067, 3068, 2590, 1451, 2118, 1452, 1453, 1493, 2363, 3606, + 2364, 2044, 3092, 2364, 739, 738, 3082, 3091, 3084, 1451, + 1454, 1452, 1453, 736, 3147, 2794, 1454, 2822, 1970, 1457, + 2366, 1454, 1714, 1710, 944, 3104, 3105, 3106, 2782, 3164, + 1742, 2833, 3103, 2831, 2830, 3116, 2535, 1711, 3107, 2273, + 2371, 2273, 3469, 2655, 1716, 1025, 3114, 3465, 2366, 2366, + 2366, 2366, 2366, 4021, 2365, 3129, 3130, 2361, 2800, 3117, + 1454, 895, 2327, 2328, 1713, 894, 1712, 3248, 2366, 2772, + 1026, 2366, 748, 3149, 3150, 740, 3152, 3256, 3146, 730, + 1027, 3115, 3160, 3166, 3148, 893, 3167, 3151, 1454, 104, + 105, 892, 1454, 3168, 2771, 1451, 1454, 1452, 1453, 3483, + 2767, 3174, 3257, 2940, 3271, 2651, 1716, 2942, 1454, 3056, + 2867, 3058, 3205, 3267, 3207, 3206, 1454, 1435, 1706, 724, + 1084, 1451, 3294, 1452, 1453, 3930, 2561, 3069, 3070, 3071, + 3072, 3317, 1705, 3208, 3209, 1454, 3937, 3239, 3132, 3258, + 3259, 3229, 3536, 3220, 2766, 3250, 1451, 2429, 1452, 1453, + 2916, 2032, 1451, 2457, 1452, 1453, 3265, 1451, 2514, 1452, + 1453, 69, 46, 3901, 1454, 3967, 887, 2531, 2532, 1454, + 3138, 2536, 2649, 1716, 1454, 3138, 2642, 1716, 884, 3285, + 2765, 3284, 2541, 3282, 2834, 2837, 2838, 2839, 2835, 2544, + 2836, 2840, 2640, 1716, 3467, 3468, 1451, 3292, 1452, 1453, + 2764, 3608, 3302, 3609, 3299, 3300, 3251, 3301, 3610, 3077, + 3303, 3078, 3305, 3950, 3307, 2547, 3951, 883, 3952, 2763, + 2173, 1431, 1714, 1710, 1451, 1428, 1452, 1453, 1451, 4042, + 1452, 1453, 1451, 2019, 1452, 1453, 1506, 1711, 96, 36, + 1506, 2577, 35, 34, 1451, 2582, 1452, 1453, 2762, 33, + 32, 26, 1451, 2753, 1452, 1453, 25, 24, 2752, 23, + 22, 3230, 1707, 1708, 1713, 29, 1712, 19, 2586, 21, + 2587, 1451, 20, 1452, 1453, 2594, 3404, 18, 3242, 2596, + 2597, 4064, 4109, 3408, 123, 55, 52, 50, 2603, 2604, + 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 131, 2614, + 1451, 130, 1452, 1453, 53, 1451, 49, 1452, 1453, 1198, + 1451, 47, 1452, 1453, 31, 3141, 2364, 30, 17, 16, + 15, 14, 2620, 2621, 2622, 2623, 2624, 13, 2626, 3482, + 1454, 3442, 2628, 12, 3449, 11, 2633, 2634, 728, 2635, + 3434, 3435, 2638, 1454, 2639, 2641, 2643, 2644, 2645, 2646, + 2647, 2648, 2650, 2652, 2653, 2654, 2656, 3293, 2658, 2659, + 2661, 2663, 2665, 2667, 2669, 2671, 2673, 2675, 2677, 2679, + 2681, 2683, 2685, 2687, 2689, 2691, 2693, 2695, 2696, 2697, + 3476, 2699, 3474, 2701, 2366, 2703, 2704, 3471, 2706, 2708, + 2710, 3258, 3259, 3484, 2713, 3485, 3439, 3454, 2717, 3477, + 3437, 1454, 2722, 2723, 2724, 2725, 7, 3501, 1454, 3503, + 3287, 3288, 6, 1454, 2751, 2736, 2737, 2738, 2739, 2740, + 2741, 3546, 3547, 2745, 2746, 1454, 39, 2750, 38, 3464, + 3411, 2748, 3413, 3414, 3415, 1454, 2754, 3495, 3496, 1454, + 37, 28, 2757, 2758, 2759, 2760, 2761, 1044, 3478, 3479, + 1050, 1050, 1454, 2768, 2769, 27, 2770, 40, 4, 2773, + 2775, 2332, 2903, 2777, 1454, 2459, 1451, 0, 1452, 1453, + 0, 0, 0, 2789, 0, 1454, 0, 0, 0, 1451, + 0, 1452, 1453, 1454, 0, 2747, 0, 3548, 1454, 0, + 3529, 0, 2742, 0, 3533, 3534, 3535, 2735, 1454, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2734, + 3564, 0, 0, 0, 3525, 3526, 0, 1454, 0, 2733, + 0, 0, 0, 2732, 0, 1454, 0, 0, 0, 0, + 0, 1454, 0, 0, 0, 0, 2731, 1451, 0, 1452, + 1453, 0, 0, 0, 1451, 1454, 1452, 1453, 2730, 1451, + 0, 1452, 1453, 0, 1454, 0, 0, 0, 0, 2729, + 1454, 1451, 0, 1452, 1453, 1454, 0, 2728, 0, 0, + 1454, 1451, 2727, 1452, 1453, 1451, 2847, 1452, 1453, 0, + 0, 0, 2721, 3624, 0, 3628, 3629, 0, 1451, 1454, + 1452, 1453, 3614, 0, 3615, 3616, 3617, 0, 3604, 0, + 1451, 2720, 1452, 1453, 0, 0, 0, 1454, 3142, 2719, + 87, 1451, 3142, 1452, 1453, 2716, 0, 0, 3630, 1451, + 0, 1452, 1453, 0, 1451, 0, 1452, 1453, 1454, 2715, + 0, 0, 0, 0, 1451, 3568, 1452, 1453, 2714, 0, + 2083, 0, 2081, 3659, 2712, 0, 3631, 3651, 1454, 2705, + 2896, 3640, 3639, 1451, 2702, 1452, 1453, 0, 0, 3649, + 3647, 1451, 0, 1452, 1453, 0, 0, 1451, 0, 1452, + 1453, 0, 0, 2700, 0, 0, 0, 0, 42, 3809, + 0, 1451, 0, 1452, 1453, 3663, 0, 0, 0, 0, + 1451, 2698, 1452, 1453, 0, 0, 1451, 0, 1452, 1453, + 0, 1451, 0, 1452, 1453, 0, 1451, 0, 1452, 1453, + 0, 0, 2657, 0, 0, 0, 2945, 2946, 2947, 2948, + 2949, 3801, 0, 3800, 0, 1451, 0, 1452, 1453, 0, + 0, 3816, 2637, 0, 3828, 3799, 0, 0, 3821, 0, + 2032, 2959, 3820, 1451, 0, 1452, 1453, 0, 0, 0, + 3866, 3867, 3004, 3005, 3006, 3007, 3008, 3653, 3660, 3661, + 0, 0, 0, 0, 1451, 2967, 1452, 1453, 2083, 0, + 2081, 3870, 3013, 0, 0, 0, 0, 0, 3595, 3811, + 3812, 3813, 0, 0, 1451, 0, 1452, 1453, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3142, 3138, 3873, 0, 3655, 0, 3876, 0, 3804, + 0, 0, 0, 0, 0, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, - 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, - 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, - 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, - 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, - 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, - 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, - 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, - 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, - 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, - 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, - 1638, 1245, 3919, 1486, 2483, 1639, 2898, 1641, 1642, 1643, - 1644, 1645, 1410, 1411, 1926, 1925, 1927, 1928, 1929, 1514, - 1514, 1514, 1514, 1514, 1514, 3484, 3485, 1409, 954, 1095, - 1426, 1198, 704, 1195, 1652, 1653, 1654, 1655, 1656, 1657, - 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 954, 1482, - 1483, 1484, 1485, 697, 2427, 1490, 1432, 2901, 954, 1496, - 3594, 92, 163, 1499, 87, 1679, 1057, 1432, 698, 175, - 2921, 3553, 1207, 3999, 1213, 1214, 1215, 1216, 1510, 3999, - 1511, 1512, 1208, 3594, 3289, 4028, 92, 3238, 3239, 1515, - 1516, 2552, 1127, 3177, 2428, 1190, 92, 3181, 1252, 1253, - 3242, 2426, 1479, 1084, 3180, 3998, 1086, 3238, 3239, 2934, - 183, 3998, 3382, 1708, 2920, 3437, 1057, 1846, 1685, 1125, - 3242, 2551, 1116, 1815, 1017, 663, 4109, 658, 1017, 4027, - 1944, 2481, 1676, 4038, 1017, 2429, 1116, 2944, 3182, 699, - 2943, 1480, 1481, 3178, 2953, 2425, 1153, 1116, 3179, 1221, - 2777, 2779, 3908, 164, 169, 166, 172, 173, 174, 176, - 178, 179, 180, 181, 1442, 3473, 1677, 3455, 2847, 182, - 184, 185, 186, 92, 2812, 1442, 2749, 2081, 1733, 1640, - 1201, 3081, 2336, 3080, 1116, 122, 2807, 664, 2565, 2378, - 1476, 1479, 1692, 3163, 2576, 1116, 1696, 1459, 1709, 1032, - 1234, 1969, 1016, 1248, 2993, 1089, 117, 1081, 1471, 1472, - 1474, 1473, 1475, 1476, 1083, 1082, 3933, 1694, 1695, 1139, - 3516, 102, 103, 2121, 3449, 1115, 1845, 1206, 2501, 2020, - 1677, 1646, 1647, 1648, 1649, 1650, 1651, 2122, 1951, 1115, - 1128, 1747, 2113, 2890, 1683, 1109, 1112, 1113, 4074, 1073, - 1115, 1089, 1185, 1106, 1110, 1119, 1109, 1116, 1447, 1670, - 1121, 1448, 3639, 1087, 1122, 1120, 105, 1126, 2113, 3491, - 2585, 3490, 1438, 2468, 1105, 1430, 2576, 1855, 118, 1941, - 1854, 1942, 1844, 1438, 1943, 1123, 2956, 1115, 1446, 1447, - 1690, 2955, 2478, 1109, 1112, 1113, 1838, 1073, 1115, 2476, - 1127, 1106, 1110, 1119, 1109, 1822, 1823, 1824, 1121, 2956, - 1680, 1125, 1122, 1120, 2955, 1693, 1189, 4117, 2778, 2473, - 3963, 4066, 1848, 1848, 1909, 1963, 2480, 1860, 1831, 1861, - 2473, 1863, 1865, 1711, 1714, 1869, 1871, 1873, 1875, 1877, - 1891, 1850, 1015, 1691, 1013, 3901, 4107, 1235, 1970, 4108, - 700, 4106, 3474, 1220, 1255, 1738, 1739, 2268, 2477, 2105, - 1115, 1028, 1152, 1849, 1222, 3964, 1149, 2119, 4111, 2475, - 1205, 2049, 1899, 1900, 2334, 2335, 1191, 3808, 1905, 1906, - 3807, 3265, 1814, 3798, 1465, 2050, 1477, 1478, 2048, 1934, - 3902, 1088, 1448, 2557, 2558, 2559, 1445, 1829, 1446, 1447, - 1448, 1827, 1841, 1828, 4118, 2995, 1448, 3566, 1466, 1467, - 1468, 1469, 1470, 1471, 1472, 1474, 1473, 1475, 1476, 3306, - 3565, 1188, 1448, 3550, 1852, 3551, 1697, 1467, 1468, 1469, - 1470, 1471, 1472, 1474, 1473, 1475, 1476, 1088, 1469, 1470, - 1471, 1472, 1474, 1473, 1475, 1476, 1895, 957, 958, 959, - 3498, 1887, 1959, 1933, 1890, 1448, 1892, 2097, 2086, 2087, - 2088, 2089, 2099, 2090, 2091, 2092, 2104, 2100, 2093, 2094, - 2101, 2102, 2103, 2095, 2096, 2098, 1452, 1453, 1454, 1455, - 1456, 1457, 1458, 1450, 1092, 1709, 126, 3497, 1091, 1932, - 4079, 1709, 1090, 1820, 1466, 1467, 1468, 1469, 1470, 1471, - 1472, 1474, 1473, 1475, 1476, 2268, 4077, 1709, 1709, 2265, - 1975, 1921, 1448, 3487, 1413, 2118, 3215, 1448, 2267, 1255, - 1255, 3203, 2872, 2871, 2870, 1971, 1972, 1445, 2620, 1446, - 1447, 1997, 952, 85, 2433, 1445, 85, 1446, 1447, 1976, - 1709, 1445, 1935, 1446, 1447, 1919, 1983, 1984, 1985, 2038, - 2040, 2041, 1918, 1931, 1917, 1907, 1901, 1445, 1996, 1446, - 1447, 1898, 1897, 188, 1896, 1867, 1437, 1434, 1435, 1436, - 1441, 1443, 1440, 2039, 1439, 1920, 705, 1437, 1434, 1435, - 1436, 1441, 1443, 1440, 1433, 1439, 2105, 127, 2865, 1741, - 1445, 1718, 1446, 1447, 4067, 1433, 4007, 1709, 1709, 108, - 170, 41, 1709, 3921, 41, 2076, 2076, 2074, 2074, 2077, - 107, 3928, 106, 3481, 705, 2854, 705, 3927, 1448, 2449, - 2448, 101, 3905, 1973, 1448, 108, 3904, 2042, 2447, 2446, - 1977, 3903, 1979, 1980, 1981, 1982, 107, 1719, 106, 1986, - 3803, 1465, 2341, 2342, 1461, 3834, 1462, 1445, 3787, 1446, - 1447, 1998, 1445, 99, 1446, 1447, 167, 2445, 2444, 168, - 1463, 1477, 1478, 1460, 100, 1466, 1467, 1468, 1469, 1470, - 1471, 1472, 1474, 1473, 1475, 1476, 3786, 2159, 3638, 1676, - 1709, 3833, 187, 3636, 2097, 2086, 2087, 2088, 2089, 2099, - 2090, 2091, 2092, 2104, 2100, 2093, 2094, 2101, 2102, 2103, - 2095, 2096, 2098, 1465, 83, 2965, 1709, 83, 4005, 1709, - 2622, 2021, 3562, 1677, 2798, 4094, 2046, 1448, 1465, 1709, - 1444, 1709, 3791, 2004, 2005, 4054, 1709, 1466, 1467, 1468, - 1469, 1470, 1471, 1472, 1474, 1473, 1475, 1476, 1444, 1709, - 2624, 2051, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1474, - 1473, 1475, 1476, 1445, 1448, 1446, 1447, 1675, 1448, 1445, - 1674, 1446, 1447, 1673, 2279, 2080, 2278, 1448, 2798, 3992, - 3790, 2053, 2052, 3495, 2054, 2055, 2056, 2057, 2058, 2059, - 2061, 2063, 2064, 2065, 2066, 2067, 2068, 2277, 1448, 3480, - 2107, 2109, 1465, 3274, 2564, 171, 1490, 2123, 2124, 2125, - 2126, 4003, 1709, 1465, 177, 2264, 2798, 3971, 2798, 3967, - 3542, 2137, 2158, 2114, 3954, 1709, 1466, 1467, 1468, 1469, - 1470, 1471, 1472, 1474, 1473, 1475, 1476, 1466, 1467, 1468, - 1469, 1470, 1471, 1472, 1474, 1473, 1475, 1476, 3880, 1709, - 2908, 2574, 3878, 1709, 3534, 3918, 3811, 1709, 2886, 2357, - 3271, 2573, 1445, 2386, 1446, 1447, 2173, 2279, 1448, 2346, - 2282, 2283, 3206, 99, 2798, 3799, 3448, 1448, 3534, 1709, - 101, 3205, 3875, 1709, 100, 2798, 3532, 102, 103, 2881, - 2277, 2473, 1709, 2266, 2868, 2387, 1448, 3453, 1709, 1445, - 1448, 1446, 1447, 1445, 1672, 1446, 1447, 102, 103, 2171, - 2704, 1709, 1445, 2533, 1446, 1447, 2324, 2532, 2612, 2182, - 2495, 2045, 3196, 3195, 93, 1448, 2494, 2359, 3193, 3194, - 4033, 1078, 2331, 1445, 2313, 1446, 1447, 2000, 162, 1709, - 2281, 3191, 3192, 2284, 2285, 1966, 2396, 2397, 2398, 2399, - 3191, 3190, 3857, 1709, 2391, 2382, 2392, 2393, 2394, 2395, - 2381, 3424, 1709, 1448, 1078, 1930, 2363, 1029, 2822, 1709, - 2312, 101, 2402, 2403, 2404, 2405, 2551, 2930, 1810, 2911, - 1448, 2318, 2814, 2319, 3417, 1709, 2904, 2905, 2843, 2255, - 2256, 2257, 2258, 2259, 1922, 2385, 2326, 1448, 2323, 2300, - 2416, 1912, 1448, 1445, 2462, 1446, 1447, 1908, 2422, 3414, - 1709, 2344, 1445, 1904, 1446, 1447, 2798, 2797, 1448, 1903, - 2368, 2369, 2367, 2578, 1709, 2079, 1709, 2384, 1902, 2383, - 1709, 1445, 1720, 1446, 1447, 1445, 1448, 1446, 1447, 2459, - 1062, 1246, 1063, 1444, 2302, 1810, 1809, 3412, 1709, 3158, - 2182, 2844, 1753, 1752, 2822, 2432, 1118, 1448, 107, 2551, - 1445, 2846, 1446, 1447, 3374, 1709, 1848, 1448, 2821, 2417, - 188, 2814, 3450, 3959, 1448, 2413, 2794, 2406, 2408, 2409, - 2431, 2467, 4068, 1448, 2470, 2435, 2471, 3916, 3932, 2443, - 2474, 101, 2487, 1448, 127, 2798, 149, 2843, 1445, 1448, - 1446, 1447, 3372, 1709, 2417, 2466, 2469, 170, 1448, 2465, - 2822, 3403, 1448, 1117, 3193, 1445, 1448, 1446, 1447, 3101, - 3368, 1709, 1448, 2822, 2370, 2488, 2491, 1444, 2578, 2704, - 2492, 2493, 1445, 2609, 1446, 1447, 3128, 1445, 160, 1446, - 1447, 3365, 1709, 3448, 148, 1710, 1712, 3448, 2473, 2578, - 3218, 3363, 1709, 1445, 2608, 1446, 1447, 2556, 3361, 1709, - 2844, 2473, 2456, 167, 2498, 2339, 168, 3359, 1709, 1713, - 2551, 1445, 2303, 1446, 1447, 163, 2079, 3357, 1709, 2022, - 2006, 1500, 175, 1500, 3795, 136, 137, 159, 158, 187, - 1953, 1740, 1445, 3517, 1446, 1447, 3355, 1709, 1100, 2568, - 3353, 1709, 1445, 1099, 1446, 1447, 3351, 1709, 1018, 1445, - 3974, 1446, 1447, 1448, 3822, 2279, 1716, 2278, 1445, 2526, - 1446, 1447, 1448, 183, 3788, 3650, 3515, 3512, 1445, 3493, - 1446, 1447, 3316, 3315, 1445, 1448, 1446, 1447, 2571, 1448, - 1812, 2415, 3263, 1445, 3220, 1446, 1447, 1445, 1448, 1446, - 1447, 1445, 3216, 1446, 1447, 2912, 1448, 1445, 2412, 1446, - 1447, 2407, 1448, 2401, 3499, 2541, 164, 169, 166, 172, - 173, 174, 176, 178, 179, 180, 181, 1448, 2400, 1937, - 2549, 1448, 182, 184, 185, 186, 93, 1843, 1839, 153, - 134, 156, 141, 133, 1448, 154, 155, 3349, 1709, 1808, - 119, 2878, 171, 2560, 2877, 1448, 3347, 1709, 1190, 3466, - 4089, 177, 142, 2002, 2046, 3500, 3501, 3502, 1448, 3345, - 1709, 3267, 1448, 3343, 1709, 3823, 145, 143, 138, 139, - 140, 144, 3341, 1709, 3460, 3461, 1448, 2430, 135, 2316, - 3339, 1709, 1448, 4087, 4061, 3940, 3829, 146, 1445, 1448, - 1446, 1447, 2878, 1448, 3936, 3862, 3463, 1445, 3212, 1446, - 1447, 3337, 1709, 2584, 3211, 3335, 1709, 3465, 2562, 2561, - 1445, 2563, 1446, 1447, 1445, 2003, 1446, 1447, 3321, 1709, - 2566, 3210, 2567, 1445, 1448, 1446, 1447, 2535, 2536, 3304, - 1709, 1445, 2538, 1446, 1447, 2582, 2569, 1445, 2748, 1446, - 1447, 2539, 2769, 1709, 3128, 1448, 2767, 1709, 2891, 3147, - 1448, 1883, 1445, 2527, 1446, 1447, 1445, 2618, 1446, 1447, - 2742, 1709, 1448, 1722, 3146, 3824, 2719, 1709, 1448, 1445, - 2780, 1446, 1447, 2711, 1709, 162, 3150, 2702, 1709, 3148, - 1445, 3151, 1446, 1447, 3149, 2330, 1717, 2322, 1017, 2076, - 3454, 2074, 2783, 1445, 3106, 1446, 1447, 1445, 3105, 1446, - 1447, 3629, 1884, 1885, 1886, 3900, 1448, 3503, 2581, 2819, - 2820, 1445, 3631, 1446, 1447, 2781, 3444, 1445, 2357, 1446, - 1447, 1017, 2839, 1448, 1445, 2591, 1446, 1447, 1445, 1721, - 1446, 1447, 1448, 3441, 2700, 1709, 3152, 1448, 2831, 2832, - 1033, 3440, 2606, 3115, 1952, 1004, 2687, 1709, 1034, 2045, - 3189, 2799, 2685, 1709, 3504, 3505, 3506, 2861, 2818, 1445, - 2882, 1446, 1447, 1448, 3620, 2121, 3619, 1156, 1448, 3282, - 1155, 157, 2877, 1448, 2918, 2959, 1879, 41, 2795, 2122, - 1445, 1412, 1446, 1447, 99, 1445, 2836, 1446, 1447, 2838, - 2683, 1709, 1683, 2771, 2808, 100, 3446, 1445, 2837, 1446, - 1447, 101, 1448, 1445, 127, 1446, 1447, 2681, 1709, 2341, - 2342, 4103, 2864, 2866, 3618, 2784, 3468, 2786, 1448, 2791, - 1677, 2679, 1709, 1880, 1881, 1882, 3208, 2811, 2857, 2841, - 3118, 3120, 2530, 2796, 4012, 2916, 3917, 1448, 3818, 3121, - 2572, 1445, 3188, 1446, 1447, 1448, 2835, 2677, 1709, 2327, - 2519, 2845, 2675, 1709, 1041, 1042, 2848, 3419, 1445, 2422, - 1446, 1447, 2855, 1448, 2858, 106, 2518, 1445, 3104, 1446, - 1447, 2927, 1445, 2116, 1446, 1447, 3103, 99, 2117, 150, - 1448, 2869, 151, 3426, 101, 2880, 2673, 1709, 100, 2517, - 2883, 2884, 1448, 2516, 2515, 2555, 3626, 3888, 1445, 2879, - 1446, 1447, 1448, 1445, 3887, 1446, 1447, 3865, 1445, 3637, - 1446, 1447, 163, 3635, 2177, 2892, 2893, 2894, 2887, 175, - 2888, 2671, 1709, 3634, 3627, 108, 2924, 3513, 3445, 2669, - 1709, 3443, 3221, 2457, 1831, 1826, 107, 1445, 106, 1446, - 1447, 1448, 1040, 107, 3434, 2913, 2914, 2667, 1709, 1448, - 2814, 108, 4090, 1445, 2903, 1446, 1447, 2969, 2970, 1448, - 183, 2923, 107, 3604, 2665, 1709, 2794, 1448, 3009, 4091, - 4090, 1448, 1445, 2610, 1446, 1447, 2663, 1709, 1448, 2314, - 1445, 1734, 1446, 1447, 1448, 1726, 2661, 1709, 4091, 1448, - 2967, 2948, 2986, 2951, 2261, 3906, 1448, 3479, 1445, 1031, - 1446, 1447, 3, 164, 169, 166, 172, 173, 174, 176, - 178, 179, 180, 181, 1448, 1445, 95, 1446, 1447, 182, - 184, 185, 186, 1448, 2294, 2659, 1709, 1445, 1, 1446, - 1447, 112, 113, 2657, 1709, 2019, 1448, 1445, 10, 1446, - 1447, 1710, 2301, 2655, 1709, 2987, 2925, 1415, 1414, 3483, - 2990, 2653, 1709, 4022, 2017, 2648, 1709, 9, 2018, 1448, - 677, 8, 2644, 1709, 1448, 2304, 1681, 4062, 2642, 1709, - 1448, 4018, 4019, 2635, 1709, 2325, 1445, 1923, 1446, 1447, - 2633, 1709, 1913, 3545, 1445, 2229, 1446, 1447, 3819, 3224, - 2463, 1448, 3511, 3011, 1445, 2420, 1446, 1447, 3067, 2873, - 2957, 1108, 1445, 2958, 1446, 1447, 1445, 3415, 1446, 1447, - 152, 2379, 2380, 1445, 3987, 1446, 1447, 116, 1066, 1445, - 3380, 1446, 1447, 2968, 1445, 115, 1446, 1447, 2971, 1448, - 1111, 1445, 1219, 1446, 1447, 2458, 2988, 3535, 2862, 2388, - 1759, 1757, 3074, 3376, 1758, 1756, 3085, 1761, 3313, 1445, - 3076, 1446, 1447, 1760, 3312, 2357, 3002, 3290, 1445, 108, - 1446, 1447, 1448, 2264, 2611, 2264, 3381, 2010, 3047, 712, - 107, 1445, 106, 1446, 1447, 3309, 2834, 2434, 3135, 706, - 85, 101, 2989, 2357, 2357, 2357, 2357, 2357, 190, 3057, - 3058, 3059, 3060, 3061, 1445, 1748, 1446, 1447, 1727, 1445, - 1448, 1446, 1447, 2357, 3395, 1445, 2357, 1446, 1447, 3085, - 3075, 1150, 3077, 2765, 667, 3197, 3084, 1448, 2496, 673, - 3140, 1963, 1448, 2359, 1497, 2001, 1445, 1448, 1446, 1447, - 3102, 1448, 3157, 3100, 2849, 3109, 3096, 3097, 3098, 3099, - 1060, 2266, 1448, 2266, 1052, 2315, 2764, 2785, 1020, 3110, - 1059, 2359, 2359, 2359, 2359, 2359, 3107, 3796, 3136, 3438, - 1448, 3114, 3122, 3123, 1445, 1448, 1446, 1447, 3108, 3116, - 3241, 2359, 3141, 3139, 2359, 3144, 2801, 1022, 3142, 3143, - 3249, 3145, 1021, 3159, 2760, 3119, 3160, 102, 103, 3112, - 3153, 1448, 3899, 3628, 3972, 3161, 2859, 1445, 1723, 1446, - 1447, 2759, 3402, 1448, 3167, 2583, 2758, 2111, 1487, 2356, - 3599, 2757, 3049, 2037, 3051, 2756, 737, 3198, 736, 3200, - 1448, 3199, 734, 2787, 2815, 1451, 2755, 942, 2775, 1735, - 3062, 3063, 3064, 3065, 2826, 1445, 2824, 1446, 1447, 3201, - 3202, 3125, 3251, 3252, 2746, 2823, 3222, 2528, 2364, 2745, - 2422, 3243, 1445, 3462, 1446, 1447, 3458, 1445, 4014, 1446, - 1447, 3258, 1445, 2358, 1446, 1447, 1445, 2354, 1446, 1447, - 1448, 2793, 893, 3131, 892, 2744, 1448, 1445, 3131, 1446, - 1447, 746, 3278, 738, 3277, 3275, 728, 2743, 891, 890, - 3476, 3285, 3250, 2933, 3264, 1445, 2935, 1446, 1447, 2860, - 1445, 3260, 1446, 1447, 2740, 1429, 1448, 3292, 3293, 3244, - 3294, 1699, 3295, 3296, 722, 3298, 1079, 3300, 2827, 2830, - 2831, 2832, 2828, 3287, 2829, 2833, 1445, 3923, 1446, 1447, - 2554, 3310, 1698, 3930, 3232, 3529, 3213, 2909, 1445, 1500, - 1446, 1447, 2450, 1500, 2570, 68, 45, 3894, 2575, 3960, - 885, 882, 3601, 3602, 2735, 1445, 3603, 1446, 1447, 3070, - 2728, 3071, 3943, 3944, 3223, 881, 3945, 2166, 1425, 1422, - 4035, 2579, 3397, 2580, 2012, 94, 36, 35, 2587, 3401, - 34, 33, 2589, 2590, 32, 26, 25, 24, 23, 22, - 2727, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, - 2605, 29, 2607, 19, 21, 1445, 20, 1446, 1447, 18, - 3235, 1445, 4057, 1446, 1447, 4102, 121, 54, 3134, 2357, - 51, 49, 726, 129, 3286, 2613, 2614, 2615, 2616, 2617, - 128, 2619, 3475, 1448, 3435, 2621, 52, 3442, 48, 2626, - 2627, 1445, 2628, 1446, 1447, 2631, 1448, 2632, 2634, 2636, - 2637, 2638, 2639, 2640, 2641, 2643, 2645, 2646, 2647, 2649, - 3447, 2651, 2652, 2654, 2656, 2658, 2660, 2662, 2664, 2666, - 2668, 2670, 2672, 2674, 2676, 2678, 2680, 2682, 2684, 2686, - 2688, 2689, 2690, 3432, 2692, 3469, 2694, 2359, 2696, 2697, - 3467, 2699, 2701, 2703, 3251, 3252, 3477, 2706, 3478, 3470, - 3464, 2710, 3430, 3427, 3428, 2715, 2716, 2717, 2718, 1193, - 3494, 46, 3496, 3280, 3281, 31, 3457, 2726, 2729, 2730, - 2731, 2732, 2733, 2734, 3539, 3540, 2738, 2739, 30, 1039, - 2725, 17, 1045, 1045, 2741, 3471, 3472, 16, 3404, 2747, - 3406, 3407, 3408, 3488, 3489, 2750, 2751, 2752, 2753, 2754, - 955, 15, 2268, 14, 13, 956, 2761, 2762, 12, 2763, - 11, 7, 2766, 2768, 2325, 2075, 2770, 6, 1445, 39, - 1446, 1447, 38, 28, 37, 27, 2782, 4, 2896, 2452, - 0, 1445, 0, 1446, 1447, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3541, 3522, 1448, 0, 0, - 3526, 3527, 3528, 0, 2827, 2830, 2831, 2832, 2828, 0, - 2829, 2833, 0, 3557, 3460, 3461, 0, 3518, 3519, 0, - 0, 1448, 0, 0, 0, 0, 0, 0, 0, 0, - 1448, 0, 0, 0, 1448, 0, 0, 0, 1448, 962, - 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, - 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, - 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, - 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, - 1003, 2724, 0, 0, 0, 0, 3617, 0, 3621, 3622, - 1448, 0, 0, 0, 0, 3607, 1448, 3608, 3609, 3610, - 0, 3597, 0, 0, 0, 2723, 0, 0, 0, 0, - 0, 3135, 1448, 85, 2722, 3135, 0, 0, 2721, 0, - 0, 3623, 2720, 0, 0, 1448, 0, 0, 0, 1448, - 0, 0, 1445, 0, 1446, 1447, 0, 0, 3561, 0, - 0, 0, 1448, 2076, 0, 2074, 3652, 0, 0, 3624, - 0, 0, 0, 1448, 3633, 3632, 1445, 0, 1446, 1447, - 1448, 0, 3644, 3640, 3642, 1445, 0, 1446, 1447, 1445, - 0, 1446, 1447, 1445, 2714, 1446, 1447, 1707, 1703, 0, - 2713, 41, 3802, 0, 0, 0, 0, 0, 0, 0, - 0, 3656, 1704, 0, 0, 0, 2712, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2709, - 0, 0, 0, 2708, 0, 0, 0, 2320, 2321, 1706, - 3794, 1705, 0, 3793, 0, 1445, 2707, 1446, 1447, 0, - 0, 1445, 3809, 1446, 1447, 0, 0, 2705, 3813, 3814, - 0, 3821, 0, 3792, 2698, 3653, 3654, 1445, 0, 1446, - 1447, 0, 0, 3859, 3860, 2997, 2998, 2999, 3000, 3001, - 1445, 3646, 1446, 1447, 1445, 0, 1446, 1447, 0, 0, - 0, 2076, 0, 2074, 3863, 3006, 0, 1445, 0, 1446, - 1447, 3588, 0, 0, 0, 3804, 3805, 3806, 1445, 0, - 1446, 1447, 0, 0, 0, 1445, 0, 1446, 1447, 0, - 0, 0, 0, 0, 3135, 3131, 0, 3648, 0, 0, - 3866, 0, 3797, 0, 3869, 0, 0, 0, 1517, 1518, - 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, - 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1537, 1538, 1539, - 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, - 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, - 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, - 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, - 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, - 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, - 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, - 1610, 1611, 1612, 1614, 1615, 1616, 1617, 1618, 1619, 1620, - 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1635, - 1636, 1637, 1638, 1652, 1653, 1654, 1655, 1656, 1657, 1658, - 1659, 1660, 1661, 1662, 1663, 1664, 1665, 3910, 3892, 3864, - 3907, 3134, 3889, 3890, 0, 3134, 3891, 0, 1448, 0, - 0, 3924, 1448, 0, 0, 0, 0, 0, 0, 1448, - 0, 0, 0, 1448, 1707, 1703, 3909, 0, 0, 85, - 0, 0, 0, 3137, 0, 0, 0, 0, 0, 1704, - 0, 0, 0, 0, 0, 0, 0, 1448, 0, 0, - 0, 3155, 1448, 3913, 0, 0, 0, 4055, 3926, 0, - 1448, 0, 0, 3929, 1700, 1701, 1706, 1776, 1705, 0, - 0, 0, 3801, 0, 0, 0, 0, 0, 3931, 1448, - 0, 0, 3898, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2695, 0, 0, 0, 2693, 41, 0, 0, - 1449, 0, 0, 2691, 0, 0, 0, 2650, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3949, - 0, 0, 3950, 3969, 0, 0, 0, 0, 85, 0, - 1505, 2630, 0, 0, 0, 3915, 2629, 0, 0, 0, - 0, 0, 3958, 1445, 2625, 1446, 1447, 1445, 0, 1446, - 1447, 0, 0, 0, 1445, 3965, 1446, 1447, 1445, 0, - 1446, 1447, 0, 2623, 3978, 0, 4000, 3983, 3975, 3934, - 3980, 3986, 0, 3979, 3977, 0, 3982, 3973, 3284, 3821, - 3989, 3981, 1445, 0, 1446, 1447, 0, 1445, 0, 1446, - 1447, 4010, 0, 0, 3134, 1445, 41, 1446, 1447, 0, - 3301, 3302, 0, 3303, 4031, 3305, 3307, 4021, 4026, 0, - 4013, 4039, 1764, 0, 1445, 4041, 1446, 1447, 4000, 3314, - 0, 0, 0, 4052, 3318, 3319, 3320, 3322, 3323, 3324, - 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, - 3336, 3338, 3340, 3342, 3344, 3346, 3348, 3350, 3352, 3354, - 3356, 3358, 3360, 3362, 3364, 3366, 3367, 3369, 3370, 3371, - 3373, 4056, 1963, 3375, 4071, 3377, 3378, 3379, 4072, 4051, - 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, - 3393, 4086, 2076, 4088, 2074, 4085, 4084, 4082, 4075, 3400, - 4081, 3970, 4096, 3405, 0, 4000, 1777, 3409, 3410, 0, - 3411, 3413, 4104, 3416, 3418, 0, 3420, 3421, 3422, 3423, - 4112, 4110, 3938, 3131, 3429, 1448, 0, 0, 0, 0, - 3948, 0, 0, 1448, 0, 0, 0, 0, 0, 0, - 0, 4121, 4122, 3860, 4120, 0, 0, 0, 0, 0, - 2076, 1776, 2074, 4119, 0, 0, 0, 0, 0, 3451, - 3452, 3922, 0, 3456, 0, 0, 0, 0, 1790, 1793, - 1794, 1795, 1796, 1797, 1798, 0, 1799, 1800, 1802, 1803, - 1801, 1804, 1805, 1778, 1779, 1780, 1781, 1762, 1763, 1791, - 4069, 1765, 0, 1766, 1767, 1768, 1769, 1770, 1771, 1772, - 1773, 1774, 0, 0, 1775, 1782, 1783, 1784, 1785, 2588, - 1786, 1787, 1788, 1789, 0, 0, 0, 2577, 0, 0, - 0, 4047, 0, 1725, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1445, 1813, 1446, 1447, 0, 0, 0, 0, 1445, 3533, - 1446, 1447, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1764, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3552, 0, 0, 3556, 0, 0, 0, 0, 0, - 0, 938, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3567, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 193, 0, 0, 193, - 1777, 0, 0, 710, 0, 0, 0, 0, 716, 1967, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, - 0, 955, 0, 0, 0, 3590, 956, 0, 0, 0, - 0, 0, 0, 0, 193, 0, 2075, 0, 3598, 1792, - 0, 0, 0, 0, 0, 0, 3605, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, - 193, 716, 1790, 1793, 1794, 1795, 1796, 1797, 1798, 0, - 1799, 1800, 1802, 1803, 1801, 1804, 1805, 1778, 1779, 1780, - 1781, 1762, 1763, 1791, 0, 1765, 0, 1766, 1767, 1768, - 1769, 1770, 1771, 1772, 1773, 1774, 0, 0, 1775, 1782, - 1783, 1784, 1785, 0, 1786, 1787, 1788, 1789, 0, 0, - 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, - 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, - 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, - 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, - 1002, 1003, 0, 0, 0, 0, 0, 0, 0, 0, + 1538, 1539, 1540, 1541, 1543, 1544, 1545, 1546, 1547, 1548, + 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, + 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, + 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, + 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, + 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, + 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, + 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, + 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, + 1630, 1631, 1632, 1633, 1634, 1635, 1641, 1642, 1643, 1644, + 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, + 1668, 1669, 1670, 1671, 3917, 3899, 3914, 3871, 3141, 3896, + 3897, 1454, 3141, 3898, 0, 1454, 0, 0, 3931, 0, + 0, 0, 0, 0, 1454, 0, 0, 0, 1454, 0, + 0, 0, 0, 3916, 0, 0, 87, 0, 0, 0, + 3144, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1454, 0, 0, 0, 3162, 0, + 0, 3920, 0, 0, 0, 0, 0, 3933, 0, 0, + 0, 0, 3936, 3938, 0, 0, 0, 0, 0, 3808, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3905, + 0, 0, 0, 0, 0, 2636, 0, 0, 0, 2632, + 0, 0, 0, 0, 42, 0, 0, 0, 2630, 0, + 0, 0, 2595, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1455, 0, + 3976, 0, 0, 3956, 0, 87, 3957, 0, 2584, 0, + 0, 0, 3922, 0, 0, 0, 0, 1451, 0, 1452, + 1453, 1451, 3965, 1452, 1453, 0, 0, 0, 1511, 3972, + 1451, 0, 1452, 1453, 1451, 3216, 1452, 1453, 0, 0, + 0, 3985, 3980, 4007, 3990, 0, 3941, 3987, 3993, 3982, + 0, 3986, 3828, 3996, 3984, 3291, 3989, 3988, 0, 0, + 1451, 3254, 1452, 1453, 0, 0, 0, 0, 4017, 0, + 0, 3141, 0, 42, 0, 3266, 0, 3308, 3309, 0, + 3310, 4038, 3312, 3314, 4028, 4033, 0, 4020, 4046, 0, + 0, 0, 4048, 0, 3283, 4007, 3321, 3286, 0, 0, + 4059, 3325, 3326, 3327, 3329, 3330, 3331, 3332, 3333, 3334, + 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3343, 3345, 3347, + 3349, 3351, 3353, 3355, 3357, 3359, 3361, 3363, 3365, 3367, + 3369, 3371, 3373, 3374, 3376, 3377, 3378, 3380, 4063, 1970, + 3382, 4078, 3384, 3385, 3386, 4079, 4058, 3390, 3391, 3392, + 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 4093, 2083, + 4095, 2081, 4092, 4091, 4089, 4082, 3407, 4088, 3977, 4103, + 3412, 0, 4007, 0, 3416, 3417, 0, 3418, 3420, 4111, + 3423, 3425, 0, 3427, 3428, 3429, 3430, 4119, 4117, 3945, + 3138, 3436, 0, 0, 0, 0, 0, 3955, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4128, 4129, + 3867, 4127, 0, 0, 0, 0, 0, 2083, 0, 2081, + 4126, 0, 0, 0, 0, 0, 3458, 3459, 3929, 0, + 3463, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3438, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4076, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4054, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1732, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 3499, 0, 957, 0, 0, 3540, 945, 958, 959, + 960, 961, 946, 0, 0, 947, 948, 0, 949, 0, + 0, 3514, 1820, 0, 3515, 3516, 3517, 0, 0, 0, + 0, 0, 954, 962, 963, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3559, 0, + 0, 3563, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3574, 0, + 0, 3260, 3261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 964, 965, 966, 967, 968, 969, 970, + 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, + 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, + 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003, 1004, 1005, 0, 940, 0, 0, 0, + 0, 0, 3597, 0, 0, 0, 0, 0, 0, 0, + 1974, 0, 0, 0, 0, 3605, 0, 0, 0, 0, + 0, 0, 0, 3612, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3262, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 195, 0, 0, 195, 0, 0, 0, 712, + 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3263, 3264, 0, 718, 195, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3810, 0, 0, 0, 0, 0, 0, - 0, 0, 3817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3827, 3828, 0, 3830, 0, 3831, 3832, 0, - 0, 0, 3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3817, 0, 0, 0, 0, 0, 0, 0, 0, 3824, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3834, + 3835, 0, 3837, 0, 3838, 3839, 0, 0, 0, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, - 3853, 3854, 3855, 3856, 0, 3858, 3861, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2032, 2033, 2034, - 2035, 3870, 3871, 3872, 3873, 3874, 3876, 3877, 3879, 3881, - 3882, 3884, 2043, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2082, 2083, 3914, - 0, 0, 0, 2106, 1045, 1045, 2110, 0, 0, 0, - 2115, 0, 0, 1792, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2127, 2128, 2129, 2130, 2131, - 2132, 2133, 2134, 2135, 2136, 0, 2138, 0, 0, 0, - 2160, 2161, 2162, 2163, 2164, 2165, 2167, 0, 2172, 0, - 2174, 2175, 2176, 0, 2178, 2179, 2180, 0, 2183, 2184, - 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, - 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, - 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, - 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, - 2225, 2226, 2227, 2228, 2232, 2233, 2234, 2235, 2236, 2237, - 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, - 2248, 2249, 2250, 2251, 2252, 2253, 2254, 0, 0, 0, - 0, 0, 2260, 0, 2262, 0, 2269, 2270, 2271, 2272, - 2273, 2274, 1045, 0, 1045, 1045, 1045, 1045, 1045, 0, - 0, 0, 0, 0, 0, 2286, 2287, 2288, 2289, 2290, - 2291, 2292, 2293, 0, 2295, 2296, 2297, 2298, 2299, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 84, 43, 44, 86, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1045, 3939, 0, 90, 0, 0, 0, 47, - 75, 76, 0, 73, 77, 0, 0, 0, 0, 0, - 0, 0, 74, 0, 2337, 2338, 0, 3955, 0, 0, - 0, 0, 0, 3956, 3957, 0, 188, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2902, 0, 0, - 2376, 61, 0, 0, 0, 3968, 0, 0, 0, 0, - 127, 0, 149, 93, 937, 0, 0, 0, 0, 0, - 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, - 0, 3994, 3995, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4002, 4004, 4006, 0, 0, - 193, 0, 193, 0, 160, 193, 0, 0, 0, 0, - 148, 2418, 0, 0, 0, 0, 0, 0, 0, 0, - 4034, 0, 0, 0, 0, 695, 0, 0, 0, 167, - 0, 715, 168, 0, 0, 0, 0, 716, 0, 716, - 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1834, 1835, 159, 158, 187, 0, 0, 4053, 716, - 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 715, 0, 715, 0, 0, 0, 0, 0, - 1492, 0, 4076, 4078, 4080, 0, 0, 0, 0, 0, - 0, 0, 50, 53, 56, 55, 58, 0, 72, 0, - 0, 81, 78, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 60, 89, 88, 0, 0, - 70, 71, 57, 4113, 4114, 0, 0, 0, 79, 80, - 0, 0, 0, 0, 0, 153, 1836, 156, 0, 1833, - 0, 154, 155, 0, 0, 0, 0, 0, 171, 0, - 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62, 63, 0, 64, 65, 66, 67, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1492, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2586, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2592, 2593, 2594, 2595, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 0, 0, 193, 0, 0, - 0, 716, 716, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 193, 0, 1505, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, - 193, 0, 0, 0, 0, 0, 0, 157, 0, 0, - 0, 0, 716, 0, 0, 0, 0, 0, 0, 193, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, - 0, 0, 0, 92, 0, 0, 0, 0, 0, 1492, - 0, 0, 0, 0, 0, 716, 716, 0, 716, 0, - 716, 716, 0, 716, 716, 716, 716, 716, 716, 0, - 0, 0, 0, 0, 0, 0, 1492, 0, 0, 1492, - 716, 1492, 193, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 150, 0, 0, 151, 0, - 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 716, 0, 193, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, - 0, 716, 1725, 193, 0, 175, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, - 193, 0, 0, 0, 0, 0, 0, 193, 0, 0, - 0, 0, 0, 0, 0, 0, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 716, 183, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, - 169, 166, 172, 173, 174, 176, 178, 179, 180, 181, - 0, 0, 0, 0, 0, 182, 184, 185, 186, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 715, 1408, 715, 715, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 716, 716, 0, 0, 0, 0, 0, 0, 0, 2964, - 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, - 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, - 0, 1045, 0, 0, 2991, 2992, 0, 0, 2994, 0, - 0, 2996, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3003, 3004, 3005, 0, 0, 0, 0, 0, 0, - 0, 716, 0, 3010, 0, 0, 3012, 3013, 3014, 0, - 0, 1492, 3015, 3016, 0, 0, 3017, 0, 3018, 0, - 0, 0, 0, 0, 0, 3019, 0, 3020, 1492, 0, - 0, 3021, 0, 3022, 0, 0, 3023, 0, 3024, 0, - 3025, 0, 3026, 0, 3027, 0, 3028, 0, 3029, 0, - 3030, 0, 3031, 0, 3032, 0, 3033, 0, 3034, 0, - 3035, 0, 3036, 0, 3037, 0, 3038, 0, 3039, 0, - 3040, 0, 0, 0, 3041, 0, 3042, 0, 3043, 0, - 0, 3044, 0, 3045, 0, 3046, 0, 2232, 3048, 0, - 0, 3050, 0, 1491, 3052, 3053, 3054, 3055, 0, 0, - 0, 0, 3056, 2232, 2232, 2232, 2232, 2232, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3066, 0, - 0, 0, 0, 0, 0, 0, 3079, 0, 0, 3083, - 0, 1045, 0, 0, 0, 0, 0, 0, 3086, 3087, - 3088, 3089, 3090, 3091, 0, 0, 0, 3092, 3093, 0, - 3094, 0, 3095, 0, 715, 715, 0, 0, 0, 0, - 0, 0, 2280, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 715, 0, 0, 0, 0, 0, 0, 3126, 0, 0, - 0, 0, 0, 0, 0, 715, 193, 0, 0, 0, - 0, 716, 0, 0, 0, 0, 1807, 0, 0, 0, - 0, 0, 3156, 0, 0, 0, 1816, 0, 0, 0, - 0, 0, 0, 0, 0, 193, 0, 0, 716, 0, - 0, 0, 0, 0, 0, 0, 0, 1684, 193, 715, - 0, 1842, 716, 0, 0, 2280, 193, 0, 193, 1851, - 193, 193, 1491, 1853, 0, 0, 1856, 1857, 715, 715, - 0, 715, 0, 715, 715, 716, 715, 715, 715, 715, - 715, 715, 0, 3219, 0, 0, 0, 0, 0, 1491, - 1888, 1889, 1491, 715, 1491, 0, 1894, 0, 0, 0, - 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, + 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, + 3863, 0, 3865, 3868, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3877, 3878, + 3879, 3880, 3881, 3883, 3884, 3886, 3888, 3889, 3891, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2039, + 2040, 2041, 2042, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2050, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3921, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2089, + 2090, 0, 0, 0, 0, 2113, 1050, 1050, 2117, 0, + 0, 0, 2122, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2134, 2135, 2136, + 2137, 2138, 2139, 2140, 2141, 2142, 2143, 0, 2145, 0, + 0, 0, 2167, 2168, 2169, 2170, 2171, 2172, 2174, 0, + 2179, 0, 2181, 2182, 2183, 0, 2185, 2186, 2187, 0, + 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, + 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, + 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, + 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, + 2230, 2231, 2232, 2233, 2234, 2235, 2239, 2240, 2241, 2242, + 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, + 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 0, + 0, 0, 0, 0, 2267, 0, 2269, 0, 2276, 2277, + 2278, 2279, 2280, 2281, 1050, 0, 1050, 1050, 1050, 1050, + 1050, 0, 0, 0, 0, 0, 0, 2293, 2294, 2295, + 2296, 2297, 2298, 2299, 2300, 0, 2302, 2303, 2304, 2305, + 2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3946, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3942, 0, 0, + 0, 0, 0, 0, 3962, 1050, 0, 0, 4062, 0, + 3963, 3964, 190, 0, 0, 0, 0, 0, 1783, 0, + 0, 0, 0, 0, 0, 0, 0, 2344, 2345, 0, + 0, 0, 3975, 0, 0, 0, 129, 0, 151, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 0, 0, 0, 2383, 190, 0, 0, 0, 4001, 4002, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4009, 4011, 4013, 0, 0, 0, 129, 0, + 162, 0, 0, 0, 0, 0, 150, 0, 0, 0, + 0, 172, 0, 0, 0, 0, 0, 4041, 0, 0, + 0, 0, 0, 0, 0, 169, 0, 0, 170, 0, + 0, 0, 0, 0, 2425, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 138, 139, 161, + 160, 189, 0, 0, 0, 4060, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, + 170, 0, 86, 44, 45, 88, 0, 195, 0, 195, + 0, 0, 195, 0, 1771, 0, 0, 0, 0, 4083, + 4085, 4087, 92, 189, 0, 0, 48, 76, 77, 0, + 74, 78, 0, 0, 0, 0, 0, 0, 0, 75, + 0, 0, 0, 0, 718, 0, 718, 718, 0, 0, + 0, 0, 4108, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 718, 195, 62, 0, + 4120, 4121, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 0, 155, 136, 158, 143, 135, 0, 156, 157, + 0, 0, 0, 0, 0, 173, 0, 1498, 1784, 0, + 0, 0, 0, 0, 179, 144, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, + 145, 140, 141, 142, 146, 0, 83, 0, 0, 0, + 0, 137, 0, 0, 0, 0, 0, 173, 0, 0, + 148, 0, 0, 0, 0, 0, 179, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1797, 1800, 1801, 1802, 1803, 1804, 1805, 0, 1806, 1807, + 1809, 1810, 1808, 1811, 1812, 1785, 1786, 1787, 1788, 1769, + 1770, 1798, 0, 1772, 0, 1773, 1774, 1775, 1776, 1777, + 1778, 1779, 1780, 1781, 0, 0, 1782, 1789, 1790, 1791, + 1792, 0, 1793, 1794, 1795, 1796, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 54, 57, 56, 59, 0, 73, 0, 164, 82, + 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 61, 91, 90, 0, 0, 71, 72, + 58, 0, 0, 0, 0, 0, 80, 81, 0, 2593, + 164, 0, 0, 0, 0, 0, 0, 0, 0, 2599, + 2600, 2601, 2602, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1498, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, + 0, 65, 66, 67, 68, 0, 0, 0, 0, 0, + 0, 0, 1511, 0, 159, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 195, 0, 0, 0, 718, 718, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60, 0, 0, 0, 0, 195, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, + 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1799, 718, 0, 0, 0, 0, 0, 0, 195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 152, 0, 0, 153, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, + 0, 0, 89, 0, 0, 165, 0, 0, 0, 1498, + 0, 0, 177, 0, 0, 718, 718, 0, 718, 0, + 718, 718, 0, 718, 718, 718, 718, 718, 718, 0, + 0, 0, 0, 0, 0, 1732, 1498, 0, 0, 1498, + 718, 1498, 195, 0, 0, 0, 0, 165, 0, 0, + 0, 0, 0, 185, 177, 0, 0, 0, 0, 0, + 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 718, 0, 195, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 718, 0, 195, 0, 185, 166, 171, 168, 174, + 175, 176, 178, 180, 181, 182, 183, 0, 0, 0, + 195, 94, 184, 186, 187, 188, 0, 195, 0, 0, + 0, 0, 0, 0, 0, 0, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 718, 0, 0, 166, 171, + 168, 174, 175, 176, 178, 180, 181, 182, 183, 0, + 0, 0, 0, 0, 184, 186, 187, 188, 0, 0, + 0, 0, 0, 0, 0, 0, 939, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1783, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, + 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2971, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1050, 0, 0, 2998, 2999, 0, + 0, 3001, 0, 0, 3003, 0, 717, 0, 717, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 718, 718, 0, 3010, 3011, 3012, 0, 0, 0, + 0, 0, 0, 0, 718, 0, 3017, 0, 0, 3019, + 3020, 3021, 0, 195, 0, 3022, 3023, 0, 0, 3024, + 1771, 3025, 0, 0, 0, 0, 0, 0, 3026, 0, + 3027, 0, 0, 0, 3028, 0, 3029, 0, 0, 3030, + 0, 3031, 0, 3032, 0, 3033, 0, 3034, 0, 3035, + 0, 3036, 0, 3037, 0, 3038, 0, 3039, 0, 3040, + 0, 3041, 718, 3042, 0, 3043, 0, 3044, 0, 3045, + 0, 3046, 1498, 3047, 0, 0, 0, 3048, 0, 3049, + 0, 3050, 0, 0, 3051, 0, 3052, 0, 3053, 1498, + 2239, 3055, 0, 0, 3057, 0, 0, 3059, 3060, 3061, + 3062, 0, 0, 0, 1784, 3063, 2239, 2239, 2239, 2239, + 2239, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3073, 0, 0, 0, 0, 0, 0, 0, 3086, + 0, 0, 3090, 0, 1050, 0, 0, 0, 0, 0, + 0, 3093, 3094, 3095, 3096, 3097, 3098, 0, 0, 0, + 3099, 3100, 0, 3101, 0, 3102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1797, 1800, 1801, 1802, + 1803, 1804, 1805, 0, 1806, 1807, 1809, 1810, 1808, 1811, + 1812, 1785, 1786, 1787, 1788, 1769, 1770, 1798, 0, 1772, + 0, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, + 3133, 0, 1782, 1789, 1790, 1791, 1792, 0, 1793, 1794, + 1795, 1796, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2287, 0, 3163, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 957, 0, + 2275, 0, 0, 958, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2082, 0, 0, 0, 195, 0, 0, + 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3226, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, + 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 195, 0, 0, 0, 718, 0, 0, 2287, 195, 0, + 195, 0, 195, 195, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 718, 964, 965, + 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, + 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, + 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, + 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, + 0, 3315, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 718, 3324, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1799, 0, 0, + 0, 718, 0, 0, 0, 0, 0, 718, 0, 190, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1837, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 129, 0, 151, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, + 0, 0, 0, 0, 718, 0, 0, 0, 0, 718, + 0, 0, 0, 718, 718, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, + 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 195, 169, 0, 0, 170, 0, 0, 195, 0, + 0, 0, 0, 0, 0, 0, 0, 195, 195, 0, + 0, 195, 0, 195, 1841, 1842, 161, 160, 189, 0, + 0, 0, 195, 0, 717, 1414, 717, 717, 0, 195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, + 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, + 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, + 0, 0, 3521, 0, 0, 0, 0, 1497, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3545, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, + 1843, 158, 0, 1840, 0, 156, 157, 0, 0, 0, + 0, 0, 173, 1498, 0, 2287, 0, 0, 0, 0, + 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3565, 0, 3566, 0, 0, 3567, 0, 0, 3570, 3571, + 0, 0, 0, 0, 0, 0, 0, 3575, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3576, 0, 3577, 0, 3578, 0, 3579, 0, 3580, + 0, 3581, 0, 3582, 0, 3583, 0, 3584, 0, 3585, + 0, 3586, 0, 3587, 0, 3588, 0, 3589, 0, 3590, + 0, 3591, 0, 0, 3592, 0, 0, 0, 3593, 0, + 3594, 0, 0, 0, 0, 0, 3596, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3613, + 0, 0, 0, 0, 0, 164, 0, 0, 3618, 0, + 3619, 3620, 0, 3621, 0, 3622, 0, 1497, 0, 0, + 3623, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3648, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3656, 0, 0, 3658, + 0, 0, 0, 896, 0, 0, 0, 0, 0, 0, + 0, 3662, 0, 0, 0, 0, 0, 0, 717, 717, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3796, + 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, + 0, 159, 0, 0, 0, 195, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 718, 717, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, + 0, 716, 717, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1814, 0, 0, 0, 0, 0, 0, + 0, 195, 0, 1823, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1007, 0, 0, 715, 0, - 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, - 0, 1956, 0, 0, 715, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, - 0, 0, 0, 0, 0, 716, 1074, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3308, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, - 0, 0, 3317, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 717, 0, 1849, 0, + 0, 0, 0, 1075, 0, 1082, 1858, 0, 0, 1497, + 1860, 0, 0, 1863, 1864, 717, 717, 0, 717, 0, + 717, 717, 0, 717, 717, 717, 717, 717, 717, 152, + 0, 0, 153, 0, 0, 0, 1497, 1895, 1896, 1497, + 717, 1497, 3904, 1901, 718, 0, 0, 0, 0, 0, + 195, 0, 0, 0, 0, 0, 0, 195, 0, 0, + 0, 0, 165, 0, 0, 0, 0, 0, 0, 177, + 0, 718, 0, 0, 0, 717, 0, 0, 718, 0, + 0, 0, 0, 0, 0, 0, 0, 718, 1963, 897, + 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1498, 0, 0, 0, 0, 0, 0, + 185, 0, 0, 0, 0, 0, 195, 195, 195, 195, + 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, + 195, 195, 0, 0, 0, 193, 0, 0, 664, 0, + 0, 0, 0, 166, 171, 168, 174, 175, 176, 178, + 180, 181, 182, 183, 0, 195, 0, 0, 664, 184, + 186, 187, 188, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1032, 0, 0, 0, 718, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1051, 1051, 0, 0, 0, 0, 0, 0, 0, + 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, + 0, 0, 0, 0, 0, 3944, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3958, 0, 0, 3959, 0, 3960, 0, 0, 0, + 0, 717, 717, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, + 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1497, 0, 0, 0, 0, 0, 0, 0, + 4039, 2091, 0, 0, 718, 0, 0, 0, 0, 1497, + 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, + 0, 0, 718, 0, 0, 0, 0, 0, 0, 4055, + 0, 4056, 0, 4057, 0, 0, 718, 0, 0, 0, + 1498, 0, 0, 718, 718, 1498, 195, 195, 195, 195, + 195, 0, 0, 0, 0, 0, 0, 0, 195, 0, + 0, 0, 0, 0, 195, 0, 195, 0, 0, 195, + 195, 195, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4106, 0, 4107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, + 0, 1498, 0, 0, 0, 0, 718, 0, 0, 0, + 0, 195, 0, 717, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 716, 0, 0, 0, 0, 716, 0, 0, - 0, 716, 716, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, - 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, - 0, 0, 0, 0, 0, 193, 193, 0, 0, 193, - 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, - 193, 0, 0, 0, 0, 0, 0, 193, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 895, - 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, - 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 715, 715, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, - 0, 0, 0, 0, 191, 0, 0, 662, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 662, 0, 3514, - 0, 1492, 0, 2280, 0, 0, 0, 0, 0, 0, - 0, 0, 1027, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 715, 0, 0, 0, 0, 1046, - 1046, 0, 3538, 0, 1491, 0, 0, 0, 662, 0, - 0, 0, 0, 2084, 0, 0, 0, 0, 0, 0, - 0, 1491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3558, 0, 3559, - 0, 0, 3560, 0, 0, 3563, 3564, 0, 0, 0, - 0, 0, 0, 0, 3568, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3569, 0, - 3570, 0, 3571, 0, 3572, 0, 3573, 0, 3574, 0, - 3575, 0, 3576, 0, 3577, 0, 3578, 0, 3579, 0, - 3580, 0, 3581, 0, 3582, 0, 3583, 0, 3584, 0, - 0, 3585, 0, 0, 0, 3586, 0, 3587, 0, 0, - 0, 0, 0, 3589, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 715, 3606, 0, 0, 0, - 0, 0, 0, 0, 0, 3611, 0, 3612, 3613, 0, - 3614, 0, 3615, 0, 0, 0, 0, 3616, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, - 0, 0, 3641, 193, 715, 0, 0, 0, 0, 0, - 0, 0, 0, 3649, 716, 0, 3651, 0, 0, 0, - 0, 0, 0, 0, 0, 716, 0, 0, 3655, 0, - 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 715, 3789, 0, 715, 193, - 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, - 0, 0, 0, 0, 0, 0, 1194, 0, 1200, 0, - 0, 1202, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 716, 0, 0, 715, 0, 0, 193, 0, - 0, 0, 2440, 2441, 2442, 193, 1421, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, - 0, 0, 715, 0, 0, 0, 716, 0, 715, 1851, - 0, 0, 1851, 0, 1851, 716, 0, 0, 0, 0, - 2472, 0, 0, 0, 0, 0, 0, 0, 0, 3897, - 0, 1492, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 193, 193, 193, 193, 193, 0, - 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, - 715, 0, 0, 0, 715, 715, 0, 0, 193, 193, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, - 0, 0, 0, 894, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, - 662, 0, 0, 662, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3937, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1491, 0, 715, 0, 0, 0, - 714, 0, 0, 0, 0, 0, 0, 0, 662, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3951, 716, - 0, 3952, 0, 3953, 0, 0, 0, 0, 1493, 0, - 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1070, 0, 1077, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1737, 0, 0, 0, - 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1754, 193, 0, 0, 0, - 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 716, 0, 0, 0, 1492, 0, - 0, 716, 716, 1492, 193, 193, 193, 193, 193, 0, - 0, 0, 0, 0, 0, 0, 193, 4032, 0, 0, - 0, 0, 193, 0, 193, 0, 0, 193, 193, 193, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4048, 0, 4049, 0, - 4050, 0, 0, 0, 0, 0, 0, 0, 1893, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 716, 0, 0, 1492, - 0, 0, 0, 1938, 716, 0, 0, 0, 0, 193, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, - 4099, 0, 4100, 0, 0, 0, 1974, 715, 1493, 0, - 0, 0, 193, 1978, 0, 193, 0, 0, 715, 0, - 0, 0, 0, 0, 1989, 1990, 1991, 1992, 1993, 1994, - 1995, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2853, 0, 662, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1027, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, - 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 662, 0, 716, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 715, 0, 0, 0, 0, 0, 0, 715, - 0, 0, 0, 1851, 1851, 0, 0, 0, 715, 0, - 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1491, 2926, 0, 1493, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1493, 0, 0, 1493, 0, 1493, - 662, 0, 0, 0, 0, 0, 0, 0, 2025, 0, - 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1910, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 662, 0, 0, 0, 193, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, - 0, 1962, 0, 0, 0, 0, 0, 0, 0, 193, - 0, 0, 193, 193, 193, 0, 0, 0, 662, 0, - 0, 0, 716, 716, 0, 662, 0, 0, 0, 0, - 0, 0, 0, 0, 1987, 1988, 662, 662, 662, 662, - 662, 662, 662, 0, 0, 0, 0, 715, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, - 716, 716, 716, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1830, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, - 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 0, 0, 0, 0, 0, 0, 1257, - 0, 1257, 1257, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1420, 715, 160, 0, 0, 0, 0, 0, 148, - 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, - 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, - 1834, 1835, 159, 158, 187, 0, 0, 0, 0, 0, - 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, - 662, 193, 0, 0, 0, 0, 0, 715, 0, 0, - 0, 1491, 0, 0, 715, 715, 1491, 0, 0, 0, - 1492, 0, 0, 0, 2343, 716, 0, 716, 0, 0, - 0, 0, 2347, 0, 2350, 0, 0, 2025, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1493, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1046, 1046, 0, 0, 0, 1493, 3204, 0, 0, - 0, 0, 0, 0, 153, 1836, 156, 716, 1833, 0, - 154, 155, 0, 0, 0, 0, 0, 171, 0, 715, - 193, 0, 1491, 716, 0, 0, 177, 715, 0, 0, - 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3283, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, - 0, 0, 0, 716, 716, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1046, - 1962, 1046, 1046, 1046, 1046, 1046, 0, 0, 0, 0, - 0, 0, 716, 1687, 1688, 0, 0, 0, 0, 0, - 162, 0, 0, 0, 0, 2025, 0, 0, 0, 0, - 0, 0, 2507, 0, 0, 0, 0, 0, 0, 0, - 0, 2524, 2525, 0, 1910, 2529, 0, 0, 0, 1731, - 0, 0, 715, 0, 0, 0, 2534, 0, 0, 1046, - 0, 0, 0, 2537, 1749, 0, 0, 0, 0, 0, - 0, 0, 0, 1027, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 662, 0, 0, 2540, - 0, 0, 0, 1962, 662, 0, 662, 0, 662, 2366, - 0, 0, 0, 0, 0, 0, 0, 0, 1070, 0, - 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1859, 1859, 0, - 1859, 0, 1859, 1859, 0, 1868, 1859, 1859, 1859, 1859, - 1859, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 716, 0, 1070, 0, 0, 0, 0, 0, 0, 0, - 0, 3482, 0, 0, 0, 0, 193, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 716, 193, 0, 1936, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1960, 0, 715, 715, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 150, 0, 0, 151, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1257, 0, 0, - 0, 0, 715, 715, 715, 715, 0, 163, 716, 0, - 0, 0, 0, 0, 175, 0, 0, 0, 1492, 0, - 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 716, 2280, 0, 662, 0, 0, - 0, 0, 0, 0, 662, 183, 0, 0, 0, 0, - 0, 0, 0, 662, 662, 0, 716, 662, 0, 2531, - 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, - 193, 716, 0, 0, 0, 662, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 164, 169, - 166, 172, 173, 174, 176, 178, 179, 180, 181, 0, - 0, 662, 0, 0, 182, 184, 185, 186, 0, 0, - 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, - 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1257, 1257, 716, 0, 716, 0, 0, 0, - 0, 0, 0, 0, 0, 2013, 0, 0, 0, 0, - 0, 0, 0, 1491, 0, 0, 0, 0, 715, 1493, - 715, 1962, 0, 0, 0, 0, 93, 0, 0, 955, - 2840, 0, 0, 943, 956, 957, 958, 959, 944, 0, - 0, 945, 946, 0, 947, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 952, 960, - 961, 0, 0, 2070, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 715, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, - 0, 0, 0, 0, 2889, 0, 3253, 3254, 0, 715, - 0, 0, 0, 0, 0, 0, 0, 0, 962, 963, - 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, - 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, - 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, - 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, + 0, 0, 0, 0, 195, 0, 0, 195, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1262, 717, 1262, 1262, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1426, 0, 0, 0, 0, 0, 0, + 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 717, 0, 0, 717, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2938, 2939, 2940, 2941, 2942, 0, 0, 0, 0, 0, - 0, 0, 715, 0, 0, 0, 715, 715, 0, 0, - 0, 0, 0, 0, 2025, 2952, 0, 0, 0, 0, - 0, 3255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 715, 0, 0, 0, 2960, - 0, 0, 0, 0, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, - 0, 1910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2317, 0, 0, 0, 0, 3256, 3257, + 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, - 2329, 0, 662, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1731, 0, 0, 1257, 0, 0, + 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, + 0, 2447, 2448, 2449, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1070, 0, 0, + 0, 717, 0, 0, 0, 0, 0, 717, 1858, 0, + 0, 1858, 0, 1858, 0, 0, 0, 0, 0, 2479, + 664, 0, 664, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, - 0, 0, 908, 0, 0, 0, 0, 0, 912, 0, - 0, 0, 909, 910, 0, 0, 662, 911, 913, 0, - 0, 0, 0, 2895, 0, 0, 0, 715, 0, 0, - 0, 0, 0, 0, 1077, 0, 0, 0, 0, 0, + 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 717, 0, 0, 0, 0, 717, + 0, 0, 0, 717, 717, 0, 0, 0, 0, 0, + 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, + 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 195, 0, 0, 195, 195, 195, 0, 0, 0, + 0, 0, 0, 0, 718, 718, 0, 0, 0, 0, + 1499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1070, 0, 0, 0, 0, 0, 1077, 0, 1493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 662, 662, 662, 662, 662, 0, 0, 0, + 0, 718, 718, 718, 718, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1693, 1694, 0, 0, 0, + 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 715, 0, 0, 0, 0, 662, 662, 0, 0, - 0, 1491, 0, 715, 1070, 0, 0, 0, 0, 2070, - 0, 0, 0, 2070, 2070, 0, 0, 0, 0, 0, - 0, 662, 0, 0, 0, 0, 0, 715, 715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1046, 715, + 0, 0, 0, 0, 1738, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3209, + 0, 0, 0, 1497, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, - 0, 0, 0, 0, 0, 3247, 0, 0, 0, 0, - 0, 0, 0, 0, 2543, 0, 0, 93, 715, 3259, - 955, 0, 0, 0, 943, 956, 957, 958, 959, 944, - 0, 0, 945, 946, 0, 947, 0, 715, 3276, 715, - 0, 3279, 0, 0, 0, 0, 0, 0, 0, 952, - 960, 961, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1866, 1866, 0, 1866, 0, 1866, 1866, 0, + 1875, 1866, 1866, 1866, 1866, 1866, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1075, 0, 0, + 1499, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1257, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3253, 3254, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1046, 962, - 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, - 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, - 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, - 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, - 1003, 0, 0, 0, 662, 0, 0, 0, 0, 0, + 0, 0, 1498, 0, 0, 0, 0, 718, 0, 718, + 0, 0, 1943, 0, 95, 0, 0, 957, 0, 0, + 0, 945, 958, 959, 960, 961, 946, 0, 1967, 947, + 948, 0, 949, 0, 0, 0, 0, 664, 0, 0, + 0, 0, 0, 0, 0, 0, 954, 962, 963, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1493, 0, 0, 0, - 0, 1493, 662, 662, 662, 662, 662, 0, 0, 0, - 3431, 0, 3255, 0, 3154, 0, 0, 0, 0, 0, - 1910, 0, 662, 0, 0, 662, 3162, 1962, 0, 0, + 1032, 0, 0, 0, 0, 0, 0, 0, 0, 718, + 0, 0, 1262, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 195, 664, 0, 718, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3260, 3261, 0, 718, 0, + 0, 0, 664, 0, 0, 0, 0, 964, 965, 966, + 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, + 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 0, + 0, 0, 1499, 0, 0, 0, 717, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, + 0, 718, 0, 0, 0, 718, 718, 0, 0, 1499, + 0, 0, 1499, 0, 1499, 664, 0, 0, 0, 0, + 3262, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 718, 1917, 0, 0, 0, 0, + 0, 0, 2860, 0, 0, 0, 0, 0, 0, 0, + 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1969, 0, 1262, 1262, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2020, 0, 664, 0, 0, 0, 0, 0, 0, + 664, 0, 0, 0, 717, 0, 0, 3263, 3264, 1994, + 1995, 664, 664, 664, 664, 664, 664, 664, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 717, 0, 0, 0, 0, 0, 0, 717, 0, + 0, 0, 1858, 1858, 0, 0, 0, 717, 0, 2077, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1497, 2933, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, + 0, 910, 0, 0, 0, 0, 0, 914, 195, 0, + 0, 911, 912, 0, 0, 0, 913, 915, 0, 0, + 0, 0, 0, 0, 0, 0, 718, 195, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 718, 0, 0, 0, 0, 0, 717, 0, 0, 0, + 1498, 0, 718, 0, 0, 0, 664, 0, 0, 0, + 1262, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 718, 2287, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2324, + 0, 0, 195, 718, 0, 1499, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1051, 1051, 0, + 0, 0, 1499, 0, 0, 0, 0, 2336, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1738, 0, 0, 1262, 718, 0, 0, 0, 0, + 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 717, 1075, 0, 0, 718, 0, 0, + 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 718, 0, 718, 0, + 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, + 0, 1082, 0, 0, 0, 0, 717, 0, 0, 0, + 1497, 0, 0, 717, 717, 1497, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1075, 0, + 0, 0, 0, 0, 1082, 1051, 1969, 1051, 1051, 1051, + 1051, 1051, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 957, 0, + 0, 0, 0, 958, 0, 0, 3211, 0, 0, 0, + 1917, 1075, 0, 2082, 0, 0, 2077, 0, 0, 0, + 2077, 2077, 0, 0, 0, 0, 1051, 0, 717, 0, + 0, 1497, 0, 0, 0, 0, 717, 0, 0, 0, + 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, + 1969, 664, 0, 664, 0, 664, 2373, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3290, 964, 965, + 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, + 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, + 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, + 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, + 0, 2550, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1262, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, + 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, + 664, 664, 0, 0, 664, 0, 2538, 0, 0, 0, + 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, + 3489, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 717, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1493, 0, 3256, - 3257, 0, 0, 0, 0, 3492, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 662, 0, 0, 0, 3507, 0, 0, 3508, 3509, - 3510, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 662, 0, 0, 662, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2788, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 717, 717, 717, 717, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1499, 0, 1969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2795, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2329, 662, 0, 0, 0, 0, 0, 2910, 0, - 0, 0, 0, 0, 0, 0, 0, 2915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 1497, 0, 0, 0, 0, 717, 2336, 717, + 0, 0, 0, 0, 0, 2917, 0, 0, 0, 0, + 0, 0, 0, 0, 2922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, - 662, 662, 662, 0, 0, 0, 0, 0, 2070, 0, + 664, 0, 0, 0, 0, 0, 0, 0, 1917, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3677, 3679, 3678, 3742, 3743, 3744, 3745, - 3746, 3747, 3748, 787, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2070, 0, 0, 0, + 0, 0, 0, 0, 664, 0, 0, 0, 0, 664, + 0, 0, 0, 0, 0, 2077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 717, 0, 2077, 0, 717, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, + 2902, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1499, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, + 664, 664, 664, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 664, 664, 0, 0, 0, 3075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1262, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3068, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1866, 0, 0, 0, 1051, 0, 0, 0, 0, + 0, 0, 717, 0, 0, 0, 0, 0, 0, 3118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1859, 0, 0, 0, 0, 1910, + 0, 0, 0, 1262, 0, 0, 0, 0, 0, 0, + 3145, 1866, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3111, 0, 0, 0, 0, 0, 1493, 0, - 0, 0, 0, 0, 0, 0, 1257, 0, 0, 0, - 0, 0, 0, 3138, 1859, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3691, 3692, 0, 0, 3767, 3766, 3765, - 0, 0, 3763, 3764, 3762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1070, 0, - 0, 3935, 0, 0, 0, 0, 2329, 3768, 908, 0, - 763, 764, 3769, 3770, 912, 3771, 766, 767, 909, 910, - 0, 761, 765, 911, 913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3674, - 3675, 3676, 3680, 3681, 3682, 3693, 3740, 3741, 3749, 3751, - 864, 3750, 3752, 3753, 3754, 3757, 3758, 3759, 3760, 3755, - 3756, 3761, 3657, 3661, 3658, 3659, 3660, 3672, 3662, 3663, - 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3673, 3772, - 3773, 3774, 3775, 3776, 3777, 3686, 3690, 3689, 3687, 3688, - 3684, 3685, 3712, 3711, 3713, 3714, 3715, 3716, 3717, 3718, - 3720, 3719, 3721, 3722, 3723, 3724, 3725, 3726, 3694, 3695, - 3698, 3699, 3697, 3696, 3700, 3709, 3710, 3701, 3702, 3703, - 3704, 3705, 3706, 3708, 3707, 3727, 3728, 3729, 3730, 3731, - 3733, 3732, 3736, 3737, 3735, 3734, 3739, 3738, 0, 0, - 0, 3396, 0, 0, 0, 0, 0, 0, 0, 0, - 914, 0, 915, 0, 0, 919, 0, 0, 0, 921, - 920, 0, 922, 884, 883, 0, 0, 916, 917, 0, - 918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 717, 0, 0, 0, 0, 1075, 0, 0, 0, 0, + 1497, 0, 717, 2336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 717, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1051, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1910, 3778, 3779, 3780, 3781, 3782, - 3783, 3784, 3785, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, + 0, 0, 0, 1499, 0, 0, 0, 0, 1499, 664, + 664, 664, 664, 664, 0, 0, 0, 717, 0, 0, + 0, 3161, 0, 0, 0, 0, 0, 1917, 0, 664, + 0, 0, 664, 3169, 1969, 0, 717, 0, 717, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2329, 2329, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1499, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, + 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1493, 0, 0, 0, - 0, 3546, 3547, 3548, 3549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2336, 2336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3553, 3554, + 3555, 3556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1962, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3645, 0, 3647, + 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 664, 0, 0, 664, 664, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3812, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1257, 0, + 0, 0, 0, 0, 3652, 0, 3654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3819, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3885, 0, 0, 0, 3885, 3885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3892, 0, + 0, 0, 3892, 3892, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2336, 0, 0, 0, 1499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2726,4462 +2697,4530 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2329, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3962, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1257, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4008, 0, + 0, 0, 0, 0, 0, 0, 0, 3969, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1262, 1262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4015, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3962, 0, 0, 0, 0, + 4023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 390, 3396, 0, 4016, 1391, - 1377, 518, 0, 1320, 1394, 1289, 1308, 1404, 1311, 1314, - 1356, 1267, 1334, 409, 1305, 1260, 1293, 1262, 1300, 1263, - 1291, 1322, 267, 1288, 1379, 1338, 1393, 360, 264, 1269, - 1294, 423, 1310, 201, 1358, 479, 249, 371, 368, 573, - 279, 270, 266, 247, 313, 379, 421, 508, 415, 1400, - 364, 1344, 0, 489, 394, 0, 0, 0, 1324, 1383, - 1332, 1370, 1319, 1357, 1277, 1343, 1395, 1306, 1353, 1396, - 319, 245, 321, 200, 406, 490, 283, 0, 0, 0, - 0, 3990, 939, 0, 0, 0, 0, 3991, 0, 0, - 0, 0, 235, 0, 0, 242, 0, 0, 0, 345, - 354, 353, 334, 335, 337, 339, 344, 351, 357, 1302, - 1350, 1390, 1303, 1352, 262, 317, 269, 261, 570, 1401, - 1382, 1266, 1331, 1389, 0, 0, 226, 1392, 1326, 0, - 1355, 0, 1407, 1261, 1346, 0, 1264, 1268, 1403, 1387, - 1297, 272, 0, 0, 0, 0, 0, 0, 0, 1323, - 1333, 1367, 1371, 1317, 0, 0, 0, 0, 0, 0, - 0, 0, 1295, 0, 1342, 0, 0, 0, 1273, 1265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1917, 3969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 664, 0, 0, 0, 2336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3403, 0, 4023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1321, 0, 0, 0, 0, 1276, 0, 1296, - 1368, 0, 1259, 294, 1270, 395, 254, 0, 446, 1375, - 1386, 1318, 614, 1388, 1316, 1315, 1362, 1274, 1381, 1309, - 359, 1272, 326, 195, 222, 0, 1307, 405, 454, 466, - 1380, 1292, 1301, 250, 1299, 464, 419, 592, 230, 281, - 451, 425, 462, 433, 284, 1341, 1360, 463, 366, 575, - 443, 589, 615, 616, 260, 399, 601, 512, 609, 633, - 223, 257, 413, 497, 595, 486, 391, 571, 572, 325, - 485, 292, 199, 363, 621, 221, 472, 365, 239, 228, - 577, 598, 286, 449, 628, 210, 507, 587, 236, 476, - 0, 0, 636, 244, 496, 212, 584, 495, 387, 322, - 323, 211, 0, 450, 265, 290, 0, 0, 255, 408, - 579, 580, 253, 637, 225, 608, 217, 1271, 607, 401, - 574, 585, 388, 377, 216, 583, 386, 376, 330, 349, - 350, 277, 303, 440, 369, 441, 302, 304, 397, 396, - 398, 204, 596, 0, 205, 0, 491, 597, 638, 445, - 209, 231, 232, 234, 1287, 276, 280, 288, 291, 299, - 300, 309, 361, 412, 439, 435, 444, 1376, 569, 590, - 602, 613, 619, 620, 622, 623, 624, 625, 626, 629, - 627, 400, 307, 487, 329, 367, 1365, 1406, 418, 465, - 237, 594, 488, 197, 1281, 1286, 1279, 0, 251, 252, - 1347, 565, 1282, 1280, 1336, 1337, 1283, 1397, 1398, 1399, - 1384, 639, 640, 641, 642, 643, 644, 645, 646, 647, - 648, 649, 650, 651, 652, 653, 654, 655, 656, 634, - 498, 504, 499, 500, 501, 502, 503, 0, 505, 1369, - 1275, 0, 1284, 1285, 1378, 581, 582, 657, 378, 478, - 591, 331, 343, 346, 336, 355, 0, 356, 332, 333, - 338, 340, 341, 342, 347, 348, 352, 358, 246, 207, - 384, 392, 568, 308, 213, 214, 215, 514, 515, 516, - 517, 605, 606, 610, 202, 455, 456, 457, 458, 289, - 600, 305, 461, 460, 327, 328, 373, 442, 530, 532, - 543, 547, 549, 551, 557, 560, 531, 533, 544, 548, - 550, 552, 558, 561, 520, 522, 524, 526, 539, 538, - 535, 563, 564, 541, 546, 525, 537, 542, 555, 562, - 559, 519, 523, 527, 536, 554, 553, 534, 545, 556, - 540, 528, 521, 529, 1340, 194, 218, 362, 1402, 447, - 285, 635, 604, 599, 203, 220, 1278, 259, 1290, 1298, - 0, 1304, 1312, 1313, 1325, 1327, 1328, 1329, 1330, 1348, - 1349, 1351, 1359, 1361, 1364, 1366, 1373, 1385, 1405, 196, - 198, 206, 219, 229, 233, 240, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 429, 430, 432, 434, 436, 448, 453, - 467, 468, 469, 470, 471, 474, 475, 480, 481, 482, - 483, 484, 492, 493, 506, 576, 578, 593, 611, 617, - 473, 297, 298, 437, 438, 310, 311, 631, 632, 296, - 588, 618, 586, 630, 612, 431, 372, 1339, 1345, 375, - 278, 301, 316, 1354, 603, 494, 224, 459, 287, 248, - 1372, 1374, 208, 243, 227, 256, 271, 274, 320, 385, - 393, 422, 427, 293, 268, 241, 452, 238, 477, 509, - 510, 511, 513, 389, 263, 426, 1335, 1363, 370, 566, - 567, 312, 390, 0, 0, 0, 1391, 1377, 518, 0, - 1320, 1394, 1289, 1308, 1404, 1311, 1314, 1356, 1267, 1334, - 409, 1305, 1260, 1293, 1262, 1300, 1263, 1291, 1322, 267, - 1288, 1379, 1338, 1393, 360, 264, 1269, 1294, 423, 1310, - 201, 1358, 479, 249, 371, 368, 573, 279, 270, 266, - 247, 313, 379, 421, 508, 415, 1400, 364, 1344, 0, - 489, 394, 0, 0, 0, 1324, 1383, 1332, 1370, 1319, - 1357, 1277, 1343, 1395, 1306, 1353, 1396, 319, 245, 321, - 200, 406, 490, 283, 0, 0, 0, 0, 0, 192, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 0, 0, 242, 0, 0, 0, 345, 354, 353, 334, - 335, 337, 339, 344, 351, 357, 1302, 1350, 1390, 1303, - 1352, 262, 317, 269, 261, 570, 1401, 1382, 1266, 1331, - 1389, 0, 0, 226, 1392, 1326, 0, 1355, 0, 1407, - 1261, 1346, 0, 1264, 1268, 1403, 1387, 1297, 272, 0, - 0, 0, 0, 0, 0, 0, 1323, 1333, 1367, 1371, - 1317, 0, 0, 0, 0, 0, 0, 3163, 0, 1295, - 0, 1342, 0, 0, 0, 1273, 1265, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1321, - 0, 0, 0, 0, 1276, 0, 1296, 1368, 0, 1259, - 294, 1270, 395, 254, 0, 446, 1375, 1386, 1318, 614, - 1388, 1316, 1315, 1362, 1274, 1381, 1309, 359, 1272, 326, - 195, 222, 0, 1307, 405, 454, 466, 1380, 1292, 1301, - 250, 1299, 464, 419, 592, 230, 281, 451, 425, 462, - 433, 284, 1341, 1360, 463, 366, 575, 443, 589, 615, - 616, 260, 399, 601, 512, 609, 633, 223, 257, 413, - 497, 595, 486, 391, 571, 572, 325, 485, 292, 199, - 363, 621, 221, 472, 365, 239, 228, 577, 598, 286, - 449, 628, 210, 507, 587, 236, 476, 0, 0, 636, - 244, 496, 212, 584, 495, 387, 322, 323, 211, 0, - 450, 265, 290, 0, 0, 255, 408, 579, 580, 253, - 637, 225, 608, 217, 1271, 607, 401, 574, 585, 388, - 377, 216, 583, 386, 376, 330, 349, 350, 277, 303, - 440, 369, 441, 302, 304, 397, 396, 398, 204, 596, - 0, 205, 0, 491, 597, 638, 445, 209, 231, 232, - 234, 1287, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 439, 435, 444, 1376, 569, 590, 602, 613, 619, - 620, 622, 623, 624, 625, 626, 629, 627, 400, 307, - 487, 329, 367, 1365, 1406, 418, 465, 237, 594, 488, - 197, 1281, 1286, 1279, 0, 251, 252, 1347, 565, 1282, - 1280, 1336, 1337, 1283, 1397, 1398, 1399, 1384, 639, 640, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1499, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3995, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1917, 0, 0, 0, 0, + 0, 0, 0, 392, 0, 0, 0, 1397, 1383, 520, + 0, 1325, 1400, 1294, 1313, 1410, 1316, 1319, 1362, 1272, + 1340, 411, 1310, 1265, 1298, 1267, 1305, 1268, 1296, 1327, + 269, 1293, 1385, 1344, 1399, 362, 266, 1274, 1299, 425, + 1315, 203, 1364, 481, 251, 373, 370, 575, 281, 272, + 268, 249, 315, 381, 423, 510, 417, 1406, 366, 1350, + 0, 491, 396, 0, 0, 1969, 1329, 1389, 1338, 1376, + 1324, 1363, 1282, 1349, 1401, 1311, 1359, 1402, 321, 247, + 323, 202, 408, 492, 285, 0, 0, 0, 0, 3997, + 941, 0, 0, 0, 0, 3998, 0, 0, 0, 0, + 237, 0, 0, 244, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 1307, 1356, 1396, + 1308, 1358, 264, 319, 271, 263, 572, 1407, 1388, 1271, + 1337, 1395, 1332, 0, 0, 228, 1398, 1331, 0, 1361, + 0, 1413, 1266, 1352, 0, 1269, 1273, 1409, 1393, 1302, + 274, 0, 0, 0, 0, 0, 0, 0, 1328, 1339, + 1373, 1377, 1322, 0, 0, 0, 0, 0, 0, 0, + 0, 1300, 0, 1348, 0, 0, 0, 1278, 1270, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1326, 0, 0, 0, 0, 1281, 0, 1301, 1374, + 0, 1264, 296, 1275, 397, 256, 0, 448, 1381, 1392, + 1323, 616, 1394, 1321, 1320, 1368, 1279, 1387, 1314, 361, + 1277, 328, 197, 224, 0, 1312, 407, 456, 468, 1386, + 1297, 1306, 252, 1304, 466, 421, 594, 232, 283, 453, + 427, 464, 435, 286, 1347, 1366, 465, 368, 577, 445, + 591, 617, 618, 262, 401, 603, 514, 611, 635, 225, + 259, 415, 499, 597, 488, 393, 573, 574, 327, 487, + 294, 201, 365, 623, 223, 474, 367, 241, 230, 579, + 600, 288, 451, 630, 212, 509, 589, 238, 478, 0, + 0, 638, 246, 498, 214, 586, 497, 389, 324, 325, + 213, 0, 452, 267, 292, 0, 0, 257, 410, 581, + 582, 255, 639, 227, 610, 219, 1276, 609, 403, 576, + 587, 390, 379, 218, 585, 388, 378, 332, 351, 352, + 279, 305, 442, 371, 443, 304, 306, 399, 398, 400, + 206, 598, 0, 207, 0, 493, 599, 640, 447, 211, + 233, 234, 236, 1292, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 441, 437, 446, 1382, 571, 592, 604, + 615, 621, 622, 624, 625, 626, 627, 628, 631, 629, + 402, 309, 489, 331, 369, 1371, 1412, 420, 467, 239, + 596, 490, 199, 1286, 1291, 1284, 0, 253, 254, 1353, + 567, 1287, 1285, 1342, 1343, 1288, 1403, 1404, 1405, 1390, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, - 651, 652, 653, 654, 655, 656, 634, 498, 504, 499, - 500, 501, 502, 503, 0, 505, 1369, 1275, 0, 1284, - 1285, 1378, 581, 582, 657, 378, 478, 591, 331, 343, - 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, - 342, 347, 348, 352, 358, 246, 207, 384, 392, 568, - 308, 213, 214, 215, 514, 515, 516, 517, 605, 606, - 610, 202, 455, 456, 457, 458, 289, 600, 305, 461, - 460, 327, 328, 373, 442, 530, 532, 543, 547, 549, - 551, 557, 560, 531, 533, 544, 548, 550, 552, 558, - 561, 520, 522, 524, 526, 539, 538, 535, 563, 564, - 541, 546, 525, 537, 542, 555, 562, 559, 519, 523, - 527, 536, 554, 553, 534, 545, 556, 540, 528, 521, - 529, 1340, 194, 218, 362, 1402, 447, 285, 635, 604, - 599, 203, 220, 1278, 259, 1290, 1298, 0, 1304, 1312, - 1313, 1325, 1327, 1328, 1329, 1330, 1348, 1349, 1351, 1359, - 1361, 1364, 1366, 1373, 1385, 1405, 196, 198, 206, 219, - 229, 233, 240, 258, 273, 275, 282, 295, 306, 314, - 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, - 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, - 429, 430, 432, 434, 436, 448, 453, 467, 468, 469, - 470, 471, 474, 475, 480, 481, 482, 483, 484, 492, - 493, 506, 576, 578, 593, 611, 617, 473, 297, 298, - 437, 438, 310, 311, 631, 632, 296, 588, 618, 586, - 630, 612, 431, 372, 1339, 1345, 375, 278, 301, 316, - 1354, 603, 494, 224, 459, 287, 248, 1372, 1374, 208, - 243, 227, 256, 271, 274, 320, 385, 393, 422, 427, - 293, 268, 241, 452, 238, 477, 509, 510, 511, 513, - 389, 263, 426, 1335, 1363, 370, 566, 567, 312, 390, - 0, 0, 0, 1391, 1377, 518, 0, 1320, 1394, 1289, - 1308, 1404, 1311, 1314, 1356, 1267, 1334, 409, 1305, 1260, - 1293, 1262, 1300, 1263, 1291, 1322, 267, 1288, 1379, 1338, - 1393, 360, 264, 1269, 1294, 423, 1310, 201, 1358, 479, - 249, 371, 368, 573, 279, 270, 266, 247, 313, 379, - 421, 508, 415, 1400, 364, 1344, 0, 489, 394, 0, - 0, 0, 1324, 1383, 1332, 1370, 1319, 1357, 1277, 1343, - 1395, 1306, 1353, 1396, 319, 245, 321, 200, 406, 490, - 283, 0, 0, 0, 0, 0, 705, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 0, 0, 242, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 1302, 1350, 1390, 1303, 1352, 262, 317, - 269, 261, 570, 1401, 1382, 1266, 1331, 1389, 0, 0, - 226, 1392, 1326, 0, 1355, 0, 1407, 1261, 1346, 0, - 1264, 1268, 1403, 1387, 1297, 272, 0, 0, 0, 0, - 0, 0, 0, 1323, 1333, 1367, 1371, 1317, 0, 0, - 0, 0, 0, 0, 3124, 0, 1295, 0, 1342, 0, - 0, 0, 1273, 1265, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1321, 0, 0, 0, - 0, 1276, 0, 1296, 1368, 0, 1259, 294, 1270, 395, - 254, 0, 446, 1375, 1386, 1318, 614, 1388, 1316, 1315, - 1362, 1274, 1381, 1309, 359, 1272, 326, 195, 222, 0, - 1307, 405, 454, 466, 1380, 1292, 1301, 250, 1299, 464, - 419, 592, 230, 281, 451, 425, 462, 433, 284, 1341, - 1360, 463, 366, 575, 443, 589, 615, 616, 260, 399, - 601, 512, 609, 633, 223, 257, 413, 497, 595, 486, - 391, 571, 572, 325, 485, 292, 199, 363, 621, 221, - 472, 365, 239, 228, 577, 598, 286, 449, 628, 210, - 507, 587, 236, 476, 0, 0, 636, 244, 496, 212, - 584, 495, 387, 322, 323, 211, 0, 450, 265, 290, - 0, 0, 255, 408, 579, 580, 253, 637, 225, 608, - 217, 1271, 607, 401, 574, 585, 388, 377, 216, 583, - 386, 376, 330, 349, 350, 277, 303, 440, 369, 441, - 302, 304, 397, 396, 398, 204, 596, 0, 205, 0, - 491, 597, 638, 445, 209, 231, 232, 234, 1287, 276, - 280, 288, 291, 299, 300, 309, 361, 412, 439, 435, - 444, 1376, 569, 590, 602, 613, 619, 620, 622, 623, - 624, 625, 626, 629, 627, 400, 307, 487, 329, 367, - 1365, 1406, 418, 465, 237, 594, 488, 197, 1281, 1286, - 1279, 0, 251, 252, 1347, 565, 1282, 1280, 1336, 1337, - 1283, 1397, 1398, 1399, 1384, 639, 640, 641, 642, 643, - 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, - 654, 655, 656, 634, 498, 504, 499, 500, 501, 502, - 503, 0, 505, 1369, 1275, 0, 1284, 1285, 1378, 581, - 582, 657, 378, 478, 591, 331, 343, 346, 336, 355, - 0, 356, 332, 333, 338, 340, 341, 342, 347, 348, - 352, 358, 246, 207, 384, 392, 568, 308, 213, 214, - 215, 514, 515, 516, 517, 605, 606, 610, 202, 455, - 456, 457, 458, 289, 600, 305, 461, 460, 327, 328, - 373, 442, 530, 532, 543, 547, 549, 551, 557, 560, - 531, 533, 544, 548, 550, 552, 558, 561, 520, 522, - 524, 526, 539, 538, 535, 563, 564, 541, 546, 525, - 537, 542, 555, 562, 559, 519, 523, 527, 536, 554, - 553, 534, 545, 556, 540, 528, 521, 529, 1340, 194, - 218, 362, 1402, 447, 285, 635, 604, 599, 203, 220, - 1278, 259, 1290, 1298, 0, 1304, 1312, 1313, 1325, 1327, - 1328, 1329, 1330, 1348, 1349, 1351, 1359, 1361, 1364, 1366, - 1373, 1385, 1405, 196, 198, 206, 219, 229, 233, 240, - 258, 273, 275, 282, 295, 306, 314, 315, 318, 324, - 374, 380, 381, 382, 383, 402, 403, 404, 407, 410, - 411, 414, 416, 417, 420, 424, 428, 429, 430, 432, - 434, 436, 448, 453, 467, 468, 469, 470, 471, 474, - 475, 480, 481, 482, 483, 484, 492, 493, 506, 576, - 578, 593, 611, 617, 473, 297, 298, 437, 438, 310, - 311, 631, 632, 296, 588, 618, 586, 630, 612, 431, - 372, 1339, 1345, 375, 278, 301, 316, 1354, 603, 494, - 224, 459, 287, 248, 1372, 1374, 208, 243, 227, 256, - 271, 274, 320, 385, 393, 422, 427, 293, 268, 241, - 452, 238, 477, 509, 510, 511, 513, 389, 263, 426, - 1335, 1363, 370, 566, 567, 312, 390, 0, 0, 0, - 1391, 1377, 518, 0, 1320, 1394, 1289, 1308, 1404, 1311, - 1314, 1356, 1267, 1334, 409, 1305, 1260, 1293, 1262, 1300, - 1263, 1291, 1322, 267, 1288, 1379, 1338, 1393, 360, 264, - 1269, 1294, 423, 1310, 201, 1358, 479, 249, 371, 368, - 573, 279, 270, 266, 247, 313, 379, 421, 508, 415, - 1400, 364, 1344, 0, 489, 394, 0, 0, 0, 1324, - 1383, 1332, 1370, 1319, 1357, 1277, 1343, 1395, 1306, 1353, - 1396, 319, 245, 321, 200, 406, 490, 283, 0, 0, - 0, 0, 0, 939, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 0, 0, 242, 0, 0, 0, - 345, 354, 353, 334, 335, 337, 339, 344, 351, 357, - 1302, 1350, 1390, 1303, 1352, 262, 317, 269, 261, 570, - 1401, 1382, 1266, 1331, 1389, 0, 0, 226, 1392, 1326, - 0, 1355, 0, 1407, 1261, 1346, 0, 1264, 1268, 1403, - 1387, 1297, 272, 0, 0, 0, 0, 0, 0, 0, - 1323, 1333, 1367, 1371, 1317, 0, 0, 0, 0, 0, - 0, 2345, 0, 1295, 0, 1342, 0, 0, 0, 1273, - 1265, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1321, 0, 0, 0, 0, 1276, 0, - 1296, 1368, 0, 1259, 294, 1270, 395, 254, 0, 446, - 1375, 1386, 1318, 614, 1388, 1316, 1315, 1362, 1274, 1381, - 1309, 359, 1272, 326, 195, 222, 0, 1307, 405, 454, - 466, 1380, 1292, 1301, 250, 1299, 464, 419, 592, 230, - 281, 451, 425, 462, 433, 284, 1341, 1360, 463, 366, - 575, 443, 589, 615, 616, 260, 399, 601, 512, 609, - 633, 223, 257, 413, 497, 595, 486, 391, 571, 572, - 325, 485, 292, 199, 363, 621, 221, 472, 365, 239, - 228, 577, 598, 286, 449, 628, 210, 507, 587, 236, - 476, 0, 0, 636, 244, 496, 212, 584, 495, 387, - 322, 323, 211, 0, 450, 265, 290, 0, 0, 255, - 408, 579, 580, 253, 637, 225, 608, 217, 1271, 607, - 401, 574, 585, 388, 377, 216, 583, 386, 376, 330, - 349, 350, 277, 303, 440, 369, 441, 302, 304, 397, - 396, 398, 204, 596, 0, 205, 0, 491, 597, 638, - 445, 209, 231, 232, 234, 1287, 276, 280, 288, 291, - 299, 300, 309, 361, 412, 439, 435, 444, 1376, 569, - 590, 602, 613, 619, 620, 622, 623, 624, 625, 626, - 629, 627, 400, 307, 487, 329, 367, 1365, 1406, 418, - 465, 237, 594, 488, 197, 1281, 1286, 1279, 0, 251, - 252, 1347, 565, 1282, 1280, 1336, 1337, 1283, 1397, 1398, - 1399, 1384, 639, 640, 641, 642, 643, 644, 645, 646, + 651, 652, 653, 654, 655, 656, 657, 658, 636, 500, + 506, 501, 502, 503, 504, 505, 0, 507, 1375, 1280, + 0, 1289, 1290, 1384, 583, 584, 659, 380, 480, 593, + 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, + 342, 343, 344, 349, 350, 354, 360, 248, 209, 386, + 394, 570, 310, 215, 216, 217, 516, 517, 518, 519, + 607, 608, 612, 204, 457, 458, 459, 460, 291, 602, + 307, 463, 462, 329, 330, 375, 444, 532, 534, 545, + 549, 551, 553, 559, 562, 533, 535, 546, 550, 552, + 554, 560, 563, 522, 524, 526, 528, 541, 540, 537, + 565, 566, 543, 548, 527, 539, 544, 557, 564, 561, + 521, 525, 529, 538, 556, 555, 536, 547, 558, 542, + 530, 523, 531, 1346, 196, 220, 364, 1408, 449, 287, + 637, 606, 601, 205, 222, 1283, 261, 1295, 1303, 0, + 1309, 1317, 1318, 1330, 1333, 1334, 1335, 1336, 1354, 1355, + 1357, 1365, 1367, 1370, 1372, 1379, 1391, 1411, 198, 200, + 208, 221, 231, 235, 242, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 431, 432, 434, 436, 438, 450, 455, 469, + 470, 471, 472, 473, 476, 477, 482, 483, 484, 485, + 486, 494, 495, 508, 578, 580, 595, 613, 619, 475, + 299, 300, 439, 440, 312, 313, 633, 634, 298, 590, + 620, 588, 632, 614, 433, 374, 1345, 1351, 377, 280, + 303, 318, 1360, 605, 496, 226, 461, 289, 250, 1378, + 1380, 210, 245, 229, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 243, 454, 240, 479, 511, 512, + 513, 515, 391, 265, 428, 1341, 1369, 372, 568, 569, + 314, 392, 0, 0, 0, 1397, 1383, 520, 0, 1325, + 1400, 1294, 1313, 1410, 1316, 1319, 1362, 1272, 1340, 411, + 1310, 1265, 1298, 1267, 1305, 1268, 1296, 1327, 269, 1293, + 1385, 1344, 1399, 362, 266, 1274, 1299, 425, 1315, 203, + 1364, 481, 251, 373, 370, 575, 281, 272, 268, 249, + 315, 381, 423, 510, 417, 1406, 366, 1350, 0, 491, + 396, 0, 0, 0, 1329, 1389, 1338, 1376, 1324, 1363, + 1282, 1349, 1401, 1311, 1359, 1402, 321, 247, 323, 202, + 408, 492, 285, 0, 0, 0, 0, 0, 194, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, + 0, 244, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 1307, 1356, 1396, 1308, 1358, + 264, 319, 271, 263, 572, 1407, 1388, 1271, 1337, 1395, + 1332, 0, 0, 228, 1398, 1331, 0, 1361, 0, 1413, + 1266, 1352, 0, 1269, 1273, 1409, 1393, 1302, 274, 0, + 0, 0, 0, 0, 0, 0, 1328, 1339, 1373, 1377, + 1322, 0, 0, 0, 0, 0, 0, 3170, 0, 1300, + 0, 1348, 0, 0, 0, 1278, 1270, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1326, + 0, 0, 0, 0, 1281, 0, 1301, 1374, 0, 1264, + 296, 1275, 397, 256, 0, 448, 1381, 1392, 1323, 616, + 1394, 1321, 1320, 1368, 1279, 1387, 1314, 361, 1277, 328, + 197, 224, 0, 1312, 407, 456, 468, 1386, 1297, 1306, + 252, 1304, 466, 421, 594, 232, 283, 453, 427, 464, + 435, 286, 1347, 1366, 465, 368, 577, 445, 591, 617, + 618, 262, 401, 603, 514, 611, 635, 225, 259, 415, + 499, 597, 488, 393, 573, 574, 327, 487, 294, 201, + 365, 623, 223, 474, 367, 241, 230, 579, 600, 288, + 451, 630, 212, 509, 589, 238, 478, 0, 0, 638, + 246, 498, 214, 586, 497, 389, 324, 325, 213, 0, + 452, 267, 292, 0, 0, 257, 410, 581, 582, 255, + 639, 227, 610, 219, 1276, 609, 403, 576, 587, 390, + 379, 218, 585, 388, 378, 332, 351, 352, 279, 305, + 442, 371, 443, 304, 306, 399, 398, 400, 206, 598, + 0, 207, 0, 493, 599, 640, 447, 211, 233, 234, + 236, 1292, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 441, 437, 446, 1382, 571, 592, 604, 615, 621, + 622, 624, 625, 626, 627, 628, 631, 629, 402, 309, + 489, 331, 369, 1371, 1412, 420, 467, 239, 596, 490, + 199, 1286, 1291, 1284, 0, 253, 254, 1353, 567, 1287, + 1285, 1342, 1343, 1288, 1403, 1404, 1405, 1390, 641, 642, + 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 636, 500, 506, 501, + 502, 503, 504, 505, 0, 507, 1375, 1280, 0, 1289, + 1290, 1384, 583, 584, 659, 380, 480, 593, 333, 345, + 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, + 344, 349, 350, 354, 360, 248, 209, 386, 394, 570, + 310, 215, 216, 217, 516, 517, 518, 519, 607, 608, + 612, 204, 457, 458, 459, 460, 291, 602, 307, 463, + 462, 329, 330, 375, 444, 532, 534, 545, 549, 551, + 553, 559, 562, 533, 535, 546, 550, 552, 554, 560, + 563, 522, 524, 526, 528, 541, 540, 537, 565, 566, + 543, 548, 527, 539, 544, 557, 564, 561, 521, 525, + 529, 538, 556, 555, 536, 547, 558, 542, 530, 523, + 531, 1346, 196, 220, 364, 1408, 449, 287, 637, 606, + 601, 205, 222, 1283, 261, 1295, 1303, 0, 1309, 1317, + 1318, 1330, 1333, 1334, 1335, 1336, 1354, 1355, 1357, 1365, + 1367, 1370, 1372, 1379, 1391, 1411, 198, 200, 208, 221, + 231, 235, 242, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 431, 432, 434, 436, 438, 450, 455, 469, 470, 471, + 472, 473, 476, 477, 482, 483, 484, 485, 486, 494, + 495, 508, 578, 580, 595, 613, 619, 475, 299, 300, + 439, 440, 312, 313, 633, 634, 298, 590, 620, 588, + 632, 614, 433, 374, 1345, 1351, 377, 280, 303, 318, + 1360, 605, 496, 226, 461, 289, 250, 1378, 1380, 210, + 245, 229, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 243, 454, 240, 479, 511, 512, 513, 515, + 391, 265, 428, 1341, 1369, 372, 568, 569, 314, 392, + 0, 0, 0, 1397, 1383, 520, 0, 1325, 1400, 1294, + 1313, 1410, 1316, 1319, 1362, 1272, 1340, 411, 1310, 1265, + 1298, 1267, 1305, 1268, 1296, 1327, 269, 1293, 1385, 1344, + 1399, 362, 266, 1274, 1299, 425, 1315, 203, 1364, 481, + 251, 373, 370, 575, 281, 272, 268, 249, 315, 381, + 423, 510, 417, 1406, 366, 1350, 0, 491, 396, 0, + 0, 0, 1329, 1389, 1338, 1376, 1324, 1363, 1282, 1349, + 1401, 1311, 1359, 1402, 321, 247, 323, 202, 408, 492, + 285, 0, 0, 0, 0, 0, 707, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 1307, 1356, 1396, 1308, 1358, 264, 319, + 271, 263, 572, 1407, 1388, 1271, 1337, 1395, 1332, 0, + 0, 228, 1398, 1331, 0, 1361, 0, 1413, 1266, 1352, + 0, 1269, 1273, 1409, 1393, 1302, 274, 0, 0, 0, + 0, 0, 0, 0, 1328, 1339, 1373, 1377, 1322, 0, + 0, 0, 0, 0, 0, 3131, 0, 1300, 0, 1348, + 0, 0, 0, 1278, 1270, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1326, 0, 0, + 0, 0, 1281, 0, 1301, 1374, 0, 1264, 296, 1275, + 397, 256, 0, 448, 1381, 1392, 1323, 616, 1394, 1321, + 1320, 1368, 1279, 1387, 1314, 361, 1277, 328, 197, 224, + 0, 1312, 407, 456, 468, 1386, 1297, 1306, 252, 1304, + 466, 421, 594, 232, 283, 453, 427, 464, 435, 286, + 1347, 1366, 465, 368, 577, 445, 591, 617, 618, 262, + 401, 603, 514, 611, 635, 225, 259, 415, 499, 597, + 488, 393, 573, 574, 327, 487, 294, 201, 365, 623, + 223, 474, 367, 241, 230, 579, 600, 288, 451, 630, + 212, 509, 589, 238, 478, 0, 0, 638, 246, 498, + 214, 586, 497, 389, 324, 325, 213, 0, 452, 267, + 292, 0, 0, 257, 410, 581, 582, 255, 639, 227, + 610, 219, 1276, 609, 403, 576, 587, 390, 379, 218, + 585, 388, 378, 332, 351, 352, 279, 305, 442, 371, + 443, 304, 306, 399, 398, 400, 206, 598, 0, 207, + 0, 493, 599, 640, 447, 211, 233, 234, 236, 1292, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 441, + 437, 446, 1382, 571, 592, 604, 615, 621, 622, 624, + 625, 626, 627, 628, 631, 629, 402, 309, 489, 331, + 369, 1371, 1412, 420, 467, 239, 596, 490, 199, 1286, + 1291, 1284, 0, 253, 254, 1353, 567, 1287, 1285, 1342, + 1343, 1288, 1403, 1404, 1405, 1390, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 636, 500, 506, 501, 502, 503, + 504, 505, 0, 507, 1375, 1280, 0, 1289, 1290, 1384, + 583, 584, 659, 380, 480, 593, 333, 345, 348, 338, + 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, + 350, 354, 360, 248, 209, 386, 394, 570, 310, 215, + 216, 217, 516, 517, 518, 519, 607, 608, 612, 204, + 457, 458, 459, 460, 291, 602, 307, 463, 462, 329, + 330, 375, 444, 532, 534, 545, 549, 551, 553, 559, + 562, 533, 535, 546, 550, 552, 554, 560, 563, 522, + 524, 526, 528, 541, 540, 537, 565, 566, 543, 548, + 527, 539, 544, 557, 564, 561, 521, 525, 529, 538, + 556, 555, 536, 547, 558, 542, 530, 523, 531, 1346, + 196, 220, 364, 1408, 449, 287, 637, 606, 601, 205, + 222, 1283, 261, 1295, 1303, 0, 1309, 1317, 1318, 1330, + 1333, 1334, 1335, 1336, 1354, 1355, 1357, 1365, 1367, 1370, + 1372, 1379, 1391, 1411, 198, 200, 208, 221, 231, 235, + 242, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 431, 432, + 434, 436, 438, 450, 455, 469, 470, 471, 472, 473, + 476, 477, 482, 483, 484, 485, 486, 494, 495, 508, + 578, 580, 595, 613, 619, 475, 299, 300, 439, 440, + 312, 313, 633, 634, 298, 590, 620, 588, 632, 614, + 433, 374, 1345, 1351, 377, 280, 303, 318, 1360, 605, + 496, 226, 461, 289, 250, 1378, 1380, 210, 245, 229, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 243, 454, 240, 479, 511, 512, 513, 515, 391, 265, + 428, 1341, 1369, 372, 568, 569, 314, 392, 0, 0, + 0, 1397, 1383, 520, 0, 1325, 1400, 1294, 1313, 1410, + 1316, 1319, 1362, 1272, 1340, 411, 1310, 1265, 1298, 1267, + 1305, 1268, 1296, 1327, 269, 1293, 1385, 1344, 1399, 362, + 266, 1274, 1299, 425, 1315, 203, 1364, 481, 251, 373, + 370, 575, 281, 272, 268, 249, 315, 381, 423, 510, + 417, 1406, 366, 1350, 0, 491, 396, 0, 0, 0, + 1329, 1389, 1338, 1376, 1324, 1363, 1282, 1349, 1401, 1311, + 1359, 1402, 321, 247, 323, 202, 408, 492, 285, 0, + 0, 0, 0, 0, 941, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 237, 0, 0, 244, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 1307, 1356, 1396, 1308, 1358, 264, 319, 271, 263, + 572, 1407, 1388, 1271, 1337, 1395, 1332, 0, 0, 228, + 1398, 1331, 0, 1361, 0, 1413, 1266, 1352, 0, 1269, + 1273, 1409, 1393, 1302, 274, 0, 0, 0, 0, 0, + 0, 0, 1328, 1339, 1373, 1377, 1322, 0, 0, 0, + 0, 0, 0, 2352, 0, 1300, 0, 1348, 0, 0, + 0, 1278, 1270, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1326, 0, 0, 0, 0, + 1281, 0, 1301, 1374, 0, 1264, 296, 1275, 397, 256, + 0, 448, 1381, 1392, 1323, 616, 1394, 1321, 1320, 1368, + 1279, 1387, 1314, 361, 1277, 328, 197, 224, 0, 1312, + 407, 456, 468, 1386, 1297, 1306, 252, 1304, 466, 421, + 594, 232, 283, 453, 427, 464, 435, 286, 1347, 1366, + 465, 368, 577, 445, 591, 617, 618, 262, 401, 603, + 514, 611, 635, 225, 259, 415, 499, 597, 488, 393, + 573, 574, 327, 487, 294, 201, 365, 623, 223, 474, + 367, 241, 230, 579, 600, 288, 451, 630, 212, 509, + 589, 238, 478, 0, 0, 638, 246, 498, 214, 586, + 497, 389, 324, 325, 213, 0, 452, 267, 292, 0, + 0, 257, 410, 581, 582, 255, 639, 227, 610, 219, + 1276, 609, 403, 576, 587, 390, 379, 218, 585, 388, + 378, 332, 351, 352, 279, 305, 442, 371, 443, 304, + 306, 399, 398, 400, 206, 598, 0, 207, 0, 493, + 599, 640, 447, 211, 233, 234, 236, 1292, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 441, 437, 446, + 1382, 571, 592, 604, 615, 621, 622, 624, 625, 626, + 627, 628, 631, 629, 402, 309, 489, 331, 369, 1371, + 1412, 420, 467, 239, 596, 490, 199, 1286, 1291, 1284, + 0, 253, 254, 1353, 567, 1287, 1285, 1342, 1343, 1288, + 1403, 1404, 1405, 1390, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 634, 498, 504, 499, 500, 501, 502, 503, 0, 505, - 1369, 1275, 0, 1284, 1285, 1378, 581, 582, 657, 378, - 478, 591, 331, 343, 346, 336, 355, 0, 356, 332, - 333, 338, 340, 341, 342, 347, 348, 352, 358, 246, - 207, 384, 392, 568, 308, 213, 214, 215, 514, 515, - 516, 517, 605, 606, 610, 202, 455, 456, 457, 458, - 289, 600, 305, 461, 460, 327, 328, 373, 442, 530, - 532, 543, 547, 549, 551, 557, 560, 531, 533, 544, - 548, 550, 552, 558, 561, 520, 522, 524, 526, 539, - 538, 535, 563, 564, 541, 546, 525, 537, 542, 555, - 562, 559, 519, 523, 527, 536, 554, 553, 534, 545, - 556, 540, 528, 521, 529, 1340, 194, 218, 362, 1402, - 447, 285, 635, 604, 599, 203, 220, 1278, 259, 1290, - 1298, 0, 1304, 1312, 1313, 1325, 1327, 1328, 1329, 1330, - 1348, 1349, 1351, 1359, 1361, 1364, 1366, 1373, 1385, 1405, - 196, 198, 206, 219, 229, 233, 240, 258, 273, 275, - 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, - 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, - 417, 420, 424, 428, 429, 430, 432, 434, 436, 448, - 453, 467, 468, 469, 470, 471, 474, 475, 480, 481, - 482, 483, 484, 492, 493, 506, 576, 578, 593, 611, - 617, 473, 297, 298, 437, 438, 310, 311, 631, 632, - 296, 588, 618, 586, 630, 612, 431, 372, 1339, 1345, - 375, 278, 301, 316, 1354, 603, 494, 224, 459, 287, - 248, 1372, 1374, 208, 243, 227, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 241, 452, 238, 477, - 509, 510, 511, 513, 389, 263, 426, 1335, 1363, 370, - 566, 567, 312, 390, 0, 0, 0, 1391, 1377, 518, - 0, 1320, 1394, 1289, 1308, 1404, 1311, 1314, 1356, 1267, - 1334, 409, 1305, 1260, 1293, 1262, 1300, 1263, 1291, 1322, - 267, 1288, 1379, 1338, 1393, 360, 264, 1269, 1294, 423, - 1310, 201, 1358, 479, 249, 371, 368, 573, 279, 270, - 266, 247, 313, 379, 421, 508, 415, 1400, 364, 1344, - 0, 489, 394, 0, 0, 0, 1324, 1383, 1332, 1370, - 1319, 1357, 1277, 1343, 1395, 1306, 1353, 1396, 319, 245, - 321, 200, 406, 490, 283, 0, 93, 0, 0, 0, - 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 0, 0, 242, 0, 0, 0, 345, 354, 353, - 334, 335, 337, 339, 344, 351, 357, 1302, 1350, 1390, - 1303, 1352, 262, 317, 269, 261, 570, 1401, 1382, 1266, - 1331, 1389, 0, 0, 226, 1392, 1326, 0, 1355, 0, - 1407, 1261, 1346, 0, 1264, 1268, 1403, 1387, 1297, 272, - 0, 0, 0, 0, 0, 0, 0, 1323, 1333, 1367, - 1371, 1317, 0, 0, 0, 0, 0, 0, 0, 0, - 1295, 0, 1342, 0, 0, 0, 1273, 1265, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1321, 0, 0, 0, 0, 1276, 0, 1296, 1368, 0, - 1259, 294, 1270, 395, 254, 0, 446, 1375, 1386, 1318, - 614, 1388, 1316, 1315, 1362, 1274, 1381, 1309, 359, 1272, - 326, 195, 222, 0, 1307, 405, 454, 466, 1380, 1292, - 1301, 250, 1299, 464, 419, 592, 230, 281, 451, 425, - 462, 433, 284, 1341, 1360, 463, 366, 575, 443, 589, - 615, 616, 260, 399, 601, 512, 609, 633, 223, 257, - 413, 497, 595, 486, 391, 571, 572, 325, 485, 292, - 199, 363, 621, 221, 472, 365, 239, 228, 577, 598, - 286, 449, 628, 210, 507, 587, 236, 476, 0, 0, - 636, 244, 496, 212, 584, 495, 387, 322, 323, 211, - 0, 450, 265, 290, 0, 0, 255, 408, 579, 580, - 253, 637, 225, 608, 217, 1271, 607, 401, 574, 585, - 388, 377, 216, 583, 386, 376, 330, 349, 350, 277, - 303, 440, 369, 441, 302, 304, 397, 396, 398, 204, - 596, 0, 205, 0, 491, 597, 638, 445, 209, 231, - 232, 234, 1287, 276, 280, 288, 291, 299, 300, 309, - 361, 412, 439, 435, 444, 1376, 569, 590, 602, 613, - 619, 620, 622, 623, 624, 625, 626, 629, 627, 400, - 307, 487, 329, 367, 1365, 1406, 418, 465, 237, 594, - 488, 197, 1281, 1286, 1279, 0, 251, 252, 1347, 565, - 1282, 1280, 1336, 1337, 1283, 1397, 1398, 1399, 1384, 639, - 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 654, 655, 656, 634, 498, 504, - 499, 500, 501, 502, 503, 0, 505, 1369, 1275, 0, - 1284, 1285, 1378, 581, 582, 657, 378, 478, 591, 331, - 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, - 341, 342, 347, 348, 352, 358, 246, 207, 384, 392, - 568, 308, 213, 214, 215, 514, 515, 516, 517, 605, - 606, 610, 202, 455, 456, 457, 458, 289, 600, 305, - 461, 460, 327, 328, 373, 442, 530, 532, 543, 547, - 549, 551, 557, 560, 531, 533, 544, 548, 550, 552, - 558, 561, 520, 522, 524, 526, 539, 538, 535, 563, - 564, 541, 546, 525, 537, 542, 555, 562, 559, 519, - 523, 527, 536, 554, 553, 534, 545, 556, 540, 528, - 521, 529, 1340, 194, 218, 362, 1402, 447, 285, 635, - 604, 599, 203, 220, 1278, 259, 1290, 1298, 0, 1304, - 1312, 1313, 1325, 1327, 1328, 1329, 1330, 1348, 1349, 1351, - 1359, 1361, 1364, 1366, 1373, 1385, 1405, 196, 198, 206, - 219, 229, 233, 240, 258, 273, 275, 282, 295, 306, - 314, 315, 318, 324, 374, 380, 381, 382, 383, 402, - 403, 404, 407, 410, 411, 414, 416, 417, 420, 424, - 428, 429, 430, 432, 434, 436, 448, 453, 467, 468, - 469, 470, 471, 474, 475, 480, 481, 482, 483, 484, - 492, 493, 506, 576, 578, 593, 611, 617, 473, 297, - 298, 437, 438, 310, 311, 631, 632, 296, 588, 618, - 586, 630, 612, 431, 372, 1339, 1345, 375, 278, 301, - 316, 1354, 603, 494, 224, 459, 287, 248, 1372, 1374, - 208, 243, 227, 256, 271, 274, 320, 385, 393, 422, - 427, 293, 268, 241, 452, 238, 477, 509, 510, 511, - 513, 389, 263, 426, 1335, 1363, 370, 566, 567, 312, - 390, 0, 0, 0, 1391, 1377, 518, 0, 1320, 1394, - 1289, 1308, 1404, 1311, 1314, 1356, 1267, 1334, 409, 1305, - 1260, 1293, 1262, 1300, 1263, 1291, 1322, 267, 1288, 1379, - 1338, 1393, 360, 264, 1269, 1294, 423, 1310, 201, 1358, - 479, 249, 371, 368, 573, 279, 270, 266, 247, 313, - 379, 421, 508, 415, 1400, 364, 1344, 0, 489, 394, - 0, 0, 0, 1324, 1383, 1332, 1370, 1319, 1357, 1277, - 1343, 1395, 1306, 1353, 1396, 319, 245, 321, 200, 406, - 490, 283, 0, 0, 0, 0, 0, 192, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, - 242, 0, 0, 0, 345, 354, 353, 334, 335, 337, - 339, 344, 351, 357, 1302, 1350, 1390, 1303, 1352, 262, - 317, 269, 261, 570, 1401, 1382, 1266, 1331, 1389, 0, - 0, 226, 1392, 1326, 0, 1355, 0, 1407, 1261, 1346, - 0, 1264, 1268, 1403, 1387, 1297, 272, 0, 0, 0, - 0, 0, 0, 0, 1323, 1333, 1367, 1371, 1317, 0, - 0, 0, 0, 0, 0, 0, 0, 1295, 0, 1342, - 0, 0, 0, 1273, 1265, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1321, 0, 0, - 0, 0, 1276, 0, 1296, 1368, 0, 1259, 294, 1270, - 395, 254, 0, 446, 1375, 1386, 1318, 614, 1388, 1316, - 1315, 1362, 1274, 1381, 1309, 359, 1272, 326, 195, 222, - 0, 1307, 405, 454, 466, 1380, 1292, 1301, 250, 1299, - 464, 419, 592, 230, 281, 451, 425, 462, 433, 284, - 1341, 1360, 463, 366, 575, 443, 589, 615, 616, 260, - 399, 601, 512, 609, 633, 223, 257, 413, 497, 595, - 486, 391, 571, 572, 325, 485, 292, 199, 363, 621, - 221, 472, 365, 239, 228, 577, 598, 286, 449, 628, - 210, 507, 587, 236, 476, 0, 0, 636, 244, 496, - 212, 584, 495, 387, 322, 323, 211, 0, 450, 265, - 290, 0, 0, 255, 408, 579, 580, 253, 637, 225, - 608, 217, 1271, 607, 401, 574, 585, 388, 377, 216, - 583, 386, 376, 330, 349, 350, 277, 303, 440, 369, - 441, 302, 304, 397, 396, 398, 204, 596, 0, 205, - 0, 491, 597, 638, 445, 209, 231, 232, 234, 1287, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 439, - 435, 444, 1376, 569, 590, 602, 613, 619, 620, 622, - 623, 624, 625, 626, 629, 627, 400, 307, 487, 329, - 367, 1365, 1406, 418, 465, 237, 594, 488, 197, 1281, - 1286, 1279, 0, 251, 252, 1347, 565, 1282, 1280, 1336, - 1337, 1283, 1397, 1398, 1399, 1384, 639, 640, 641, 642, + 657, 658, 636, 500, 506, 501, 502, 503, 504, 505, + 0, 507, 1375, 1280, 0, 1289, 1290, 1384, 583, 584, + 659, 380, 480, 593, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 248, 209, 386, 394, 570, 310, 215, 216, 217, + 516, 517, 518, 519, 607, 608, 612, 204, 457, 458, + 459, 460, 291, 602, 307, 463, 462, 329, 330, 375, + 444, 532, 534, 545, 549, 551, 553, 559, 562, 533, + 535, 546, 550, 552, 554, 560, 563, 522, 524, 526, + 528, 541, 540, 537, 565, 566, 543, 548, 527, 539, + 544, 557, 564, 561, 521, 525, 529, 538, 556, 555, + 536, 547, 558, 542, 530, 523, 531, 1346, 196, 220, + 364, 1408, 449, 287, 637, 606, 601, 205, 222, 1283, + 261, 1295, 1303, 0, 1309, 1317, 1318, 1330, 1333, 1334, + 1335, 1336, 1354, 1355, 1357, 1365, 1367, 1370, 1372, 1379, + 1391, 1411, 198, 200, 208, 221, 231, 235, 242, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 431, 432, 434, 436, + 438, 450, 455, 469, 470, 471, 472, 473, 476, 477, + 482, 483, 484, 485, 486, 494, 495, 508, 578, 580, + 595, 613, 619, 475, 299, 300, 439, 440, 312, 313, + 633, 634, 298, 590, 620, 588, 632, 614, 433, 374, + 1345, 1351, 377, 280, 303, 318, 1360, 605, 496, 226, + 461, 289, 250, 1378, 1380, 210, 245, 229, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 243, 454, + 240, 479, 511, 512, 513, 515, 391, 265, 428, 1341, + 1369, 372, 568, 569, 314, 392, 0, 0, 0, 1397, + 1383, 520, 0, 1325, 1400, 1294, 1313, 1410, 1316, 1319, + 1362, 1272, 1340, 411, 1310, 1265, 1298, 1267, 1305, 1268, + 1296, 1327, 269, 1293, 1385, 1344, 1399, 362, 266, 1274, + 1299, 425, 1315, 203, 1364, 481, 251, 373, 370, 575, + 281, 272, 268, 249, 315, 381, 423, 510, 417, 1406, + 366, 1350, 0, 491, 396, 0, 0, 0, 1329, 1389, + 1338, 1376, 1324, 1363, 1282, 1349, 1401, 1311, 1359, 1402, + 321, 247, 323, 202, 408, 492, 285, 0, 95, 0, + 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 237, 0, 0, 244, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 1307, + 1356, 1396, 1308, 1358, 264, 319, 271, 263, 572, 1407, + 1388, 1271, 1337, 1395, 1332, 0, 0, 228, 1398, 1331, + 0, 1361, 0, 1413, 1266, 1352, 0, 1269, 1273, 1409, + 1393, 1302, 274, 0, 0, 0, 0, 0, 0, 0, + 1328, 1339, 1373, 1377, 1322, 0, 0, 0, 0, 0, + 0, 0, 0, 1300, 0, 1348, 0, 0, 0, 1278, + 1270, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1326, 0, 0, 0, 0, 1281, 0, + 1301, 1374, 0, 1264, 296, 1275, 397, 256, 0, 448, + 1381, 1392, 1323, 616, 1394, 1321, 1320, 1368, 1279, 1387, + 1314, 361, 1277, 328, 197, 224, 0, 1312, 407, 456, + 468, 1386, 1297, 1306, 252, 1304, 466, 421, 594, 232, + 283, 453, 427, 464, 435, 286, 1347, 1366, 465, 368, + 577, 445, 591, 617, 618, 262, 401, 603, 514, 611, + 635, 225, 259, 415, 499, 597, 488, 393, 573, 574, + 327, 487, 294, 201, 365, 623, 223, 474, 367, 241, + 230, 579, 600, 288, 451, 630, 212, 509, 589, 238, + 478, 0, 0, 638, 246, 498, 214, 586, 497, 389, + 324, 325, 213, 0, 452, 267, 292, 0, 0, 257, + 410, 581, 582, 255, 639, 227, 610, 219, 1276, 609, + 403, 576, 587, 390, 379, 218, 585, 388, 378, 332, + 351, 352, 279, 305, 442, 371, 443, 304, 306, 399, + 398, 400, 206, 598, 0, 207, 0, 493, 599, 640, + 447, 211, 233, 234, 236, 1292, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 441, 437, 446, 1382, 571, + 592, 604, 615, 621, 622, 624, 625, 626, 627, 628, + 631, 629, 402, 309, 489, 331, 369, 1371, 1412, 420, + 467, 239, 596, 490, 199, 1286, 1291, 1284, 0, 253, + 254, 1353, 567, 1287, 1285, 1342, 1343, 1288, 1403, 1404, + 1405, 1390, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 636, 500, 506, 501, 502, 503, 504, 505, 0, 507, + 1375, 1280, 0, 1289, 1290, 1384, 583, 584, 659, 380, + 480, 593, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 248, + 209, 386, 394, 570, 310, 215, 216, 217, 516, 517, + 518, 519, 607, 608, 612, 204, 457, 458, 459, 460, + 291, 602, 307, 463, 462, 329, 330, 375, 444, 532, + 534, 545, 549, 551, 553, 559, 562, 533, 535, 546, + 550, 552, 554, 560, 563, 522, 524, 526, 528, 541, + 540, 537, 565, 566, 543, 548, 527, 539, 544, 557, + 564, 561, 521, 525, 529, 538, 556, 555, 536, 547, + 558, 542, 530, 523, 531, 1346, 196, 220, 364, 1408, + 449, 287, 637, 606, 601, 205, 222, 1283, 261, 1295, + 1303, 0, 1309, 1317, 1318, 1330, 1333, 1334, 1335, 1336, + 1354, 1355, 1357, 1365, 1367, 1370, 1372, 1379, 1391, 1411, + 198, 200, 208, 221, 231, 235, 242, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 431, 432, 434, 436, 438, 450, + 455, 469, 470, 471, 472, 473, 476, 477, 482, 483, + 484, 485, 486, 494, 495, 508, 578, 580, 595, 613, + 619, 475, 299, 300, 439, 440, 312, 313, 633, 634, + 298, 590, 620, 588, 632, 614, 433, 374, 1345, 1351, + 377, 280, 303, 318, 1360, 605, 496, 226, 461, 289, + 250, 1378, 1380, 210, 245, 229, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 243, 454, 240, 479, + 511, 512, 513, 515, 391, 265, 428, 1341, 1369, 372, + 568, 569, 314, 392, 0, 0, 0, 1397, 1383, 520, + 0, 1325, 1400, 1294, 1313, 1410, 1316, 1319, 1362, 1272, + 1340, 411, 1310, 1265, 1298, 1267, 1305, 1268, 1296, 1327, + 269, 1293, 1385, 1344, 1399, 362, 266, 1274, 1299, 425, + 1315, 203, 1364, 481, 251, 373, 370, 575, 281, 272, + 268, 249, 315, 381, 423, 510, 417, 1406, 366, 1350, + 0, 491, 396, 0, 0, 0, 1329, 1389, 1338, 1376, + 1324, 1363, 1282, 1349, 1401, 1311, 1359, 1402, 321, 247, + 323, 202, 408, 492, 285, 0, 0, 0, 0, 0, + 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 237, 0, 0, 244, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 1307, 1356, 1396, + 1308, 1358, 264, 319, 271, 263, 572, 1407, 1388, 1271, + 1337, 1395, 1332, 0, 0, 228, 1398, 1331, 0, 1361, + 0, 1413, 1266, 1352, 0, 1269, 1273, 1409, 1393, 1302, + 274, 0, 0, 0, 0, 0, 0, 0, 1328, 1339, + 1373, 1377, 1322, 0, 0, 0, 0, 0, 0, 0, + 0, 1300, 0, 1348, 0, 0, 0, 1278, 1270, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1326, 0, 0, 0, 0, 1281, 0, 1301, 1374, + 0, 1264, 296, 1275, 397, 256, 0, 448, 1381, 1392, + 1323, 616, 1394, 1321, 1320, 1368, 1279, 1387, 1314, 361, + 1277, 328, 197, 224, 0, 1312, 407, 456, 468, 1386, + 1297, 1306, 252, 1304, 466, 421, 594, 232, 283, 453, + 427, 464, 435, 286, 1347, 1366, 465, 368, 577, 445, + 591, 617, 618, 262, 401, 603, 514, 611, 635, 225, + 259, 415, 499, 597, 488, 393, 573, 574, 327, 487, + 294, 201, 365, 623, 223, 474, 367, 241, 230, 579, + 600, 288, 451, 630, 212, 509, 589, 238, 478, 0, + 0, 638, 246, 498, 214, 586, 497, 389, 324, 325, + 213, 0, 452, 267, 292, 0, 0, 257, 410, 581, + 582, 255, 639, 227, 610, 219, 1276, 609, 403, 576, + 587, 390, 379, 218, 585, 388, 378, 332, 351, 352, + 279, 305, 442, 371, 443, 304, 306, 399, 398, 400, + 206, 598, 0, 207, 0, 493, 599, 640, 447, 211, + 233, 234, 236, 1292, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 441, 437, 446, 1382, 571, 592, 604, + 615, 621, 622, 624, 625, 626, 627, 628, 631, 629, + 402, 309, 489, 331, 369, 1371, 1412, 420, 467, 239, + 596, 490, 199, 1286, 1291, 1284, 0, 253, 254, 1353, + 567, 1287, 1285, 1342, 1343, 1288, 1403, 1404, 1405, 1390, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 636, 500, + 506, 501, 502, 503, 504, 505, 0, 507, 1375, 1280, + 0, 1289, 1290, 1384, 583, 584, 659, 380, 480, 593, + 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, + 342, 343, 344, 349, 350, 354, 360, 248, 209, 386, + 394, 570, 310, 215, 216, 217, 516, 517, 518, 519, + 607, 608, 612, 204, 457, 458, 459, 460, 291, 602, + 307, 463, 462, 329, 330, 375, 444, 532, 534, 545, + 549, 551, 553, 559, 562, 533, 535, 546, 550, 552, + 554, 560, 563, 522, 524, 526, 528, 541, 540, 537, + 565, 566, 543, 548, 527, 539, 544, 557, 564, 561, + 521, 525, 529, 538, 556, 555, 536, 547, 558, 542, + 530, 523, 531, 1346, 196, 220, 364, 1408, 449, 287, + 637, 606, 601, 205, 222, 1283, 261, 1295, 1303, 0, + 1309, 1317, 1318, 1330, 1333, 1334, 1335, 1336, 1354, 1355, + 1357, 1365, 1367, 1370, 1372, 1379, 1391, 1411, 198, 200, + 208, 221, 231, 235, 242, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 431, 432, 434, 436, 438, 450, 455, 469, + 470, 471, 472, 473, 476, 477, 482, 483, 484, 485, + 486, 494, 495, 508, 578, 580, 595, 613, 619, 475, + 299, 300, 439, 440, 312, 313, 633, 634, 298, 590, + 620, 588, 632, 614, 433, 374, 1345, 1351, 377, 280, + 303, 318, 1360, 605, 496, 226, 461, 289, 250, 1378, + 1380, 210, 245, 229, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 243, 454, 240, 479, 511, 512, + 513, 515, 391, 265, 428, 1341, 1369, 372, 568, 569, + 314, 392, 0, 0, 0, 1397, 1383, 520, 0, 1325, + 1400, 1294, 1313, 1410, 1316, 1319, 1362, 1272, 1340, 411, + 1310, 1265, 1298, 1267, 1305, 1268, 1296, 1327, 269, 1293, + 1385, 1344, 1399, 362, 266, 1274, 1299, 425, 1315, 203, + 1364, 481, 251, 373, 370, 575, 281, 272, 268, 249, + 315, 381, 423, 510, 417, 1406, 366, 1350, 0, 491, + 396, 0, 0, 0, 1329, 1389, 1338, 1376, 1324, 1363, + 1282, 1349, 1401, 1311, 1359, 1402, 321, 247, 323, 202, + 408, 492, 285, 0, 0, 0, 0, 0, 707, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, + 0, 244, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 1307, 1356, 1396, 1308, 1358, + 264, 319, 271, 263, 572, 1407, 1388, 1271, 1337, 1395, + 1332, 0, 0, 228, 1398, 1331, 0, 1361, 0, 1413, + 1266, 1352, 0, 1269, 1273, 1409, 1393, 1302, 274, 0, + 0, 0, 0, 0, 0, 0, 1328, 1339, 1373, 1377, + 1322, 0, 0, 0, 0, 0, 0, 0, 0, 1300, + 0, 1348, 0, 0, 0, 1278, 1270, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1326, + 0, 0, 0, 0, 1281, 0, 1301, 1374, 0, 1264, + 296, 1275, 397, 256, 0, 448, 1381, 1392, 1323, 616, + 1394, 1321, 1320, 1368, 1279, 1387, 1314, 361, 1277, 328, + 197, 224, 0, 1312, 407, 456, 468, 1386, 1297, 1306, + 252, 1304, 466, 421, 594, 232, 283, 453, 427, 464, + 435, 286, 1347, 1366, 465, 368, 577, 445, 591, 617, + 618, 262, 401, 603, 514, 611, 635, 225, 259, 415, + 499, 597, 488, 393, 573, 574, 327, 487, 294, 201, + 365, 623, 223, 474, 367, 241, 230, 579, 600, 288, + 451, 630, 212, 509, 589, 238, 478, 0, 0, 638, + 246, 498, 214, 586, 497, 389, 324, 325, 213, 0, + 452, 267, 292, 0, 0, 257, 410, 581, 582, 255, + 639, 227, 610, 219, 1276, 609, 403, 576, 587, 390, + 379, 218, 585, 388, 378, 332, 351, 352, 279, 305, + 442, 371, 443, 304, 306, 399, 398, 400, 206, 598, + 0, 207, 0, 493, 599, 640, 447, 211, 233, 234, + 236, 1292, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 441, 437, 446, 1382, 571, 592, 604, 615, 621, + 622, 624, 625, 626, 627, 628, 631, 629, 402, 309, + 489, 331, 369, 1371, 1412, 420, 467, 239, 596, 490, + 199, 1286, 1291, 1284, 0, 253, 254, 1353, 567, 1287, + 1285, 1342, 1343, 1288, 1403, 1404, 1405, 1390, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, - 653, 654, 655, 656, 634, 498, 504, 499, 500, 501, - 502, 503, 0, 505, 1369, 1275, 0, 1284, 1285, 1378, - 581, 582, 657, 378, 478, 591, 331, 343, 346, 336, - 355, 0, 356, 332, 333, 338, 340, 341, 342, 347, - 348, 352, 358, 246, 207, 384, 392, 568, 308, 213, - 214, 215, 514, 515, 516, 517, 605, 606, 610, 202, - 455, 456, 457, 458, 289, 600, 305, 461, 460, 327, - 328, 373, 442, 530, 532, 543, 547, 549, 551, 557, - 560, 531, 533, 544, 548, 550, 552, 558, 561, 520, - 522, 524, 526, 539, 538, 535, 563, 564, 541, 546, - 525, 537, 542, 555, 562, 559, 519, 523, 527, 536, - 554, 553, 534, 545, 556, 540, 528, 521, 529, 1340, - 194, 218, 362, 1402, 447, 285, 635, 604, 599, 203, - 220, 1278, 259, 1290, 1298, 0, 1304, 1312, 1313, 1325, - 1327, 1328, 1329, 1330, 1348, 1349, 1351, 1359, 1361, 1364, - 1366, 1373, 1385, 1405, 196, 198, 206, 219, 229, 233, - 240, 258, 273, 275, 282, 295, 306, 314, 315, 318, - 324, 374, 380, 381, 382, 383, 402, 403, 404, 407, - 410, 411, 414, 416, 417, 420, 424, 428, 429, 430, - 432, 434, 436, 448, 453, 467, 468, 469, 470, 471, - 474, 475, 480, 481, 482, 483, 484, 492, 493, 506, - 576, 578, 593, 611, 617, 473, 297, 298, 437, 438, - 310, 311, 631, 632, 296, 588, 618, 586, 630, 612, - 431, 372, 1339, 1345, 375, 278, 301, 316, 1354, 603, - 494, 224, 459, 287, 248, 1372, 1374, 208, 243, 227, - 256, 271, 274, 320, 385, 393, 422, 427, 293, 268, - 241, 452, 238, 477, 509, 510, 511, 513, 389, 263, - 426, 1335, 1363, 370, 566, 567, 312, 390, 0, 0, - 0, 1391, 1377, 518, 0, 1320, 1394, 1289, 1308, 1404, - 1311, 1314, 1356, 1267, 1334, 409, 1305, 1260, 1293, 1262, - 1300, 1263, 1291, 1322, 267, 1288, 1379, 1338, 1393, 360, - 264, 1269, 1294, 423, 1310, 201, 1358, 479, 249, 371, - 368, 573, 279, 270, 266, 247, 313, 379, 421, 508, - 415, 1400, 364, 1344, 0, 489, 394, 0, 0, 0, - 1324, 1383, 1332, 1370, 1319, 1357, 1277, 1343, 1395, 1306, - 1353, 1396, 319, 245, 321, 200, 406, 490, 283, 0, - 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 0, 0, 242, 0, 0, - 0, 345, 354, 353, 334, 335, 337, 339, 344, 351, - 357, 1302, 1350, 1390, 1303, 1352, 262, 317, 269, 261, - 570, 1401, 1382, 1266, 1331, 1389, 0, 0, 226, 1392, - 1326, 0, 1355, 0, 1407, 1261, 1346, 0, 1264, 1268, - 1403, 1387, 1297, 272, 0, 0, 0, 0, 0, 0, - 0, 1323, 1333, 1367, 1371, 1317, 0, 0, 0, 0, - 0, 0, 0, 0, 1295, 0, 1342, 0, 0, 0, - 1273, 1265, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1321, 0, 0, 0, 0, 1276, - 0, 1296, 1368, 0, 1259, 294, 1270, 395, 254, 0, - 446, 1375, 1386, 1318, 614, 1388, 1316, 1315, 1362, 1274, - 1381, 1309, 359, 1272, 326, 195, 222, 0, 1307, 405, - 454, 466, 1380, 1292, 1301, 250, 1299, 464, 419, 592, - 230, 281, 451, 425, 462, 433, 284, 1341, 1360, 463, - 366, 575, 443, 589, 615, 616, 260, 399, 601, 512, - 609, 633, 223, 257, 413, 497, 595, 486, 391, 571, - 572, 325, 485, 292, 199, 363, 621, 221, 472, 365, - 239, 228, 577, 598, 286, 449, 628, 210, 507, 587, - 236, 476, 0, 0, 636, 244, 496, 212, 584, 495, - 387, 322, 323, 211, 0, 450, 265, 290, 0, 0, - 255, 408, 579, 580, 253, 637, 225, 608, 217, 1271, - 607, 401, 574, 585, 388, 377, 216, 583, 386, 376, - 330, 349, 350, 277, 303, 440, 369, 441, 302, 304, - 397, 396, 398, 204, 596, 0, 205, 0, 491, 597, - 638, 445, 209, 231, 232, 234, 1287, 276, 280, 288, - 291, 299, 300, 309, 361, 412, 439, 435, 444, 1376, - 569, 590, 602, 613, 619, 620, 622, 623, 624, 625, - 626, 629, 627, 400, 307, 487, 329, 367, 1365, 1406, - 418, 465, 237, 594, 488, 197, 1281, 1286, 1279, 0, - 251, 252, 1347, 565, 1282, 1280, 1336, 1337, 1283, 1397, - 1398, 1399, 1384, 639, 640, 641, 642, 643, 644, 645, - 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, - 656, 634, 498, 504, 499, 500, 501, 502, 503, 0, - 505, 1369, 1275, 0, 1284, 1285, 1378, 581, 582, 657, - 378, 478, 591, 331, 343, 346, 336, 355, 0, 356, - 332, 333, 338, 340, 341, 342, 347, 348, 352, 358, - 246, 207, 384, 392, 568, 308, 213, 214, 215, 514, - 515, 516, 517, 605, 606, 610, 202, 455, 456, 457, - 458, 289, 600, 305, 461, 460, 327, 328, 373, 442, - 530, 532, 543, 547, 549, 551, 557, 560, 531, 533, - 544, 548, 550, 552, 558, 561, 520, 522, 524, 526, - 539, 538, 535, 563, 564, 541, 546, 525, 537, 542, - 555, 562, 559, 519, 523, 527, 536, 554, 553, 534, - 545, 556, 540, 528, 521, 529, 1340, 194, 218, 362, - 1402, 447, 285, 635, 604, 599, 203, 220, 1278, 259, - 1290, 1298, 0, 1304, 1312, 1313, 1325, 1327, 1328, 1329, - 1330, 1348, 1349, 1351, 1359, 1361, 1364, 1366, 1373, 1385, - 1405, 196, 198, 206, 219, 229, 233, 240, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 429, 430, 432, 434, 436, - 448, 453, 467, 468, 469, 470, 471, 474, 475, 480, - 481, 482, 483, 484, 492, 493, 506, 576, 578, 593, - 611, 617, 473, 297, 298, 437, 438, 310, 311, 631, - 632, 296, 588, 618, 586, 630, 612, 431, 372, 1339, - 1345, 375, 278, 301, 316, 1354, 603, 494, 224, 459, - 287, 248, 1372, 1374, 208, 243, 227, 256, 271, 274, - 320, 385, 393, 422, 427, 293, 268, 241, 452, 238, - 477, 509, 510, 511, 513, 389, 263, 426, 1335, 1363, - 370, 566, 567, 312, 390, 0, 0, 0, 1391, 1377, - 518, 0, 1320, 1394, 1289, 1308, 1404, 1311, 1314, 1356, - 1267, 1334, 409, 1305, 1260, 1293, 1262, 1300, 1263, 1291, - 1322, 267, 1288, 1379, 1338, 1393, 360, 264, 1269, 1294, - 423, 1310, 201, 1358, 479, 249, 371, 368, 573, 279, - 270, 266, 247, 313, 379, 421, 508, 415, 1400, 364, - 1344, 0, 489, 394, 0, 0, 0, 1324, 1383, 1332, - 1370, 1319, 1357, 1277, 1343, 1395, 1306, 1353, 1396, 319, - 245, 321, 200, 406, 490, 283, 0, 0, 0, 0, - 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 0, 0, 242, 0, 0, 0, 345, 354, - 353, 334, 335, 337, 339, 344, 351, 357, 1302, 1350, - 1390, 1303, 1352, 262, 317, 269, 261, 570, 1401, 1382, - 1266, 1331, 1389, 0, 0, 226, 1392, 1326, 0, 1355, - 0, 1407, 1261, 1346, 0, 1264, 1268, 1403, 1387, 1297, - 272, 0, 0, 0, 0, 0, 0, 0, 1323, 1333, - 1367, 1371, 1317, 0, 0, 0, 0, 0, 0, 0, - 0, 1295, 0, 1342, 0, 0, 0, 1273, 1265, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1321, 0, 0, 0, 0, 1276, 0, 1296, 1368, - 0, 1259, 294, 1270, 395, 254, 0, 446, 1375, 1386, - 1318, 614, 1388, 1316, 1315, 1362, 1274, 1381, 1309, 359, - 1272, 326, 195, 222, 0, 1307, 405, 454, 466, 1380, - 1292, 1301, 250, 1299, 464, 419, 592, 230, 281, 451, - 425, 462, 433, 284, 1341, 1360, 463, 366, 575, 443, - 589, 615, 616, 260, 399, 601, 512, 609, 633, 223, - 257, 413, 497, 595, 486, 391, 571, 572, 325, 485, - 292, 199, 363, 621, 221, 472, 365, 239, 228, 577, - 598, 286, 449, 628, 210, 507, 587, 236, 476, 0, - 0, 636, 244, 496, 212, 584, 495, 387, 322, 323, - 211, 0, 450, 265, 290, 0, 0, 255, 408, 579, - 580, 253, 637, 225, 608, 217, 1271, 607, 401, 574, - 585, 388, 377, 216, 583, 386, 376, 330, 349, 350, - 277, 303, 440, 369, 441, 302, 304, 397, 396, 398, - 204, 596, 0, 205, 0, 491, 597, 638, 445, 209, - 231, 232, 234, 1287, 276, 280, 288, 291, 299, 300, - 309, 361, 412, 439, 435, 444, 1376, 569, 590, 602, - 613, 619, 620, 622, 623, 624, 625, 626, 629, 627, - 400, 307, 487, 329, 367, 1365, 1406, 418, 465, 237, - 594, 488, 197, 1281, 1286, 1279, 0, 251, 252, 1347, - 565, 1282, 1280, 1336, 1337, 1283, 1397, 1398, 1399, 1384, - 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 634, 498, - 504, 499, 500, 501, 502, 503, 0, 505, 1369, 1275, - 0, 1284, 1285, 1378, 581, 582, 657, 378, 478, 591, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 246, 207, 384, - 392, 568, 308, 213, 214, 215, 514, 515, 516, 517, - 605, 606, 610, 202, 455, 456, 457, 458, 289, 600, - 305, 461, 460, 327, 328, 373, 442, 530, 532, 543, - 547, 549, 551, 557, 560, 531, 533, 544, 548, 550, - 552, 558, 561, 520, 522, 524, 526, 539, 538, 535, - 563, 564, 541, 546, 525, 537, 542, 555, 562, 559, - 519, 523, 527, 536, 554, 553, 534, 545, 556, 540, - 528, 521, 529, 1340, 194, 218, 362, 1402, 447, 285, - 635, 604, 599, 203, 220, 1278, 259, 1290, 1298, 0, - 1304, 1312, 1313, 1325, 1327, 1328, 1329, 1330, 1348, 1349, - 1351, 1359, 1361, 1364, 1366, 1373, 1385, 1405, 196, 198, - 206, 219, 229, 233, 240, 258, 273, 275, 282, 295, - 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, - 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, - 424, 428, 429, 430, 432, 434, 436, 448, 453, 467, - 468, 469, 470, 471, 474, 475, 480, 481, 482, 483, - 484, 492, 493, 506, 576, 578, 593, 611, 617, 473, - 297, 298, 437, 438, 310, 311, 631, 632, 296, 588, - 618, 586, 630, 612, 431, 372, 1339, 1345, 375, 278, - 301, 316, 1354, 603, 494, 224, 459, 287, 248, 1372, - 1374, 208, 243, 227, 256, 271, 274, 320, 385, 393, - 422, 427, 293, 268, 241, 452, 238, 477, 509, 510, - 511, 513, 389, 263, 426, 1335, 1363, 370, 566, 567, - 312, 390, 0, 0, 0, 0, 0, 518, 0, 759, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, - 0, 0, 0, 0, 747, 0, 0, 0, 267, 752, - 0, 0, 0, 360, 264, 0, 0, 423, 0, 201, - 0, 479, 249, 371, 368, 573, 279, 270, 266, 247, - 313, 379, 421, 508, 415, 758, 364, 0, 0, 489, - 394, 0, 0, 0, 0, 0, 754, 755, 0, 0, - 0, 0, 0, 0, 0, 0, 319, 245, 321, 200, - 406, 490, 283, 0, 93, 0, 0, 955, 939, 731, - 905, 943, 956, 957, 958, 959, 944, 0, 235, 945, - 946, 242, 947, 0, 904, 789, 791, 790, 854, 855, - 856, 857, 858, 859, 860, 787, 952, 960, 961, 0, - 262, 317, 269, 261, 570, 0, 0, 2168, 2169, 2170, - 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, - 727, 744, 0, 757, 0, 0, 0, 272, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 741, 742, 0, 0, 0, 0, - 899, 0, 743, 0, 0, 751, 962, 963, 964, 965, + 653, 654, 655, 656, 657, 658, 636, 500, 506, 501, + 502, 503, 504, 505, 0, 507, 1375, 1280, 0, 1289, + 1290, 1384, 583, 584, 659, 380, 480, 593, 333, 345, + 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, + 344, 349, 350, 354, 360, 248, 209, 386, 394, 570, + 310, 215, 216, 217, 516, 517, 518, 519, 607, 608, + 612, 204, 457, 458, 459, 460, 291, 602, 307, 463, + 462, 329, 330, 375, 444, 532, 534, 545, 549, 551, + 553, 559, 562, 533, 535, 546, 550, 552, 554, 560, + 563, 522, 524, 526, 528, 541, 540, 537, 565, 566, + 543, 548, 527, 539, 544, 557, 564, 561, 521, 525, + 529, 538, 556, 555, 536, 547, 558, 542, 530, 523, + 531, 1346, 196, 220, 364, 1408, 449, 287, 637, 606, + 601, 205, 222, 1283, 261, 1295, 1303, 0, 1309, 1317, + 1318, 1330, 1333, 1334, 1335, 1336, 1354, 1355, 1357, 1365, + 1367, 1370, 1372, 1379, 1391, 1411, 198, 200, 208, 221, + 231, 235, 242, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 431, 432, 434, 436, 438, 450, 455, 469, 470, 471, + 472, 473, 476, 477, 482, 483, 484, 485, 486, 494, + 495, 508, 578, 580, 595, 613, 619, 475, 299, 300, + 439, 440, 312, 313, 633, 634, 298, 590, 620, 588, + 632, 614, 433, 374, 1345, 1351, 377, 280, 303, 318, + 1360, 605, 496, 226, 461, 289, 250, 1378, 1380, 210, + 245, 229, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 243, 454, 240, 479, 511, 512, 513, 515, + 391, 265, 428, 1341, 1369, 372, 568, 569, 314, 392, + 0, 0, 0, 1397, 1383, 520, 0, 1325, 1400, 1294, + 1313, 1410, 1316, 1319, 1362, 1272, 1340, 411, 1310, 1265, + 1298, 1267, 1305, 1268, 1296, 1327, 269, 1293, 1385, 1344, + 1399, 362, 266, 1274, 1299, 425, 1315, 203, 1364, 481, + 251, 373, 370, 575, 281, 272, 268, 249, 315, 381, + 423, 510, 417, 1406, 366, 1350, 0, 491, 396, 0, + 0, 0, 1329, 1389, 1338, 1376, 1324, 1363, 1282, 1349, + 1401, 1311, 1359, 1402, 321, 247, 323, 202, 408, 492, + 285, 0, 0, 0, 0, 0, 941, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 1307, 1356, 1396, 1308, 1358, 264, 319, + 271, 263, 572, 1407, 1388, 1271, 1337, 1395, 1332, 0, + 0, 228, 1398, 1331, 0, 1361, 0, 1413, 1266, 1352, + 0, 1269, 1273, 1409, 1393, 1302, 274, 0, 0, 0, + 0, 0, 0, 0, 1328, 1339, 1373, 1377, 1322, 0, + 0, 0, 0, 0, 0, 0, 0, 1300, 0, 1348, + 0, 0, 0, 1278, 1270, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1326, 0, 0, + 0, 0, 1281, 0, 1301, 1374, 0, 1264, 296, 1275, + 397, 256, 0, 448, 1381, 1392, 1323, 616, 1394, 1321, + 1320, 1368, 1279, 1387, 1314, 361, 1277, 328, 197, 224, + 0, 1312, 407, 456, 468, 1386, 1297, 1306, 252, 1304, + 466, 421, 594, 232, 283, 453, 427, 464, 435, 286, + 1347, 1366, 465, 368, 577, 445, 591, 617, 618, 262, + 401, 603, 514, 611, 635, 225, 259, 415, 499, 597, + 488, 393, 573, 574, 327, 487, 294, 201, 365, 623, + 223, 474, 367, 241, 230, 579, 600, 288, 451, 630, + 212, 509, 589, 238, 478, 0, 0, 638, 246, 498, + 214, 586, 497, 389, 324, 325, 213, 0, 452, 267, + 292, 0, 0, 257, 410, 581, 582, 255, 639, 227, + 610, 219, 1276, 609, 403, 576, 587, 390, 379, 218, + 585, 388, 378, 332, 351, 352, 279, 305, 442, 371, + 443, 304, 306, 399, 398, 400, 206, 598, 0, 207, + 0, 493, 599, 640, 447, 211, 233, 234, 236, 1292, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 441, + 437, 446, 1382, 571, 592, 604, 615, 621, 622, 624, + 625, 626, 627, 628, 631, 629, 402, 309, 489, 331, + 369, 1371, 1412, 420, 467, 239, 596, 490, 199, 1286, + 1291, 1284, 0, 253, 254, 1353, 567, 1287, 1285, 1342, + 1343, 1288, 1403, 1404, 1405, 1390, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 636, 500, 506, 501, 502, 503, + 504, 505, 0, 507, 1375, 1280, 0, 1289, 1290, 1384, + 583, 584, 659, 380, 480, 593, 333, 345, 348, 338, + 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, + 350, 354, 360, 248, 209, 386, 394, 570, 310, 215, + 216, 217, 516, 517, 518, 519, 607, 608, 612, 204, + 457, 458, 459, 460, 291, 602, 307, 463, 462, 329, + 330, 375, 444, 532, 534, 545, 549, 551, 553, 559, + 562, 533, 535, 546, 550, 552, 554, 560, 563, 522, + 524, 526, 528, 541, 540, 537, 565, 566, 543, 548, + 527, 539, 544, 557, 564, 561, 521, 525, 529, 538, + 556, 555, 536, 547, 558, 542, 530, 523, 531, 1346, + 196, 220, 364, 1408, 449, 287, 637, 606, 601, 205, + 222, 1283, 261, 1295, 1303, 0, 1309, 1317, 1318, 1330, + 1333, 1334, 1335, 1336, 1354, 1355, 1357, 1365, 1367, 1370, + 1372, 1379, 1391, 1411, 198, 200, 208, 221, 231, 235, + 242, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 431, 432, + 434, 436, 438, 450, 455, 469, 470, 471, 472, 473, + 476, 477, 482, 483, 484, 485, 486, 494, 495, 508, + 578, 580, 595, 613, 619, 475, 299, 300, 439, 440, + 312, 313, 633, 634, 298, 590, 620, 588, 632, 614, + 433, 374, 1345, 1351, 377, 280, 303, 318, 1360, 605, + 496, 226, 461, 289, 250, 1378, 1380, 210, 245, 229, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 243, 454, 240, 479, 511, 512, 513, 515, 391, 265, + 428, 1341, 1369, 372, 568, 569, 314, 392, 0, 0, + 0, 0, 0, 520, 0, 761, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 749, 0, 0, 0, 269, 754, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 203, 0, 481, 251, 373, + 370, 575, 281, 272, 268, 249, 315, 381, 423, 510, + 417, 760, 366, 0, 0, 491, 396, 0, 0, 0, + 0, 0, 756, 757, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 247, 323, 202, 408, 492, 285, 0, + 95, 0, 0, 957, 941, 733, 907, 945, 958, 959, + 960, 961, 946, 0, 237, 947, 948, 244, 949, 0, + 906, 791, 793, 792, 856, 857, 858, 859, 860, 861, + 862, 789, 954, 962, 963, 0, 264, 319, 271, 263, + 572, 0, 0, 2175, 2176, 2177, 0, 0, 0, 228, + 0, 0, 0, 0, 0, 0, 0, 729, 746, 0, + 759, 0, 0, 0, 274, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 743, 744, 0, 0, 0, 0, 901, 0, 745, + 0, 0, 753, 964, 965, 966, 967, 968, 969, 970, + 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, + 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, + 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003, 1004, 1005, 755, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 448, 900, 0, 0, 616, 0, 0, 898, 0, + 0, 0, 0, 361, 0, 328, 197, 224, 0, 0, + 407, 456, 468, 0, 0, 0, 951, 0, 466, 421, + 594, 232, 283, 453, 427, 464, 435, 286, 0, 0, + 465, 368, 577, 445, 591, 617, 618, 262, 401, 603, + 514, 611, 635, 225, 259, 415, 499, 597, 488, 393, + 573, 574, 327, 487, 294, 201, 365, 623, 223, 474, + 367, 241, 230, 579, 600, 288, 451, 630, 212, 509, + 589, 238, 478, 0, 0, 638, 246, 498, 214, 586, + 497, 389, 324, 325, 213, 0, 452, 267, 292, 0, + 0, 257, 410, 952, 953, 255, 639, 797, 610, 219, + 0, 609, 403, 576, 587, 390, 379, 218, 585, 388, + 378, 332, 805, 806, 279, 305, 882, 881, 880, 304, + 306, 878, 879, 877, 206, 598, 0, 207, 0, 493, + 599, 640, 447, 211, 233, 234, 236, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 441, 437, 446, + 0, 571, 592, 604, 615, 621, 622, 624, 625, 626, + 627, 628, 631, 629, 402, 309, 489, 331, 369, 0, + 0, 420, 467, 239, 596, 490, 888, 910, 899, 765, + 766, 889, 890, 914, 891, 768, 769, 911, 912, 762, + 763, 767, 913, 915, 641, 642, 643, 644, 645, 646, + 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 636, 500, 506, 501, 502, 503, 504, 505, + 0, 507, 902, 752, 751, 0, 758, 0, 787, 788, + 790, 794, 795, 796, 807, 854, 855, 863, 865, 866, + 864, 867, 868, 869, 872, 873, 874, 875, 870, 871, + 876, 770, 774, 771, 772, 773, 785, 775, 776, 777, + 778, 779, 780, 781, 782, 783, 784, 786, 925, 926, + 927, 928, 929, 930, 800, 804, 803, 801, 802, 798, + 799, 826, 825, 827, 828, 829, 830, 831, 832, 834, + 833, 835, 836, 837, 838, 839, 840, 808, 809, 812, + 813, 811, 810, 814, 823, 824, 815, 816, 817, 818, + 819, 820, 822, 821, 841, 842, 843, 844, 845, 847, + 846, 850, 851, 849, 848, 853, 852, 750, 196, 220, + 364, 0, 449, 287, 637, 606, 601, 205, 222, 916, + 261, 917, 0, 0, 921, 0, 0, 0, 923, 922, + 0, 924, 886, 885, 0, 0, 918, 919, 0, 920, + 0, 0, 198, 200, 208, 221, 231, 235, 242, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 431, 432, 434, 436, + 438, 450, 455, 469, 470, 471, 472, 473, 476, 477, + 482, 483, 484, 485, 486, 494, 495, 508, 578, 580, + 595, 613, 619, 475, 931, 932, 933, 934, 935, 936, + 937, 938, 298, 590, 620, 588, 632, 614, 433, 374, + 0, 0, 377, 280, 303, 318, 0, 605, 496, 226, + 461, 289, 250, 956, 0, 210, 245, 229, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 243, 454, + 240, 479, 511, 512, 513, 515, 391, 265, 428, 392, + 0, 372, 568, 569, 314, 520, 0, 761, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 749, 0, 0, 0, 269, 754, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 203, 0, 481, + 251, 373, 370, 575, 281, 272, 268, 249, 315, 381, + 423, 510, 417, 760, 366, 0, 0, 491, 396, 0, + 0, 0, 0, 0, 756, 757, 0, 0, 0, 0, + 0, 0, 2381, 0, 321, 247, 323, 202, 408, 492, + 285, 0, 95, 0, 0, 957, 941, 733, 907, 945, + 958, 959, 960, 961, 946, 0, 237, 947, 948, 244, + 949, 0, 906, 791, 793, 792, 856, 857, 858, 859, + 860, 861, 862, 789, 954, 962, 963, 2382, 264, 319, + 271, 263, 572, 0, 0, 0, 0, 0, 0, 0, + 0, 228, 0, 0, 0, 0, 0, 0, 0, 729, + 746, 0, 759, 0, 0, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 743, 744, 0, 0, 0, 0, 901, + 0, 745, 0, 0, 753, 964, 965, 966, 967, 968, + 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, + 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, + 999, 1000, 1001, 1002, 1003, 1004, 1005, 755, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 448, 900, 0, 0, 616, 0, 0, + 898, 0, 0, 0, 0, 361, 0, 328, 197, 224, + 0, 0, 407, 456, 468, 0, 0, 0, 951, 0, + 466, 421, 594, 232, 283, 453, 427, 464, 435, 286, + 0, 0, 465, 368, 577, 445, 591, 617, 618, 262, + 401, 603, 514, 611, 635, 225, 259, 415, 499, 597, + 488, 393, 573, 574, 327, 487, 294, 201, 365, 623, + 223, 474, 367, 241, 230, 579, 600, 288, 451, 630, + 212, 509, 589, 238, 478, 0, 0, 638, 246, 498, + 214, 586, 497, 389, 324, 325, 213, 0, 452, 267, + 292, 0, 0, 257, 410, 952, 953, 255, 639, 797, + 610, 219, 0, 609, 403, 576, 587, 390, 379, 218, + 585, 388, 378, 332, 805, 806, 279, 305, 882, 881, + 880, 304, 306, 878, 879, 877, 206, 598, 0, 207, + 0, 493, 599, 640, 447, 211, 233, 234, 236, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 441, + 437, 446, 0, 571, 592, 604, 615, 621, 622, 624, + 625, 626, 627, 628, 631, 629, 402, 309, 489, 331, + 369, 0, 0, 420, 467, 239, 596, 490, 888, 910, + 899, 765, 766, 889, 890, 914, 891, 768, 769, 911, + 912, 762, 763, 767, 913, 915, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 636, 500, 506, 501, 502, 503, + 504, 505, 0, 507, 902, 752, 751, 0, 758, 0, + 787, 788, 790, 794, 795, 796, 807, 854, 855, 863, + 865, 866, 864, 867, 868, 869, 872, 873, 874, 875, + 870, 871, 876, 770, 774, 771, 772, 773, 785, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 786, + 925, 926, 927, 928, 929, 930, 800, 804, 803, 801, + 802, 798, 799, 826, 825, 827, 828, 829, 830, 831, + 832, 834, 833, 835, 836, 837, 838, 839, 840, 808, + 809, 812, 813, 811, 810, 814, 823, 824, 815, 816, + 817, 818, 819, 820, 822, 821, 841, 842, 843, 844, + 845, 847, 846, 850, 851, 849, 848, 853, 852, 750, + 196, 220, 364, 0, 449, 287, 637, 606, 601, 205, + 222, 916, 261, 917, 0, 0, 921, 0, 0, 0, + 923, 922, 0, 924, 886, 885, 0, 0, 918, 919, + 0, 920, 0, 0, 198, 200, 208, 221, 231, 235, + 242, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 431, 432, + 434, 436, 438, 450, 455, 469, 470, 471, 472, 473, + 476, 477, 482, 483, 484, 485, 486, 494, 495, 508, + 578, 580, 595, 613, 619, 475, 931, 932, 933, 934, + 935, 936, 937, 938, 298, 590, 620, 588, 632, 614, + 433, 374, 0, 0, 377, 280, 303, 318, 0, 605, + 496, 226, 461, 289, 250, 956, 0, 210, 245, 229, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 243, 454, 240, 479, 511, 512, 513, 515, 391, 265, + 428, 0, 392, 372, 568, 569, 314, 86, 520, 0, + 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 749, 0, 0, 0, 269, + 754, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 760, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 756, 757, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 95, 0, 0, 957, 941, + 733, 907, 945, 958, 959, 960, 961, 946, 0, 237, + 947, 948, 244, 949, 0, 906, 791, 793, 792, 856, + 857, 858, 859, 860, 861, 862, 789, 954, 962, 963, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 729, 746, 0, 759, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 743, 744, 0, 0, + 0, 0, 901, 0, 745, 0, 0, 753, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, - 996, 997, 998, 999, 1000, 1001, 1002, 1003, 753, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 0, 395, 254, 0, 446, 898, 0, 0, 614, 0, - 0, 896, 0, 0, 0, 0, 359, 0, 326, 195, - 222, 0, 0, 405, 454, 466, 0, 0, 0, 949, - 0, 464, 419, 592, 230, 281, 451, 425, 462, 433, - 284, 0, 0, 463, 366, 575, 443, 589, 615, 616, - 260, 399, 601, 512, 609, 633, 223, 257, 413, 497, - 595, 486, 391, 571, 572, 325, 485, 292, 199, 363, - 621, 221, 472, 365, 239, 228, 577, 598, 286, 449, - 628, 210, 507, 587, 236, 476, 0, 0, 636, 244, - 496, 212, 584, 495, 387, 322, 323, 211, 0, 450, - 265, 290, 0, 0, 255, 408, 950, 951, 253, 637, - 795, 608, 217, 0, 607, 401, 574, 585, 388, 377, - 216, 583, 386, 376, 330, 803, 804, 277, 303, 880, - 879, 878, 302, 304, 876, 877, 875, 204, 596, 0, - 205, 0, 491, 597, 638, 445, 209, 231, 232, 234, - 0, 276, 280, 288, 291, 299, 300, 309, 361, 412, - 439, 435, 444, 0, 569, 590, 602, 613, 619, 620, - 622, 623, 624, 625, 626, 629, 627, 400, 307, 487, - 329, 367, 0, 0, 418, 465, 237, 594, 488, 886, - 908, 897, 763, 764, 887, 888, 912, 889, 766, 767, - 909, 910, 760, 761, 765, 911, 913, 639, 640, 641, + 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, + 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 448, 900, 0, 0, + 616, 0, 0, 898, 0, 0, 0, 0, 361, 0, + 328, 197, 224, 0, 0, 407, 456, 468, 0, 0, + 0, 951, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 952, 953, + 255, 639, 797, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 805, 806, 279, + 305, 882, 881, 880, 304, 306, 878, 879, 877, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 888, 910, 899, 765, 766, 889, 890, 914, 891, + 768, 769, 911, 912, 762, 763, 767, 913, 915, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, - 652, 653, 654, 655, 656, 634, 498, 504, 499, 500, - 501, 502, 503, 0, 505, 900, 750, 749, 0, 756, - 0, 785, 786, 788, 792, 793, 794, 805, 852, 853, - 861, 863, 864, 862, 865, 866, 867, 870, 871, 872, - 873, 868, 869, 874, 768, 772, 769, 770, 771, 783, - 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, - 784, 923, 924, 925, 926, 927, 928, 798, 802, 801, - 799, 800, 796, 797, 824, 823, 825, 826, 827, 828, - 829, 830, 832, 831, 833, 834, 835, 836, 837, 838, - 806, 807, 810, 811, 809, 808, 812, 821, 822, 813, - 814, 815, 816, 817, 818, 820, 819, 839, 840, 841, - 842, 843, 845, 844, 848, 849, 847, 846, 851, 850, - 748, 194, 218, 362, 0, 447, 285, 635, 604, 599, - 203, 220, 914, 259, 915, 0, 0, 919, 0, 0, - 0, 921, 920, 0, 922, 884, 883, 0, 0, 916, - 917, 0, 918, 0, 0, 196, 198, 206, 219, 229, - 233, 240, 258, 273, 275, 282, 295, 306, 314, 315, - 318, 324, 374, 380, 381, 382, 383, 402, 403, 404, - 407, 410, 411, 414, 416, 417, 420, 424, 428, 429, - 430, 432, 434, 436, 448, 453, 467, 468, 469, 470, - 471, 474, 475, 480, 481, 482, 483, 484, 492, 493, - 506, 576, 578, 593, 611, 617, 473, 929, 930, 931, - 932, 933, 934, 935, 936, 296, 588, 618, 586, 630, - 612, 431, 372, 0, 0, 375, 278, 301, 316, 0, - 603, 494, 224, 459, 287, 248, 954, 0, 208, 243, - 227, 256, 271, 274, 320, 385, 393, 422, 427, 293, - 268, 241, 452, 238, 477, 509, 510, 511, 513, 389, - 263, 426, 390, 0, 370, 566, 567, 312, 518, 0, - 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 409, 0, 0, 0, 0, 747, 0, 0, 0, 267, - 752, 0, 0, 0, 360, 264, 0, 0, 423, 0, - 201, 0, 479, 249, 371, 368, 573, 279, 270, 266, - 247, 313, 379, 421, 508, 415, 758, 364, 0, 0, - 489, 394, 0, 0, 0, 0, 0, 754, 755, 0, - 0, 0, 0, 0, 0, 2374, 0, 319, 245, 321, - 200, 406, 490, 283, 0, 93, 0, 0, 955, 939, - 731, 905, 943, 956, 957, 958, 959, 944, 0, 235, - 945, 946, 242, 947, 0, 904, 789, 791, 790, 854, - 855, 856, 857, 858, 859, 860, 787, 952, 960, 961, - 2375, 262, 317, 269, 261, 570, 0, 0, 0, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, - 0, 727, 744, 0, 757, 0, 0, 0, 272, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 741, 742, 0, 0, 0, - 0, 899, 0, 743, 0, 0, 751, 962, 963, 964, - 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, - 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, - 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, - 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 753, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 0, 395, 254, 0, 446, 898, 0, 0, 614, - 0, 0, 896, 0, 0, 0, 0, 359, 0, 326, - 195, 222, 0, 0, 405, 454, 466, 0, 0, 0, - 949, 0, 464, 419, 592, 230, 281, 451, 425, 462, - 433, 284, 0, 0, 463, 366, 575, 443, 589, 615, - 616, 260, 399, 601, 512, 609, 633, 223, 257, 413, - 497, 595, 486, 391, 571, 572, 325, 485, 292, 199, - 363, 621, 221, 472, 365, 239, 228, 577, 598, 286, - 449, 628, 210, 507, 587, 236, 476, 0, 0, 636, - 244, 496, 212, 584, 495, 387, 322, 323, 211, 0, - 450, 265, 290, 0, 0, 255, 408, 950, 951, 253, - 637, 795, 608, 217, 0, 607, 401, 574, 585, 388, - 377, 216, 583, 386, 376, 330, 803, 804, 277, 303, - 880, 879, 878, 302, 304, 876, 877, 875, 204, 596, - 0, 205, 0, 491, 597, 638, 445, 209, 231, 232, - 234, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 439, 435, 444, 0, 569, 590, 602, 613, 619, - 620, 622, 623, 624, 625, 626, 629, 627, 400, 307, - 487, 329, 367, 0, 0, 418, 465, 237, 594, 488, - 886, 908, 897, 763, 764, 887, 888, 912, 889, 766, - 767, 909, 910, 760, 761, 765, 911, 913, 639, 640, - 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, - 651, 652, 653, 654, 655, 656, 634, 498, 504, 499, - 500, 501, 502, 503, 0, 505, 900, 750, 749, 0, - 756, 0, 785, 786, 788, 792, 793, 794, 805, 852, - 853, 861, 863, 864, 862, 865, 866, 867, 870, 871, - 872, 873, 868, 869, 874, 768, 772, 769, 770, 771, - 783, 773, 774, 775, 776, 777, 778, 779, 780, 781, - 782, 784, 923, 924, 925, 926, 927, 928, 798, 802, - 801, 799, 800, 796, 797, 824, 823, 825, 826, 827, - 828, 829, 830, 832, 831, 833, 834, 835, 836, 837, - 838, 806, 807, 810, 811, 809, 808, 812, 821, 822, - 813, 814, 815, 816, 817, 818, 820, 819, 839, 840, - 841, 842, 843, 845, 844, 848, 849, 847, 846, 851, - 850, 748, 194, 218, 362, 0, 447, 285, 635, 604, - 599, 203, 220, 914, 259, 915, 0, 0, 919, 0, - 0, 0, 921, 920, 0, 922, 884, 883, 0, 0, - 916, 917, 0, 918, 0, 0, 196, 198, 206, 219, - 229, 233, 240, 258, 273, 275, 282, 295, 306, 314, - 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, - 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, - 429, 430, 432, 434, 436, 448, 453, 467, 468, 469, - 470, 471, 474, 475, 480, 481, 482, 483, 484, 492, - 493, 506, 576, 578, 593, 611, 617, 473, 929, 930, - 931, 932, 933, 934, 935, 936, 296, 588, 618, 586, - 630, 612, 431, 372, 0, 0, 375, 278, 301, 316, - 0, 603, 494, 224, 459, 287, 248, 954, 0, 208, - 243, 227, 256, 271, 274, 320, 385, 393, 422, 427, - 293, 268, 241, 452, 238, 477, 509, 510, 511, 513, - 389, 263, 426, 0, 390, 370, 566, 567, 312, 84, - 518, 0, 759, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 409, 0, 0, 0, 0, 747, 0, 0, - 0, 267, 752, 0, 0, 0, 360, 264, 0, 0, - 423, 0, 201, 0, 479, 249, 371, 368, 573, 279, - 270, 266, 247, 313, 379, 421, 508, 415, 758, 364, - 0, 0, 489, 394, 0, 0, 0, 0, 0, 754, - 755, 0, 0, 0, 0, 0, 0, 0, 0, 319, - 245, 321, 200, 406, 490, 283, 0, 93, 0, 0, - 955, 939, 731, 905, 943, 956, 957, 958, 959, 944, - 0, 235, 945, 946, 242, 947, 0, 904, 789, 791, - 790, 854, 855, 856, 857, 858, 859, 860, 787, 952, - 960, 961, 0, 262, 317, 269, 261, 570, 0, 0, - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, - 0, 0, 0, 727, 744, 0, 757, 0, 0, 0, - 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 741, 742, 0, - 0, 0, 0, 899, 0, 743, 0, 0, 751, 962, - 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, - 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, - 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, - 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, - 1003, 753, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 395, 254, 0, 446, 898, 0, - 0, 614, 0, 0, 896, 0, 0, 0, 0, 359, - 0, 326, 195, 222, 0, 0, 405, 454, 466, 0, - 0, 0, 949, 0, 464, 419, 592, 230, 281, 451, - 425, 462, 433, 284, 0, 0, 463, 366, 575, 443, - 589, 615, 616, 260, 399, 601, 512, 609, 633, 223, - 257, 413, 497, 595, 486, 391, 571, 572, 325, 485, - 292, 199, 363, 621, 221, 472, 365, 239, 228, 577, - 598, 286, 449, 628, 210, 507, 587, 236, 476, 0, - 0, 636, 244, 496, 212, 584, 495, 387, 322, 323, - 211, 0, 450, 265, 290, 0, 0, 255, 408, 950, - 951, 253, 637, 795, 608, 217, 0, 607, 401, 574, - 585, 388, 377, 216, 583, 386, 376, 330, 803, 804, - 277, 303, 880, 879, 878, 302, 304, 876, 877, 875, - 204, 596, 0, 205, 0, 491, 597, 638, 445, 209, - 231, 232, 234, 0, 276, 280, 288, 291, 299, 300, - 309, 361, 412, 439, 435, 444, 0, 569, 590, 602, - 613, 619, 620, 622, 623, 624, 625, 626, 629, 627, - 400, 307, 487, 329, 367, 0, 0, 418, 465, 237, - 594, 488, 886, 908, 897, 763, 764, 887, 888, 912, - 889, 766, 767, 909, 910, 760, 761, 765, 911, 913, - 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 634, 498, - 504, 499, 500, 501, 502, 503, 0, 505, 900, 750, - 749, 0, 756, 0, 785, 786, 788, 792, 793, 794, - 805, 852, 853, 861, 863, 864, 862, 865, 866, 867, - 870, 871, 872, 873, 868, 869, 874, 768, 772, 769, - 770, 771, 783, 773, 774, 775, 776, 777, 778, 779, - 780, 781, 782, 784, 923, 924, 925, 926, 927, 928, - 798, 802, 801, 799, 800, 796, 797, 824, 823, 825, - 826, 827, 828, 829, 830, 832, 831, 833, 834, 835, - 836, 837, 838, 806, 807, 810, 811, 809, 808, 812, - 821, 822, 813, 814, 815, 816, 817, 818, 820, 819, - 839, 840, 841, 842, 843, 845, 844, 848, 849, 847, - 846, 851, 850, 748, 194, 218, 362, 92, 447, 285, - 635, 604, 599, 203, 220, 914, 259, 915, 0, 0, - 919, 0, 0, 0, 921, 920, 0, 922, 884, 883, - 0, 0, 916, 917, 0, 918, 0, 0, 196, 198, - 206, 219, 229, 233, 240, 258, 273, 275, 282, 295, - 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, - 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, - 424, 428, 429, 430, 432, 434, 436, 448, 453, 467, - 468, 469, 470, 471, 474, 475, 480, 481, 482, 483, - 484, 492, 493, 506, 576, 578, 593, 611, 617, 473, - 929, 930, 931, 932, 933, 934, 935, 936, 296, 588, - 618, 586, 630, 612, 431, 372, 0, 0, 375, 278, - 301, 316, 0, 603, 494, 224, 459, 287, 248, 954, - 0, 208, 243, 227, 256, 271, 274, 320, 385, 393, - 422, 427, 293, 268, 241, 452, 238, 477, 509, 510, - 511, 513, 389, 263, 426, 390, 0, 370, 566, 567, - 312, 518, 0, 759, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 409, 0, 0, 0, 0, 747, 0, - 0, 0, 267, 752, 0, 0, 0, 360, 264, 0, - 0, 423, 0, 201, 0, 479, 249, 371, 368, 573, - 279, 270, 266, 247, 313, 379, 421, 508, 415, 758, - 364, 0, 0, 489, 394, 0, 0, 0, 0, 0, - 754, 755, 0, 0, 0, 0, 0, 0, 0, 0, - 319, 245, 321, 200, 406, 490, 283, 0, 93, 0, - 0, 955, 939, 731, 905, 943, 956, 957, 958, 959, - 944, 0, 235, 945, 946, 242, 947, 0, 904, 789, - 791, 790, 854, 855, 856, 857, 858, 859, 860, 787, - 952, 960, 961, 0, 262, 317, 269, 261, 570, 0, - 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, - 0, 0, 0, 0, 727, 744, 0, 757, 0, 0, - 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 741, 742, - 0, 0, 0, 0, 899, 0, 743, 0, 0, 751, - 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 902, 752, 751, + 0, 758, 0, 787, 788, 790, 794, 795, 796, 807, + 854, 855, 863, 865, 866, 864, 867, 868, 869, 872, + 873, 874, 875, 870, 871, 876, 770, 774, 771, 772, + 773, 785, 775, 776, 777, 778, 779, 780, 781, 782, + 783, 784, 786, 925, 926, 927, 928, 929, 930, 800, + 804, 803, 801, 802, 798, 799, 826, 825, 827, 828, + 829, 830, 831, 832, 834, 833, 835, 836, 837, 838, + 839, 840, 808, 809, 812, 813, 811, 810, 814, 823, + 824, 815, 816, 817, 818, 819, 820, 822, 821, 841, + 842, 843, 844, 845, 847, 846, 850, 851, 849, 848, + 853, 852, 750, 196, 220, 364, 94, 449, 287, 637, + 606, 601, 205, 222, 916, 261, 917, 0, 0, 921, + 0, 0, 0, 923, 922, 0, 924, 886, 885, 0, + 0, 918, 919, 0, 920, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 931, + 932, 933, 934, 935, 936, 937, 938, 298, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 956, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 761, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 749, 0, 0, + 0, 269, 754, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 760, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 756, + 757, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 95, 0, 0, + 957, 941, 733, 907, 945, 958, 959, 960, 961, 946, + 0, 237, 947, 948, 244, 949, 0, 906, 791, 793, + 792, 856, 857, 858, 859, 860, 861, 862, 789, 954, + 962, 963, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 729, 746, 0, 759, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 743, 744, + 0, 0, 0, 0, 901, 0, 745, 0, 0, 753, + 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, + 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, + 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, + 1004, 1005, 755, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 900, + 0, 0, 616, 0, 0, 898, 0, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 951, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 3983, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 952, 953, 255, 639, 797, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 805, + 806, 279, 305, 882, 881, 880, 304, 306, 878, 879, + 877, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 888, 910, 899, 765, 766, 889, 890, + 914, 891, 768, 769, 911, 912, 762, 763, 767, 913, + 915, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 902, + 752, 751, 0, 758, 0, 787, 788, 790, 794, 795, + 796, 807, 854, 855, 863, 865, 866, 864, 867, 868, + 869, 872, 873, 874, 875, 870, 871, 876, 770, 774, + 771, 772, 773, 785, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 786, 925, 926, 927, 928, 929, + 930, 800, 804, 803, 801, 802, 798, 799, 826, 825, + 827, 828, 829, 830, 831, 832, 834, 833, 835, 836, + 837, 838, 839, 840, 808, 809, 812, 813, 811, 810, + 814, 823, 824, 815, 816, 817, 818, 819, 820, 822, + 821, 841, 842, 843, 844, 845, 847, 846, 850, 851, + 849, 848, 853, 852, 750, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 916, 261, 917, 0, + 0, 921, 0, 0, 0, 923, 922, 0, 924, 886, + 885, 0, 0, 918, 919, 0, 920, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 931, 932, 933, 934, 935, 936, 937, 938, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 956, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 392, 0, 372, 568, + 569, 314, 520, 0, 761, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 749, + 0, 0, 0, 269, 754, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 203, 0, 481, 251, 373, 370, + 575, 281, 272, 268, 249, 315, 381, 423, 510, 417, + 760, 366, 0, 0, 491, 396, 0, 0, 0, 0, + 0, 756, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 247, 323, 202, 408, 492, 285, 0, 95, + 0, 1716, 957, 941, 733, 907, 945, 958, 959, 960, + 961, 946, 0, 237, 947, 948, 244, 949, 0, 906, + 791, 793, 792, 856, 857, 858, 859, 860, 861, 862, + 789, 954, 962, 963, 0, 264, 319, 271, 263, 572, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 729, 746, 0, 759, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 743, 744, 0, 0, 0, 0, 901, 0, 745, 0, + 0, 753, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, - 1002, 1003, 753, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 395, 254, 0, 446, 898, - 0, 0, 614, 0, 0, 896, 0, 0, 0, 0, - 359, 0, 326, 195, 222, 0, 0, 405, 454, 466, - 0, 0, 0, 949, 0, 464, 419, 592, 230, 281, - 451, 425, 462, 433, 284, 3976, 0, 463, 366, 575, - 443, 589, 615, 616, 260, 399, 601, 512, 609, 633, - 223, 257, 413, 497, 595, 486, 391, 571, 572, 325, - 485, 292, 199, 363, 621, 221, 472, 365, 239, 228, - 577, 598, 286, 449, 628, 210, 507, 587, 236, 476, - 0, 0, 636, 244, 496, 212, 584, 495, 387, 322, - 323, 211, 0, 450, 265, 290, 0, 0, 255, 408, - 950, 951, 253, 637, 795, 608, 217, 0, 607, 401, - 574, 585, 388, 377, 216, 583, 386, 376, 330, 803, - 804, 277, 303, 880, 879, 878, 302, 304, 876, 877, - 875, 204, 596, 0, 205, 0, 491, 597, 638, 445, - 209, 231, 232, 234, 0, 276, 280, 288, 291, 299, - 300, 309, 361, 412, 439, 435, 444, 0, 569, 590, - 602, 613, 619, 620, 622, 623, 624, 625, 626, 629, - 627, 400, 307, 487, 329, 367, 0, 0, 418, 465, - 237, 594, 488, 886, 908, 897, 763, 764, 887, 888, - 912, 889, 766, 767, 909, 910, 760, 761, 765, 911, - 913, 639, 640, 641, 642, 643, 644, 645, 646, 647, - 648, 649, 650, 651, 652, 653, 654, 655, 656, 634, - 498, 504, 499, 500, 501, 502, 503, 0, 505, 900, - 750, 749, 0, 756, 0, 785, 786, 788, 792, 793, - 794, 805, 852, 853, 861, 863, 864, 862, 865, 866, - 867, 870, 871, 872, 873, 868, 869, 874, 768, 772, - 769, 770, 771, 783, 773, 774, 775, 776, 777, 778, - 779, 780, 781, 782, 784, 923, 924, 925, 926, 927, - 928, 798, 802, 801, 799, 800, 796, 797, 824, 823, - 825, 826, 827, 828, 829, 830, 832, 831, 833, 834, - 835, 836, 837, 838, 806, 807, 810, 811, 809, 808, - 812, 821, 822, 813, 814, 815, 816, 817, 818, 820, - 819, 839, 840, 841, 842, 843, 845, 844, 848, 849, - 847, 846, 851, 850, 748, 194, 218, 362, 0, 447, - 285, 635, 604, 599, 203, 220, 914, 259, 915, 0, - 0, 919, 0, 0, 0, 921, 920, 0, 922, 884, - 883, 0, 0, 916, 917, 0, 918, 0, 0, 196, - 198, 206, 219, 229, 233, 240, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 429, 430, 432, 434, 436, 448, 453, - 467, 468, 469, 470, 471, 474, 475, 480, 481, 482, - 483, 484, 492, 493, 506, 576, 578, 593, 611, 617, - 473, 929, 930, 931, 932, 933, 934, 935, 936, 296, - 588, 618, 586, 630, 612, 431, 372, 0, 0, 375, - 278, 301, 316, 0, 603, 494, 224, 459, 287, 248, - 954, 0, 208, 243, 227, 256, 271, 274, 320, 385, - 393, 422, 427, 293, 268, 241, 452, 238, 477, 509, - 510, 511, 513, 389, 263, 426, 390, 0, 370, 566, - 567, 312, 518, 0, 759, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 409, 0, 0, 0, 0, 747, - 0, 0, 0, 267, 752, 0, 0, 0, 360, 264, - 0, 0, 423, 0, 201, 0, 479, 249, 371, 368, - 573, 279, 270, 266, 247, 313, 379, 421, 508, 415, - 758, 364, 0, 0, 489, 394, 0, 0, 0, 0, - 0, 754, 755, 0, 0, 0, 0, 0, 0, 0, - 0, 319, 245, 321, 200, 406, 490, 283, 0, 93, - 0, 1709, 955, 939, 731, 905, 943, 956, 957, 958, - 959, 944, 0, 235, 945, 946, 242, 947, 0, 904, - 789, 791, 790, 854, 855, 856, 857, 858, 859, 860, - 787, 952, 960, 961, 0, 262, 317, 269, 261, 570, - 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, - 0, 0, 0, 0, 0, 727, 744, 0, 757, 0, - 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, - 742, 0, 0, 0, 0, 899, 0, 743, 0, 0, - 751, 962, 963, 964, 965, 966, 967, 968, 969, 970, - 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, - 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 753, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 446, - 898, 0, 0, 614, 0, 0, 896, 0, 0, 0, - 0, 359, 0, 326, 195, 222, 0, 0, 405, 454, - 466, 0, 0, 0, 949, 0, 464, 419, 592, 230, - 281, 451, 425, 462, 433, 284, 0, 0, 463, 366, - 575, 443, 589, 615, 616, 260, 399, 601, 512, 609, - 633, 223, 257, 413, 497, 595, 486, 391, 571, 572, - 325, 485, 292, 199, 363, 621, 221, 472, 365, 239, - 228, 577, 598, 286, 449, 628, 210, 507, 587, 236, - 476, 0, 0, 636, 244, 496, 212, 584, 495, 387, - 322, 323, 211, 0, 450, 265, 290, 0, 0, 255, - 408, 950, 951, 253, 637, 795, 608, 217, 0, 607, - 401, 574, 585, 388, 377, 216, 583, 386, 376, 330, - 803, 804, 277, 303, 880, 879, 878, 302, 304, 876, - 877, 875, 204, 596, 0, 205, 0, 491, 597, 638, - 445, 209, 231, 232, 234, 0, 276, 280, 288, 291, - 299, 300, 309, 361, 412, 439, 435, 444, 0, 569, - 590, 602, 613, 619, 620, 622, 623, 624, 625, 626, - 629, 627, 400, 307, 487, 329, 367, 0, 0, 418, - 465, 237, 594, 488, 886, 908, 897, 763, 764, 887, - 888, 912, 889, 766, 767, 909, 910, 760, 761, 765, - 911, 913, 639, 640, 641, 642, 643, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 634, 498, 504, 499, 500, 501, 502, 503, 0, 505, - 900, 750, 749, 0, 756, 0, 785, 786, 788, 792, - 793, 794, 805, 852, 853, 861, 863, 864, 862, 865, - 866, 867, 870, 871, 872, 873, 868, 869, 874, 768, - 772, 769, 770, 771, 783, 773, 774, 775, 776, 777, - 778, 779, 780, 781, 782, 784, 923, 924, 925, 926, - 927, 928, 798, 802, 801, 799, 800, 796, 797, 824, - 823, 825, 826, 827, 828, 829, 830, 832, 831, 833, - 834, 835, 836, 837, 838, 806, 807, 810, 811, 809, - 808, 812, 821, 822, 813, 814, 815, 816, 817, 818, - 820, 819, 839, 840, 841, 842, 843, 845, 844, 848, - 849, 847, 846, 851, 850, 748, 194, 218, 362, 0, - 447, 285, 635, 604, 599, 203, 220, 914, 259, 915, - 0, 0, 919, 0, 0, 0, 921, 920, 0, 922, - 884, 883, 0, 0, 916, 917, 0, 918, 0, 0, - 196, 198, 206, 219, 229, 233, 240, 258, 273, 275, - 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, - 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, - 417, 420, 424, 428, 429, 430, 432, 434, 436, 448, - 453, 467, 468, 469, 470, 471, 474, 475, 480, 481, - 482, 483, 484, 492, 493, 506, 576, 578, 593, 611, - 617, 473, 929, 930, 931, 932, 933, 934, 935, 936, - 296, 588, 618, 586, 630, 612, 431, 372, 0, 0, - 375, 278, 301, 316, 0, 603, 494, 224, 459, 287, - 248, 954, 0, 208, 243, 227, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 241, 452, 238, 477, - 509, 510, 511, 513, 389, 263, 426, 390, 0, 370, - 566, 567, 312, 518, 0, 759, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 747, 0, 0, 0, 267, 752, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 201, 0, 479, 249, 371, - 368, 573, 279, 270, 266, 247, 313, 379, 421, 508, - 415, 758, 364, 0, 0, 489, 394, 0, 0, 0, - 0, 0, 754, 755, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 245, 321, 200, 406, 490, 283, 0, - 93, 0, 0, 955, 939, 731, 905, 943, 956, 957, - 958, 959, 944, 0, 235, 945, 946, 242, 947, 0, - 904, 789, 791, 790, 854, 855, 856, 857, 858, 859, - 860, 787, 952, 960, 961, 0, 262, 317, 269, 261, - 570, 0, 0, 0, 0, 0, 0, 0, 226, 0, - 0, 0, 0, 0, 0, 0, 727, 744, 0, 757, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 741, 742, 1044, 0, 0, 0, 899, 0, 743, 0, - 0, 751, 962, 963, 964, 965, 966, 967, 968, 969, + 1002, 1003, 1004, 1005, 755, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 448, 900, 0, 0, 616, 0, 0, 898, 0, 0, + 0, 0, 361, 0, 328, 197, 224, 0, 0, 407, + 456, 468, 0, 0, 0, 951, 0, 466, 421, 594, + 232, 283, 453, 427, 464, 435, 286, 0, 0, 465, + 368, 577, 445, 591, 617, 618, 262, 401, 603, 514, + 611, 635, 225, 259, 415, 499, 597, 488, 393, 573, + 574, 327, 487, 294, 201, 365, 623, 223, 474, 367, + 241, 230, 579, 600, 288, 451, 630, 212, 509, 589, + 238, 478, 0, 0, 638, 246, 498, 214, 586, 497, + 389, 324, 325, 213, 0, 452, 267, 292, 0, 0, + 257, 410, 952, 953, 255, 639, 797, 610, 219, 0, + 609, 403, 576, 587, 390, 379, 218, 585, 388, 378, + 332, 805, 806, 279, 305, 882, 881, 880, 304, 306, + 878, 879, 877, 206, 598, 0, 207, 0, 493, 599, + 640, 447, 211, 233, 234, 236, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 441, 437, 446, 0, + 571, 592, 604, 615, 621, 622, 624, 625, 626, 627, + 628, 631, 629, 402, 309, 489, 331, 369, 0, 0, + 420, 467, 239, 596, 490, 888, 910, 899, 765, 766, + 889, 890, 914, 891, 768, 769, 911, 912, 762, 763, + 767, 913, 915, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 636, 500, 506, 501, 502, 503, 504, 505, 0, + 507, 902, 752, 751, 0, 758, 0, 787, 788, 790, + 794, 795, 796, 807, 854, 855, 863, 865, 866, 864, + 867, 868, 869, 872, 873, 874, 875, 870, 871, 876, + 770, 774, 771, 772, 773, 785, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 786, 925, 926, 927, + 928, 929, 930, 800, 804, 803, 801, 802, 798, 799, + 826, 825, 827, 828, 829, 830, 831, 832, 834, 833, + 835, 836, 837, 838, 839, 840, 808, 809, 812, 813, + 811, 810, 814, 823, 824, 815, 816, 817, 818, 819, + 820, 822, 821, 841, 842, 843, 844, 845, 847, 846, + 850, 851, 849, 848, 853, 852, 750, 196, 220, 364, + 0, 449, 287, 637, 606, 601, 205, 222, 916, 261, + 917, 0, 0, 921, 0, 0, 0, 923, 922, 0, + 924, 886, 885, 0, 0, 918, 919, 0, 920, 0, + 0, 198, 200, 208, 221, 231, 235, 242, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 431, 432, 434, 436, 438, + 450, 455, 469, 470, 471, 472, 473, 476, 477, 482, + 483, 484, 485, 486, 494, 495, 508, 578, 580, 595, + 613, 619, 475, 931, 932, 933, 934, 935, 936, 937, + 938, 298, 590, 620, 588, 632, 614, 433, 374, 0, + 0, 377, 280, 303, 318, 0, 605, 496, 226, 461, + 289, 250, 956, 0, 210, 245, 229, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 243, 454, 240, + 479, 511, 512, 513, 515, 391, 265, 428, 392, 0, + 372, 568, 569, 314, 520, 0, 761, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 749, 0, 0, 0, 269, 754, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 203, 0, 481, 251, + 373, 370, 575, 281, 272, 268, 249, 315, 381, 423, + 510, 417, 760, 366, 0, 0, 491, 396, 0, 0, + 0, 0, 0, 756, 757, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 247, 323, 202, 408, 492, 285, + 0, 95, 0, 0, 957, 941, 733, 907, 945, 958, + 959, 960, 961, 946, 0, 237, 947, 948, 244, 949, + 0, 906, 791, 793, 792, 856, 857, 858, 859, 860, + 861, 862, 789, 954, 962, 963, 0, 264, 319, 271, + 263, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 729, 746, + 0, 759, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 743, 744, 1049, 0, 0, 0, 901, 0, + 745, 0, 0, 753, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, - 1000, 1001, 1002, 1003, 753, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 0, 395, 254, 0, - 446, 898, 0, 0, 614, 0, 0, 896, 0, 0, - 0, 0, 359, 0, 326, 195, 222, 0, 0, 405, - 454, 466, 0, 0, 0, 949, 0, 464, 419, 592, - 230, 281, 451, 425, 462, 433, 284, 0, 0, 463, - 366, 575, 443, 589, 615, 616, 260, 399, 601, 512, - 609, 633, 223, 257, 413, 497, 595, 486, 391, 571, - 572, 325, 485, 292, 199, 363, 621, 221, 472, 365, - 239, 228, 577, 598, 286, 449, 628, 210, 507, 587, - 236, 476, 0, 0, 636, 244, 496, 212, 584, 495, - 387, 322, 323, 211, 0, 450, 265, 290, 0, 0, - 255, 408, 950, 951, 253, 637, 795, 608, 217, 0, - 607, 401, 574, 585, 388, 377, 216, 583, 386, 376, - 330, 803, 804, 277, 303, 880, 879, 878, 302, 304, - 876, 877, 875, 204, 596, 0, 205, 0, 491, 597, - 638, 445, 209, 231, 232, 234, 0, 276, 280, 288, - 291, 299, 300, 309, 361, 412, 439, 435, 444, 0, - 569, 590, 602, 613, 619, 620, 622, 623, 624, 625, - 626, 629, 627, 400, 307, 487, 329, 367, 0, 0, - 418, 465, 237, 594, 488, 886, 908, 897, 763, 764, - 887, 888, 912, 889, 766, 767, 909, 910, 760, 761, - 765, 911, 913, 639, 640, 641, 642, 643, 644, 645, + 1000, 1001, 1002, 1003, 1004, 1005, 755, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 448, 900, 0, 0, 616, 0, 0, 898, + 0, 0, 0, 0, 361, 0, 328, 197, 224, 0, + 0, 407, 456, 468, 0, 0, 0, 951, 0, 466, + 421, 594, 232, 283, 453, 427, 464, 435, 286, 0, + 0, 465, 368, 577, 445, 591, 617, 618, 262, 401, + 603, 514, 611, 635, 225, 259, 415, 499, 597, 488, + 393, 573, 574, 327, 487, 294, 201, 365, 623, 223, + 474, 367, 241, 230, 579, 600, 288, 451, 630, 212, + 509, 589, 238, 478, 0, 0, 638, 246, 498, 214, + 586, 497, 389, 324, 325, 213, 0, 452, 267, 292, + 0, 0, 257, 410, 952, 953, 255, 639, 797, 610, + 219, 0, 609, 403, 576, 587, 390, 379, 218, 585, + 388, 378, 332, 805, 806, 279, 305, 882, 881, 880, + 304, 306, 878, 879, 877, 206, 598, 0, 207, 0, + 493, 599, 640, 447, 211, 233, 234, 236, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 441, 437, + 446, 0, 571, 592, 604, 615, 621, 622, 624, 625, + 626, 627, 628, 631, 629, 402, 309, 489, 331, 369, + 0, 0, 420, 467, 239, 596, 490, 888, 910, 899, + 765, 766, 889, 890, 914, 891, 768, 769, 911, 912, + 762, 763, 767, 913, 915, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, - 656, 634, 498, 504, 499, 500, 501, 502, 503, 0, - 505, 900, 750, 749, 0, 756, 0, 785, 786, 788, - 792, 793, 794, 805, 852, 853, 861, 863, 864, 862, - 865, 866, 867, 870, 871, 872, 873, 868, 869, 874, - 768, 772, 769, 770, 771, 783, 773, 774, 775, 776, - 777, 778, 779, 780, 781, 782, 784, 923, 924, 925, - 926, 927, 928, 798, 802, 801, 799, 800, 796, 797, - 824, 823, 825, 826, 827, 828, 829, 830, 832, 831, - 833, 834, 835, 836, 837, 838, 806, 807, 810, 811, - 809, 808, 812, 821, 822, 813, 814, 815, 816, 817, - 818, 820, 819, 839, 840, 841, 842, 843, 845, 844, - 848, 849, 847, 846, 851, 850, 748, 194, 218, 362, - 0, 447, 285, 635, 604, 599, 203, 220, 914, 259, - 915, 0, 0, 919, 0, 0, 0, 921, 920, 0, - 922, 884, 883, 0, 0, 916, 917, 0, 918, 0, - 0, 196, 198, 206, 219, 229, 233, 240, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 429, 430, 432, 434, 436, - 448, 453, 467, 468, 469, 470, 471, 474, 475, 480, - 481, 482, 483, 484, 492, 493, 506, 576, 578, 593, - 611, 617, 473, 929, 930, 931, 932, 933, 934, 935, - 936, 296, 588, 618, 586, 630, 612, 431, 372, 0, - 0, 375, 278, 301, 316, 0, 603, 494, 224, 459, - 287, 248, 954, 0, 208, 243, 227, 256, 271, 274, - 320, 385, 393, 422, 427, 293, 268, 241, 452, 238, - 477, 509, 510, 511, 513, 389, 263, 426, 390, 0, - 370, 566, 567, 312, 518, 0, 759, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, - 0, 747, 0, 0, 0, 267, 752, 0, 0, 0, - 360, 264, 0, 0, 423, 0, 201, 0, 479, 249, - 371, 368, 573, 279, 270, 266, 247, 313, 379, 421, - 508, 415, 758, 364, 0, 0, 489, 394, 0, 0, - 0, 0, 0, 754, 755, 0, 0, 0, 0, 0, - 0, 0, 0, 319, 245, 321, 200, 406, 490, 283, - 0, 93, 0, 0, 955, 939, 731, 905, 943, 956, - 957, 958, 959, 944, 0, 235, 945, 946, 242, 947, - 0, 904, 789, 791, 790, 854, 855, 856, 857, 858, - 859, 860, 787, 952, 960, 961, 0, 262, 317, 269, - 261, 570, 0, 0, 0, 0, 0, 0, 0, 226, - 0, 0, 0, 0, 0, 0, 0, 727, 744, 0, - 757, 0, 0, 0, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 741, 742, 0, 0, 0, 0, 899, 0, 743, - 0, 0, 751, 962, 963, 964, 965, 966, 967, 968, - 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, - 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, - 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, - 999, 1000, 1001, 1002, 1003, 753, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 446, 898, 0, 0, 614, 0, 0, 896, 0, - 0, 0, 0, 359, 0, 326, 195, 222, 0, 0, - 405, 454, 466, 0, 0, 0, 949, 0, 464, 419, - 592, 230, 281, 451, 425, 462, 433, 284, 0, 0, - 463, 366, 575, 443, 589, 615, 616, 260, 399, 601, - 512, 609, 633, 223, 257, 413, 497, 595, 486, 391, - 571, 572, 325, 485, 292, 199, 363, 621, 221, 472, - 365, 239, 228, 577, 598, 286, 449, 628, 210, 507, - 587, 236, 476, 0, 0, 636, 244, 496, 212, 584, - 495, 387, 322, 323, 211, 0, 450, 265, 290, 0, - 0, 255, 408, 950, 951, 253, 637, 795, 608, 217, - 0, 607, 401, 574, 585, 388, 377, 216, 583, 386, - 376, 330, 803, 804, 277, 303, 880, 879, 878, 302, - 304, 876, 877, 875, 204, 596, 0, 205, 0, 491, - 597, 638, 445, 209, 231, 232, 234, 0, 276, 280, - 288, 291, 299, 300, 309, 361, 412, 439, 435, 444, - 0, 569, 590, 602, 613, 619, 620, 622, 623, 624, - 625, 626, 629, 627, 400, 307, 487, 329, 367, 0, - 0, 418, 465, 237, 594, 488, 886, 908, 897, 763, - 764, 887, 888, 912, 889, 766, 767, 909, 910, 760, - 761, 765, 911, 913, 639, 640, 641, 642, 643, 644, - 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 655, 656, 634, 498, 504, 499, 500, 501, 502, 503, - 0, 505, 900, 750, 749, 0, 756, 0, 785, 786, - 788, 792, 793, 794, 805, 852, 853, 861, 863, 864, - 862, 865, 866, 867, 870, 871, 872, 873, 868, 869, - 874, 768, 772, 769, 770, 771, 783, 773, 774, 775, - 776, 777, 778, 779, 780, 781, 782, 784, 923, 924, - 925, 926, 927, 928, 798, 802, 801, 799, 800, 796, - 797, 824, 823, 825, 826, 827, 828, 829, 830, 832, - 831, 833, 834, 835, 836, 837, 838, 806, 807, 810, - 811, 809, 808, 812, 821, 822, 813, 814, 815, 816, - 817, 818, 820, 819, 839, 840, 841, 842, 843, 845, - 844, 848, 849, 847, 846, 851, 850, 748, 194, 218, - 362, 0, 447, 285, 635, 604, 599, 203, 220, 914, - 259, 915, 0, 0, 919, 0, 0, 0, 921, 920, - 0, 922, 884, 883, 0, 0, 916, 917, 0, 918, - 0, 0, 196, 198, 206, 219, 229, 233, 240, 258, - 273, 275, 282, 295, 306, 314, 315, 318, 324, 374, - 380, 381, 382, 383, 402, 403, 404, 407, 410, 411, - 414, 416, 417, 420, 424, 428, 429, 430, 432, 434, - 436, 448, 453, 467, 468, 469, 470, 471, 474, 475, - 480, 481, 482, 483, 484, 492, 493, 506, 576, 578, - 593, 611, 617, 473, 929, 930, 931, 932, 933, 934, - 935, 936, 296, 588, 618, 586, 630, 612, 431, 372, - 0, 0, 375, 278, 301, 316, 0, 603, 494, 224, - 459, 287, 248, 954, 0, 208, 243, 227, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 241, 452, - 238, 477, 509, 510, 511, 513, 389, 263, 426, 390, - 0, 370, 566, 567, 312, 518, 0, 759, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 747, 0, 0, 0, 267, 752, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 201, 0, 479, - 249, 371, 368, 573, 279, 270, 266, 247, 313, 379, - 421, 508, 415, 758, 364, 0, 0, 489, 394, 0, - 0, 0, 0, 0, 754, 755, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 245, 321, 200, 406, 490, - 283, 0, 93, 0, 0, 955, 939, 731, 905, 943, - 956, 957, 958, 959, 944, 0, 235, 945, 946, 242, - 947, 0, 904, 789, 791, 790, 854, 855, 856, 857, - 858, 859, 860, 787, 952, 960, 961, 0, 262, 317, - 269, 261, 570, 0, 0, 0, 0, 0, 0, 0, - 226, 0, 0, 0, 0, 0, 0, 0, 727, 744, - 0, 757, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 741, 742, 0, 0, 0, 0, 899, 0, - 743, 0, 0, 751, 962, 963, 964, 965, 966, 967, + 656, 657, 658, 636, 500, 506, 501, 502, 503, 504, + 505, 0, 507, 902, 752, 751, 0, 758, 0, 787, + 788, 790, 794, 795, 796, 807, 854, 855, 863, 865, + 866, 864, 867, 868, 869, 872, 873, 874, 875, 870, + 871, 876, 770, 774, 771, 772, 773, 785, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 786, 925, + 926, 927, 928, 929, 930, 800, 804, 803, 801, 802, + 798, 799, 826, 825, 827, 828, 829, 830, 831, 832, + 834, 833, 835, 836, 837, 838, 839, 840, 808, 809, + 812, 813, 811, 810, 814, 823, 824, 815, 816, 817, + 818, 819, 820, 822, 821, 841, 842, 843, 844, 845, + 847, 846, 850, 851, 849, 848, 853, 852, 750, 196, + 220, 364, 0, 449, 287, 637, 606, 601, 205, 222, + 916, 261, 917, 0, 0, 921, 0, 0, 0, 923, + 922, 0, 924, 886, 885, 0, 0, 918, 919, 0, + 920, 0, 0, 198, 200, 208, 221, 231, 235, 242, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 431, 432, 434, + 436, 438, 450, 455, 469, 470, 471, 472, 473, 476, + 477, 482, 483, 484, 485, 486, 494, 495, 508, 578, + 580, 595, 613, 619, 475, 931, 932, 933, 934, 935, + 936, 937, 938, 298, 590, 620, 588, 632, 614, 433, + 374, 0, 0, 377, 280, 303, 318, 0, 605, 496, + 226, 461, 289, 250, 956, 0, 210, 245, 229, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 243, + 454, 240, 479, 511, 512, 513, 515, 391, 265, 428, + 392, 0, 372, 568, 569, 314, 520, 0, 761, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 749, 0, 0, 0, 269, 754, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 203, 0, + 481, 251, 373, 370, 575, 281, 272, 268, 249, 315, + 381, 423, 510, 417, 760, 366, 0, 0, 491, 396, + 0, 0, 0, 0, 0, 756, 757, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 247, 323, 202, 408, + 492, 285, 0, 95, 0, 0, 957, 941, 733, 907, + 945, 958, 959, 960, 961, 946, 0, 237, 947, 948, + 244, 949, 0, 906, 791, 793, 792, 856, 857, 858, + 859, 860, 861, 862, 789, 954, 962, 963, 0, 264, + 319, 271, 263, 572, 0, 0, 0, 0, 0, 0, + 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, + 729, 746, 0, 759, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 743, 744, 0, 0, 0, 0, + 901, 0, 745, 0, 0, 753, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, - 998, 999, 1000, 1001, 1002, 1003, 3082, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 294, 0, 395, - 254, 0, 446, 898, 0, 0, 614, 0, 0, 896, - 0, 0, 0, 0, 359, 0, 326, 195, 222, 0, - 0, 405, 454, 466, 0, 0, 0, 949, 0, 464, - 419, 592, 230, 281, 451, 425, 462, 433, 284, 0, - 0, 463, 366, 575, 443, 589, 615, 616, 260, 399, - 601, 512, 609, 633, 223, 257, 413, 497, 595, 486, - 391, 571, 572, 325, 485, 292, 199, 363, 621, 221, - 472, 365, 239, 228, 577, 598, 286, 449, 628, 210, - 507, 587, 236, 476, 0, 0, 636, 244, 496, 212, - 584, 495, 387, 322, 323, 211, 0, 450, 265, 290, - 0, 0, 255, 408, 950, 951, 253, 637, 795, 608, - 217, 0, 607, 401, 574, 585, 388, 377, 216, 583, - 386, 376, 330, 803, 804, 277, 303, 880, 879, 878, - 302, 304, 876, 877, 875, 204, 596, 0, 205, 0, - 491, 597, 638, 445, 209, 231, 232, 234, 0, 276, - 280, 288, 291, 299, 300, 309, 361, 412, 439, 435, - 444, 0, 569, 590, 602, 613, 619, 620, 622, 623, - 624, 625, 626, 629, 627, 400, 307, 487, 329, 367, - 0, 0, 418, 465, 237, 594, 488, 886, 908, 897, - 763, 764, 887, 888, 912, 889, 766, 767, 909, 910, - 760, 761, 765, 911, 913, 639, 640, 641, 642, 643, + 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 755, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 448, 900, 0, 0, 616, 0, + 0, 898, 0, 0, 0, 0, 361, 0, 328, 197, + 224, 0, 0, 407, 456, 468, 0, 0, 0, 951, + 0, 466, 421, 594, 232, 283, 453, 427, 464, 435, + 286, 0, 0, 465, 368, 577, 445, 591, 617, 618, + 262, 401, 603, 514, 611, 635, 225, 259, 415, 499, + 597, 488, 393, 573, 574, 327, 487, 294, 201, 365, + 623, 223, 474, 367, 241, 230, 579, 600, 288, 451, + 630, 212, 509, 589, 238, 478, 0, 0, 638, 246, + 498, 214, 586, 497, 389, 324, 325, 213, 0, 452, + 267, 292, 0, 0, 257, 410, 952, 953, 255, 639, + 797, 610, 219, 0, 609, 403, 576, 587, 390, 379, + 218, 585, 388, 378, 332, 805, 806, 279, 305, 882, + 881, 880, 304, 306, 878, 879, 877, 206, 598, 0, + 207, 0, 493, 599, 640, 447, 211, 233, 234, 236, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 441, 437, 446, 0, 571, 592, 604, 615, 621, 622, + 624, 625, 626, 627, 628, 631, 629, 402, 309, 489, + 331, 369, 0, 0, 420, 467, 239, 596, 490, 888, + 910, 899, 765, 766, 889, 890, 914, 891, 768, 769, + 911, 912, 762, 763, 767, 913, 915, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, - 654, 655, 656, 634, 498, 504, 499, 500, 501, 502, - 503, 0, 505, 900, 750, 749, 0, 756, 0, 785, - 786, 788, 792, 793, 794, 805, 852, 853, 861, 863, - 864, 862, 865, 866, 867, 870, 871, 872, 873, 868, - 869, 874, 768, 772, 769, 770, 771, 783, 773, 774, - 775, 776, 777, 778, 779, 780, 781, 782, 784, 923, - 924, 925, 926, 927, 928, 798, 802, 801, 799, 800, - 796, 797, 824, 823, 825, 826, 827, 828, 829, 830, - 832, 831, 833, 834, 835, 836, 837, 838, 806, 807, - 810, 811, 809, 808, 812, 821, 822, 813, 814, 815, - 816, 817, 818, 820, 819, 839, 840, 841, 842, 843, - 845, 844, 848, 849, 847, 846, 851, 850, 748, 194, - 218, 362, 0, 447, 285, 635, 604, 599, 203, 220, - 914, 259, 915, 0, 0, 919, 0, 0, 0, 921, - 920, 0, 922, 884, 883, 0, 0, 916, 917, 0, - 918, 0, 0, 196, 198, 206, 219, 229, 233, 240, - 258, 273, 275, 282, 295, 306, 314, 315, 318, 324, - 374, 380, 381, 382, 383, 402, 403, 404, 407, 410, - 411, 414, 416, 417, 420, 424, 428, 429, 430, 432, - 434, 436, 448, 453, 467, 468, 469, 470, 471, 474, - 475, 480, 481, 482, 483, 484, 492, 493, 506, 576, - 578, 593, 611, 617, 473, 929, 930, 931, 932, 933, - 934, 935, 936, 296, 588, 618, 586, 630, 612, 431, - 372, 0, 0, 375, 278, 301, 316, 0, 603, 494, - 224, 459, 287, 248, 954, 0, 208, 243, 227, 256, - 271, 274, 320, 385, 393, 422, 427, 293, 268, 241, - 452, 238, 477, 509, 510, 511, 513, 389, 263, 426, - 390, 0, 370, 566, 567, 312, 518, 0, 759, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, - 0, 0, 0, 747, 0, 0, 0, 267, 752, 0, - 0, 0, 360, 264, 0, 0, 423, 0, 201, 0, - 479, 249, 371, 368, 573, 279, 270, 266, 247, 313, - 379, 421, 508, 415, 758, 364, 0, 0, 489, 394, - 0, 0, 0, 0, 0, 754, 755, 0, 0, 0, - 0, 0, 0, 0, 0, 319, 245, 321, 200, 406, - 490, 283, 0, 93, 0, 0, 955, 939, 731, 905, - 943, 956, 957, 958, 959, 944, 0, 235, 945, 946, - 242, 947, 0, 904, 789, 791, 790, 854, 855, 856, - 857, 858, 859, 860, 787, 952, 960, 961, 0, 262, - 317, 269, 261, 570, 0, 0, 0, 0, 0, 0, - 0, 226, 0, 0, 0, 0, 0, 0, 0, 727, - 744, 0, 757, 0, 0, 0, 272, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 741, 742, 0, 0, 0, 0, 899, - 0, 743, 0, 0, 751, 962, 963, 964, 965, 966, - 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, - 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, - 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, - 997, 998, 999, 1000, 1001, 1002, 1003, 3078, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, - 395, 254, 0, 446, 898, 0, 0, 614, 0, 0, - 896, 0, 0, 0, 0, 359, 0, 326, 195, 222, - 0, 0, 405, 454, 466, 0, 0, 0, 949, 0, - 464, 419, 592, 230, 281, 451, 425, 462, 433, 284, - 0, 0, 463, 366, 575, 443, 589, 615, 616, 260, - 399, 601, 512, 609, 633, 223, 257, 413, 497, 595, - 486, 391, 571, 572, 325, 485, 292, 199, 363, 621, - 221, 472, 365, 239, 228, 577, 598, 286, 449, 628, - 210, 507, 587, 236, 476, 0, 0, 636, 244, 496, - 212, 584, 495, 387, 322, 323, 211, 0, 450, 265, - 290, 0, 0, 255, 408, 950, 951, 253, 637, 795, - 608, 217, 0, 607, 401, 574, 585, 388, 377, 216, - 583, 386, 376, 330, 803, 804, 277, 303, 880, 879, - 878, 302, 304, 876, 877, 875, 204, 596, 0, 205, - 0, 491, 597, 638, 445, 209, 231, 232, 234, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 439, - 435, 444, 0, 569, 590, 602, 613, 619, 620, 622, - 623, 624, 625, 626, 629, 627, 400, 307, 487, 329, - 367, 0, 0, 418, 465, 237, 594, 488, 886, 908, - 897, 763, 764, 887, 888, 912, 889, 766, 767, 909, - 910, 760, 761, 765, 911, 913, 639, 640, 641, 642, - 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, - 653, 654, 655, 656, 634, 498, 504, 499, 500, 501, - 502, 503, 0, 505, 900, 750, 749, 0, 756, 0, - 785, 786, 788, 792, 793, 794, 805, 852, 853, 861, - 863, 864, 862, 865, 866, 867, 870, 871, 872, 873, - 868, 869, 874, 768, 772, 769, 770, 771, 783, 773, - 774, 775, 776, 777, 778, 779, 780, 781, 782, 784, - 923, 924, 925, 926, 927, 928, 798, 802, 801, 799, - 800, 796, 797, 824, 823, 825, 826, 827, 828, 829, - 830, 832, 831, 833, 834, 835, 836, 837, 838, 806, - 807, 810, 811, 809, 808, 812, 821, 822, 813, 814, - 815, 816, 817, 818, 820, 819, 839, 840, 841, 842, - 843, 845, 844, 848, 849, 847, 846, 851, 850, 748, - 194, 218, 362, 0, 447, 285, 635, 604, 599, 203, - 220, 914, 259, 915, 0, 0, 919, 0, 0, 0, - 921, 920, 0, 922, 884, 883, 0, 0, 916, 917, - 0, 918, 0, 0, 196, 198, 206, 219, 229, 233, - 240, 258, 273, 275, 282, 295, 306, 314, 315, 318, - 324, 374, 380, 381, 382, 383, 402, 403, 404, 407, - 410, 411, 414, 416, 417, 420, 424, 428, 429, 430, - 432, 434, 436, 448, 453, 467, 468, 469, 470, 471, - 474, 475, 480, 481, 482, 483, 484, 492, 493, 506, - 576, 578, 593, 611, 617, 473, 929, 930, 931, 932, - 933, 934, 935, 936, 296, 588, 618, 586, 630, 612, - 431, 372, 0, 0, 375, 278, 301, 316, 0, 603, - 494, 224, 459, 287, 248, 954, 0, 208, 243, 227, - 256, 271, 274, 320, 385, 393, 422, 427, 293, 268, - 241, 452, 238, 477, 509, 510, 511, 513, 389, 263, - 426, 390, 0, 370, 566, 567, 312, 518, 0, 759, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, - 0, 0, 0, 0, 747, 0, 0, 0, 267, 752, - 0, 0, 0, 360, 264, 0, 0, 423, 0, 201, - 0, 479, 249, 371, 368, 573, 279, 270, 266, 247, - 313, 379, 421, 508, 415, 758, 364, 0, 0, 489, - 394, 0, 0, 0, 0, 0, 754, 755, 0, 0, - 0, 0, 0, 0, 0, 0, 319, 245, 321, 200, - 406, 490, 283, 0, 93, 0, 0, 955, 939, 1065, - 905, 943, 956, 957, 958, 959, 944, 0, 235, 945, - 946, 242, 947, 0, 904, 789, 791, 790, 854, 855, - 856, 857, 858, 859, 860, 787, 952, 960, 961, 0, - 262, 317, 269, 261, 570, 0, 0, 0, 0, 0, - 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 744, 0, 757, 0, 0, 0, 272, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 741, 742, 0, 0, 0, 0, - 899, 0, 743, 0, 0, 751, 962, 963, 964, 965, + 654, 655, 656, 657, 658, 636, 500, 506, 501, 502, + 503, 504, 505, 0, 507, 902, 752, 751, 0, 758, + 0, 787, 788, 790, 794, 795, 796, 807, 854, 855, + 863, 865, 866, 864, 867, 868, 869, 872, 873, 874, + 875, 870, 871, 876, 770, 774, 771, 772, 773, 785, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 786, 925, 926, 927, 928, 929, 930, 800, 804, 803, + 801, 802, 798, 799, 826, 825, 827, 828, 829, 830, + 831, 832, 834, 833, 835, 836, 837, 838, 839, 840, + 808, 809, 812, 813, 811, 810, 814, 823, 824, 815, + 816, 817, 818, 819, 820, 822, 821, 841, 842, 843, + 844, 845, 847, 846, 850, 851, 849, 848, 853, 852, + 750, 196, 220, 364, 0, 449, 287, 637, 606, 601, + 205, 222, 916, 261, 917, 0, 0, 921, 0, 0, + 0, 923, 922, 0, 924, 886, 885, 0, 0, 918, + 919, 0, 920, 0, 0, 198, 200, 208, 221, 231, + 235, 242, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 431, + 432, 434, 436, 438, 450, 455, 469, 470, 471, 472, + 473, 476, 477, 482, 483, 484, 485, 486, 494, 495, + 508, 578, 580, 595, 613, 619, 475, 931, 932, 933, + 934, 935, 936, 937, 938, 298, 590, 620, 588, 632, + 614, 433, 374, 0, 0, 377, 280, 303, 318, 0, + 605, 496, 226, 461, 289, 250, 956, 0, 210, 245, + 229, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 243, 454, 240, 479, 511, 512, 513, 515, 391, + 265, 428, 392, 0, 372, 568, 569, 314, 520, 0, + 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 749, 0, 0, 0, 269, + 754, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 760, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 756, 757, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 95, 0, 0, 957, 941, + 733, 907, 945, 958, 959, 960, 961, 946, 0, 237, + 947, 948, 244, 949, 0, 906, 791, 793, 792, 856, + 857, 858, 859, 860, 861, 862, 789, 954, 962, 963, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 729, 746, 0, 759, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 743, 744, 0, 0, + 0, 0, 901, 0, 745, 0, 0, 753, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, - 996, 997, 998, 999, 1000, 1001, 1002, 1003, 753, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 0, 395, 254, 0, 446, 898, 0, 0, 614, 0, - 0, 896, 0, 0, 0, 0, 359, 0, 326, 195, - 222, 0, 0, 405, 454, 466, 0, 0, 0, 949, - 0, 464, 419, 592, 230, 281, 451, 425, 462, 433, - 284, 0, 0, 463, 366, 575, 443, 589, 615, 616, - 260, 399, 601, 512, 609, 633, 223, 257, 413, 497, - 595, 486, 391, 571, 572, 325, 485, 292, 199, 363, - 621, 221, 472, 365, 239, 228, 577, 598, 286, 449, - 628, 210, 507, 587, 236, 476, 0, 0, 636, 244, - 496, 212, 584, 495, 387, 322, 323, 211, 0, 450, - 265, 290, 0, 0, 255, 408, 950, 951, 253, 637, - 795, 608, 217, 0, 607, 401, 574, 585, 388, 377, - 216, 583, 386, 376, 330, 803, 804, 277, 303, 880, - 879, 878, 302, 304, 876, 877, 875, 204, 596, 0, - 205, 0, 491, 597, 638, 445, 209, 231, 232, 234, - 0, 276, 280, 288, 291, 299, 300, 309, 361, 412, - 439, 435, 444, 0, 569, 590, 602, 613, 619, 620, - 622, 623, 624, 625, 626, 629, 627, 400, 307, 487, - 329, 367, 0, 0, 418, 465, 237, 594, 488, 886, - 908, 897, 763, 764, 887, 888, 912, 889, 766, 767, - 909, 910, 760, 761, 765, 911, 913, 639, 640, 641, + 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, + 3089, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 448, 900, 0, 0, + 616, 0, 0, 898, 0, 0, 0, 0, 361, 0, + 328, 197, 224, 0, 0, 407, 456, 468, 0, 0, + 0, 951, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 952, 953, + 255, 639, 797, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 805, 806, 279, + 305, 882, 881, 880, 304, 306, 878, 879, 877, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 888, 910, 899, 765, 766, 889, 890, 914, 891, + 768, 769, 911, 912, 762, 763, 767, 913, 915, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, - 652, 653, 654, 655, 656, 634, 498, 504, 499, 500, - 501, 502, 503, 0, 505, 900, 750, 749, 0, 756, - 0, 785, 786, 788, 792, 793, 794, 805, 852, 853, - 861, 863, 864, 862, 865, 866, 867, 870, 871, 872, - 873, 868, 869, 874, 768, 772, 769, 770, 771, 783, - 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, - 784, 923, 924, 925, 926, 927, 928, 798, 802, 801, - 799, 800, 796, 797, 824, 823, 825, 826, 827, 828, - 829, 830, 832, 831, 833, 834, 835, 836, 837, 838, - 806, 807, 810, 811, 809, 808, 812, 821, 822, 813, - 814, 815, 816, 817, 818, 820, 819, 839, 840, 841, - 842, 843, 845, 844, 848, 849, 847, 846, 851, 850, - 748, 194, 218, 362, 0, 447, 285, 635, 604, 599, - 203, 220, 914, 259, 915, 0, 0, 919, 0, 0, - 0, 921, 920, 0, 922, 884, 883, 0, 0, 916, - 917, 0, 918, 0, 0, 196, 198, 206, 219, 229, - 233, 240, 258, 273, 275, 282, 295, 306, 314, 315, - 318, 324, 374, 380, 381, 382, 383, 402, 403, 404, - 407, 410, 411, 414, 416, 417, 420, 424, 428, 429, - 430, 432, 434, 436, 448, 453, 467, 468, 469, 470, - 471, 474, 475, 480, 481, 482, 483, 484, 492, 493, - 506, 576, 578, 593, 611, 617, 473, 929, 930, 931, - 932, 933, 934, 935, 936, 296, 588, 618, 586, 630, - 612, 431, 372, 0, 0, 375, 278, 301, 316, 0, - 603, 494, 224, 459, 287, 248, 954, 0, 208, 243, - 227, 256, 271, 274, 320, 385, 393, 422, 427, 293, - 268, 241, 452, 238, 477, 509, 510, 511, 513, 389, - 263, 426, 390, 0, 370, 566, 567, 312, 518, 0, - 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 409, 0, 0, 0, 0, 747, 0, 0, 0, 267, - 752, 0, 0, 0, 360, 264, 0, 0, 423, 0, - 201, 0, 479, 249, 371, 368, 573, 279, 270, 266, - 247, 313, 379, 421, 508, 415, 758, 364, 0, 0, - 489, 394, 0, 0, 0, 0, 0, 754, 755, 0, - 0, 0, 0, 0, 0, 0, 0, 319, 245, 321, - 200, 406, 490, 283, 0, 93, 0, 0, 955, 939, - 1065, 905, 943, 956, 957, 958, 959, 944, 0, 235, - 945, 946, 242, 947, 0, 904, 789, 791, 790, 854, - 855, 856, 857, 858, 859, 860, 787, 952, 960, 961, - 0, 262, 317, 269, 261, 570, 0, 0, 0, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, - 0, 0, 744, 0, 757, 0, 0, 0, 272, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 741, 742, 0, 0, 0, - 0, 899, 0, 743, 0, 0, 751, 962, 963, 964, - 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, - 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, - 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, - 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 2062, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 0, 395, 254, 0, 446, 898, 0, 0, 614, - 0, 0, 896, 0, 0, 0, 0, 359, 0, 326, - 195, 222, 0, 0, 405, 454, 466, 0, 0, 0, - 949, 0, 464, 419, 592, 230, 281, 451, 425, 462, - 433, 284, 0, 0, 463, 366, 575, 443, 589, 615, - 616, 260, 399, 601, 512, 609, 633, 223, 257, 413, - 497, 595, 486, 391, 571, 572, 325, 485, 292, 199, - 363, 621, 221, 472, 365, 239, 228, 577, 598, 286, - 449, 628, 210, 507, 587, 236, 476, 0, 0, 636, - 244, 496, 212, 584, 495, 387, 322, 323, 211, 0, - 450, 265, 290, 0, 0, 255, 408, 950, 951, 253, - 637, 795, 608, 217, 0, 607, 401, 574, 585, 388, - 377, 216, 583, 386, 376, 330, 803, 804, 277, 303, - 880, 879, 878, 302, 304, 876, 877, 875, 204, 596, - 0, 205, 0, 491, 597, 638, 445, 209, 231, 232, - 234, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 439, 435, 444, 0, 569, 590, 602, 613, 619, - 620, 622, 623, 624, 625, 626, 629, 627, 400, 307, - 487, 329, 367, 0, 0, 418, 465, 237, 594, 488, - 886, 908, 897, 763, 764, 887, 888, 912, 889, 766, - 767, 909, 910, 760, 761, 765, 911, 913, 639, 640, - 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, - 651, 652, 653, 654, 655, 656, 634, 498, 504, 499, - 500, 501, 502, 503, 0, 505, 900, 750, 749, 0, - 756, 0, 785, 786, 788, 792, 793, 794, 805, 852, - 853, 861, 863, 864, 862, 865, 866, 867, 870, 871, - 872, 873, 868, 869, 874, 768, 772, 769, 770, 771, - 783, 773, 774, 775, 776, 777, 778, 779, 780, 781, - 782, 784, 923, 924, 925, 926, 927, 928, 798, 802, - 801, 799, 800, 796, 797, 824, 823, 825, 826, 827, - 828, 829, 830, 832, 831, 833, 834, 835, 836, 837, - 838, 806, 807, 810, 811, 809, 808, 812, 821, 822, - 813, 814, 815, 816, 817, 818, 820, 819, 839, 840, - 841, 842, 843, 845, 844, 848, 849, 847, 846, 851, - 850, 748, 194, 218, 362, 0, 447, 285, 635, 604, - 599, 203, 220, 914, 259, 915, 0, 0, 919, 0, - 0, 0, 921, 920, 0, 922, 884, 883, 0, 0, - 916, 917, 0, 918, 0, 0, 196, 198, 206, 219, - 229, 233, 240, 258, 273, 275, 282, 295, 306, 314, - 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, - 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, - 429, 430, 432, 434, 436, 448, 453, 467, 468, 469, - 470, 471, 474, 475, 480, 481, 482, 483, 484, 492, - 493, 506, 576, 578, 593, 611, 617, 473, 929, 930, - 931, 932, 933, 934, 935, 936, 296, 588, 618, 586, - 630, 612, 431, 372, 0, 0, 375, 278, 301, 316, - 0, 603, 494, 224, 459, 287, 248, 954, 0, 208, - 243, 227, 256, 271, 274, 320, 385, 393, 422, 427, - 293, 268, 241, 452, 238, 477, 509, 510, 511, 513, - 389, 263, 426, 390, 0, 370, 566, 567, 312, 518, - 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 409, 0, 0, 0, 0, 747, 0, 0, 0, - 267, 752, 0, 0, 0, 360, 264, 0, 0, 423, - 0, 201, 0, 479, 249, 371, 368, 573, 279, 270, - 266, 247, 313, 379, 421, 508, 415, 758, 364, 0, - 0, 489, 394, 0, 0, 0, 0, 0, 754, 755, - 0, 0, 0, 0, 0, 0, 0, 0, 319, 245, - 321, 200, 406, 490, 283, 0, 93, 0, 0, 955, - 939, 1065, 905, 943, 956, 957, 958, 959, 944, 0, - 235, 945, 946, 242, 947, 0, 904, 789, 791, 790, - 854, 855, 856, 857, 858, 859, 860, 787, 952, 960, - 961, 0, 262, 317, 269, 261, 570, 0, 0, 0, - 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, - 0, 0, 0, 744, 0, 757, 0, 0, 0, 272, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 741, 742, 0, 0, - 0, 0, 899, 0, 743, 0, 0, 751, 962, 963, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 902, 752, 751, + 0, 758, 0, 787, 788, 790, 794, 795, 796, 807, + 854, 855, 863, 865, 866, 864, 867, 868, 869, 872, + 873, 874, 875, 870, 871, 876, 770, 774, 771, 772, + 773, 785, 775, 776, 777, 778, 779, 780, 781, 782, + 783, 784, 786, 925, 926, 927, 928, 929, 930, 800, + 804, 803, 801, 802, 798, 799, 826, 825, 827, 828, + 829, 830, 831, 832, 834, 833, 835, 836, 837, 838, + 839, 840, 808, 809, 812, 813, 811, 810, 814, 823, + 824, 815, 816, 817, 818, 819, 820, 822, 821, 841, + 842, 843, 844, 845, 847, 846, 850, 851, 849, 848, + 853, 852, 750, 196, 220, 364, 0, 449, 287, 637, + 606, 601, 205, 222, 916, 261, 917, 0, 0, 921, + 0, 0, 0, 923, 922, 0, 924, 886, 885, 0, + 0, 918, 919, 0, 920, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 931, + 932, 933, 934, 935, 936, 937, 938, 298, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 956, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 761, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 749, 0, 0, + 0, 269, 754, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 760, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 756, + 757, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 95, 0, 0, + 957, 941, 733, 907, 945, 958, 959, 960, 961, 946, + 0, 237, 947, 948, 244, 949, 0, 906, 791, 793, + 792, 856, 857, 858, 859, 860, 861, 862, 789, 954, + 962, 963, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 729, 746, 0, 759, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 743, 744, + 0, 0, 0, 0, 901, 0, 745, 0, 0, 753, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, - 2060, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 294, 0, 395, 254, 0, 446, 898, 0, 0, - 614, 0, 0, 896, 0, 0, 0, 0, 359, 0, - 326, 195, 222, 0, 0, 405, 454, 466, 0, 0, - 0, 949, 0, 464, 419, 592, 230, 281, 451, 425, - 462, 433, 284, 0, 0, 463, 366, 575, 443, 589, - 615, 616, 260, 399, 601, 512, 609, 633, 223, 257, - 413, 497, 595, 486, 391, 571, 572, 325, 485, 292, - 199, 363, 621, 221, 472, 365, 239, 228, 577, 598, - 286, 449, 628, 210, 507, 587, 236, 476, 0, 0, - 636, 244, 496, 212, 584, 495, 387, 322, 323, 211, - 0, 450, 265, 290, 0, 0, 255, 408, 950, 951, - 253, 637, 795, 608, 217, 0, 607, 401, 574, 585, - 388, 377, 216, 583, 386, 376, 330, 803, 804, 277, - 303, 880, 879, 878, 302, 304, 876, 877, 875, 204, - 596, 0, 205, 0, 491, 597, 638, 445, 209, 231, - 232, 234, 0, 276, 280, 288, 291, 299, 300, 309, - 361, 412, 439, 435, 444, 0, 569, 590, 602, 613, - 619, 620, 622, 623, 624, 625, 626, 629, 627, 400, - 307, 487, 329, 367, 0, 0, 418, 465, 237, 594, - 488, 886, 908, 897, 763, 764, 887, 888, 912, 889, - 766, 767, 909, 910, 760, 761, 765, 911, 913, 639, - 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 654, 655, 656, 634, 498, 504, - 499, 500, 501, 502, 503, 0, 505, 900, 750, 749, - 0, 756, 0, 785, 786, 788, 792, 793, 794, 805, - 852, 853, 861, 863, 864, 862, 865, 866, 867, 870, - 871, 872, 873, 868, 869, 874, 768, 772, 769, 770, - 771, 783, 773, 774, 775, 776, 777, 778, 779, 780, - 781, 782, 784, 923, 924, 925, 926, 927, 928, 798, - 802, 801, 799, 800, 796, 797, 824, 823, 825, 826, - 827, 828, 829, 830, 832, 831, 833, 834, 835, 836, - 837, 838, 806, 807, 810, 811, 809, 808, 812, 821, - 822, 813, 814, 815, 816, 817, 818, 820, 819, 839, - 840, 841, 842, 843, 845, 844, 848, 849, 847, 846, - 851, 850, 748, 194, 218, 362, 0, 447, 285, 635, - 604, 599, 203, 220, 914, 259, 915, 0, 0, 919, - 0, 0, 0, 921, 920, 0, 922, 884, 883, 0, - 0, 916, 917, 0, 918, 0, 0, 196, 198, 206, - 219, 229, 233, 240, 258, 273, 275, 282, 295, 306, - 314, 315, 318, 324, 374, 380, 381, 382, 383, 402, - 403, 404, 407, 410, 411, 414, 416, 417, 420, 424, - 428, 429, 430, 432, 434, 436, 448, 453, 467, 468, - 469, 470, 471, 474, 475, 480, 481, 482, 483, 484, - 492, 493, 506, 576, 578, 593, 611, 617, 473, 929, - 930, 931, 932, 933, 934, 935, 936, 296, 588, 618, - 586, 630, 612, 431, 372, 0, 0, 375, 278, 301, - 316, 0, 603, 494, 224, 459, 287, 248, 954, 0, - 208, 243, 227, 256, 271, 274, 320, 385, 393, 422, - 427, 293, 268, 241, 452, 238, 477, 509, 510, 511, - 513, 389, 263, 426, 390, 0, 370, 566, 567, 312, - 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, - 0, 267, 0, 0, 0, 0, 360, 264, 0, 0, - 423, 0, 201, 0, 479, 249, 371, 368, 573, 279, - 270, 266, 247, 313, 379, 421, 508, 415, 0, 364, - 0, 0, 489, 394, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, - 245, 321, 200, 406, 490, 283, 0, 0, 0, 0, - 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 0, 0, 242, 0, 0, 0, 345, 354, - 353, 334, 335, 337, 339, 344, 351, 357, 0, 0, - 0, 0, 0, 262, 317, 269, 261, 570, 0, 0, - 0, 0, 0, 0, 0, 226, 0, 1116, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 395, 254, 0, 446, 0, 0, - 1115, 614, 0, 0, 0, 0, 0, 1112, 1113, 359, - 1073, 326, 195, 222, 1106, 1110, 405, 454, 466, 0, - 0, 0, 250, 0, 464, 419, 592, 230, 281, 451, - 425, 462, 433, 284, 0, 0, 463, 366, 575, 443, - 589, 615, 616, 260, 399, 601, 512, 609, 633, 223, - 257, 413, 497, 595, 486, 391, 571, 572, 325, 485, - 292, 199, 363, 621, 221, 472, 365, 239, 228, 577, - 598, 286, 449, 628, 210, 507, 587, 236, 476, 0, - 0, 636, 244, 496, 212, 584, 495, 387, 322, 323, - 211, 0, 450, 265, 290, 0, 0, 255, 408, 579, - 580, 253, 637, 225, 608, 217, 0, 607, 401, 574, - 585, 388, 377, 216, 583, 386, 376, 330, 349, 350, - 277, 303, 440, 369, 441, 302, 304, 397, 396, 398, - 204, 596, 0, 205, 0, 491, 597, 638, 445, 209, - 231, 232, 234, 0, 276, 280, 288, 291, 299, 300, - 309, 361, 412, 439, 435, 444, 0, 569, 590, 602, - 613, 619, 620, 622, 623, 624, 625, 626, 629, 627, - 400, 307, 487, 329, 367, 0, 0, 418, 465, 237, - 594, 488, 197, 0, 0, 0, 0, 251, 252, 0, - 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 634, 498, - 504, 499, 500, 501, 502, 503, 0, 505, 0, 0, - 0, 0, 0, 0, 581, 582, 657, 378, 478, 591, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 246, 207, 384, - 392, 568, 308, 213, 214, 215, 514, 515, 516, 517, - 605, 606, 610, 202, 455, 456, 457, 458, 289, 600, - 305, 461, 460, 327, 328, 373, 442, 530, 532, 543, - 547, 549, 551, 557, 560, 531, 533, 544, 548, 550, - 552, 558, 561, 520, 522, 524, 526, 539, 538, 535, - 563, 564, 541, 546, 525, 537, 542, 555, 562, 559, - 519, 523, 527, 536, 554, 553, 534, 545, 556, 540, - 528, 521, 529, 0, 194, 218, 362, 0, 447, 285, - 635, 604, 599, 203, 220, 0, 259, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 196, 198, - 206, 219, 229, 233, 240, 258, 273, 275, 282, 295, - 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, - 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, - 424, 428, 429, 430, 432, 434, 436, 448, 453, 467, - 468, 469, 470, 471, 474, 475, 480, 481, 482, 483, - 484, 492, 493, 506, 576, 578, 593, 611, 617, 473, - 297, 298, 437, 438, 310, 311, 631, 632, 296, 588, - 618, 586, 630, 612, 431, 372, 0, 0, 375, 278, - 301, 316, 0, 603, 494, 224, 459, 287, 248, 0, - 0, 208, 243, 227, 256, 271, 274, 320, 385, 393, - 422, 427, 293, 268, 241, 452, 238, 477, 509, 510, - 511, 513, 389, 263, 426, 390, 0, 370, 566, 567, - 312, 518, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, - 0, 0, 267, 0, 0, 0, 0, 360, 264, 0, - 0, 423, 0, 201, 0, 479, 249, 371, 368, 573, - 279, 270, 266, 247, 313, 379, 421, 508, 415, 0, - 364, 0, 0, 489, 394, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 319, 245, 321, 200, 406, 490, 283, 0, 0, 0, - 0, 1672, 939, 0, 0, 1669, 0, 0, 0, 0, - 1667, 0, 235, 1668, 1666, 242, 1671, 0, 904, 345, - 354, 353, 334, 335, 337, 339, 344, 351, 357, 0, - 0, 0, 0, 0, 262, 317, 269, 261, 570, 0, - 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 395, 254, 0, 446, 0, - 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, - 359, 0, 326, 195, 222, 0, 0, 405, 454, 466, - 0, 0, 0, 250, 0, 464, 419, 592, 230, 281, - 451, 425, 462, 433, 284, 0, 0, 463, 366, 575, - 443, 589, 615, 616, 260, 399, 601, 512, 609, 633, - 223, 257, 413, 497, 595, 486, 391, 571, 572, 325, - 485, 292, 199, 363, 621, 221, 472, 365, 239, 228, - 577, 598, 286, 449, 628, 210, 507, 587, 236, 476, - 0, 0, 636, 244, 496, 212, 584, 495, 387, 322, - 323, 211, 0, 450, 265, 290, 0, 0, 255, 408, - 579, 580, 253, 637, 225, 608, 217, 0, 607, 401, - 574, 585, 388, 377, 216, 583, 386, 376, 330, 349, - 350, 277, 303, 440, 369, 441, 302, 304, 397, 396, - 398, 204, 596, 0, 205, 0, 491, 597, 638, 445, - 209, 231, 232, 234, 0, 276, 280, 288, 291, 299, - 300, 309, 361, 412, 439, 435, 444, 0, 569, 590, - 602, 613, 619, 620, 622, 623, 624, 625, 626, 629, - 627, 400, 307, 487, 329, 367, 0, 0, 418, 465, - 237, 594, 488, 197, 0, 0, 0, 0, 251, 252, - 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 639, 640, 641, 642, 643, 644, 645, 646, 647, - 648, 649, 650, 651, 652, 653, 654, 655, 656, 634, - 498, 504, 499, 500, 501, 502, 503, 0, 505, 0, - 0, 0, 0, 0, 0, 581, 582, 657, 378, 478, - 591, 331, 343, 346, 336, 355, 0, 356, 332, 333, - 338, 340, 341, 342, 347, 348, 352, 358, 246, 207, - 384, 392, 568, 308, 213, 214, 215, 514, 515, 516, - 517, 605, 606, 610, 202, 455, 456, 457, 458, 289, - 600, 305, 461, 460, 327, 328, 373, 442, 530, 532, - 543, 547, 549, 551, 557, 560, 531, 533, 544, 548, - 550, 552, 558, 561, 520, 522, 524, 526, 539, 538, - 535, 563, 564, 541, 546, 525, 537, 542, 555, 562, - 559, 519, 523, 527, 536, 554, 553, 534, 545, 556, - 540, 528, 521, 529, 0, 194, 218, 362, 0, 447, - 285, 635, 604, 599, 203, 220, 0, 259, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, - 198, 206, 219, 229, 233, 240, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 429, 430, 432, 434, 436, 448, 453, - 467, 468, 469, 470, 471, 474, 475, 480, 481, 482, - 483, 484, 492, 493, 506, 576, 578, 593, 611, 617, - 473, 297, 298, 437, 438, 310, 311, 631, 632, 296, - 588, 618, 586, 630, 612, 431, 372, 0, 0, 375, - 278, 301, 316, 0, 603, 494, 224, 459, 287, 248, - 0, 0, 208, 243, 227, 256, 271, 274, 320, 385, - 393, 422, 427, 293, 268, 241, 452, 238, 477, 509, - 510, 511, 513, 389, 263, 426, 0, 390, 370, 566, - 567, 312, 84, 518, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 0, 0, 0, 0, 267, 0, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 201, 0, 479, 249, 371, - 368, 573, 279, 270, 266, 247, 313, 379, 421, 508, - 415, 0, 364, 0, 0, 489, 394, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 245, 321, 200, 406, 490, 283, 0, - 93, 0, 0, 0, 192, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 0, 0, 242, 0, 0, - 0, 345, 354, 353, 334, 335, 337, 339, 344, 351, - 357, 0, 0, 0, 0, 0, 262, 317, 269, 261, - 570, 0, 0, 0, 0, 0, 0, 0, 226, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 0, 395, 254, 0, - 446, 0, 0, 0, 614, 0, 0, 0, 0, 0, - 0, 0, 359, 0, 326, 195, 222, 0, 0, 405, - 454, 466, 0, 0, 0, 250, 0, 464, 419, 592, - 230, 281, 451, 425, 462, 433, 284, 0, 0, 463, - 366, 575, 443, 589, 615, 616, 260, 399, 601, 512, - 609, 633, 223, 257, 413, 497, 595, 486, 391, 571, - 572, 325, 485, 292, 199, 363, 621, 221, 472, 365, - 239, 228, 577, 598, 286, 449, 628, 210, 507, 587, - 236, 476, 0, 0, 636, 244, 496, 212, 584, 495, - 387, 322, 323, 211, 0, 450, 265, 290, 0, 0, - 255, 408, 579, 580, 253, 637, 225, 608, 217, 0, - 607, 401, 574, 585, 388, 377, 216, 583, 386, 376, - 330, 349, 350, 277, 303, 440, 369, 441, 302, 304, - 397, 396, 398, 204, 596, 0, 205, 0, 491, 597, - 638, 445, 209, 231, 232, 234, 0, 276, 280, 288, - 291, 299, 300, 309, 361, 412, 439, 435, 444, 0, - 569, 590, 602, 613, 619, 620, 622, 623, 624, 625, - 626, 629, 627, 400, 307, 487, 329, 367, 0, 0, - 418, 465, 237, 594, 488, 197, 0, 0, 0, 0, - 251, 252, 0, 565, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 639, 640, 641, 642, 643, 644, 645, + 1004, 1005, 3085, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 900, + 0, 0, 616, 0, 0, 898, 0, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 951, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 0, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 952, 953, 255, 639, 797, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 805, + 806, 279, 305, 882, 881, 880, 304, 306, 878, 879, + 877, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 888, 910, 899, 765, 766, 889, 890, + 914, 891, 768, 769, 911, 912, 762, 763, 767, 913, + 915, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 902, + 752, 751, 0, 758, 0, 787, 788, 790, 794, 795, + 796, 807, 854, 855, 863, 865, 866, 864, 867, 868, + 869, 872, 873, 874, 875, 870, 871, 876, 770, 774, + 771, 772, 773, 785, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 786, 925, 926, 927, 928, 929, + 930, 800, 804, 803, 801, 802, 798, 799, 826, 825, + 827, 828, 829, 830, 831, 832, 834, 833, 835, 836, + 837, 838, 839, 840, 808, 809, 812, 813, 811, 810, + 814, 823, 824, 815, 816, 817, 818, 819, 820, 822, + 821, 841, 842, 843, 844, 845, 847, 846, 850, 851, + 849, 848, 853, 852, 750, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 916, 261, 917, 0, + 0, 921, 0, 0, 0, 923, 922, 0, 924, 886, + 885, 0, 0, 918, 919, 0, 920, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 931, 932, 933, 934, 935, 936, 937, 938, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 956, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 392, 0, 372, 568, + 569, 314, 520, 0, 761, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 749, + 0, 0, 0, 269, 754, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 203, 0, 481, 251, 373, 370, + 575, 281, 272, 268, 249, 315, 381, 423, 510, 417, + 760, 366, 0, 0, 491, 396, 0, 0, 0, 0, + 0, 756, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 247, 323, 202, 408, 492, 285, 0, 95, + 0, 0, 957, 941, 1070, 907, 945, 958, 959, 960, + 961, 946, 0, 237, 947, 948, 244, 949, 0, 906, + 791, 793, 792, 856, 857, 858, 859, 860, 861, 862, + 789, 954, 962, 963, 0, 264, 319, 271, 263, 572, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 746, 0, 759, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 743, 744, 0, 0, 0, 0, 901, 0, 745, 0, + 0, 753, 964, 965, 966, 967, 968, 969, 970, 971, + 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, + 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, + 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002, 1003, 1004, 1005, 755, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 448, 900, 0, 0, 616, 0, 0, 898, 0, 0, + 0, 0, 361, 0, 328, 197, 224, 0, 0, 407, + 456, 468, 0, 0, 0, 951, 0, 466, 421, 594, + 232, 283, 453, 427, 464, 435, 286, 0, 0, 465, + 368, 577, 445, 591, 617, 618, 262, 401, 603, 514, + 611, 635, 225, 259, 415, 499, 597, 488, 393, 573, + 574, 327, 487, 294, 201, 365, 623, 223, 474, 367, + 241, 230, 579, 600, 288, 451, 630, 212, 509, 589, + 238, 478, 0, 0, 638, 246, 498, 214, 586, 497, + 389, 324, 325, 213, 0, 452, 267, 292, 0, 0, + 257, 410, 952, 953, 255, 639, 797, 610, 219, 0, + 609, 403, 576, 587, 390, 379, 218, 585, 388, 378, + 332, 805, 806, 279, 305, 882, 881, 880, 304, 306, + 878, 879, 877, 206, 598, 0, 207, 0, 493, 599, + 640, 447, 211, 233, 234, 236, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 441, 437, 446, 0, + 571, 592, 604, 615, 621, 622, 624, 625, 626, 627, + 628, 631, 629, 402, 309, 489, 331, 369, 0, 0, + 420, 467, 239, 596, 490, 888, 910, 899, 765, 766, + 889, 890, 914, 891, 768, 769, 911, 912, 762, 763, + 767, 913, 915, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 636, 500, 506, 501, 502, 503, 504, 505, 0, + 507, 902, 752, 751, 0, 758, 0, 787, 788, 790, + 794, 795, 796, 807, 854, 855, 863, 865, 866, 864, + 867, 868, 869, 872, 873, 874, 875, 870, 871, 876, + 770, 774, 771, 772, 773, 785, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 786, 925, 926, 927, + 928, 929, 930, 800, 804, 803, 801, 802, 798, 799, + 826, 825, 827, 828, 829, 830, 831, 832, 834, 833, + 835, 836, 837, 838, 839, 840, 808, 809, 812, 813, + 811, 810, 814, 823, 824, 815, 816, 817, 818, 819, + 820, 822, 821, 841, 842, 843, 844, 845, 847, 846, + 850, 851, 849, 848, 853, 852, 750, 196, 220, 364, + 0, 449, 287, 637, 606, 601, 205, 222, 916, 261, + 917, 0, 0, 921, 0, 0, 0, 923, 922, 0, + 924, 886, 885, 0, 0, 918, 919, 0, 920, 0, + 0, 198, 200, 208, 221, 231, 235, 242, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 431, 432, 434, 436, 438, + 450, 455, 469, 470, 471, 472, 473, 476, 477, 482, + 483, 484, 485, 486, 494, 495, 508, 578, 580, 595, + 613, 619, 475, 931, 932, 933, 934, 935, 936, 937, + 938, 298, 590, 620, 588, 632, 614, 433, 374, 0, + 0, 377, 280, 303, 318, 0, 605, 496, 226, 461, + 289, 250, 956, 0, 210, 245, 229, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 243, 454, 240, + 479, 511, 512, 513, 515, 391, 265, 428, 392, 0, + 372, 568, 569, 314, 520, 0, 761, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 749, 0, 0, 0, 269, 754, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 203, 0, 481, 251, + 373, 370, 575, 281, 272, 268, 249, 315, 381, 423, + 510, 417, 760, 366, 0, 0, 491, 396, 0, 0, + 0, 0, 0, 756, 757, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 247, 323, 202, 408, 492, 285, + 0, 95, 0, 0, 957, 941, 1070, 907, 945, 958, + 959, 960, 961, 946, 0, 237, 947, 948, 244, 949, + 0, 906, 791, 793, 792, 856, 857, 858, 859, 860, + 861, 862, 789, 954, 962, 963, 0, 264, 319, 271, + 263, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 746, + 0, 759, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 743, 744, 0, 0, 0, 0, 901, 0, + 745, 0, 0, 753, 964, 965, 966, 967, 968, 969, + 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, + 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, + 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003, 1004, 1005, 2069, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 448, 900, 0, 0, 616, 0, 0, 898, + 0, 0, 0, 0, 361, 0, 328, 197, 224, 0, + 0, 407, 456, 468, 0, 0, 0, 951, 0, 466, + 421, 594, 232, 283, 453, 427, 464, 435, 286, 0, + 0, 465, 368, 577, 445, 591, 617, 618, 262, 401, + 603, 514, 611, 635, 225, 259, 415, 499, 597, 488, + 393, 573, 574, 327, 487, 294, 201, 365, 623, 223, + 474, 367, 241, 230, 579, 600, 288, 451, 630, 212, + 509, 589, 238, 478, 0, 0, 638, 246, 498, 214, + 586, 497, 389, 324, 325, 213, 0, 452, 267, 292, + 0, 0, 257, 410, 952, 953, 255, 639, 797, 610, + 219, 0, 609, 403, 576, 587, 390, 379, 218, 585, + 388, 378, 332, 805, 806, 279, 305, 882, 881, 880, + 304, 306, 878, 879, 877, 206, 598, 0, 207, 0, + 493, 599, 640, 447, 211, 233, 234, 236, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 441, 437, + 446, 0, 571, 592, 604, 615, 621, 622, 624, 625, + 626, 627, 628, 631, 629, 402, 309, 489, 331, 369, + 0, 0, 420, 467, 239, 596, 490, 888, 910, 899, + 765, 766, 889, 890, 914, 891, 768, 769, 911, 912, + 762, 763, 767, 913, 915, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, - 656, 634, 498, 504, 499, 500, 501, 502, 503, 0, - 505, 0, 0, 0, 0, 0, 0, 581, 582, 657, - 378, 478, 591, 331, 343, 346, 336, 355, 0, 356, - 332, 333, 338, 340, 341, 342, 347, 348, 352, 358, - 246, 207, 384, 392, 568, 308, 213, 214, 215, 514, - 515, 516, 517, 605, 606, 610, 202, 455, 456, 457, - 458, 289, 600, 305, 461, 460, 327, 328, 373, 442, - 530, 532, 543, 547, 549, 551, 557, 560, 531, 533, - 544, 548, 550, 552, 558, 561, 520, 522, 524, 526, - 539, 538, 535, 563, 564, 541, 546, 525, 537, 542, - 555, 562, 559, 519, 523, 527, 536, 554, 553, 534, - 545, 556, 540, 528, 521, 529, 0, 194, 218, 362, - 92, 447, 285, 635, 604, 599, 203, 220, 0, 259, - 0, 0, 0, 0, 0, 0, 2361, 0, 0, 2360, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 196, 198, 206, 219, 229, 233, 240, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 429, 430, 432, 434, 436, - 448, 453, 467, 468, 469, 470, 471, 474, 475, 480, - 481, 482, 483, 484, 492, 493, 506, 576, 578, 593, - 611, 617, 473, 297, 298, 437, 438, 310, 311, 631, - 632, 296, 588, 618, 586, 630, 612, 431, 372, 0, - 0, 375, 278, 301, 316, 0, 603, 494, 224, 459, - 287, 248, 0, 0, 208, 243, 227, 256, 271, 274, - 320, 385, 393, 422, 427, 293, 268, 241, 452, 238, - 477, 509, 510, 511, 513, 389, 263, 426, 1728, 0, - 370, 566, 567, 312, 518, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, - 1730, 0, 0, 0, 0, 267, 0, 0, 0, 0, - 360, 264, 0, 0, 423, 0, 201, 0, 479, 249, - 371, 368, 573, 279, 270, 266, 247, 313, 379, 421, - 508, 415, 0, 364, 0, 0, 489, 394, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 319, 245, 321, 200, 406, 490, 283, - 0, 0, 0, 0, 1732, 705, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 0, 0, 242, 0, - 0, 0, 345, 354, 353, 334, 335, 337, 339, 344, - 351, 357, 0, 0, 0, 0, 0, 262, 317, 269, - 261, 570, 0, 0, 0, 0, 0, 0, 0, 226, - 0, 0, 0, 1445, 0, 1446, 1447, 0, 0, 0, - 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 446, 0, 0, 0, 614, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 195, 222, 0, 0, - 405, 454, 466, 0, 0, 0, 250, 0, 464, 419, - 592, 230, 281, 451, 425, 462, 433, 284, 0, 0, - 463, 366, 575, 443, 589, 615, 616, 260, 399, 601, - 512, 609, 633, 223, 257, 413, 497, 595, 486, 391, - 571, 572, 325, 485, 292, 199, 363, 621, 221, 472, - 365, 239, 228, 577, 598, 286, 449, 628, 210, 507, - 587, 236, 476, 0, 0, 636, 244, 496, 212, 584, - 495, 387, 322, 323, 211, 0, 450, 265, 290, 0, - 0, 255, 408, 579, 580, 253, 637, 225, 608, 217, - 0, 607, 401, 574, 585, 388, 377, 216, 583, 386, - 376, 330, 349, 350, 277, 303, 440, 369, 441, 302, - 304, 397, 396, 398, 204, 596, 0, 205, 0, 491, - 597, 638, 445, 209, 231, 232, 234, 0, 276, 280, - 288, 291, 299, 300, 309, 361, 412, 439, 435, 444, - 0, 569, 590, 602, 613, 619, 620, 622, 623, 624, - 625, 626, 629, 627, 400, 307, 487, 329, 367, 0, - 0, 418, 465, 237, 594, 488, 197, 0, 0, 0, - 0, 251, 252, 0, 565, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 639, 640, 641, 642, 643, 644, - 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 655, 656, 634, 498, 504, 499, 500, 501, 502, 503, - 0, 505, 0, 0, 0, 0, 0, 0, 581, 582, - 657, 378, 478, 591, 331, 343, 346, 336, 355, 0, - 356, 332, 333, 338, 340, 341, 342, 347, 348, 352, - 358, 246, 207, 384, 392, 568, 308, 213, 214, 215, - 514, 515, 516, 517, 605, 606, 610, 202, 455, 456, - 457, 458, 289, 600, 305, 461, 460, 327, 328, 373, - 442, 530, 532, 543, 547, 549, 551, 557, 560, 531, - 533, 544, 548, 550, 552, 558, 561, 520, 522, 524, - 526, 539, 538, 535, 563, 564, 541, 546, 525, 537, - 542, 555, 562, 559, 519, 523, 527, 536, 554, 553, - 534, 545, 556, 540, 528, 521, 529, 0, 194, 218, - 362, 0, 447, 285, 635, 604, 599, 203, 220, 0, - 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 196, 198, 206, 219, 229, 233, 240, 258, - 273, 275, 282, 295, 306, 314, 315, 318, 324, 374, - 380, 381, 382, 383, 402, 403, 404, 407, 410, 411, - 414, 416, 417, 420, 424, 428, 429, 430, 432, 434, - 436, 448, 453, 467, 468, 469, 470, 471, 474, 475, - 480, 481, 482, 483, 484, 492, 493, 506, 576, 578, - 593, 611, 617, 473, 297, 298, 437, 438, 310, 311, - 631, 632, 296, 588, 618, 586, 630, 612, 431, 372, - 0, 0, 375, 278, 301, 316, 0, 603, 494, 224, - 459, 287, 248, 0, 0, 208, 243, 227, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 241, 452, - 238, 477, 509, 510, 511, 513, 389, 263, 426, 0, - 390, 370, 566, 567, 312, 84, 518, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, - 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, - 0, 0, 360, 264, 0, 0, 423, 0, 201, 0, - 479, 249, 371, 368, 573, 279, 270, 266, 247, 313, - 379, 421, 508, 415, 0, 364, 0, 0, 489, 394, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 319, 245, 321, 200, 406, - 490, 283, 0, 93, 0, 1709, 0, 705, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, - 242, 0, 0, 0, 345, 354, 353, 334, 335, 337, - 339, 344, 351, 357, 0, 0, 0, 0, 0, 262, - 317, 269, 261, 570, 0, 0, 0, 0, 0, 0, - 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, - 395, 254, 0, 446, 0, 0, 0, 614, 0, 0, - 0, 0, 0, 0, 0, 359, 0, 326, 195, 222, - 0, 0, 405, 454, 466, 0, 0, 0, 250, 0, - 464, 419, 592, 230, 281, 451, 425, 462, 433, 284, - 0, 0, 463, 366, 575, 443, 589, 615, 616, 260, - 399, 601, 512, 609, 633, 223, 257, 413, 497, 595, - 486, 391, 571, 572, 325, 485, 292, 199, 363, 621, - 221, 472, 365, 239, 228, 577, 598, 286, 449, 628, - 210, 507, 587, 236, 476, 0, 0, 636, 244, 496, - 212, 584, 495, 387, 322, 323, 211, 0, 450, 265, - 290, 0, 0, 255, 408, 579, 580, 253, 637, 225, - 608, 217, 0, 607, 401, 574, 585, 388, 377, 216, - 583, 386, 376, 330, 349, 350, 277, 303, 440, 369, - 441, 302, 304, 397, 396, 398, 204, 596, 0, 205, - 0, 491, 597, 638, 445, 209, 231, 232, 234, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 439, - 435, 444, 0, 569, 590, 602, 613, 619, 620, 622, - 623, 624, 625, 626, 629, 627, 400, 307, 487, 329, - 367, 0, 0, 418, 465, 237, 594, 488, 197, 0, - 0, 0, 0, 251, 252, 0, 565, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 639, 640, 641, 642, - 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, - 653, 654, 655, 656, 634, 498, 504, 499, 500, 501, - 502, 503, 0, 505, 0, 0, 0, 0, 0, 0, - 581, 582, 657, 378, 478, 591, 331, 343, 346, 336, - 355, 0, 356, 332, 333, 338, 340, 341, 342, 347, - 348, 352, 358, 246, 207, 384, 392, 568, 308, 213, - 214, 215, 514, 515, 516, 517, 605, 606, 610, 202, - 455, 456, 457, 458, 289, 600, 305, 461, 460, 327, - 328, 373, 442, 530, 532, 543, 547, 549, 551, 557, - 560, 531, 533, 544, 548, 550, 552, 558, 561, 520, - 522, 524, 526, 539, 538, 535, 563, 564, 541, 546, - 525, 537, 542, 555, 562, 559, 519, 523, 527, 536, - 554, 553, 534, 545, 556, 540, 528, 521, 529, 0, - 194, 218, 362, 92, 447, 285, 635, 604, 599, 203, - 220, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 196, 198, 206, 219, 229, 233, - 240, 258, 273, 275, 282, 295, 306, 314, 315, 318, - 324, 374, 380, 381, 382, 383, 402, 403, 404, 407, - 410, 411, 414, 416, 417, 420, 424, 428, 429, 430, - 432, 434, 436, 448, 453, 467, 468, 469, 470, 471, - 474, 475, 480, 481, 482, 483, 484, 492, 493, 506, - 576, 578, 593, 611, 617, 473, 297, 298, 437, 438, - 310, 311, 631, 632, 296, 588, 618, 586, 630, 612, - 431, 372, 0, 0, 375, 278, 301, 316, 0, 603, - 494, 224, 459, 287, 248, 0, 0, 208, 243, 227, - 256, 271, 274, 320, 385, 393, 422, 427, 293, 268, - 241, 452, 238, 477, 509, 510, 511, 513, 389, 263, - 426, 390, 0, 370, 566, 567, 312, 518, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, - 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, - 0, 0, 0, 360, 264, 0, 0, 423, 0, 201, - 0, 479, 249, 371, 368, 573, 279, 270, 266, 247, - 313, 379, 421, 508, 415, 0, 364, 0, 0, 489, - 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 319, 245, 321, 200, - 406, 490, 283, 0, 93, 0, 0, 0, 192, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, - 0, 242, 0, 0, 0, 345, 354, 353, 334, 335, - 337, 339, 344, 351, 357, 0, 0, 0, 0, 0, - 262, 317, 269, 261, 570, 0, 0, 0, 0, 0, - 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 0, 395, 254, 0, 446, 0, 0, 0, 614, 0, - 0, 0, 0, 0, 0, 0, 359, 0, 326, 195, - 222, 0, 0, 405, 454, 466, 0, 0, 0, 250, - 0, 464, 419, 592, 230, 281, 451, 425, 462, 433, - 284, 0, 0, 463, 366, 575, 443, 589, 615, 616, - 260, 399, 601, 512, 609, 633, 223, 257, 413, 497, - 595, 486, 391, 571, 572, 325, 485, 292, 199, 363, - 621, 221, 472, 365, 239, 228, 577, 598, 286, 449, - 628, 210, 507, 587, 236, 476, 0, 0, 636, 244, - 496, 212, 584, 495, 387, 322, 323, 211, 0, 450, - 265, 290, 0, 0, 255, 408, 579, 580, 253, 637, - 225, 608, 217, 0, 607, 401, 574, 585, 388, 377, - 216, 583, 386, 376, 330, 349, 350, 277, 303, 440, - 369, 441, 302, 304, 397, 396, 398, 204, 596, 0, - 205, 0, 491, 597, 638, 445, 209, 231, 232, 234, - 0, 276, 280, 288, 291, 299, 300, 309, 361, 412, - 439, 435, 444, 0, 569, 590, 602, 613, 619, 620, - 622, 623, 624, 625, 626, 629, 627, 400, 307, 487, - 329, 367, 0, 0, 418, 465, 237, 594, 488, 197, - 0, 0, 0, 0, 251, 252, 0, 565, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 639, 640, 641, + 656, 657, 658, 636, 500, 506, 501, 502, 503, 504, + 505, 0, 507, 902, 752, 751, 0, 758, 0, 787, + 788, 790, 794, 795, 796, 807, 854, 855, 863, 865, + 866, 864, 867, 868, 869, 872, 873, 874, 875, 870, + 871, 876, 770, 774, 771, 772, 773, 785, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 786, 925, + 926, 927, 928, 929, 930, 800, 804, 803, 801, 802, + 798, 799, 826, 825, 827, 828, 829, 830, 831, 832, + 834, 833, 835, 836, 837, 838, 839, 840, 808, 809, + 812, 813, 811, 810, 814, 823, 824, 815, 816, 817, + 818, 819, 820, 822, 821, 841, 842, 843, 844, 845, + 847, 846, 850, 851, 849, 848, 853, 852, 750, 196, + 220, 364, 0, 449, 287, 637, 606, 601, 205, 222, + 916, 261, 917, 0, 0, 921, 0, 0, 0, 923, + 922, 0, 924, 886, 885, 0, 0, 918, 919, 0, + 920, 0, 0, 198, 200, 208, 221, 231, 235, 242, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 431, 432, 434, + 436, 438, 450, 455, 469, 470, 471, 472, 473, 476, + 477, 482, 483, 484, 485, 486, 494, 495, 508, 578, + 580, 595, 613, 619, 475, 931, 932, 933, 934, 935, + 936, 937, 938, 298, 590, 620, 588, 632, 614, 433, + 374, 0, 0, 377, 280, 303, 318, 0, 605, 496, + 226, 461, 289, 250, 956, 0, 210, 245, 229, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 243, + 454, 240, 479, 511, 512, 513, 515, 391, 265, 428, + 392, 0, 372, 568, 569, 314, 520, 0, 761, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 749, 0, 0, 0, 269, 754, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 203, 0, + 481, 251, 373, 370, 575, 281, 272, 268, 249, 315, + 381, 423, 510, 417, 760, 366, 0, 0, 491, 396, + 0, 0, 0, 0, 0, 756, 757, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 247, 323, 202, 408, + 492, 285, 0, 95, 0, 0, 957, 941, 1070, 907, + 945, 958, 959, 960, 961, 946, 0, 237, 947, 948, + 244, 949, 0, 906, 791, 793, 792, 856, 857, 858, + 859, 860, 861, 862, 789, 954, 962, 963, 0, 264, + 319, 271, 263, 572, 0, 0, 0, 0, 0, 0, + 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, + 0, 746, 0, 759, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 743, 744, 0, 0, 0, 0, + 901, 0, 745, 0, 0, 753, 964, 965, 966, 967, + 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, + 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, + 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 2067, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 448, 900, 0, 0, 616, 0, + 0, 898, 0, 0, 0, 0, 361, 0, 328, 197, + 224, 0, 0, 407, 456, 468, 0, 0, 0, 951, + 0, 466, 421, 594, 232, 283, 453, 427, 464, 435, + 286, 0, 0, 465, 368, 577, 445, 591, 617, 618, + 262, 401, 603, 514, 611, 635, 225, 259, 415, 499, + 597, 488, 393, 573, 574, 327, 487, 294, 201, 365, + 623, 223, 474, 367, 241, 230, 579, 600, 288, 451, + 630, 212, 509, 589, 238, 478, 0, 0, 638, 246, + 498, 214, 586, 497, 389, 324, 325, 213, 0, 452, + 267, 292, 0, 0, 257, 410, 952, 953, 255, 639, + 797, 610, 219, 0, 609, 403, 576, 587, 390, 379, + 218, 585, 388, 378, 332, 805, 806, 279, 305, 882, + 881, 880, 304, 306, 878, 879, 877, 206, 598, 0, + 207, 0, 493, 599, 640, 447, 211, 233, 234, 236, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 441, 437, 446, 0, 571, 592, 604, 615, 621, 622, + 624, 625, 626, 627, 628, 631, 629, 402, 309, 489, + 331, 369, 0, 0, 420, 467, 239, 596, 490, 888, + 910, 899, 765, 766, 889, 890, 914, 891, 768, 769, + 911, 912, 762, 763, 767, 913, 915, 641, 642, 643, + 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 656, 657, 658, 636, 500, 506, 501, 502, + 503, 504, 505, 0, 507, 902, 752, 751, 0, 758, + 0, 787, 788, 790, 794, 795, 796, 807, 854, 855, + 863, 865, 866, 864, 867, 868, 869, 872, 873, 874, + 875, 870, 871, 876, 770, 774, 771, 772, 773, 785, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 786, 925, 926, 927, 928, 929, 930, 800, 804, 803, + 801, 802, 798, 799, 826, 825, 827, 828, 829, 830, + 831, 832, 834, 833, 835, 836, 837, 838, 839, 840, + 808, 809, 812, 813, 811, 810, 814, 823, 824, 815, + 816, 817, 818, 819, 820, 822, 821, 841, 842, 843, + 844, 845, 847, 846, 850, 851, 849, 848, 853, 852, + 750, 196, 220, 364, 0, 449, 287, 637, 606, 601, + 205, 222, 916, 261, 917, 0, 0, 921, 0, 0, + 0, 923, 922, 0, 924, 886, 885, 0, 0, 918, + 919, 0, 920, 0, 0, 198, 200, 208, 221, 231, + 235, 242, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 431, + 432, 434, 436, 438, 450, 455, 469, 470, 471, 472, + 473, 476, 477, 482, 483, 484, 485, 486, 494, 495, + 508, 578, 580, 595, 613, 619, 475, 931, 932, 933, + 934, 935, 936, 937, 938, 298, 590, 620, 588, 632, + 614, 433, 374, 0, 0, 377, 280, 303, 318, 0, + 605, 496, 226, 461, 289, 250, 956, 0, 210, 245, + 229, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 243, 454, 240, 479, 511, 512, 513, 515, 391, + 265, 428, 392, 0, 372, 568, 569, 314, 520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 0, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 0, 0, 0, 0, 707, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 244, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 1121, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 448, 0, 0, 1120, + 616, 0, 0, 0, 0, 0, 1117, 1118, 361, 1078, + 328, 197, 224, 1111, 1115, 407, 456, 468, 0, 0, + 0, 252, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 581, 582, + 255, 639, 227, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 351, 352, 279, + 305, 442, 371, 443, 304, 306, 399, 398, 400, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 199, 0, 0, 0, 0, 253, 254, 0, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, - 652, 653, 654, 655, 656, 634, 498, 504, 499, 500, - 501, 502, 503, 0, 505, 0, 0, 0, 0, 0, - 0, 581, 582, 657, 378, 478, 591, 331, 343, 346, - 336, 355, 0, 356, 332, 333, 338, 340, 341, 342, - 347, 348, 352, 358, 246, 207, 384, 392, 568, 308, - 213, 214, 215, 514, 515, 516, 517, 605, 606, 610, - 202, 455, 456, 457, 458, 289, 600, 305, 461, 460, - 327, 328, 373, 442, 530, 532, 543, 547, 549, 551, - 557, 560, 531, 533, 544, 548, 550, 552, 558, 561, - 520, 522, 524, 526, 539, 538, 535, 563, 564, 541, - 546, 525, 537, 542, 555, 562, 559, 519, 523, 527, - 536, 554, 553, 534, 545, 556, 540, 528, 521, 529, - 0, 194, 218, 362, 0, 447, 285, 635, 604, 599, - 203, 220, 0, 259, 0, 0, 0, 0, 0, 0, - 2361, 0, 0, 2360, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 196, 198, 206, 219, 229, - 233, 240, 258, 273, 275, 282, 295, 306, 314, 315, - 318, 324, 374, 380, 381, 382, 383, 402, 403, 404, - 407, 410, 411, 414, 416, 417, 420, 424, 428, 429, - 430, 432, 434, 436, 448, 453, 467, 468, 469, 470, - 471, 474, 475, 480, 481, 482, 483, 484, 492, 493, - 506, 576, 578, 593, 611, 617, 473, 297, 298, 437, - 438, 310, 311, 631, 632, 296, 588, 618, 586, 630, - 612, 431, 372, 0, 0, 375, 278, 301, 316, 0, - 603, 494, 224, 459, 287, 248, 0, 0, 208, 243, - 227, 256, 271, 274, 320, 385, 393, 422, 427, 293, - 268, 241, 452, 238, 477, 509, 510, 511, 513, 389, - 263, 426, 390, 0, 370, 566, 567, 312, 518, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 409, 0, 0, 0, 2311, 0, 0, 0, 0, 267, - 0, 0, 0, 0, 360, 264, 0, 0, 423, 0, - 201, 0, 479, 249, 371, 368, 573, 279, 270, 266, - 247, 313, 379, 421, 508, 415, 0, 364, 0, 0, - 489, 394, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 319, 245, 321, - 200, 406, 490, 283, 0, 0, 0, 0, 1911, 192, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 0, 0, 242, 0, 0, 0, 345, 354, 353, 334, - 335, 337, 339, 344, 351, 357, 0, 0, 0, 0, - 0, 262, 317, 269, 261, 570, 0, 0, 0, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 0, 395, 254, 0, 446, 0, 0, 0, 614, - 0, 0, 0, 0, 0, 0, 0, 359, 0, 326, - 195, 222, 0, 0, 405, 454, 466, 0, 0, 0, - 250, 0, 464, 419, 592, 230, 281, 451, 425, 462, - 433, 284, 0, 2309, 463, 366, 575, 443, 589, 615, - 616, 260, 399, 601, 512, 609, 633, 223, 257, 413, - 497, 595, 486, 391, 571, 572, 325, 485, 292, 199, - 363, 621, 221, 472, 365, 239, 228, 577, 598, 286, - 449, 628, 210, 507, 587, 236, 476, 0, 0, 636, - 244, 496, 212, 584, 495, 387, 322, 323, 211, 0, - 450, 265, 290, 0, 0, 255, 408, 579, 580, 253, - 637, 225, 608, 217, 0, 607, 401, 574, 585, 388, - 377, 216, 583, 386, 376, 330, 349, 350, 277, 303, - 440, 369, 441, 302, 304, 397, 396, 398, 204, 596, - 0, 205, 0, 491, 597, 638, 445, 209, 231, 232, - 234, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 439, 435, 444, 0, 569, 590, 602, 613, 619, - 620, 622, 623, 624, 625, 626, 629, 627, 400, 307, - 487, 329, 367, 0, 0, 418, 465, 237, 594, 488, - 197, 0, 0, 0, 0, 251, 252, 0, 565, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, - 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, - 651, 652, 653, 654, 655, 656, 634, 498, 504, 499, - 500, 501, 502, 503, 0, 505, 0, 0, 0, 0, - 0, 0, 581, 582, 657, 378, 478, 591, 331, 343, - 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, - 342, 347, 348, 352, 358, 246, 207, 384, 392, 568, - 308, 213, 214, 215, 514, 515, 516, 517, 605, 606, - 610, 202, 455, 456, 457, 458, 289, 600, 305, 461, - 460, 327, 328, 373, 442, 530, 532, 543, 547, 549, - 551, 557, 560, 531, 533, 544, 548, 550, 552, 558, - 561, 520, 522, 524, 526, 539, 538, 535, 563, 564, - 541, 546, 525, 537, 542, 555, 562, 559, 519, 523, - 527, 536, 554, 553, 534, 545, 556, 540, 528, 521, - 529, 0, 194, 218, 362, 0, 447, 285, 635, 604, - 599, 203, 220, 0, 259, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 196, 198, 206, 219, - 229, 233, 240, 258, 273, 275, 282, 295, 306, 314, - 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, - 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, - 429, 430, 432, 434, 436, 448, 453, 467, 468, 469, - 470, 471, 474, 475, 480, 481, 482, 483, 484, 492, - 493, 506, 576, 578, 593, 611, 617, 473, 297, 298, - 437, 438, 310, 311, 631, 632, 296, 588, 618, 586, - 630, 612, 431, 372, 0, 0, 375, 278, 301, 316, - 0, 603, 494, 224, 459, 287, 248, 0, 0, 208, - 243, 227, 256, 271, 274, 320, 385, 393, 422, 427, - 293, 268, 241, 452, 238, 477, 509, 510, 511, 513, - 389, 263, 426, 390, 0, 370, 566, 567, 312, 518, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, - 267, 0, 0, 0, 0, 360, 264, 0, 0, 423, - 0, 201, 0, 479, 249, 371, 368, 573, 279, 270, - 266, 247, 313, 379, 421, 508, 415, 0, 364, 0, - 0, 489, 394, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 319, 245, - 321, 200, 406, 490, 283, 0, 0, 0, 0, 0, - 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 0, 0, 242, 0, 0, 0, 345, 354, 353, - 334, 335, 337, 339, 344, 351, 357, 0, 0, 0, - 0, 0, 262, 317, 269, 261, 570, 0, 0, 0, - 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, - 0, 0, 0, 0, 0, 0, 0, 0, 1067, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 294, 0, 395, 254, 0, 446, 0, 0, 0, - 614, 0, 0, 0, 0, 0, 0, 0, 359, 1073, - 326, 195, 222, 1071, 0, 405, 454, 466, 0, 0, - 0, 250, 0, 464, 419, 592, 230, 281, 451, 425, - 462, 433, 284, 0, 0, 463, 366, 575, 443, 589, - 615, 616, 260, 399, 601, 512, 609, 633, 223, 257, - 413, 497, 595, 486, 391, 571, 572, 325, 485, 292, - 199, 363, 621, 221, 472, 365, 239, 228, 577, 598, - 286, 449, 628, 210, 507, 587, 236, 476, 0, 0, - 636, 244, 496, 212, 584, 495, 387, 322, 323, 211, - 0, 450, 265, 290, 0, 0, 255, 408, 579, 580, - 253, 637, 225, 608, 217, 0, 607, 401, 574, 585, - 388, 377, 216, 583, 386, 376, 330, 349, 350, 277, - 303, 440, 369, 441, 302, 304, 397, 396, 398, 204, - 596, 0, 205, 0, 491, 597, 638, 445, 209, 231, - 232, 234, 0, 276, 280, 288, 291, 299, 300, 309, - 361, 412, 439, 435, 444, 0, 569, 590, 602, 613, - 619, 620, 622, 623, 624, 625, 626, 629, 627, 400, - 307, 487, 329, 367, 0, 0, 418, 465, 237, 594, - 488, 197, 0, 0, 0, 0, 251, 252, 0, 565, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, - 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 654, 655, 656, 634, 498, 504, - 499, 500, 501, 502, 503, 0, 505, 0, 0, 0, - 0, 0, 0, 581, 582, 657, 378, 478, 591, 331, - 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, - 341, 342, 347, 348, 352, 358, 246, 207, 384, 392, - 568, 308, 213, 214, 215, 514, 515, 516, 517, 605, - 606, 610, 202, 455, 456, 457, 458, 289, 600, 305, - 461, 460, 327, 328, 373, 442, 530, 532, 543, 547, - 549, 551, 557, 560, 531, 533, 544, 548, 550, 552, - 558, 561, 520, 522, 524, 526, 539, 538, 535, 563, - 564, 541, 546, 525, 537, 542, 555, 562, 559, 519, - 523, 527, 536, 554, 553, 534, 545, 556, 540, 528, - 521, 529, 0, 194, 218, 362, 0, 447, 285, 635, - 604, 599, 203, 220, 0, 259, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 196, 198, 206, - 219, 229, 233, 240, 258, 273, 275, 282, 295, 306, - 314, 315, 318, 324, 374, 380, 381, 382, 383, 402, - 403, 404, 407, 410, 411, 414, 416, 417, 420, 424, - 428, 429, 430, 432, 434, 436, 448, 453, 467, 468, - 469, 470, 471, 474, 475, 480, 481, 482, 483, 484, - 492, 493, 506, 576, 578, 593, 611, 617, 473, 297, - 298, 437, 438, 310, 311, 631, 632, 296, 588, 618, - 586, 630, 612, 431, 372, 0, 0, 375, 278, 301, - 316, 0, 603, 494, 224, 459, 287, 248, 0, 0, - 208, 243, 227, 256, 271, 274, 320, 385, 393, 422, - 427, 293, 268, 241, 452, 238, 477, 509, 510, 511, - 513, 389, 263, 426, 390, 0, 370, 566, 567, 312, - 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 409, 0, 0, 0, 2311, 0, 0, 0, - 0, 267, 0, 0, 0, 0, 360, 264, 0, 0, - 423, 0, 201, 0, 479, 249, 371, 368, 573, 279, - 270, 266, 247, 313, 379, 421, 508, 415, 0, 364, - 0, 0, 489, 394, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, - 245, 321, 200, 406, 490, 283, 0, 0, 0, 0, - 1911, 192, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 0, 0, 242, 0, 0, 0, 345, 354, - 353, 334, 335, 337, 339, 344, 351, 357, 0, 0, - 0, 0, 0, 262, 317, 269, 261, 570, 0, 0, - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 395, 254, 0, 446, 0, 0, - 0, 614, 0, 0, 0, 0, 0, 0, 0, 359, - 0, 326, 195, 222, 0, 0, 405, 454, 466, 0, - 0, 0, 250, 0, 464, 419, 592, 230, 281, 451, - 425, 462, 433, 284, 0, 0, 463, 366, 575, 443, - 589, 615, 616, 260, 399, 601, 512, 609, 633, 223, - 257, 413, 497, 595, 486, 391, 571, 572, 325, 485, - 292, 199, 363, 621, 221, 472, 365, 239, 228, 577, - 598, 286, 449, 628, 210, 507, 587, 236, 476, 0, - 0, 636, 244, 496, 212, 584, 495, 387, 322, 323, - 211, 0, 450, 265, 290, 0, 0, 255, 408, 579, - 580, 253, 637, 225, 608, 217, 0, 607, 401, 574, - 585, 388, 377, 216, 583, 386, 376, 330, 349, 350, - 277, 303, 440, 369, 441, 302, 304, 397, 396, 398, - 204, 596, 0, 205, 0, 491, 597, 638, 445, 209, - 231, 232, 234, 0, 276, 280, 288, 291, 299, 300, - 309, 361, 412, 439, 435, 444, 0, 569, 590, 602, - 613, 619, 620, 622, 623, 624, 625, 626, 629, 627, - 400, 307, 487, 329, 367, 0, 0, 418, 465, 237, - 594, 488, 197, 0, 0, 0, 0, 251, 252, 0, - 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 634, 498, - 504, 499, 500, 501, 502, 503, 0, 505, 0, 0, - 0, 0, 0, 0, 581, 582, 657, 378, 478, 591, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 246, 207, 384, - 392, 568, 308, 213, 214, 215, 514, 515, 516, 517, - 605, 606, 610, 202, 455, 456, 457, 458, 289, 600, - 305, 461, 460, 327, 328, 373, 442, 530, 532, 543, - 547, 549, 551, 557, 560, 531, 533, 544, 548, 550, - 552, 558, 561, 520, 522, 524, 526, 539, 538, 535, - 563, 564, 541, 546, 525, 537, 542, 555, 562, 559, - 519, 523, 527, 536, 554, 553, 534, 545, 556, 540, - 528, 521, 529, 0, 194, 218, 362, 0, 447, 285, - 635, 604, 599, 203, 220, 0, 259, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 196, 198, - 206, 219, 229, 233, 240, 258, 273, 275, 282, 295, - 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, - 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, - 424, 428, 429, 430, 432, 434, 436, 448, 453, 467, - 468, 469, 470, 471, 474, 475, 480, 481, 482, 483, - 484, 492, 493, 506, 576, 578, 593, 611, 617, 473, - 297, 298, 437, 438, 310, 311, 631, 632, 296, 588, - 618, 586, 630, 612, 431, 372, 0, 0, 375, 278, - 301, 316, 0, 603, 494, 224, 459, 287, 248, 0, - 0, 208, 243, 227, 256, 271, 274, 320, 385, 393, - 422, 427, 293, 268, 241, 452, 238, 477, 509, 510, - 511, 513, 389, 263, 426, 390, 0, 370, 566, 567, - 312, 518, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, - 0, 0, 267, 0, 0, 0, 0, 360, 264, 0, - 0, 423, 0, 201, 0, 479, 249, 371, 368, 573, - 279, 270, 266, 247, 313, 379, 421, 508, 415, 0, - 364, 0, 0, 489, 394, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 319, 245, 321, 200, 406, 490, 283, 0, 0, 0, - 1709, 0, 705, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 0, 0, 242, 0, 0, 0, 345, - 354, 353, 334, 335, 337, 339, 344, 351, 357, 0, - 0, 0, 0, 0, 262, 317, 269, 261, 570, 0, - 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 395, 254, 0, 446, 0, - 0, 0, 614, 0, 0, 0, 3886, 0, 0, 0, - 359, 0, 326, 195, 222, 0, 0, 405, 454, 466, - 0, 0, 0, 250, 0, 464, 419, 592, 230, 281, - 451, 425, 462, 433, 284, 0, 0, 463, 366, 575, - 443, 589, 615, 616, 260, 399, 601, 512, 609, 633, - 223, 257, 413, 497, 595, 486, 391, 571, 572, 325, - 485, 292, 199, 363, 621, 221, 472, 365, 239, 228, - 577, 598, 286, 449, 628, 210, 507, 587, 236, 476, - 0, 0, 636, 244, 496, 212, 584, 495, 387, 322, - 323, 211, 0, 450, 265, 290, 0, 0, 255, 408, - 579, 580, 253, 637, 225, 608, 217, 0, 607, 401, - 574, 585, 388, 377, 216, 583, 386, 376, 330, 349, - 350, 277, 303, 440, 369, 441, 302, 304, 397, 396, - 398, 204, 596, 0, 205, 0, 491, 597, 638, 445, - 209, 231, 232, 234, 0, 276, 280, 288, 291, 299, - 300, 309, 361, 412, 439, 435, 444, 0, 569, 590, - 602, 613, 619, 620, 622, 623, 624, 625, 626, 629, - 627, 400, 307, 487, 329, 367, 0, 0, 418, 465, - 237, 594, 488, 197, 0, 0, 0, 0, 251, 252, - 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 639, 640, 641, 642, 643, 644, 645, 646, 647, - 648, 649, 650, 651, 652, 653, 654, 655, 656, 634, - 498, 504, 499, 500, 501, 502, 503, 0, 505, 0, - 0, 0, 0, 0, 0, 581, 582, 657, 378, 478, - 591, 331, 343, 346, 336, 355, 0, 356, 332, 333, - 338, 340, 341, 342, 347, 348, 352, 358, 246, 207, - 384, 392, 568, 308, 213, 214, 215, 514, 515, 516, - 517, 605, 606, 610, 202, 455, 456, 457, 458, 289, - 600, 305, 461, 460, 327, 328, 373, 442, 530, 532, - 543, 547, 549, 551, 557, 560, 531, 533, 544, 548, - 550, 552, 558, 561, 520, 522, 524, 526, 539, 538, - 535, 563, 564, 541, 546, 525, 537, 542, 555, 562, - 559, 519, 523, 527, 536, 554, 553, 534, 545, 556, - 540, 528, 521, 529, 0, 194, 218, 362, 0, 447, - 285, 635, 604, 599, 203, 220, 0, 259, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, - 198, 206, 219, 229, 233, 240, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 429, 430, 432, 434, 436, 448, 453, - 467, 468, 469, 470, 471, 474, 475, 480, 481, 482, - 483, 484, 492, 493, 506, 576, 578, 593, 611, 617, - 473, 297, 298, 437, 438, 310, 311, 631, 632, 296, - 588, 618, 586, 630, 612, 431, 372, 0, 0, 375, - 278, 301, 316, 0, 603, 494, 224, 459, 287, 248, - 0, 0, 208, 243, 227, 256, 271, 274, 320, 385, - 393, 422, 427, 293, 268, 241, 452, 238, 477, 509, - 510, 511, 513, 389, 263, 426, 390, 0, 370, 566, - 567, 312, 518, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, - 0, 0, 0, 267, 0, 0, 0, 0, 360, 264, - 0, 0, 423, 0, 201, 0, 479, 249, 371, 368, - 573, 279, 270, 266, 247, 313, 379, 421, 508, 415, - 0, 364, 0, 0, 489, 394, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 319, 245, 321, 200, 406, 490, 283, 0, 0, - 0, 0, 2071, 705, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 0, 0, 242, 0, 0, 0, - 345, 354, 353, 334, 335, 337, 339, 344, 351, 357, - 0, 0, 0, 0, 0, 262, 317, 269, 261, 570, - 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2072, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 446, - 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, - 0, 359, 0, 326, 195, 222, 0, 0, 405, 454, - 466, 0, 0, 0, 250, 0, 464, 419, 592, 230, - 281, 451, 425, 462, 433, 284, 0, 0, 463, 366, - 575, 443, 589, 615, 616, 260, 399, 601, 512, 609, - 633, 223, 257, 413, 497, 595, 486, 391, 571, 572, - 325, 485, 292, 199, 363, 621, 221, 472, 365, 239, - 228, 577, 598, 286, 449, 628, 210, 507, 587, 236, - 476, 0, 0, 636, 244, 496, 212, 584, 495, 387, - 322, 323, 211, 0, 450, 265, 290, 0, 0, 255, - 408, 579, 580, 253, 637, 225, 608, 217, 0, 607, - 401, 574, 585, 388, 377, 216, 583, 386, 376, 330, - 349, 350, 277, 303, 440, 369, 441, 302, 304, 397, - 396, 398, 204, 596, 0, 205, 0, 491, 597, 638, - 445, 209, 231, 232, 234, 0, 276, 280, 288, 291, - 299, 300, 309, 361, 412, 439, 435, 444, 0, 569, - 590, 602, 613, 619, 620, 622, 623, 624, 625, 626, - 629, 627, 400, 307, 487, 329, 367, 0, 0, 418, - 465, 237, 594, 488, 197, 0, 0, 0, 0, 251, - 252, 0, 565, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 639, 640, 641, 642, 643, 644, 645, 646, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 0, 0, 0, + 0, 0, 0, 583, 584, 659, 380, 480, 593, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 248, 209, 386, 394, + 570, 310, 215, 216, 217, 516, 517, 518, 519, 607, + 608, 612, 204, 457, 458, 459, 460, 291, 602, 307, + 463, 462, 329, 330, 375, 444, 532, 534, 545, 549, + 551, 553, 559, 562, 533, 535, 546, 550, 552, 554, + 560, 563, 522, 524, 526, 528, 541, 540, 537, 565, + 566, 543, 548, 527, 539, 544, 557, 564, 561, 521, + 525, 529, 538, 556, 555, 536, 547, 558, 542, 530, + 523, 531, 0, 196, 220, 364, 0, 449, 287, 637, + 606, 601, 205, 222, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 299, + 300, 439, 440, 312, 313, 633, 634, 298, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 0, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 0, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 0, 0, 0, + 1678, 941, 0, 0, 1675, 0, 0, 0, 0, 1673, + 0, 237, 1674, 1672, 244, 1677, 0, 906, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 252, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 0, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 581, 582, 255, 639, 227, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 351, + 352, 279, 305, 442, 371, 443, 304, 306, 399, 398, + 400, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 199, 0, 0, 0, 0, 253, 254, + 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 0, + 0, 0, 0, 0, 0, 583, 584, 659, 380, 480, + 593, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 248, 209, + 386, 394, 570, 310, 215, 216, 217, 516, 517, 518, + 519, 607, 608, 612, 204, 457, 458, 459, 460, 291, + 602, 307, 463, 462, 329, 330, 375, 444, 532, 534, + 545, 549, 551, 553, 559, 562, 533, 535, 546, 550, + 552, 554, 560, 563, 522, 524, 526, 528, 541, 540, + 537, 565, 566, 543, 548, 527, 539, 544, 557, 564, + 561, 521, 525, 529, 538, 556, 555, 536, 547, 558, + 542, 530, 523, 531, 0, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 299, 300, 439, 440, 312, 313, 633, 634, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 0, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 0, 392, 372, 568, + 569, 314, 86, 520, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 203, 0, 481, 251, 373, + 370, 575, 281, 272, 268, 249, 315, 381, 423, 510, + 417, 0, 366, 0, 0, 491, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 247, 323, 202, 408, 492, 285, 0, + 95, 0, 0, 0, 194, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 237, 0, 0, 244, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 572, 0, 0, 0, 0, 0, 0, 0, 0, 228, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 448, 0, 0, 0, 616, 0, 0, 0, 0, + 0, 0, 0, 361, 0, 328, 197, 224, 0, 0, + 407, 456, 468, 0, 0, 0, 252, 0, 466, 421, + 594, 232, 283, 453, 427, 464, 435, 286, 0, 0, + 465, 368, 577, 445, 591, 617, 618, 262, 401, 603, + 514, 611, 635, 225, 259, 415, 499, 597, 488, 393, + 573, 574, 327, 487, 294, 201, 365, 623, 223, 474, + 367, 241, 230, 579, 600, 288, 451, 630, 212, 509, + 589, 238, 478, 0, 0, 638, 246, 498, 214, 586, + 497, 389, 324, 325, 213, 0, 452, 267, 292, 0, + 0, 257, 410, 581, 582, 255, 639, 227, 610, 219, + 0, 609, 403, 576, 587, 390, 379, 218, 585, 388, + 378, 332, 351, 352, 279, 305, 442, 371, 443, 304, + 306, 399, 398, 400, 206, 598, 0, 207, 0, 493, + 599, 640, 447, 211, 233, 234, 236, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 441, 437, 446, + 0, 571, 592, 604, 615, 621, 622, 624, 625, 626, + 627, 628, 631, 629, 402, 309, 489, 331, 369, 0, + 0, 420, 467, 239, 596, 490, 199, 0, 0, 0, + 0, 253, 254, 0, 567, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 634, 498, 504, 499, 500, 501, 502, 503, 0, 505, - 0, 0, 0, 0, 0, 0, 581, 582, 657, 378, - 478, 591, 331, 343, 346, 336, 355, 0, 356, 332, - 333, 338, 340, 341, 342, 347, 348, 352, 358, 246, - 207, 384, 392, 568, 308, 213, 214, 215, 514, 515, - 516, 517, 605, 606, 610, 202, 455, 456, 457, 458, - 289, 600, 305, 461, 460, 327, 328, 373, 442, 530, - 532, 543, 547, 549, 551, 557, 560, 531, 533, 544, - 548, 550, 552, 558, 561, 520, 522, 524, 526, 539, - 538, 535, 563, 564, 541, 546, 525, 537, 542, 555, - 562, 559, 519, 523, 527, 536, 554, 553, 534, 545, - 556, 540, 528, 521, 529, 0, 194, 218, 362, 0, - 447, 285, 635, 604, 599, 203, 220, 0, 259, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 196, 198, 206, 219, 229, 233, 240, 258, 273, 275, - 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, - 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, - 417, 420, 424, 428, 429, 430, 432, 434, 436, 448, - 453, 467, 468, 469, 470, 471, 474, 475, 480, 481, - 482, 483, 484, 492, 493, 506, 576, 578, 593, 611, - 617, 473, 297, 298, 437, 438, 310, 311, 631, 632, - 296, 588, 618, 586, 630, 612, 431, 372, 0, 0, - 375, 278, 301, 316, 0, 603, 494, 224, 459, 287, - 248, 0, 0, 208, 243, 227, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 241, 452, 238, 477, - 509, 510, 511, 513, 389, 263, 426, 390, 0, 370, - 566, 567, 312, 518, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 0, 0, 0, 0, 267, 0, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 201, 0, 479, 249, 371, - 368, 573, 279, 270, 266, 247, 313, 379, 421, 508, - 415, 0, 364, 0, 0, 489, 394, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 245, 321, 200, 406, 490, 283, 0, - 0, 0, 0, 2804, 705, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 0, 0, 242, 0, 0, - 0, 345, 354, 353, 334, 335, 337, 339, 344, 351, - 357, 0, 0, 0, 0, 0, 262, 317, 269, 261, - 570, 0, 0, 0, 0, 0, 0, 0, 226, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2805, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 0, 395, 254, 0, - 446, 0, 0, 0, 614, 0, 0, 0, 0, 0, - 0, 0, 359, 0, 326, 195, 222, 0, 0, 405, - 454, 466, 0, 0, 0, 250, 0, 464, 419, 592, - 230, 281, 451, 425, 462, 433, 284, 0, 0, 463, - 366, 575, 443, 589, 615, 616, 260, 399, 601, 512, - 609, 633, 223, 257, 413, 497, 595, 486, 391, 571, - 572, 325, 485, 292, 199, 363, 621, 221, 472, 365, - 239, 228, 577, 598, 286, 449, 628, 210, 507, 587, - 236, 476, 0, 0, 636, 244, 496, 212, 584, 495, - 387, 322, 323, 211, 0, 450, 265, 290, 0, 0, - 255, 408, 579, 580, 253, 637, 225, 608, 217, 0, - 607, 401, 574, 585, 388, 377, 216, 583, 386, 376, - 330, 349, 350, 277, 303, 440, 369, 441, 302, 304, - 397, 396, 398, 204, 596, 0, 205, 0, 491, 597, - 638, 445, 209, 231, 232, 234, 0, 276, 280, 288, - 291, 299, 300, 309, 361, 412, 439, 435, 444, 0, - 569, 590, 602, 613, 619, 620, 622, 623, 624, 625, - 626, 629, 627, 400, 307, 487, 329, 367, 0, 0, - 418, 465, 237, 594, 488, 197, 0, 0, 0, 0, - 251, 252, 0, 565, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 639, 640, 641, 642, 643, 644, 645, - 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, - 656, 634, 498, 504, 499, 500, 501, 502, 503, 0, - 505, 0, 0, 0, 0, 0, 0, 581, 582, 657, - 378, 478, 591, 331, 343, 346, 336, 355, 0, 356, - 332, 333, 338, 340, 341, 342, 347, 348, 352, 358, - 246, 207, 384, 392, 568, 308, 213, 214, 215, 514, - 515, 516, 517, 605, 606, 610, 202, 455, 456, 457, - 458, 289, 600, 305, 461, 460, 327, 328, 373, 442, - 530, 532, 543, 547, 549, 551, 557, 560, 531, 533, - 544, 548, 550, 552, 558, 561, 520, 522, 524, 526, - 539, 538, 535, 563, 564, 541, 546, 525, 537, 542, - 555, 562, 559, 519, 523, 527, 536, 554, 553, 534, - 545, 556, 540, 528, 521, 529, 0, 194, 218, 362, - 0, 447, 285, 635, 604, 599, 203, 220, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 196, 198, 206, 219, 229, 233, 240, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 429, 430, 432, 434, 436, - 448, 453, 467, 468, 469, 470, 471, 474, 475, 480, - 481, 482, 483, 484, 492, 493, 506, 576, 578, 593, - 611, 617, 473, 297, 298, 437, 438, 310, 311, 631, - 632, 296, 588, 618, 586, 630, 612, 431, 372, 0, - 0, 375, 278, 301, 316, 0, 603, 494, 224, 459, - 287, 248, 0, 0, 208, 243, 227, 256, 271, 274, - 320, 385, 393, 422, 427, 293, 268, 241, 452, 238, - 477, 509, 510, 511, 513, 389, 263, 426, 390, 0, - 370, 566, 567, 312, 518, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, - 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, - 360, 264, 0, 0, 423, 0, 201, 0, 479, 249, - 371, 368, 573, 279, 270, 266, 247, 313, 379, 421, - 508, 415, 0, 364, 0, 0, 489, 394, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 319, 245, 321, 200, 406, 490, 283, - 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, - 2789, 0, 0, 0, 0, 235, 0, 0, 242, 2790, - 0, 0, 345, 354, 353, 334, 335, 337, 339, 344, - 351, 357, 0, 0, 0, 0, 0, 262, 317, 269, - 261, 570, 0, 0, 0, 0, 0, 0, 0, 226, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 446, 0, 0, 0, 614, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 195, 222, 0, 0, - 405, 454, 466, 0, 0, 0, 250, 0, 464, 419, - 592, 230, 281, 451, 425, 462, 433, 284, 0, 0, - 463, 366, 575, 443, 589, 615, 616, 260, 399, 601, - 512, 609, 633, 223, 257, 413, 497, 595, 486, 391, - 571, 572, 325, 485, 292, 199, 363, 621, 221, 472, - 365, 239, 228, 577, 598, 286, 449, 628, 210, 507, - 587, 236, 476, 0, 0, 636, 244, 496, 212, 584, - 495, 387, 322, 323, 211, 0, 450, 265, 290, 0, - 0, 255, 408, 579, 580, 253, 637, 225, 608, 217, - 0, 607, 401, 574, 585, 388, 377, 216, 583, 386, - 376, 330, 349, 350, 277, 303, 440, 369, 441, 302, - 304, 397, 396, 398, 204, 596, 0, 205, 0, 491, - 597, 638, 445, 209, 231, 232, 234, 0, 276, 280, - 288, 291, 299, 300, 309, 361, 412, 439, 435, 444, - 0, 569, 590, 602, 613, 619, 620, 622, 623, 624, - 625, 626, 629, 627, 400, 307, 487, 329, 367, 0, - 0, 418, 465, 237, 594, 488, 197, 0, 0, 0, - 0, 251, 252, 0, 565, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 639, 640, 641, 642, 643, 644, + 657, 658, 636, 500, 506, 501, 502, 503, 504, 505, + 0, 507, 0, 0, 0, 0, 0, 0, 583, 584, + 659, 380, 480, 593, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 248, 209, 386, 394, 570, 310, 215, 216, 217, + 516, 517, 518, 519, 607, 608, 612, 204, 457, 458, + 459, 460, 291, 602, 307, 463, 462, 329, 330, 375, + 444, 532, 534, 545, 549, 551, 553, 559, 562, 533, + 535, 546, 550, 552, 554, 560, 563, 522, 524, 526, + 528, 541, 540, 537, 565, 566, 543, 548, 527, 539, + 544, 557, 564, 561, 521, 525, 529, 538, 556, 555, + 536, 547, 558, 542, 530, 523, 531, 0, 196, 220, + 364, 94, 449, 287, 637, 606, 601, 205, 222, 0, + 261, 0, 0, 0, 0, 0, 0, 2368, 0, 0, + 2367, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 198, 200, 208, 221, 231, 235, 242, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 431, 432, 434, 436, + 438, 450, 455, 469, 470, 471, 472, 473, 476, 477, + 482, 483, 484, 485, 486, 494, 495, 508, 578, 580, + 595, 613, 619, 475, 299, 300, 439, 440, 312, 313, + 633, 634, 298, 590, 620, 588, 632, 614, 433, 374, + 0, 0, 377, 280, 303, 318, 0, 605, 496, 226, + 461, 289, 250, 0, 0, 210, 245, 229, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 243, 454, + 240, 479, 511, 512, 513, 515, 391, 265, 428, 1735, + 0, 372, 568, 569, 314, 520, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 1737, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 203, 0, 481, + 251, 373, 370, 575, 281, 272, 268, 249, 315, 381, + 423, 510, 417, 0, 366, 0, 0, 491, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 247, 323, 202, 408, 492, + 285, 0, 0, 0, 0, 1739, 707, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 572, 0, 0, 0, 0, 0, 0, 0, + 0, 228, 0, 0, 0, 1451, 0, 1452, 1453, 0, + 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 448, 0, 0, 0, 616, 0, 0, + 0, 0, 0, 0, 0, 361, 0, 328, 197, 224, + 0, 0, 407, 456, 468, 0, 0, 0, 252, 0, + 466, 421, 594, 232, 283, 453, 427, 464, 435, 286, + 0, 0, 465, 368, 577, 445, 591, 617, 618, 262, + 401, 603, 514, 611, 635, 225, 259, 415, 499, 597, + 488, 393, 573, 574, 327, 487, 294, 201, 365, 623, + 223, 474, 367, 241, 230, 579, 600, 288, 451, 630, + 212, 509, 589, 238, 478, 0, 0, 638, 246, 498, + 214, 586, 497, 389, 324, 325, 213, 0, 452, 267, + 292, 0, 0, 257, 410, 581, 582, 255, 639, 227, + 610, 219, 0, 609, 403, 576, 587, 390, 379, 218, + 585, 388, 378, 332, 351, 352, 279, 305, 442, 371, + 443, 304, 306, 399, 398, 400, 206, 598, 0, 207, + 0, 493, 599, 640, 447, 211, 233, 234, 236, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 441, + 437, 446, 0, 571, 592, 604, 615, 621, 622, 624, + 625, 626, 627, 628, 631, 629, 402, 309, 489, 331, + 369, 0, 0, 420, 467, 239, 596, 490, 199, 0, + 0, 0, 0, 253, 254, 0, 567, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 655, 656, 634, 498, 504, 499, 500, 501, 502, 503, - 0, 505, 0, 0, 0, 0, 0, 0, 581, 582, - 657, 378, 478, 591, 331, 343, 346, 336, 355, 0, - 356, 332, 333, 338, 340, 341, 342, 347, 348, 352, - 358, 246, 207, 384, 392, 568, 308, 213, 214, 215, - 514, 515, 516, 517, 605, 606, 610, 202, 455, 456, - 457, 458, 289, 600, 305, 461, 460, 327, 328, 373, - 442, 530, 532, 543, 547, 549, 551, 557, 560, 531, - 533, 544, 548, 550, 552, 558, 561, 520, 522, 524, - 526, 539, 538, 535, 563, 564, 541, 546, 525, 537, - 542, 555, 562, 559, 519, 523, 527, 536, 554, 553, - 534, 545, 556, 540, 528, 521, 529, 0, 194, 218, - 362, 0, 447, 285, 635, 604, 599, 203, 220, 0, - 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 196, 198, 206, 219, 229, 233, 240, 258, - 273, 275, 282, 295, 306, 314, 315, 318, 324, 374, - 380, 381, 382, 383, 402, 403, 404, 407, 410, 411, - 414, 416, 417, 420, 424, 428, 429, 430, 432, 434, - 436, 448, 453, 467, 468, 469, 470, 471, 474, 475, - 480, 481, 482, 483, 484, 492, 493, 506, 576, 578, - 593, 611, 617, 473, 297, 298, 437, 438, 310, 311, - 631, 632, 296, 588, 618, 586, 630, 612, 431, 372, - 0, 0, 375, 278, 301, 316, 0, 603, 494, 224, - 459, 287, 248, 0, 0, 208, 243, 227, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 241, 452, - 238, 477, 509, 510, 511, 513, 389, 263, 426, 390, - 0, 370, 566, 567, 312, 518, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 1751, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 201, 0, 479, - 249, 371, 368, 573, 279, 270, 266, 247, 313, 379, - 421, 508, 415, 0, 364, 0, 0, 489, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 245, 321, 200, 406, 490, - 283, 0, 0, 0, 0, 1750, 705, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 0, 0, 242, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 570, 0, 0, 0, 0, 0, 0, 0, - 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 294, 0, 395, - 254, 0, 446, 0, 0, 0, 614, 0, 0, 0, - 0, 0, 0, 0, 359, 0, 326, 195, 222, 0, - 0, 405, 454, 466, 0, 0, 0, 250, 0, 464, - 419, 592, 230, 281, 451, 425, 462, 433, 284, 0, - 0, 463, 366, 575, 443, 589, 615, 616, 260, 399, - 601, 512, 609, 633, 223, 257, 413, 497, 595, 486, - 391, 571, 572, 325, 485, 292, 199, 363, 621, 221, - 472, 365, 239, 228, 577, 598, 286, 449, 628, 210, - 507, 587, 236, 476, 0, 0, 636, 244, 496, 212, - 584, 495, 387, 322, 323, 211, 0, 450, 265, 290, - 0, 0, 255, 408, 579, 580, 253, 637, 225, 608, - 217, 0, 607, 401, 574, 585, 388, 377, 216, 583, - 386, 376, 330, 349, 350, 277, 303, 440, 369, 441, - 302, 304, 397, 396, 398, 204, 596, 0, 205, 0, - 491, 597, 638, 445, 209, 231, 232, 234, 0, 276, - 280, 288, 291, 299, 300, 309, 361, 412, 439, 435, - 444, 0, 569, 590, 602, 613, 619, 620, 622, 623, - 624, 625, 626, 629, 627, 400, 307, 487, 329, 367, - 0, 0, 418, 465, 237, 594, 488, 197, 0, 0, - 0, 0, 251, 252, 0, 565, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 639, 640, 641, 642, 643, + 655, 656, 657, 658, 636, 500, 506, 501, 502, 503, + 504, 505, 0, 507, 0, 0, 0, 0, 0, 0, + 583, 584, 659, 380, 480, 593, 333, 345, 348, 338, + 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, + 350, 354, 360, 248, 209, 386, 394, 570, 310, 215, + 216, 217, 516, 517, 518, 519, 607, 608, 612, 204, + 457, 458, 459, 460, 291, 602, 307, 463, 462, 329, + 330, 375, 444, 532, 534, 545, 549, 551, 553, 559, + 562, 533, 535, 546, 550, 552, 554, 560, 563, 522, + 524, 526, 528, 541, 540, 537, 565, 566, 543, 548, + 527, 539, 544, 557, 564, 561, 521, 525, 529, 538, + 556, 555, 536, 547, 558, 542, 530, 523, 531, 0, + 196, 220, 364, 0, 449, 287, 637, 606, 601, 205, + 222, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 198, 200, 208, 221, 231, 235, + 242, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 431, 432, + 434, 436, 438, 450, 455, 469, 470, 471, 472, 473, + 476, 477, 482, 483, 484, 485, 486, 494, 495, 508, + 578, 580, 595, 613, 619, 475, 299, 300, 439, 440, + 312, 313, 633, 634, 298, 590, 620, 588, 632, 614, + 433, 374, 0, 0, 377, 280, 303, 318, 0, 605, + 496, 226, 461, 289, 250, 0, 0, 210, 245, 229, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 243, 454, 240, 479, 511, 512, 513, 515, 391, 265, + 428, 0, 392, 372, 568, 569, 314, 86, 520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 0, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 95, 0, 1716, 0, 707, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 244, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 448, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 197, 224, 0, 0, 407, 456, 468, 0, 0, + 0, 252, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 581, 582, + 255, 639, 227, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 351, 352, 279, + 305, 442, 371, 443, 304, 306, 399, 398, 400, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 199, 0, 0, 0, 0, 253, 254, 0, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 0, 0, 0, + 0, 0, 0, 583, 584, 659, 380, 480, 593, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 248, 209, 386, 394, + 570, 310, 215, 216, 217, 516, 517, 518, 519, 607, + 608, 612, 204, 457, 458, 459, 460, 291, 602, 307, + 463, 462, 329, 330, 375, 444, 532, 534, 545, 549, + 551, 553, 559, 562, 533, 535, 546, 550, 552, 554, + 560, 563, 522, 524, 526, 528, 541, 540, 537, 565, + 566, 543, 548, 527, 539, 544, 557, 564, 561, 521, + 525, 529, 538, 556, 555, 536, 547, 558, 542, 530, + 523, 531, 0, 196, 220, 364, 94, 449, 287, 637, + 606, 601, 205, 222, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 299, + 300, 439, 440, 312, 313, 633, 634, 298, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 0, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 0, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 95, 0, 0, + 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 244, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 252, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 0, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 581, 582, 255, 639, 227, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 351, + 352, 279, 305, 442, 371, 443, 304, 306, 399, 398, + 400, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 199, 0, 0, 0, 0, 253, 254, + 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 0, + 0, 0, 0, 0, 0, 583, 584, 659, 380, 480, + 593, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 248, 209, + 386, 394, 570, 310, 215, 216, 217, 516, 517, 518, + 519, 607, 608, 612, 204, 457, 458, 459, 460, 291, + 602, 307, 463, 462, 329, 330, 375, 444, 532, 534, + 545, 549, 551, 553, 559, 562, 533, 535, 546, 550, + 552, 554, 560, 563, 522, 524, 526, 528, 541, 540, + 537, 565, 566, 543, 548, 527, 539, 544, 557, 564, + 561, 521, 525, 529, 538, 556, 555, 536, 547, 558, + 542, 530, 523, 531, 0, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 0, 261, 0, 0, + 0, 0, 0, 0, 2368, 0, 0, 2367, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 299, 300, 439, 440, 312, 313, 633, 634, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 0, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 392, 0, 372, 568, + 569, 314, 520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 2318, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 203, 0, 481, 251, 373, 370, + 575, 281, 272, 268, 249, 315, 381, 423, 510, 417, + 0, 366, 0, 0, 491, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 247, 323, 202, 408, 492, 285, 0, 0, + 0, 0, 1918, 194, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 244, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 572, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 448, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 197, 224, 0, 0, 407, + 456, 468, 0, 0, 0, 252, 0, 466, 421, 594, + 232, 283, 453, 427, 464, 435, 286, 0, 2316, 465, + 368, 577, 445, 591, 617, 618, 262, 401, 603, 514, + 611, 635, 225, 259, 415, 499, 597, 488, 393, 573, + 574, 327, 487, 294, 201, 365, 623, 223, 474, 367, + 241, 230, 579, 600, 288, 451, 630, 212, 509, 589, + 238, 478, 0, 0, 638, 246, 498, 214, 586, 497, + 389, 324, 325, 213, 0, 452, 267, 292, 0, 0, + 257, 410, 581, 582, 255, 639, 227, 610, 219, 0, + 609, 403, 576, 587, 390, 379, 218, 585, 388, 378, + 332, 351, 352, 279, 305, 442, 371, 443, 304, 306, + 399, 398, 400, 206, 598, 0, 207, 0, 493, 599, + 640, 447, 211, 233, 234, 236, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 441, 437, 446, 0, + 571, 592, 604, 615, 621, 622, 624, 625, 626, 627, + 628, 631, 629, 402, 309, 489, 331, 369, 0, 0, + 420, 467, 239, 596, 490, 199, 0, 0, 0, 0, + 253, 254, 0, 567, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 636, 500, 506, 501, 502, 503, 504, 505, 0, + 507, 0, 0, 0, 0, 0, 0, 583, 584, 659, + 380, 480, 593, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 248, 209, 386, 394, 570, 310, 215, 216, 217, 516, + 517, 518, 519, 607, 608, 612, 204, 457, 458, 459, + 460, 291, 602, 307, 463, 462, 329, 330, 375, 444, + 532, 534, 545, 549, 551, 553, 559, 562, 533, 535, + 546, 550, 552, 554, 560, 563, 522, 524, 526, 528, + 541, 540, 537, 565, 566, 543, 548, 527, 539, 544, + 557, 564, 561, 521, 525, 529, 538, 556, 555, 536, + 547, 558, 542, 530, 523, 531, 0, 196, 220, 364, + 0, 449, 287, 637, 606, 601, 205, 222, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 198, 200, 208, 221, 231, 235, 242, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 431, 432, 434, 436, 438, + 450, 455, 469, 470, 471, 472, 473, 476, 477, 482, + 483, 484, 485, 486, 494, 495, 508, 578, 580, 595, + 613, 619, 475, 299, 300, 439, 440, 312, 313, 633, + 634, 298, 590, 620, 588, 632, 614, 433, 374, 0, + 0, 377, 280, 303, 318, 0, 605, 496, 226, 461, + 289, 250, 0, 0, 210, 245, 229, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 243, 454, 240, + 479, 511, 512, 513, 515, 391, 265, 428, 392, 0, + 372, 568, 569, 314, 520, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 203, 0, 481, 251, + 373, 370, 575, 281, 272, 268, 249, 315, 381, 423, + 510, 417, 0, 366, 0, 0, 491, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 247, 323, 202, 408, 492, 285, + 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 1072, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 448, 0, 0, 0, 616, 0, 0, 0, + 0, 0, 0, 0, 361, 1078, 328, 197, 224, 1076, + 0, 407, 456, 468, 0, 0, 0, 252, 0, 466, + 421, 594, 232, 283, 453, 427, 464, 435, 286, 0, + 0, 465, 368, 577, 445, 591, 617, 618, 262, 401, + 603, 514, 611, 635, 225, 259, 415, 499, 597, 488, + 393, 573, 574, 327, 487, 294, 201, 365, 623, 223, + 474, 367, 241, 230, 579, 600, 288, 451, 630, 212, + 509, 589, 238, 478, 0, 0, 638, 246, 498, 214, + 586, 497, 389, 324, 325, 213, 0, 452, 267, 292, + 0, 0, 257, 410, 581, 582, 255, 639, 227, 610, + 219, 0, 609, 403, 576, 587, 390, 379, 218, 585, + 388, 378, 332, 351, 352, 279, 305, 442, 371, 443, + 304, 306, 399, 398, 400, 206, 598, 0, 207, 0, + 493, 599, 640, 447, 211, 233, 234, 236, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 441, 437, + 446, 0, 571, 592, 604, 615, 621, 622, 624, 625, + 626, 627, 628, 631, 629, 402, 309, 489, 331, 369, + 0, 0, 420, 467, 239, 596, 490, 199, 0, 0, + 0, 0, 253, 254, 0, 567, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, + 656, 657, 658, 636, 500, 506, 501, 502, 503, 504, + 505, 0, 507, 0, 0, 0, 0, 0, 0, 583, + 584, 659, 380, 480, 593, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 248, 209, 386, 394, 570, 310, 215, 216, + 217, 516, 517, 518, 519, 607, 608, 612, 204, 457, + 458, 459, 460, 291, 602, 307, 463, 462, 329, 330, + 375, 444, 532, 534, 545, 549, 551, 553, 559, 562, + 533, 535, 546, 550, 552, 554, 560, 563, 522, 524, + 526, 528, 541, 540, 537, 565, 566, 543, 548, 527, + 539, 544, 557, 564, 561, 521, 525, 529, 538, 556, + 555, 536, 547, 558, 542, 530, 523, 531, 0, 196, + 220, 364, 0, 449, 287, 637, 606, 601, 205, 222, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 198, 200, 208, 221, 231, 235, 242, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 431, 432, 434, + 436, 438, 450, 455, 469, 470, 471, 472, 473, 476, + 477, 482, 483, 484, 485, 486, 494, 495, 508, 578, + 580, 595, 613, 619, 475, 299, 300, 439, 440, 312, + 313, 633, 634, 298, 590, 620, 588, 632, 614, 433, + 374, 0, 0, 377, 280, 303, 318, 0, 605, 496, + 226, 461, 289, 250, 0, 0, 210, 245, 229, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 243, + 454, 240, 479, 511, 512, 513, 515, 391, 265, 428, + 392, 0, 372, 568, 569, 314, 520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 2318, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 203, 0, + 481, 251, 373, 370, 575, 281, 272, 268, 249, 315, + 381, 423, 510, 417, 0, 366, 0, 0, 491, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 247, 323, 202, 408, + 492, 285, 0, 0, 0, 0, 1918, 194, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 244, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 572, 0, 0, 0, 0, 0, 0, + 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 448, 0, 0, 0, 616, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 197, + 224, 0, 0, 407, 456, 468, 0, 0, 0, 252, + 0, 466, 421, 594, 232, 283, 453, 427, 464, 435, + 286, 0, 0, 465, 368, 577, 445, 591, 617, 618, + 262, 401, 603, 514, 611, 635, 225, 259, 415, 499, + 597, 488, 393, 573, 574, 327, 487, 294, 201, 365, + 623, 223, 474, 367, 241, 230, 579, 600, 288, 451, + 630, 212, 509, 589, 238, 478, 0, 0, 638, 246, + 498, 214, 586, 497, 389, 324, 325, 213, 0, 452, + 267, 292, 0, 0, 257, 410, 581, 582, 255, 639, + 227, 610, 219, 0, 609, 403, 576, 587, 390, 379, + 218, 585, 388, 378, 332, 351, 352, 279, 305, 442, + 371, 443, 304, 306, 399, 398, 400, 206, 598, 0, + 207, 0, 493, 599, 640, 447, 211, 233, 234, 236, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 441, 437, 446, 0, 571, 592, 604, 615, 621, 622, + 624, 625, 626, 627, 628, 631, 629, 402, 309, 489, + 331, 369, 0, 0, 420, 467, 239, 596, 490, 199, + 0, 0, 0, 0, 253, 254, 0, 567, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, - 654, 655, 656, 634, 498, 504, 499, 500, 501, 502, - 503, 0, 505, 0, 0, 0, 0, 0, 0, 581, - 582, 657, 378, 478, 591, 331, 343, 346, 336, 355, - 0, 356, 332, 333, 338, 340, 341, 342, 347, 348, - 352, 358, 246, 207, 384, 392, 568, 308, 213, 214, - 215, 514, 515, 516, 517, 605, 606, 610, 202, 455, - 456, 457, 458, 289, 600, 305, 461, 460, 327, 328, - 373, 442, 530, 532, 543, 547, 549, 551, 557, 560, - 531, 533, 544, 548, 550, 552, 558, 561, 520, 522, - 524, 526, 539, 538, 535, 563, 564, 541, 546, 525, - 537, 542, 555, 562, 559, 519, 523, 527, 536, 554, - 553, 534, 545, 556, 540, 528, 521, 529, 0, 194, - 218, 362, 0, 447, 285, 635, 604, 599, 203, 220, - 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 196, 198, 206, 219, 229, 233, 240, - 258, 273, 275, 282, 295, 306, 314, 315, 318, 324, - 374, 380, 381, 382, 383, 402, 403, 404, 407, 410, - 411, 414, 416, 417, 420, 424, 428, 429, 430, 432, - 434, 436, 448, 453, 467, 468, 469, 470, 471, 474, - 475, 480, 481, 482, 483, 484, 492, 493, 506, 576, - 578, 593, 611, 617, 473, 297, 298, 437, 438, 310, - 311, 631, 632, 296, 588, 618, 586, 630, 612, 431, - 372, 0, 0, 375, 278, 301, 316, 0, 603, 494, - 224, 459, 287, 248, 0, 0, 208, 243, 227, 256, - 271, 274, 320, 385, 393, 422, 427, 293, 268, 241, - 452, 238, 477, 509, 510, 511, 513, 389, 263, 426, - 390, 0, 370, 566, 567, 312, 518, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, - 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, - 0, 0, 360, 264, 0, 0, 423, 0, 201, 0, - 479, 249, 371, 368, 573, 279, 270, 266, 247, 313, - 379, 421, 508, 415, 0, 364, 0, 0, 489, 394, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 319, 245, 321, 200, 406, - 490, 283, 0, 0, 0, 0, 0, 707, 708, 709, - 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, - 242, 0, 0, 0, 345, 354, 353, 334, 335, 337, - 339, 344, 351, 357, 0, 0, 0, 0, 0, 262, - 317, 269, 261, 570, 0, 0, 0, 0, 0, 0, - 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, - 395, 254, 0, 446, 0, 0, 0, 614, 0, 0, - 0, 0, 0, 0, 0, 359, 0, 326, 195, 222, - 0, 0, 405, 454, 466, 0, 0, 0, 250, 0, - 464, 419, 592, 230, 281, 451, 425, 462, 433, 284, - 0, 0, 463, 366, 575, 443, 589, 615, 616, 260, - 399, 601, 512, 609, 633, 223, 257, 413, 497, 595, - 486, 391, 571, 572, 325, 485, 292, 199, 363, 621, - 221, 472, 365, 239, 228, 577, 598, 286, 449, 628, - 210, 507, 587, 236, 476, 0, 0, 636, 244, 496, - 212, 584, 495, 387, 322, 323, 211, 0, 450, 265, - 290, 0, 0, 255, 408, 579, 580, 253, 637, 225, - 608, 217, 0, 607, 401, 574, 585, 388, 377, 216, - 583, 386, 376, 330, 349, 350, 277, 303, 440, 369, - 441, 302, 304, 397, 396, 398, 204, 596, 0, 205, - 0, 491, 597, 638, 445, 209, 231, 232, 234, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 439, - 435, 444, 0, 569, 590, 602, 613, 619, 620, 622, - 623, 624, 625, 626, 629, 627, 400, 307, 487, 329, - 367, 0, 0, 418, 465, 237, 594, 488, 197, 0, - 0, 0, 0, 251, 252, 0, 565, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 639, 640, 641, 642, - 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, - 653, 654, 655, 656, 634, 498, 504, 499, 500, 501, - 502, 503, 0, 505, 0, 0, 0, 0, 0, 0, - 581, 582, 657, 378, 478, 591, 331, 343, 346, 336, - 355, 0, 356, 332, 333, 338, 340, 341, 342, 347, - 348, 352, 358, 246, 207, 384, 392, 568, 308, 213, - 214, 215, 514, 515, 516, 517, 605, 606, 610, 202, - 455, 456, 457, 458, 289, 600, 305, 461, 460, 327, - 328, 373, 442, 530, 532, 543, 547, 549, 551, 557, - 560, 531, 533, 544, 548, 550, 552, 558, 561, 520, - 522, 524, 526, 539, 538, 535, 563, 564, 541, 546, - 525, 537, 542, 555, 562, 559, 519, 523, 527, 536, - 554, 553, 534, 545, 556, 540, 528, 521, 529, 0, - 194, 218, 362, 0, 447, 285, 635, 604, 599, 203, - 220, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 196, 198, 206, 219, 229, 233, - 240, 258, 273, 275, 282, 295, 306, 314, 315, 318, - 324, 374, 380, 381, 382, 383, 402, 403, 404, 407, - 410, 411, 414, 416, 417, 420, 424, 428, 429, 430, - 432, 434, 436, 448, 453, 467, 468, 469, 470, 471, - 474, 475, 480, 481, 482, 483, 484, 492, 493, 506, - 576, 578, 593, 611, 617, 473, 297, 298, 437, 438, - 310, 311, 631, 632, 296, 588, 618, 586, 630, 612, - 431, 372, 0, 0, 375, 278, 301, 316, 0, 603, - 494, 224, 459, 287, 248, 0, 0, 208, 243, 227, - 256, 271, 274, 320, 385, 393, 422, 427, 293, 268, - 241, 452, 238, 477, 509, 510, 511, 513, 389, 263, - 426, 390, 0, 370, 566, 567, 312, 518, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, - 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, - 0, 0, 0, 360, 264, 0, 0, 423, 0, 201, - 0, 479, 249, 371, 368, 573, 279, 270, 266, 247, - 313, 379, 421, 508, 415, 0, 364, 0, 0, 489, - 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 319, 245, 321, 200, - 406, 490, 283, 0, 0, 0, 0, 0, 705, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, - 0, 242, 0, 0, 0, 345, 354, 353, 334, 335, - 337, 339, 344, 351, 357, 0, 0, 0, 0, 0, - 262, 317, 269, 261, 570, 0, 0, 0, 0, 0, - 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 0, 395, 254, 0, 446, 0, 0, 0, 614, 0, - 0, 0, 4009, 0, 0, 0, 359, 0, 326, 195, - 222, 0, 0, 405, 454, 466, 0, 0, 0, 250, - 0, 464, 419, 592, 230, 281, 451, 425, 462, 433, - 284, 0, 0, 463, 366, 575, 443, 589, 615, 616, - 260, 399, 601, 512, 609, 633, 223, 257, 413, 497, - 595, 486, 391, 571, 572, 325, 485, 292, 199, 363, - 621, 221, 472, 365, 239, 228, 577, 598, 286, 449, - 628, 210, 507, 587, 236, 476, 0, 0, 636, 244, - 496, 212, 584, 495, 387, 322, 323, 211, 0, 450, - 265, 290, 0, 0, 255, 408, 579, 580, 253, 637, - 225, 608, 217, 0, 607, 401, 574, 585, 388, 377, - 216, 583, 386, 376, 330, 349, 350, 277, 303, 440, - 369, 441, 302, 304, 397, 396, 398, 204, 596, 0, - 205, 0, 491, 597, 638, 445, 209, 231, 232, 234, - 0, 276, 280, 288, 291, 299, 300, 309, 361, 412, - 439, 435, 444, 0, 569, 590, 602, 613, 619, 620, - 622, 623, 624, 625, 626, 629, 627, 400, 307, 487, - 329, 367, 0, 0, 418, 465, 237, 594, 488, 197, - 0, 0, 0, 0, 251, 252, 0, 565, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 639, 640, 641, + 654, 655, 656, 657, 658, 636, 500, 506, 501, 502, + 503, 504, 505, 0, 507, 0, 0, 0, 0, 0, + 0, 583, 584, 659, 380, 480, 593, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 248, 209, 386, 394, 570, 310, + 215, 216, 217, 516, 517, 518, 519, 607, 608, 612, + 204, 457, 458, 459, 460, 291, 602, 307, 463, 462, + 329, 330, 375, 444, 532, 534, 545, 549, 551, 553, + 559, 562, 533, 535, 546, 550, 552, 554, 560, 563, + 522, 524, 526, 528, 541, 540, 537, 565, 566, 543, + 548, 527, 539, 544, 557, 564, 561, 521, 525, 529, + 538, 556, 555, 536, 547, 558, 542, 530, 523, 531, + 0, 196, 220, 364, 0, 449, 287, 637, 606, 601, + 205, 222, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 200, 208, 221, 231, + 235, 242, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 431, + 432, 434, 436, 438, 450, 455, 469, 470, 471, 472, + 473, 476, 477, 482, 483, 484, 485, 486, 494, 495, + 508, 578, 580, 595, 613, 619, 475, 299, 300, 439, + 440, 312, 313, 633, 634, 298, 590, 620, 588, 632, + 614, 433, 374, 0, 0, 377, 280, 303, 318, 0, + 605, 496, 226, 461, 289, 250, 0, 0, 210, 245, + 229, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 243, 454, 240, 479, 511, 512, 513, 515, 391, + 265, 428, 392, 0, 372, 568, 569, 314, 520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 0, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 0, 0, 1716, 0, 707, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 244, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 448, 0, 0, 0, + 616, 0, 0, 0, 3893, 0, 0, 0, 361, 0, + 328, 197, 224, 0, 0, 407, 456, 468, 0, 0, + 0, 252, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 581, 582, + 255, 639, 227, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 351, 352, 279, + 305, 442, 371, 443, 304, 306, 399, 398, 400, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 199, 0, 0, 0, 0, 253, 254, 0, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, - 652, 653, 654, 655, 656, 634, 498, 504, 499, 500, - 501, 502, 503, 0, 505, 0, 0, 0, 0, 0, - 0, 581, 582, 657, 378, 478, 591, 331, 343, 346, - 336, 355, 0, 356, 332, 333, 338, 340, 341, 342, - 347, 348, 352, 358, 246, 207, 384, 392, 568, 308, - 213, 214, 215, 514, 515, 516, 517, 605, 606, 610, - 202, 455, 456, 457, 458, 289, 600, 305, 461, 460, - 327, 328, 373, 442, 530, 532, 543, 547, 549, 551, - 557, 560, 531, 533, 544, 548, 550, 552, 558, 561, - 520, 522, 524, 526, 539, 538, 535, 563, 564, 541, - 546, 525, 537, 542, 555, 562, 559, 519, 523, 527, - 536, 554, 553, 534, 545, 556, 540, 528, 521, 529, - 0, 194, 218, 362, 0, 447, 285, 635, 604, 599, - 203, 220, 0, 259, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 196, 198, 206, 219, 229, - 233, 240, 258, 273, 275, 282, 295, 306, 314, 315, - 318, 324, 374, 380, 381, 382, 383, 402, 403, 404, - 407, 410, 411, 414, 416, 417, 420, 424, 428, 429, - 430, 432, 434, 436, 448, 453, 467, 468, 469, 470, - 471, 474, 475, 480, 481, 482, 483, 484, 492, 493, - 506, 576, 578, 593, 611, 617, 473, 297, 298, 437, - 438, 310, 311, 631, 632, 296, 588, 618, 586, 630, - 612, 431, 372, 0, 0, 375, 278, 301, 316, 0, - 603, 494, 224, 459, 287, 248, 0, 0, 208, 243, - 227, 256, 271, 274, 320, 385, 393, 422, 427, 293, - 268, 241, 452, 238, 477, 509, 510, 511, 513, 389, - 263, 426, 390, 0, 370, 566, 567, 312, 518, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 409, 0, 0, 0, 0, 0, 0, 0, 0, 267, - 0, 0, 0, 0, 360, 264, 0, 0, 423, 0, - 201, 0, 479, 249, 371, 368, 573, 279, 270, 266, - 247, 313, 379, 421, 508, 415, 0, 364, 0, 0, - 489, 394, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 319, 245, 321, - 200, 406, 490, 283, 0, 0, 0, 0, 1911, 192, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 0, 0, 242, 0, 0, 0, 345, 354, 353, 334, - 335, 337, 339, 344, 351, 357, 0, 0, 0, 0, - 0, 262, 317, 269, 261, 570, 0, 0, 0, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 0, 395, 254, 0, 446, 0, 0, 0, 614, - 0, 0, 0, 0, 0, 0, 0, 359, 0, 326, - 195, 222, 0, 0, 405, 454, 466, 0, 0, 0, - 250, 0, 464, 419, 592, 230, 281, 451, 425, 462, - 433, 284, 0, 0, 463, 366, 575, 443, 589, 615, - 616, 260, 399, 601, 512, 609, 633, 223, 257, 413, - 497, 595, 486, 391, 571, 572, 325, 485, 292, 199, - 363, 621, 221, 472, 365, 239, 228, 577, 598, 286, - 449, 628, 210, 507, 587, 236, 476, 0, 0, 636, - 244, 496, 212, 584, 495, 387, 322, 323, 211, 0, - 450, 265, 290, 0, 0, 255, 408, 579, 580, 253, - 637, 225, 608, 217, 0, 607, 401, 574, 585, 388, - 377, 216, 583, 386, 376, 330, 349, 350, 277, 303, - 440, 369, 441, 302, 304, 397, 396, 398, 204, 596, - 0, 205, 0, 491, 597, 638, 445, 209, 231, 232, - 234, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 439, 435, 444, 0, 569, 590, 602, 613, 619, - 620, 622, 623, 624, 625, 626, 629, 627, 400, 307, - 487, 329, 367, 0, 0, 418, 465, 237, 594, 488, - 197, 0, 0, 0, 0, 251, 252, 0, 565, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, - 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, - 651, 652, 653, 654, 655, 656, 634, 498, 504, 499, - 500, 501, 502, 503, 0, 505, 0, 0, 0, 0, - 0, 0, 581, 582, 657, 378, 478, 591, 331, 343, - 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, - 342, 347, 348, 352, 358, 246, 207, 384, 392, 568, - 308, 213, 214, 215, 514, 515, 516, 517, 605, 606, - 610, 202, 455, 456, 457, 458, 289, 600, 305, 461, - 460, 327, 328, 373, 442, 530, 532, 543, 547, 549, - 551, 557, 560, 531, 533, 544, 548, 550, 552, 558, - 561, 520, 522, 524, 526, 539, 538, 535, 563, 564, - 541, 546, 525, 537, 542, 555, 562, 559, 519, 523, - 527, 536, 554, 553, 534, 545, 556, 540, 528, 521, - 529, 0, 194, 218, 362, 0, 447, 285, 635, 604, - 599, 203, 220, 0, 259, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 196, 198, 206, 219, - 229, 233, 240, 258, 273, 275, 282, 295, 306, 314, - 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, - 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, - 429, 430, 432, 434, 436, 448, 453, 467, 468, 469, - 470, 471, 474, 475, 480, 481, 482, 483, 484, 492, - 493, 506, 576, 578, 593, 611, 617, 473, 297, 298, - 437, 438, 310, 311, 631, 632, 296, 588, 618, 586, - 630, 612, 431, 372, 0, 0, 375, 278, 301, 316, - 0, 603, 494, 224, 459, 287, 248, 0, 0, 208, - 243, 227, 256, 271, 274, 320, 385, 393, 422, 427, - 293, 268, 241, 452, 238, 477, 509, 510, 511, 513, - 389, 263, 426, 390, 0, 370, 566, 567, 312, 518, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, - 267, 0, 0, 0, 0, 360, 264, 0, 0, 423, - 0, 201, 0, 479, 249, 371, 368, 573, 279, 270, - 266, 247, 313, 379, 421, 508, 415, 0, 364, 0, - 0, 489, 394, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 319, 245, - 321, 200, 406, 490, 283, 0, 0, 0, 0, 0, - 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 0, 0, 242, 0, 0, 0, 345, 354, 353, - 334, 335, 337, 339, 344, 351, 357, 0, 0, 0, - 0, 0, 262, 317, 269, 261, 570, 0, 0, 0, - 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 294, 0, 395, 254, 0, 446, 0, 0, 0, - 614, 0, 0, 0, 3886, 0, 0, 0, 359, 0, - 326, 195, 222, 0, 0, 405, 454, 466, 0, 0, - 0, 250, 0, 464, 419, 592, 230, 281, 451, 425, - 462, 433, 284, 0, 0, 463, 366, 575, 443, 589, - 615, 616, 260, 399, 601, 512, 609, 633, 223, 257, - 413, 497, 595, 486, 391, 571, 572, 325, 485, 292, - 199, 363, 621, 221, 472, 365, 239, 228, 577, 598, - 286, 449, 628, 210, 507, 587, 236, 476, 0, 0, - 636, 244, 496, 212, 584, 495, 387, 322, 323, 211, - 0, 450, 265, 290, 0, 0, 255, 408, 579, 580, - 253, 637, 225, 608, 217, 0, 607, 401, 574, 585, - 388, 377, 216, 583, 386, 376, 330, 349, 350, 277, - 303, 440, 369, 441, 302, 304, 397, 396, 398, 204, - 596, 0, 205, 0, 491, 597, 638, 445, 209, 231, - 232, 234, 0, 276, 280, 288, 291, 299, 300, 309, - 361, 412, 439, 435, 444, 0, 569, 590, 602, 613, - 619, 620, 622, 623, 624, 625, 626, 629, 627, 400, - 307, 487, 329, 367, 0, 0, 418, 465, 237, 594, - 488, 197, 0, 0, 0, 0, 251, 252, 0, 565, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, - 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 654, 655, 656, 634, 498, 504, - 499, 500, 501, 502, 503, 0, 505, 0, 0, 0, - 0, 0, 0, 581, 582, 657, 378, 478, 591, 331, - 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, - 341, 342, 347, 348, 352, 358, 246, 207, 384, 392, - 568, 308, 213, 214, 215, 514, 515, 516, 517, 605, - 606, 610, 202, 455, 456, 457, 458, 289, 600, 305, - 461, 460, 327, 328, 373, 442, 530, 532, 543, 547, - 549, 551, 557, 560, 531, 533, 544, 548, 550, 552, - 558, 561, 520, 522, 524, 526, 539, 538, 535, 563, - 564, 541, 546, 525, 537, 542, 555, 562, 559, 519, - 523, 527, 536, 554, 553, 534, 545, 556, 540, 528, - 521, 529, 0, 194, 218, 362, 0, 447, 285, 635, - 604, 599, 203, 220, 0, 259, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 196, 198, 206, - 219, 229, 233, 240, 258, 273, 275, 282, 295, 306, - 314, 315, 318, 324, 374, 380, 381, 382, 383, 402, - 403, 404, 407, 410, 411, 414, 416, 417, 420, 424, - 428, 429, 430, 432, 434, 436, 448, 453, 467, 468, - 469, 470, 471, 474, 475, 480, 481, 482, 483, 484, - 492, 493, 506, 576, 578, 593, 611, 617, 473, 297, - 298, 437, 438, 310, 311, 631, 632, 296, 588, 618, - 586, 630, 612, 431, 372, 0, 0, 375, 278, 301, - 316, 0, 603, 494, 224, 459, 287, 248, 0, 0, - 208, 243, 227, 256, 271, 274, 320, 385, 393, 422, - 427, 293, 268, 241, 452, 238, 477, 509, 510, 511, - 513, 389, 263, 426, 390, 0, 370, 566, 567, 312, - 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, - 0, 267, 0, 0, 0, 0, 360, 264, 0, 0, - 423, 0, 201, 0, 479, 249, 371, 368, 573, 279, - 270, 266, 247, 313, 379, 421, 508, 415, 0, 364, - 0, 0, 489, 394, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, - 245, 321, 200, 406, 490, 283, 0, 93, 0, 0, - 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 0, 0, 242, 0, 0, 0, 345, 354, - 353, 334, 335, 337, 339, 344, 351, 357, 0, 0, - 0, 0, 0, 262, 317, 269, 261, 570, 0, 0, - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 395, 254, 0, 446, 0, 0, - 0, 614, 0, 0, 0, 0, 0, 0, 0, 359, - 0, 326, 195, 222, 0, 0, 405, 454, 466, 0, - 0, 0, 250, 0, 464, 419, 592, 230, 281, 451, - 425, 462, 433, 284, 0, 0, 463, 366, 575, 443, - 589, 615, 616, 260, 399, 601, 512, 609, 633, 223, - 257, 413, 497, 595, 486, 391, 571, 572, 325, 485, - 292, 199, 363, 621, 221, 472, 365, 239, 228, 577, - 598, 286, 449, 628, 210, 507, 587, 236, 476, 0, - 0, 636, 244, 496, 212, 584, 495, 387, 322, 323, - 211, 0, 450, 265, 290, 0, 0, 255, 408, 579, - 580, 253, 637, 225, 608, 217, 0, 607, 401, 574, - 585, 388, 377, 216, 583, 386, 376, 330, 349, 350, - 277, 303, 440, 369, 441, 302, 304, 397, 396, 398, - 204, 596, 0, 205, 0, 491, 597, 638, 445, 209, - 231, 232, 234, 0, 276, 280, 288, 291, 299, 300, - 309, 361, 412, 439, 435, 444, 0, 569, 590, 602, - 613, 619, 620, 622, 623, 624, 625, 626, 629, 627, - 400, 307, 487, 329, 367, 0, 0, 418, 465, 237, - 594, 488, 197, 0, 0, 0, 0, 251, 252, 0, - 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 634, 498, - 504, 499, 500, 501, 502, 503, 0, 505, 0, 0, - 0, 0, 0, 0, 581, 582, 657, 378, 478, 591, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 246, 207, 384, - 392, 568, 308, 213, 214, 215, 514, 515, 516, 517, - 605, 606, 610, 202, 455, 456, 457, 458, 289, 600, - 305, 461, 460, 327, 328, 373, 442, 530, 532, 543, - 547, 549, 551, 557, 560, 531, 533, 544, 548, 550, - 552, 558, 561, 520, 522, 524, 526, 539, 538, 535, - 563, 564, 541, 546, 525, 537, 542, 555, 562, 559, - 519, 523, 527, 536, 554, 553, 534, 545, 556, 540, - 528, 521, 529, 0, 194, 218, 362, 0, 447, 285, - 635, 604, 599, 203, 220, 0, 259, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 196, 198, - 206, 219, 229, 233, 240, 258, 273, 275, 282, 295, - 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, - 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, - 424, 428, 429, 430, 432, 434, 436, 448, 453, 467, - 468, 469, 470, 471, 474, 475, 480, 481, 482, 483, - 484, 492, 493, 506, 576, 578, 593, 611, 617, 473, - 297, 298, 437, 438, 310, 311, 631, 632, 296, 588, - 618, 586, 630, 612, 431, 372, 0, 0, 375, 278, - 301, 316, 0, 603, 494, 224, 459, 287, 248, 0, - 0, 208, 243, 227, 256, 271, 274, 320, 385, 393, - 422, 427, 293, 268, 241, 452, 238, 477, 509, 510, - 511, 513, 389, 263, 426, 390, 0, 370, 566, 567, - 312, 518, 0, 0, 0, 0, 2362, 0, 0, 0, - 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, - 0, 0, 267, 0, 0, 0, 0, 360, 264, 0, - 0, 423, 0, 201, 0, 479, 249, 371, 368, 573, - 279, 270, 266, 247, 313, 379, 421, 508, 415, 0, - 364, 0, 0, 489, 394, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 319, 245, 321, 200, 406, 490, 283, 0, 0, 0, - 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 0, 0, 242, 0, 0, 0, 345, - 354, 353, 334, 335, 337, 339, 344, 351, 357, 0, - 0, 0, 0, 0, 262, 317, 269, 261, 570, 0, - 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 395, 254, 0, 446, 0, - 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, - 359, 0, 326, 195, 222, 0, 0, 405, 454, 466, - 0, 0, 0, 250, 0, 464, 419, 592, 230, 281, - 451, 425, 462, 433, 284, 0, 0, 463, 366, 575, - 443, 589, 615, 616, 260, 399, 601, 512, 609, 633, - 223, 257, 413, 497, 595, 486, 391, 571, 572, 325, - 485, 292, 199, 363, 621, 221, 472, 365, 239, 228, - 577, 598, 286, 449, 628, 210, 507, 587, 236, 476, - 0, 0, 636, 244, 496, 212, 584, 495, 387, 322, - 323, 211, 0, 450, 265, 290, 0, 0, 255, 408, - 579, 580, 253, 637, 225, 608, 217, 0, 607, 401, - 574, 585, 388, 377, 216, 583, 386, 376, 330, 349, - 350, 277, 303, 440, 369, 441, 302, 304, 397, 396, - 398, 204, 596, 0, 205, 0, 491, 597, 638, 445, - 209, 231, 232, 234, 0, 276, 280, 288, 291, 299, - 300, 309, 361, 412, 439, 435, 444, 0, 569, 590, - 602, 613, 619, 620, 622, 623, 624, 625, 626, 629, - 627, 400, 307, 487, 329, 367, 0, 0, 418, 465, - 237, 594, 488, 197, 0, 0, 0, 0, 251, 252, - 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 639, 640, 641, 642, 643, 644, 645, 646, 647, - 648, 649, 650, 651, 652, 653, 654, 655, 656, 634, - 498, 504, 499, 500, 501, 502, 503, 0, 505, 0, - 0, 0, 0, 0, 0, 581, 582, 657, 378, 478, - 591, 331, 343, 346, 336, 355, 0, 356, 332, 333, - 338, 340, 341, 342, 347, 348, 352, 358, 246, 207, - 384, 392, 568, 308, 213, 214, 215, 514, 515, 516, - 517, 605, 606, 610, 202, 455, 456, 457, 458, 289, - 600, 305, 461, 460, 327, 328, 373, 442, 530, 532, - 543, 547, 549, 551, 557, 560, 531, 533, 544, 548, - 550, 552, 558, 561, 520, 522, 524, 526, 539, 538, - 535, 563, 564, 541, 546, 525, 537, 542, 555, 562, - 559, 519, 523, 527, 536, 554, 553, 534, 545, 556, - 540, 528, 521, 529, 0, 194, 218, 362, 0, 447, - 285, 635, 604, 599, 203, 220, 0, 259, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, - 198, 206, 219, 229, 233, 240, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 429, 430, 432, 434, 436, 448, 453, - 467, 468, 469, 470, 471, 474, 475, 480, 481, 482, - 483, 484, 492, 493, 506, 576, 578, 593, 611, 617, - 473, 297, 298, 437, 438, 310, 311, 631, 632, 296, - 588, 618, 586, 630, 612, 431, 372, 0, 0, 375, - 278, 301, 316, 0, 603, 494, 224, 459, 287, 248, - 0, 0, 208, 243, 227, 256, 271, 274, 320, 385, - 393, 422, 427, 293, 268, 241, 452, 238, 477, 509, - 510, 511, 513, 389, 263, 426, 390, 0, 370, 566, - 567, 312, 518, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, - 0, 0, 0, 267, 0, 0, 0, 0, 360, 264, - 0, 0, 423, 0, 201, 0, 479, 249, 371, 368, - 573, 279, 270, 266, 247, 313, 379, 421, 508, 415, - 0, 364, 0, 0, 489, 394, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 319, 245, 321, 200, 406, 490, 283, 0, 0, - 0, 0, 1732, 705, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 0, 0, 242, 0, 0, 0, - 345, 354, 353, 334, 335, 337, 339, 344, 351, 357, - 0, 0, 0, 0, 0, 262, 317, 269, 261, 570, - 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 446, - 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, - 0, 359, 0, 326, 195, 222, 0, 0, 405, 454, - 466, 0, 0, 0, 250, 0, 464, 419, 592, 230, - 281, 451, 425, 462, 433, 284, 0, 0, 463, 366, - 575, 443, 589, 615, 616, 260, 399, 601, 512, 609, - 633, 223, 257, 413, 497, 595, 486, 391, 571, 572, - 325, 485, 292, 199, 363, 621, 221, 472, 365, 239, - 228, 577, 598, 286, 449, 628, 210, 507, 587, 236, - 476, 0, 0, 636, 244, 496, 212, 584, 495, 387, - 322, 323, 211, 0, 450, 265, 290, 0, 0, 255, - 408, 579, 580, 253, 637, 225, 608, 217, 0, 607, - 401, 574, 585, 388, 377, 216, 583, 386, 376, 330, - 349, 350, 277, 303, 440, 369, 441, 302, 304, 397, - 396, 398, 204, 596, 0, 205, 0, 491, 597, 638, - 445, 209, 231, 232, 234, 0, 276, 280, 288, 291, - 299, 300, 309, 361, 412, 439, 435, 444, 0, 569, - 590, 602, 613, 619, 620, 622, 623, 624, 625, 626, - 629, 627, 400, 307, 487, 329, 367, 0, 0, 418, - 465, 237, 594, 488, 197, 0, 0, 0, 0, 251, - 252, 0, 565, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 639, 640, 641, 642, 643, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 634, 498, 504, 499, 500, 501, 502, 503, 0, 505, - 0, 0, 0, 0, 0, 0, 581, 582, 657, 378, - 478, 591, 331, 343, 346, 336, 355, 0, 356, 332, - 333, 338, 340, 341, 342, 347, 348, 352, 358, 246, - 207, 384, 392, 568, 308, 213, 214, 215, 514, 515, - 516, 517, 605, 606, 610, 202, 455, 456, 457, 458, - 289, 600, 305, 461, 460, 327, 328, 373, 442, 530, - 532, 543, 547, 549, 551, 557, 560, 531, 533, 544, - 548, 550, 552, 558, 561, 520, 522, 524, 526, 539, - 538, 535, 563, 564, 541, 546, 525, 537, 542, 555, - 562, 559, 519, 523, 527, 536, 554, 553, 534, 545, - 556, 540, 528, 521, 529, 0, 194, 218, 362, 0, - 447, 285, 635, 604, 599, 203, 220, 0, 259, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 196, 198, 206, 219, 229, 233, 240, 258, 273, 275, - 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, - 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, - 417, 420, 424, 428, 429, 430, 432, 434, 436, 448, - 453, 467, 468, 469, 470, 471, 474, 475, 480, 481, - 482, 483, 484, 492, 493, 506, 576, 578, 593, 611, - 617, 473, 297, 298, 437, 438, 310, 311, 631, 632, - 296, 588, 618, 586, 630, 612, 431, 372, 0, 0, - 375, 278, 301, 316, 0, 603, 494, 224, 459, 287, - 248, 0, 0, 208, 243, 227, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 241, 452, 238, 477, - 509, 510, 511, 513, 389, 263, 426, 390, 0, 370, - 566, 567, 312, 518, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 0, 0, 0, 0, 267, 0, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 201, 0, 479, 249, 371, - 368, 573, 279, 270, 266, 247, 313, 379, 421, 508, - 415, 0, 364, 0, 0, 489, 394, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 245, 321, 200, 406, 490, 283, 0, - 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 0, 0, 242, 0, 0, - 0, 345, 354, 353, 334, 335, 337, 339, 344, 351, - 357, 0, 0, 0, 0, 0, 262, 317, 269, 261, - 570, 0, 0, 0, 0, 0, 0, 0, 226, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 0, 395, 254, 0, - 446, 0, 0, 0, 614, 0, 0, 0, 0, 0, - 0, 0, 359, 0, 326, 195, 222, 0, 0, 405, - 454, 466, 0, 0, 0, 250, 0, 464, 419, 592, - 230, 281, 451, 425, 462, 433, 284, 0, 0, 463, - 366, 575, 443, 589, 615, 616, 260, 399, 601, 512, - 609, 633, 223, 257, 413, 497, 595, 486, 391, 571, - 572, 325, 485, 292, 199, 363, 621, 221, 472, 365, - 239, 228, 577, 598, 286, 449, 628, 210, 507, 587, - 236, 476, 0, 0, 636, 244, 496, 212, 584, 495, - 387, 322, 323, 211, 0, 450, 265, 290, 0, 0, - 255, 408, 579, 580, 253, 637, 225, 608, 217, 0, - 607, 401, 574, 585, 388, 377, 216, 583, 386, 376, - 330, 349, 350, 277, 303, 440, 369, 441, 302, 304, - 397, 396, 398, 204, 596, 0, 205, 0, 491, 597, - 638, 445, 209, 231, 232, 234, 0, 276, 280, 288, - 291, 299, 300, 309, 361, 412, 439, 435, 444, 0, - 569, 590, 602, 613, 619, 620, 622, 623, 624, 625, - 626, 629, 627, 400, 307, 487, 329, 367, 0, 0, - 418, 465, 237, 594, 488, 197, 0, 0, 0, 0, - 251, 252, 0, 565, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 639, 640, 641, 642, 643, 644, 645, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 0, 0, 0, + 0, 0, 0, 583, 584, 659, 380, 480, 593, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 248, 209, 386, 394, + 570, 310, 215, 216, 217, 516, 517, 518, 519, 607, + 608, 612, 204, 457, 458, 459, 460, 291, 602, 307, + 463, 462, 329, 330, 375, 444, 532, 534, 545, 549, + 551, 553, 559, 562, 533, 535, 546, 550, 552, 554, + 560, 563, 522, 524, 526, 528, 541, 540, 537, 565, + 566, 543, 548, 527, 539, 544, 557, 564, 561, 521, + 525, 529, 538, 556, 555, 536, 547, 558, 542, 530, + 523, 531, 0, 196, 220, 364, 0, 449, 287, 637, + 606, 601, 205, 222, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 299, + 300, 439, 440, 312, 313, 633, 634, 298, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 0, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 0, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 0, 0, 0, + 2078, 707, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 244, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2079, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 252, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 0, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 581, 582, 255, 639, 227, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 351, + 352, 279, 305, 442, 371, 443, 304, 306, 399, 398, + 400, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 199, 0, 0, 0, 0, 253, 254, + 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 0, + 0, 0, 0, 0, 0, 583, 584, 659, 380, 480, + 593, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 248, 209, + 386, 394, 570, 310, 215, 216, 217, 516, 517, 518, + 519, 607, 608, 612, 204, 457, 458, 459, 460, 291, + 602, 307, 463, 462, 329, 330, 375, 444, 532, 534, + 545, 549, 551, 553, 559, 562, 533, 535, 546, 550, + 552, 554, 560, 563, 522, 524, 526, 528, 541, 540, + 537, 565, 566, 543, 548, 527, 539, 544, 557, 564, + 561, 521, 525, 529, 538, 556, 555, 536, 547, 558, + 542, 530, 523, 531, 0, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 299, 300, 439, 440, 312, 313, 633, 634, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 0, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 392, 0, 372, 568, + 569, 314, 520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 203, 0, 481, 251, 373, 370, + 575, 281, 272, 268, 249, 315, 381, 423, 510, 417, + 0, 366, 0, 0, 491, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 247, 323, 202, 408, 492, 285, 0, 0, + 0, 0, 2811, 707, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 244, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 572, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2812, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 448, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 197, 224, 0, 0, 407, + 456, 468, 0, 0, 0, 252, 0, 466, 421, 594, + 232, 283, 453, 427, 464, 435, 286, 0, 0, 465, + 368, 577, 445, 591, 617, 618, 262, 401, 603, 514, + 611, 635, 225, 259, 415, 499, 597, 488, 393, 573, + 574, 327, 487, 294, 201, 365, 623, 223, 474, 367, + 241, 230, 579, 600, 288, 451, 630, 212, 509, 589, + 238, 478, 0, 0, 638, 246, 498, 214, 586, 497, + 389, 324, 325, 213, 0, 452, 267, 292, 0, 0, + 257, 410, 581, 582, 255, 639, 227, 610, 219, 0, + 609, 403, 576, 587, 390, 379, 218, 585, 388, 378, + 332, 351, 352, 279, 305, 442, 371, 443, 304, 306, + 399, 398, 400, 206, 598, 0, 207, 0, 493, 599, + 640, 447, 211, 233, 234, 236, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 441, 437, 446, 0, + 571, 592, 604, 615, 621, 622, 624, 625, 626, 627, + 628, 631, 629, 402, 309, 489, 331, 369, 0, 0, + 420, 467, 239, 596, 490, 199, 0, 0, 0, 0, + 253, 254, 0, 567, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 636, 500, 506, 501, 502, 503, 504, 505, 0, + 507, 0, 0, 0, 0, 0, 0, 583, 584, 659, + 380, 480, 593, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 248, 209, 386, 394, 570, 310, 215, 216, 217, 516, + 517, 518, 519, 607, 608, 612, 204, 457, 458, 459, + 460, 291, 602, 307, 463, 462, 329, 330, 375, 444, + 532, 534, 545, 549, 551, 553, 559, 562, 533, 535, + 546, 550, 552, 554, 560, 563, 522, 524, 526, 528, + 541, 540, 537, 565, 566, 543, 548, 527, 539, 544, + 557, 564, 561, 521, 525, 529, 538, 556, 555, 536, + 547, 558, 542, 530, 523, 531, 0, 196, 220, 364, + 0, 449, 287, 637, 606, 601, 205, 222, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 198, 200, 208, 221, 231, 235, 242, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 431, 432, 434, 436, 438, + 450, 455, 469, 470, 471, 472, 473, 476, 477, 482, + 483, 484, 485, 486, 494, 495, 508, 578, 580, 595, + 613, 619, 475, 299, 300, 439, 440, 312, 313, 633, + 634, 298, 590, 620, 588, 632, 614, 433, 374, 0, + 0, 377, 280, 303, 318, 0, 605, 496, 226, 461, + 289, 250, 0, 0, 210, 245, 229, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 243, 454, 240, + 479, 511, 512, 513, 515, 391, 265, 428, 392, 0, + 372, 568, 569, 314, 520, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 203, 0, 481, 251, + 373, 370, 575, 281, 272, 268, 249, 315, 381, 423, + 510, 417, 0, 366, 0, 0, 491, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 247, 323, 202, 408, 492, 285, + 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, + 2796, 0, 0, 0, 0, 237, 0, 0, 244, 2797, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 448, 0, 0, 0, 616, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 197, 224, 0, + 0, 407, 456, 468, 0, 0, 0, 252, 0, 466, + 421, 594, 232, 283, 453, 427, 464, 435, 286, 0, + 0, 465, 368, 577, 445, 591, 617, 618, 262, 401, + 603, 514, 611, 635, 225, 259, 415, 499, 597, 488, + 393, 573, 574, 327, 487, 294, 201, 365, 623, 223, + 474, 367, 241, 230, 579, 600, 288, 451, 630, 212, + 509, 589, 238, 478, 0, 0, 638, 246, 498, 214, + 586, 497, 389, 324, 325, 213, 0, 452, 267, 292, + 0, 0, 257, 410, 581, 582, 255, 639, 227, 610, + 219, 0, 609, 403, 576, 587, 390, 379, 218, 585, + 388, 378, 332, 351, 352, 279, 305, 442, 371, 443, + 304, 306, 399, 398, 400, 206, 598, 0, 207, 0, + 493, 599, 640, 447, 211, 233, 234, 236, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 441, 437, + 446, 0, 571, 592, 604, 615, 621, 622, 624, 625, + 626, 627, 628, 631, 629, 402, 309, 489, 331, 369, + 0, 0, 420, 467, 239, 596, 490, 199, 0, 0, + 0, 0, 253, 254, 0, 567, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, - 656, 634, 498, 504, 499, 500, 501, 502, 503, 0, - 505, 0, 0, 0, 0, 0, 0, 581, 582, 657, - 378, 478, 591, 331, 343, 346, 336, 355, 0, 356, - 332, 333, 338, 340, 341, 342, 347, 348, 352, 358, - 246, 207, 384, 392, 568, 308, 213, 214, 215, 514, - 515, 516, 517, 605, 606, 610, 202, 455, 456, 457, - 458, 289, 600, 305, 461, 460, 327, 328, 373, 442, - 530, 532, 543, 547, 549, 551, 557, 560, 531, 533, - 544, 548, 550, 552, 558, 561, 520, 522, 524, 526, - 539, 538, 535, 563, 564, 541, 546, 525, 537, 542, - 555, 562, 559, 519, 523, 527, 536, 554, 553, 534, - 545, 556, 540, 528, 521, 529, 0, 194, 218, 362, - 2023, 447, 285, 635, 604, 599, 203, 220, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 196, 198, 206, 219, 229, 233, 240, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 429, 430, 432, 434, 436, - 448, 453, 467, 468, 469, 470, 471, 474, 475, 480, - 481, 482, 483, 484, 492, 493, 506, 576, 578, 593, - 611, 617, 473, 297, 298, 437, 438, 310, 311, 631, - 632, 296, 588, 618, 586, 630, 612, 431, 372, 0, - 0, 375, 278, 301, 316, 0, 603, 494, 224, 459, - 287, 248, 0, 0, 208, 243, 227, 256, 271, 274, - 320, 385, 393, 422, 427, 293, 268, 241, 452, 238, - 477, 509, 510, 511, 513, 389, 263, 426, 390, 0, - 370, 566, 567, 312, 518, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, - 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, - 360, 264, 0, 0, 423, 0, 201, 0, 479, 249, - 371, 368, 573, 279, 270, 266, 247, 313, 379, 421, - 508, 415, 0, 364, 0, 0, 489, 394, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 319, 245, 321, 200, 406, 490, 283, - 0, 0, 0, 0, 2014, 705, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 0, 0, 242, 0, - 0, 0, 345, 354, 353, 334, 335, 337, 339, 344, - 351, 357, 0, 0, 0, 0, 0, 262, 317, 269, - 261, 570, 0, 0, 0, 0, 0, 0, 0, 226, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 446, 0, 0, 0, 614, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 195, 222, 0, 0, - 405, 454, 466, 0, 0, 0, 250, 0, 464, 419, - 592, 230, 281, 451, 425, 462, 433, 284, 0, 0, - 463, 366, 575, 443, 589, 615, 616, 260, 399, 601, - 512, 609, 633, 223, 257, 413, 497, 595, 486, 391, - 571, 572, 325, 485, 292, 199, 363, 621, 221, 472, - 365, 239, 228, 577, 598, 286, 449, 628, 210, 507, - 587, 236, 476, 0, 0, 636, 244, 496, 212, 584, - 495, 387, 322, 323, 211, 0, 450, 265, 290, 0, - 0, 255, 408, 579, 580, 253, 637, 225, 608, 217, - 0, 607, 401, 574, 585, 388, 377, 216, 583, 386, - 376, 330, 349, 350, 277, 303, 440, 369, 441, 302, - 304, 397, 396, 398, 204, 596, 0, 205, 0, 491, - 597, 638, 445, 209, 231, 232, 234, 0, 276, 280, - 288, 291, 299, 300, 309, 361, 412, 439, 435, 444, - 0, 569, 590, 602, 613, 619, 620, 622, 623, 624, - 625, 626, 629, 627, 400, 307, 487, 329, 367, 0, - 0, 418, 465, 237, 594, 488, 197, 0, 0, 0, - 0, 251, 252, 0, 565, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 639, 640, 641, 642, 643, 644, - 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 655, 656, 634, 498, 504, 499, 500, 501, 502, 503, - 0, 505, 0, 0, 0, 0, 0, 0, 581, 582, - 657, 378, 478, 591, 331, 343, 346, 336, 355, 0, - 356, 332, 333, 338, 340, 341, 342, 347, 348, 352, - 358, 246, 207, 384, 392, 568, 308, 213, 214, 215, - 514, 515, 516, 517, 605, 606, 610, 202, 455, 456, - 457, 458, 289, 600, 305, 461, 460, 327, 328, 373, - 442, 530, 532, 543, 547, 549, 551, 557, 560, 531, - 533, 544, 548, 550, 552, 558, 561, 520, 522, 524, - 526, 539, 538, 535, 563, 564, 541, 546, 525, 537, - 542, 555, 562, 559, 519, 523, 527, 536, 554, 553, - 534, 545, 556, 540, 528, 521, 529, 0, 194, 218, - 362, 0, 447, 285, 635, 604, 599, 203, 220, 0, - 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 196, 198, 206, 219, 229, 233, 240, 258, - 273, 275, 282, 295, 306, 314, 315, 318, 324, 374, - 380, 381, 382, 383, 402, 403, 404, 407, 410, 411, - 414, 416, 417, 420, 424, 428, 429, 430, 432, 434, - 436, 448, 453, 467, 468, 469, 470, 471, 474, 475, - 480, 481, 482, 483, 484, 492, 493, 506, 576, 578, - 593, 611, 617, 473, 297, 298, 437, 438, 310, 311, - 631, 632, 296, 588, 618, 586, 630, 612, 431, 372, - 0, 0, 375, 278, 301, 316, 0, 603, 494, 224, - 459, 287, 248, 0, 0, 208, 243, 227, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 241, 452, - 238, 477, 509, 510, 511, 513, 389, 263, 426, 390, - 0, 370, 566, 567, 312, 518, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 1878, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 201, 0, 479, - 249, 371, 368, 573, 279, 270, 266, 247, 313, 379, - 421, 508, 415, 0, 364, 0, 0, 489, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 245, 321, 200, 406, 490, - 283, 0, 0, 0, 0, 0, 705, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 0, 0, 242, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 570, 0, 0, 0, 0, 0, 0, 0, - 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 294, 0, 395, - 254, 0, 446, 0, 0, 0, 614, 0, 0, 0, - 0, 0, 0, 0, 359, 0, 326, 195, 222, 0, - 0, 405, 454, 466, 0, 0, 0, 250, 0, 464, - 419, 592, 230, 281, 451, 425, 462, 433, 284, 0, - 0, 463, 366, 575, 443, 589, 615, 616, 260, 399, - 601, 512, 609, 633, 223, 257, 413, 497, 595, 486, - 391, 571, 572, 325, 485, 292, 199, 363, 621, 221, - 472, 365, 239, 228, 577, 598, 286, 449, 628, 210, - 507, 587, 236, 476, 0, 0, 636, 244, 496, 212, - 584, 495, 387, 322, 323, 211, 0, 450, 265, 290, - 0, 0, 255, 408, 579, 580, 253, 637, 225, 608, - 217, 0, 607, 401, 574, 585, 388, 377, 216, 583, - 386, 376, 330, 349, 350, 277, 303, 440, 369, 441, - 302, 304, 397, 396, 398, 204, 596, 0, 205, 0, - 491, 597, 638, 445, 209, 231, 232, 234, 0, 276, - 280, 288, 291, 299, 300, 309, 361, 412, 439, 435, - 444, 0, 569, 590, 602, 613, 619, 620, 622, 623, - 624, 625, 626, 629, 627, 400, 307, 487, 329, 367, - 0, 0, 418, 465, 237, 594, 488, 197, 0, 0, - 0, 0, 251, 252, 0, 565, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 639, 640, 641, 642, 643, + 656, 657, 658, 636, 500, 506, 501, 502, 503, 504, + 505, 0, 507, 0, 0, 0, 0, 0, 0, 583, + 584, 659, 380, 480, 593, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 248, 209, 386, 394, 570, 310, 215, 216, + 217, 516, 517, 518, 519, 607, 608, 612, 204, 457, + 458, 459, 460, 291, 602, 307, 463, 462, 329, 330, + 375, 444, 532, 534, 545, 549, 551, 553, 559, 562, + 533, 535, 546, 550, 552, 554, 560, 563, 522, 524, + 526, 528, 541, 540, 537, 565, 566, 543, 548, 527, + 539, 544, 557, 564, 561, 521, 525, 529, 538, 556, + 555, 536, 547, 558, 542, 530, 523, 531, 0, 196, + 220, 364, 0, 449, 287, 637, 606, 601, 205, 222, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 198, 200, 208, 221, 231, 235, 242, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 431, 432, 434, + 436, 438, 450, 455, 469, 470, 471, 472, 473, 476, + 477, 482, 483, 484, 485, 486, 494, 495, 508, 578, + 580, 595, 613, 619, 475, 299, 300, 439, 440, 312, + 313, 633, 634, 298, 590, 620, 588, 632, 614, 433, + 374, 0, 0, 377, 280, 303, 318, 0, 605, 496, + 226, 461, 289, 250, 0, 0, 210, 245, 229, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 243, + 454, 240, 479, 511, 512, 513, 515, 391, 265, 428, + 392, 0, 372, 568, 569, 314, 520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 1758, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 203, 0, + 481, 251, 373, 370, 575, 281, 272, 268, 249, 315, + 381, 423, 510, 417, 0, 366, 0, 0, 491, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 247, 323, 202, 408, + 492, 285, 0, 0, 0, 0, 1757, 707, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 244, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 572, 0, 0, 0, 0, 0, 0, + 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 448, 0, 0, 0, 616, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 197, + 224, 0, 0, 407, 456, 468, 0, 0, 0, 252, + 0, 466, 421, 594, 232, 283, 453, 427, 464, 435, + 286, 0, 0, 465, 368, 577, 445, 591, 617, 618, + 262, 401, 603, 514, 611, 635, 225, 259, 415, 499, + 597, 488, 393, 573, 574, 327, 487, 294, 201, 365, + 623, 223, 474, 367, 241, 230, 579, 600, 288, 451, + 630, 212, 509, 589, 238, 478, 0, 0, 638, 246, + 498, 214, 586, 497, 389, 324, 325, 213, 0, 452, + 267, 292, 0, 0, 257, 410, 581, 582, 255, 639, + 227, 610, 219, 0, 609, 403, 576, 587, 390, 379, + 218, 585, 388, 378, 332, 351, 352, 279, 305, 442, + 371, 443, 304, 306, 399, 398, 400, 206, 598, 0, + 207, 0, 493, 599, 640, 447, 211, 233, 234, 236, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 441, 437, 446, 0, 571, 592, 604, 615, 621, 622, + 624, 625, 626, 627, 628, 631, 629, 402, 309, 489, + 331, 369, 0, 0, 420, 467, 239, 596, 490, 199, + 0, 0, 0, 0, 253, 254, 0, 567, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, - 654, 655, 656, 634, 498, 504, 499, 500, 501, 502, - 503, 0, 505, 0, 0, 0, 0, 0, 0, 581, - 582, 657, 378, 478, 591, 331, 343, 346, 336, 355, - 0, 356, 332, 333, 338, 340, 341, 342, 347, 348, - 352, 358, 246, 207, 384, 392, 568, 308, 213, 214, - 215, 514, 515, 516, 517, 605, 606, 610, 202, 455, - 456, 457, 458, 289, 600, 305, 461, 460, 327, 328, - 373, 442, 530, 532, 543, 547, 549, 551, 557, 560, - 531, 533, 544, 548, 550, 552, 558, 561, 520, 522, - 524, 526, 539, 538, 535, 563, 564, 541, 546, 525, - 537, 542, 555, 562, 559, 519, 523, 527, 536, 554, - 553, 534, 545, 556, 540, 528, 521, 529, 0, 194, - 218, 362, 0, 447, 285, 635, 604, 599, 203, 220, - 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 196, 198, 206, 219, 229, 233, 240, - 258, 273, 275, 282, 295, 306, 314, 315, 318, 324, - 374, 380, 381, 382, 383, 402, 403, 404, 407, 410, - 411, 414, 416, 417, 420, 424, 428, 429, 430, 432, - 434, 436, 448, 453, 467, 468, 469, 470, 471, 474, - 475, 480, 481, 482, 483, 484, 492, 493, 506, 576, - 578, 593, 611, 617, 473, 297, 298, 437, 438, 310, - 311, 631, 632, 296, 588, 618, 586, 630, 612, 431, - 372, 0, 0, 375, 278, 301, 316, 0, 603, 494, - 224, 459, 287, 248, 0, 0, 208, 243, 227, 256, - 271, 274, 320, 385, 393, 422, 427, 293, 268, 241, - 452, 238, 477, 509, 510, 511, 513, 389, 263, 426, - 390, 0, 370, 566, 567, 312, 518, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, - 1876, 0, 0, 0, 0, 0, 0, 267, 0, 0, - 0, 0, 360, 264, 0, 0, 423, 0, 201, 0, - 479, 249, 371, 368, 573, 279, 270, 266, 247, 313, - 379, 421, 508, 415, 0, 364, 0, 0, 489, 394, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 319, 245, 321, 200, 406, - 490, 283, 0, 0, 0, 0, 0, 705, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, - 242, 0, 0, 0, 345, 354, 353, 334, 335, 337, - 339, 344, 351, 357, 0, 0, 0, 0, 0, 262, - 317, 269, 261, 570, 0, 0, 0, 0, 0, 0, - 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, - 395, 254, 0, 446, 0, 0, 0, 614, 0, 0, - 0, 0, 0, 0, 0, 359, 0, 326, 195, 222, - 0, 0, 405, 454, 466, 0, 0, 0, 250, 0, - 464, 419, 592, 230, 281, 451, 425, 462, 433, 284, - 0, 0, 463, 366, 575, 443, 589, 615, 616, 260, - 399, 601, 512, 609, 633, 223, 257, 413, 497, 595, - 486, 391, 571, 572, 325, 485, 292, 199, 363, 621, - 221, 472, 365, 239, 228, 577, 598, 286, 449, 628, - 210, 507, 587, 236, 476, 0, 0, 636, 244, 496, - 212, 584, 495, 387, 322, 323, 211, 0, 450, 265, - 290, 0, 0, 255, 408, 579, 580, 253, 637, 225, - 608, 217, 0, 607, 401, 574, 585, 388, 377, 216, - 583, 386, 376, 330, 349, 350, 277, 303, 440, 369, - 441, 302, 304, 397, 396, 398, 204, 596, 0, 205, - 0, 491, 597, 638, 445, 209, 231, 232, 234, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 439, - 435, 444, 0, 569, 590, 602, 613, 619, 620, 622, - 623, 624, 625, 626, 629, 627, 400, 307, 487, 329, - 367, 0, 0, 418, 465, 237, 594, 488, 197, 0, - 0, 0, 0, 251, 252, 0, 565, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 639, 640, 641, 642, - 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, - 653, 654, 655, 656, 634, 498, 504, 499, 500, 501, - 502, 503, 0, 505, 0, 0, 0, 0, 0, 0, - 581, 582, 657, 378, 478, 591, 331, 343, 346, 336, - 355, 0, 356, 332, 333, 338, 340, 341, 342, 347, - 348, 352, 358, 246, 207, 384, 392, 568, 308, 213, - 214, 215, 514, 515, 516, 517, 605, 606, 610, 202, - 455, 456, 457, 458, 289, 600, 305, 461, 460, 327, - 328, 373, 442, 530, 532, 543, 547, 549, 551, 557, - 560, 531, 533, 544, 548, 550, 552, 558, 561, 520, - 522, 524, 526, 539, 538, 535, 563, 564, 541, 546, - 525, 537, 542, 555, 562, 559, 519, 523, 527, 536, - 554, 553, 534, 545, 556, 540, 528, 521, 529, 0, - 194, 218, 362, 0, 447, 285, 635, 604, 599, 203, - 220, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 196, 198, 206, 219, 229, 233, - 240, 258, 273, 275, 282, 295, 306, 314, 315, 318, - 324, 374, 380, 381, 382, 383, 402, 403, 404, 407, - 410, 411, 414, 416, 417, 420, 424, 428, 429, 430, - 432, 434, 436, 448, 453, 467, 468, 469, 470, 471, - 474, 475, 480, 481, 482, 483, 484, 492, 493, 506, - 576, 578, 593, 611, 617, 473, 297, 298, 437, 438, - 310, 311, 631, 632, 296, 588, 618, 586, 630, 612, - 431, 372, 0, 0, 375, 278, 301, 316, 0, 603, - 494, 224, 459, 287, 248, 0, 0, 208, 243, 227, - 256, 271, 274, 320, 385, 393, 422, 427, 293, 268, - 241, 452, 238, 477, 509, 510, 511, 513, 389, 263, - 426, 390, 0, 370, 566, 567, 312, 518, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, - 0, 1874, 0, 0, 0, 0, 0, 0, 267, 0, - 0, 0, 0, 360, 264, 0, 0, 423, 0, 201, - 0, 479, 249, 371, 368, 573, 279, 270, 266, 247, - 313, 379, 421, 508, 415, 0, 364, 0, 0, 489, - 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 319, 245, 321, 200, - 406, 490, 283, 0, 0, 0, 0, 0, 705, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, - 0, 242, 0, 0, 0, 345, 354, 353, 334, 335, - 337, 339, 344, 351, 357, 0, 0, 0, 0, 0, - 262, 317, 269, 261, 570, 0, 0, 0, 0, 0, - 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 0, 395, 254, 0, 446, 0, 0, 0, 614, 0, - 0, 0, 0, 0, 0, 0, 359, 0, 326, 195, - 222, 0, 0, 405, 454, 466, 0, 0, 0, 250, - 0, 464, 419, 592, 230, 281, 451, 425, 462, 433, - 284, 0, 0, 463, 366, 575, 443, 589, 615, 616, - 260, 399, 601, 512, 609, 633, 223, 257, 413, 497, - 595, 486, 391, 571, 572, 325, 485, 292, 199, 363, - 621, 221, 472, 365, 239, 228, 577, 598, 286, 449, - 628, 210, 507, 587, 236, 476, 0, 0, 636, 244, - 496, 212, 584, 495, 387, 322, 323, 211, 0, 450, - 265, 290, 0, 0, 255, 408, 579, 580, 253, 637, - 225, 608, 217, 0, 607, 401, 574, 585, 388, 377, - 216, 583, 386, 376, 330, 349, 350, 277, 303, 440, - 369, 441, 302, 304, 397, 396, 398, 204, 596, 0, - 205, 0, 491, 597, 638, 445, 209, 231, 232, 234, - 0, 276, 280, 288, 291, 299, 300, 309, 361, 412, - 439, 435, 444, 0, 569, 590, 602, 613, 619, 620, - 622, 623, 624, 625, 626, 629, 627, 400, 307, 487, - 329, 367, 0, 0, 418, 465, 237, 594, 488, 197, - 0, 0, 0, 0, 251, 252, 0, 565, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 639, 640, 641, + 654, 655, 656, 657, 658, 636, 500, 506, 501, 502, + 503, 504, 505, 0, 507, 0, 0, 0, 0, 0, + 0, 583, 584, 659, 380, 480, 593, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 248, 209, 386, 394, 570, 310, + 215, 216, 217, 516, 517, 518, 519, 607, 608, 612, + 204, 457, 458, 459, 460, 291, 602, 307, 463, 462, + 329, 330, 375, 444, 532, 534, 545, 549, 551, 553, + 559, 562, 533, 535, 546, 550, 552, 554, 560, 563, + 522, 524, 526, 528, 541, 540, 537, 565, 566, 543, + 548, 527, 539, 544, 557, 564, 561, 521, 525, 529, + 538, 556, 555, 536, 547, 558, 542, 530, 523, 531, + 0, 196, 220, 364, 0, 449, 287, 637, 606, 601, + 205, 222, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 200, 208, 221, 231, + 235, 242, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 431, + 432, 434, 436, 438, 450, 455, 469, 470, 471, 472, + 473, 476, 477, 482, 483, 484, 485, 486, 494, 495, + 508, 578, 580, 595, 613, 619, 475, 299, 300, 439, + 440, 312, 313, 633, 634, 298, 590, 620, 588, 632, + 614, 433, 374, 0, 0, 377, 280, 303, 318, 0, + 605, 496, 226, 461, 289, 250, 0, 0, 210, 245, + 229, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 243, 454, 240, 479, 511, 512, 513, 515, 391, + 265, 428, 392, 0, 372, 568, 569, 314, 520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 0, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 0, 0, 0, 0, 709, + 710, 711, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 244, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 448, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 197, 224, 0, 0, 407, 456, 468, 0, 0, + 0, 252, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 581, 582, + 255, 639, 227, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 351, 352, 279, + 305, 442, 371, 443, 304, 306, 399, 398, 400, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 199, 0, 0, 0, 0, 253, 254, 0, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, - 652, 653, 654, 655, 656, 634, 498, 504, 499, 500, - 501, 502, 503, 0, 505, 0, 0, 0, 0, 0, - 0, 581, 582, 657, 378, 478, 591, 331, 343, 346, - 336, 355, 0, 356, 332, 333, 338, 340, 341, 342, - 347, 348, 352, 358, 246, 207, 384, 392, 568, 308, - 213, 214, 215, 514, 515, 516, 517, 605, 606, 610, - 202, 455, 456, 457, 458, 289, 600, 305, 461, 460, - 327, 328, 373, 442, 530, 532, 543, 547, 549, 551, - 557, 560, 531, 533, 544, 548, 550, 552, 558, 561, - 520, 522, 524, 526, 539, 538, 535, 563, 564, 541, - 546, 525, 537, 542, 555, 562, 559, 519, 523, 527, - 536, 554, 553, 534, 545, 556, 540, 528, 521, 529, - 0, 194, 218, 362, 0, 447, 285, 635, 604, 599, - 203, 220, 0, 259, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 196, 198, 206, 219, 229, - 233, 240, 258, 273, 275, 282, 295, 306, 314, 315, - 318, 324, 374, 380, 381, 382, 383, 402, 403, 404, - 407, 410, 411, 414, 416, 417, 420, 424, 428, 429, - 430, 432, 434, 436, 448, 453, 467, 468, 469, 470, - 471, 474, 475, 480, 481, 482, 483, 484, 492, 493, - 506, 576, 578, 593, 611, 617, 473, 297, 298, 437, - 438, 310, 311, 631, 632, 296, 588, 618, 586, 630, - 612, 431, 372, 0, 0, 375, 278, 301, 316, 0, - 603, 494, 224, 459, 287, 248, 0, 0, 208, 243, - 227, 256, 271, 274, 320, 385, 393, 422, 427, 293, - 268, 241, 452, 238, 477, 509, 510, 511, 513, 389, - 263, 426, 390, 0, 370, 566, 567, 312, 518, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 409, 0, 1872, 0, 0, 0, 0, 0, 0, 267, - 0, 0, 0, 0, 360, 264, 0, 0, 423, 0, - 201, 0, 479, 249, 371, 368, 573, 279, 270, 266, - 247, 313, 379, 421, 508, 415, 0, 364, 0, 0, - 489, 394, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 319, 245, 321, - 200, 406, 490, 283, 0, 0, 0, 0, 0, 705, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 0, 0, 242, 0, 0, 0, 345, 354, 353, 334, - 335, 337, 339, 344, 351, 357, 0, 0, 0, 0, - 0, 262, 317, 269, 261, 570, 0, 0, 0, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 0, 395, 254, 0, 446, 0, 0, 0, 614, - 0, 0, 0, 0, 0, 0, 0, 359, 0, 326, - 195, 222, 0, 0, 405, 454, 466, 0, 0, 0, - 250, 0, 464, 419, 592, 230, 281, 451, 425, 462, - 433, 284, 0, 0, 463, 366, 575, 443, 589, 615, - 616, 260, 399, 601, 512, 609, 633, 223, 257, 413, - 497, 595, 486, 391, 571, 572, 325, 485, 292, 199, - 363, 621, 221, 472, 365, 239, 228, 577, 598, 286, - 449, 628, 210, 507, 587, 236, 476, 0, 0, 636, - 244, 496, 212, 584, 495, 387, 322, 323, 211, 0, - 450, 265, 290, 0, 0, 255, 408, 579, 580, 253, - 637, 225, 608, 217, 0, 607, 401, 574, 585, 388, - 377, 216, 583, 386, 376, 330, 349, 350, 277, 303, - 440, 369, 441, 302, 304, 397, 396, 398, 204, 596, - 0, 205, 0, 491, 597, 638, 445, 209, 231, 232, - 234, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 439, 435, 444, 0, 569, 590, 602, 613, 619, - 620, 622, 623, 624, 625, 626, 629, 627, 400, 307, - 487, 329, 367, 0, 0, 418, 465, 237, 594, 488, - 197, 0, 0, 0, 0, 251, 252, 0, 565, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, - 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, - 651, 652, 653, 654, 655, 656, 634, 498, 504, 499, - 500, 501, 502, 503, 0, 505, 0, 0, 0, 0, - 0, 0, 581, 582, 657, 378, 478, 591, 331, 343, - 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, - 342, 347, 348, 352, 358, 246, 207, 384, 392, 568, - 308, 213, 214, 215, 514, 515, 516, 517, 605, 606, - 610, 202, 455, 456, 457, 458, 289, 600, 305, 461, - 460, 327, 328, 373, 442, 530, 532, 543, 547, 549, - 551, 557, 560, 531, 533, 544, 548, 550, 552, 558, - 561, 520, 522, 524, 526, 539, 538, 535, 563, 564, - 541, 546, 525, 537, 542, 555, 562, 559, 519, 523, - 527, 536, 554, 553, 534, 545, 556, 540, 528, 521, - 529, 0, 194, 218, 362, 0, 447, 285, 635, 604, - 599, 203, 220, 0, 259, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 196, 198, 206, 219, - 229, 233, 240, 258, 273, 275, 282, 295, 306, 314, - 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, - 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, - 429, 430, 432, 434, 436, 448, 453, 467, 468, 469, - 470, 471, 474, 475, 480, 481, 482, 483, 484, 492, - 493, 506, 576, 578, 593, 611, 617, 473, 297, 298, - 437, 438, 310, 311, 631, 632, 296, 588, 618, 586, - 630, 612, 431, 372, 0, 0, 375, 278, 301, 316, - 0, 603, 494, 224, 459, 287, 248, 0, 0, 208, - 243, 227, 256, 271, 274, 320, 385, 393, 422, 427, - 293, 268, 241, 452, 238, 477, 509, 510, 511, 513, - 389, 263, 426, 390, 0, 370, 566, 567, 312, 518, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 409, 0, 1870, 0, 0, 0, 0, 0, 0, - 267, 0, 0, 0, 0, 360, 264, 0, 0, 423, - 0, 201, 0, 479, 249, 371, 368, 573, 279, 270, - 266, 247, 313, 379, 421, 508, 415, 0, 364, 0, - 0, 489, 394, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 319, 245, - 321, 200, 406, 490, 283, 0, 0, 0, 0, 0, - 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 0, 0, 242, 0, 0, 0, 345, 354, 353, - 334, 335, 337, 339, 344, 351, 357, 0, 0, 0, - 0, 0, 262, 317, 269, 261, 570, 0, 0, 0, - 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 294, 0, 395, 254, 0, 446, 0, 0, 0, - 614, 0, 0, 0, 0, 0, 0, 0, 359, 0, - 326, 195, 222, 0, 0, 405, 454, 466, 0, 0, - 0, 250, 0, 464, 419, 592, 230, 281, 451, 425, - 462, 433, 284, 0, 0, 463, 366, 575, 443, 589, - 615, 616, 260, 399, 601, 512, 609, 633, 223, 257, - 413, 497, 595, 486, 391, 571, 572, 325, 485, 292, - 199, 363, 621, 221, 472, 365, 239, 228, 577, 598, - 286, 449, 628, 210, 507, 587, 236, 476, 0, 0, - 636, 244, 496, 212, 584, 495, 387, 322, 323, 211, - 0, 450, 265, 290, 0, 0, 255, 408, 579, 580, - 253, 637, 225, 608, 217, 0, 607, 401, 574, 585, - 388, 377, 216, 583, 386, 376, 330, 349, 350, 277, - 303, 440, 369, 441, 302, 304, 397, 396, 398, 204, - 596, 0, 205, 0, 491, 597, 638, 445, 209, 231, - 232, 234, 0, 276, 280, 288, 291, 299, 300, 309, - 361, 412, 439, 435, 444, 0, 569, 590, 602, 613, - 619, 620, 622, 623, 624, 625, 626, 629, 627, 400, - 307, 487, 329, 367, 0, 0, 418, 465, 237, 594, - 488, 197, 0, 0, 0, 0, 251, 252, 0, 565, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, - 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 654, 655, 656, 634, 498, 504, - 499, 500, 501, 502, 503, 0, 505, 0, 0, 0, - 0, 0, 0, 581, 582, 657, 378, 478, 591, 331, - 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, - 341, 342, 347, 348, 352, 358, 246, 207, 384, 392, - 568, 308, 213, 214, 215, 514, 515, 516, 517, 605, - 606, 610, 202, 455, 456, 457, 458, 289, 600, 305, - 461, 460, 327, 328, 373, 442, 530, 532, 543, 547, - 549, 551, 557, 560, 531, 533, 544, 548, 550, 552, - 558, 561, 520, 522, 524, 526, 539, 538, 535, 563, - 564, 541, 546, 525, 537, 542, 555, 562, 559, 519, - 523, 527, 536, 554, 553, 534, 545, 556, 540, 528, - 521, 529, 0, 194, 218, 362, 0, 447, 285, 635, - 604, 599, 203, 220, 0, 259, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 196, 198, 206, - 219, 229, 233, 240, 258, 273, 275, 282, 295, 306, - 314, 315, 318, 324, 374, 380, 381, 382, 383, 402, - 403, 404, 407, 410, 411, 414, 416, 417, 420, 424, - 428, 429, 430, 432, 434, 436, 448, 453, 467, 468, - 469, 470, 471, 474, 475, 480, 481, 482, 483, 484, - 492, 493, 506, 576, 578, 593, 611, 617, 473, 297, - 298, 437, 438, 310, 311, 631, 632, 296, 588, 618, - 586, 630, 612, 431, 372, 0, 0, 375, 278, 301, - 316, 0, 603, 494, 224, 459, 287, 248, 0, 0, - 208, 243, 227, 256, 271, 274, 320, 385, 393, 422, - 427, 293, 268, 241, 452, 238, 477, 509, 510, 511, - 513, 389, 263, 426, 390, 0, 370, 566, 567, 312, - 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 409, 0, 1866, 0, 0, 0, 0, 0, - 0, 267, 0, 0, 0, 0, 360, 264, 0, 0, - 423, 0, 201, 0, 479, 249, 371, 368, 573, 279, - 270, 266, 247, 313, 379, 421, 508, 415, 0, 364, - 0, 0, 489, 394, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, - 245, 321, 200, 406, 490, 283, 0, 0, 0, 0, - 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 0, 0, 242, 0, 0, 0, 345, 354, - 353, 334, 335, 337, 339, 344, 351, 357, 0, 0, - 0, 0, 0, 262, 317, 269, 261, 570, 0, 0, - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 395, 254, 0, 446, 0, 0, - 0, 614, 0, 0, 0, 0, 0, 0, 0, 359, - 0, 326, 195, 222, 0, 0, 405, 454, 466, 0, - 0, 0, 250, 0, 464, 419, 592, 230, 281, 451, - 425, 462, 433, 284, 0, 0, 463, 366, 575, 443, - 589, 615, 616, 260, 399, 601, 512, 609, 633, 223, - 257, 413, 497, 595, 486, 391, 571, 572, 325, 485, - 292, 199, 363, 621, 221, 472, 365, 239, 228, 577, - 598, 286, 449, 628, 210, 507, 587, 236, 476, 0, - 0, 636, 244, 496, 212, 584, 495, 387, 322, 323, - 211, 0, 450, 265, 290, 0, 0, 255, 408, 579, - 580, 253, 637, 225, 608, 217, 0, 607, 401, 574, - 585, 388, 377, 216, 583, 386, 376, 330, 349, 350, - 277, 303, 440, 369, 441, 302, 304, 397, 396, 398, - 204, 596, 0, 205, 0, 491, 597, 638, 445, 209, - 231, 232, 234, 0, 276, 280, 288, 291, 299, 300, - 309, 361, 412, 439, 435, 444, 0, 569, 590, 602, - 613, 619, 620, 622, 623, 624, 625, 626, 629, 627, - 400, 307, 487, 329, 367, 0, 0, 418, 465, 237, - 594, 488, 197, 0, 0, 0, 0, 251, 252, 0, - 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 634, 498, - 504, 499, 500, 501, 502, 503, 0, 505, 0, 0, - 0, 0, 0, 0, 581, 582, 657, 378, 478, 591, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 246, 207, 384, - 392, 568, 308, 213, 214, 215, 514, 515, 516, 517, - 605, 606, 610, 202, 455, 456, 457, 458, 289, 600, - 305, 461, 460, 327, 328, 373, 442, 530, 532, 543, - 547, 549, 551, 557, 560, 531, 533, 544, 548, 550, - 552, 558, 561, 520, 522, 524, 526, 539, 538, 535, - 563, 564, 541, 546, 525, 537, 542, 555, 562, 559, - 519, 523, 527, 536, 554, 553, 534, 545, 556, 540, - 528, 521, 529, 0, 194, 218, 362, 0, 447, 285, - 635, 604, 599, 203, 220, 0, 259, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 196, 198, - 206, 219, 229, 233, 240, 258, 273, 275, 282, 295, - 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, - 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, - 424, 428, 429, 430, 432, 434, 436, 448, 453, 467, - 468, 469, 470, 471, 474, 475, 480, 481, 482, 483, - 484, 492, 493, 506, 576, 578, 593, 611, 617, 473, - 297, 298, 437, 438, 310, 311, 631, 632, 296, 588, - 618, 586, 630, 612, 431, 372, 0, 0, 375, 278, - 301, 316, 0, 603, 494, 224, 459, 287, 248, 0, - 0, 208, 243, 227, 256, 271, 274, 320, 385, 393, - 422, 427, 293, 268, 241, 452, 238, 477, 509, 510, - 511, 513, 389, 263, 426, 390, 0, 370, 566, 567, - 312, 518, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 409, 0, 1864, 0, 0, 0, 0, - 0, 0, 267, 0, 0, 0, 0, 360, 264, 0, - 0, 423, 0, 201, 0, 479, 249, 371, 368, 573, - 279, 270, 266, 247, 313, 379, 421, 508, 415, 0, - 364, 0, 0, 489, 394, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 319, 245, 321, 200, 406, 490, 283, 0, 0, 0, - 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 0, 0, 242, 0, 0, 0, 345, - 354, 353, 334, 335, 337, 339, 344, 351, 357, 0, - 0, 0, 0, 0, 262, 317, 269, 261, 570, 0, - 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 395, 254, 0, 446, 0, - 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, - 359, 0, 326, 195, 222, 0, 0, 405, 454, 466, - 0, 0, 0, 250, 0, 464, 419, 592, 230, 281, - 451, 425, 462, 433, 284, 0, 0, 463, 366, 575, - 443, 589, 615, 616, 260, 399, 601, 512, 609, 633, - 223, 257, 413, 497, 595, 486, 391, 571, 572, 325, - 485, 292, 199, 363, 621, 221, 472, 365, 239, 228, - 577, 598, 286, 449, 628, 210, 507, 587, 236, 476, - 0, 0, 636, 244, 496, 212, 584, 495, 387, 322, - 323, 211, 0, 450, 265, 290, 0, 0, 255, 408, - 579, 580, 253, 637, 225, 608, 217, 0, 607, 401, - 574, 585, 388, 377, 216, 583, 386, 376, 330, 349, - 350, 277, 303, 440, 369, 441, 302, 304, 397, 396, - 398, 204, 596, 0, 205, 0, 491, 597, 638, 445, - 209, 231, 232, 234, 0, 276, 280, 288, 291, 299, - 300, 309, 361, 412, 439, 435, 444, 0, 569, 590, - 602, 613, 619, 620, 622, 623, 624, 625, 626, 629, - 627, 400, 307, 487, 329, 367, 0, 0, 418, 465, - 237, 594, 488, 197, 0, 0, 0, 0, 251, 252, - 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 639, 640, 641, 642, 643, 644, 645, 646, 647, - 648, 649, 650, 651, 652, 653, 654, 655, 656, 634, - 498, 504, 499, 500, 501, 502, 503, 0, 505, 0, - 0, 0, 0, 0, 0, 581, 582, 657, 378, 478, - 591, 331, 343, 346, 336, 355, 0, 356, 332, 333, - 338, 340, 341, 342, 347, 348, 352, 358, 246, 207, - 384, 392, 568, 308, 213, 214, 215, 514, 515, 516, - 517, 605, 606, 610, 202, 455, 456, 457, 458, 289, - 600, 305, 461, 460, 327, 328, 373, 442, 530, 532, - 543, 547, 549, 551, 557, 560, 531, 533, 544, 548, - 550, 552, 558, 561, 520, 522, 524, 526, 539, 538, - 535, 563, 564, 541, 546, 525, 537, 542, 555, 562, - 559, 519, 523, 527, 536, 554, 553, 534, 545, 556, - 540, 528, 521, 529, 0, 194, 218, 362, 0, 447, - 285, 635, 604, 599, 203, 220, 0, 259, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, - 198, 206, 219, 229, 233, 240, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 429, 430, 432, 434, 436, 448, 453, - 467, 468, 469, 470, 471, 474, 475, 480, 481, 482, - 483, 484, 492, 493, 506, 576, 578, 593, 611, 617, - 473, 297, 298, 437, 438, 310, 311, 631, 632, 296, - 588, 618, 586, 630, 612, 431, 372, 0, 0, 375, - 278, 301, 316, 0, 603, 494, 224, 459, 287, 248, - 0, 0, 208, 243, 227, 256, 271, 274, 320, 385, - 393, 422, 427, 293, 268, 241, 452, 238, 477, 509, - 510, 511, 513, 389, 263, 426, 390, 0, 370, 566, - 567, 312, 518, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 409, 0, 1862, 0, 0, 0, - 0, 0, 0, 267, 0, 0, 0, 0, 360, 264, - 0, 0, 423, 0, 201, 0, 479, 249, 371, 368, - 573, 279, 270, 266, 247, 313, 379, 421, 508, 415, - 0, 364, 0, 0, 489, 394, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 319, 245, 321, 200, 406, 490, 283, 0, 0, - 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 0, 0, 242, 0, 0, 0, - 345, 354, 353, 334, 335, 337, 339, 344, 351, 357, - 0, 0, 0, 0, 0, 262, 317, 269, 261, 570, - 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 446, - 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, - 0, 359, 0, 326, 195, 222, 0, 0, 405, 454, - 466, 0, 0, 0, 250, 0, 464, 419, 592, 230, - 281, 451, 425, 462, 433, 284, 0, 0, 463, 366, - 575, 443, 589, 615, 616, 260, 399, 601, 512, 609, - 633, 223, 257, 413, 497, 595, 486, 391, 571, 572, - 325, 485, 292, 199, 363, 621, 221, 472, 365, 239, - 228, 577, 598, 286, 449, 628, 210, 507, 587, 236, - 476, 0, 0, 636, 244, 496, 212, 584, 495, 387, - 322, 323, 211, 0, 450, 265, 290, 0, 0, 255, - 408, 579, 580, 253, 637, 225, 608, 217, 0, 607, - 401, 574, 585, 388, 377, 216, 583, 386, 376, 330, - 349, 350, 277, 303, 440, 369, 441, 302, 304, 397, - 396, 398, 204, 596, 0, 205, 0, 491, 597, 638, - 445, 209, 231, 232, 234, 0, 276, 280, 288, 291, - 299, 300, 309, 361, 412, 439, 435, 444, 0, 569, - 590, 602, 613, 619, 620, 622, 623, 624, 625, 626, - 629, 627, 400, 307, 487, 329, 367, 0, 0, 418, - 465, 237, 594, 488, 197, 0, 0, 0, 0, 251, - 252, 0, 565, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 639, 640, 641, 642, 643, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 634, 498, 504, 499, 500, 501, 502, 503, 0, 505, - 0, 0, 0, 0, 0, 0, 581, 582, 657, 378, - 478, 591, 331, 343, 346, 336, 355, 0, 356, 332, - 333, 338, 340, 341, 342, 347, 348, 352, 358, 246, - 207, 384, 392, 568, 308, 213, 214, 215, 514, 515, - 516, 517, 605, 606, 610, 202, 455, 456, 457, 458, - 289, 600, 305, 461, 460, 327, 328, 373, 442, 530, - 532, 543, 547, 549, 551, 557, 560, 531, 533, 544, - 548, 550, 552, 558, 561, 520, 522, 524, 526, 539, - 538, 535, 563, 564, 541, 546, 525, 537, 542, 555, - 562, 559, 519, 523, 527, 536, 554, 553, 534, 545, - 556, 540, 528, 521, 529, 0, 194, 218, 362, 0, - 447, 285, 635, 604, 599, 203, 220, 0, 259, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 196, 198, 206, 219, 229, 233, 240, 258, 273, 275, - 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, - 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, - 417, 420, 424, 428, 429, 430, 432, 434, 436, 448, - 453, 467, 468, 469, 470, 471, 474, 475, 480, 481, - 482, 483, 484, 492, 493, 506, 576, 578, 593, 611, - 617, 473, 297, 298, 437, 438, 310, 311, 631, 632, - 296, 588, 618, 586, 630, 612, 431, 372, 0, 0, - 375, 278, 301, 316, 0, 603, 494, 224, 459, 287, - 248, 0, 0, 208, 243, 227, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 241, 452, 238, 477, - 509, 510, 511, 513, 389, 263, 426, 390, 0, 370, - 566, 567, 312, 518, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 0, 0, 0, 0, 267, 0, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 201, 0, 479, 249, 371, - 368, 573, 279, 270, 266, 247, 313, 379, 421, 508, - 415, 0, 364, 0, 0, 489, 394, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 245, 321, 200, 406, 490, 283, 0, - 1837, 0, 0, 0, 705, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 0, 0, 242, 0, 0, - 0, 345, 354, 353, 334, 335, 337, 339, 344, 351, - 357, 0, 0, 0, 0, 0, 262, 317, 269, 261, - 570, 0, 0, 0, 0, 0, 0, 0, 226, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 0, 395, 254, 0, - 446, 0, 0, 0, 614, 0, 0, 0, 0, 0, - 0, 0, 359, 0, 326, 195, 222, 0, 0, 405, - 454, 466, 0, 0, 0, 250, 0, 464, 419, 592, - 230, 281, 451, 425, 462, 433, 284, 0, 0, 463, - 366, 575, 443, 589, 615, 616, 260, 399, 601, 512, - 609, 633, 223, 257, 413, 497, 595, 486, 391, 571, - 572, 325, 485, 292, 199, 363, 621, 221, 472, 365, - 239, 228, 577, 598, 286, 449, 628, 210, 507, 587, - 236, 476, 0, 0, 636, 244, 496, 212, 584, 495, - 387, 322, 323, 211, 0, 450, 265, 290, 0, 0, - 255, 408, 579, 580, 253, 637, 225, 608, 217, 0, - 607, 401, 574, 585, 388, 377, 216, 583, 386, 376, - 330, 349, 350, 277, 303, 440, 369, 441, 302, 304, - 397, 396, 398, 204, 596, 0, 205, 0, 491, 597, - 638, 445, 209, 231, 232, 234, 0, 276, 280, 288, - 291, 299, 300, 309, 361, 412, 439, 435, 444, 0, - 569, 590, 602, 613, 619, 620, 622, 623, 624, 625, - 626, 629, 627, 400, 307, 487, 329, 367, 0, 0, - 418, 465, 237, 594, 488, 197, 0, 0, 0, 0, - 251, 252, 0, 565, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 639, 640, 641, 642, 643, 644, 645, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 0, 0, 0, + 0, 0, 0, 583, 584, 659, 380, 480, 593, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 248, 209, 386, 394, + 570, 310, 215, 216, 217, 516, 517, 518, 519, 607, + 608, 612, 204, 457, 458, 459, 460, 291, 602, 307, + 463, 462, 329, 330, 375, 444, 532, 534, 545, 549, + 551, 553, 559, 562, 533, 535, 546, 550, 552, 554, + 560, 563, 522, 524, 526, 528, 541, 540, 537, 565, + 566, 543, 548, 527, 539, 544, 557, 564, 561, 521, + 525, 529, 538, 556, 555, 536, 547, 558, 542, 530, + 523, 531, 0, 196, 220, 364, 0, 449, 287, 637, + 606, 601, 205, 222, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 299, + 300, 439, 440, 312, 313, 633, 634, 298, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 0, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 0, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 0, 0, 0, + 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 244, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 0, + 0, 0, 616, 0, 0, 0, 4016, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 252, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 0, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 581, 582, 255, 639, 227, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 351, + 352, 279, 305, 442, 371, 443, 304, 306, 399, 398, + 400, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 199, 0, 0, 0, 0, 253, 254, + 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 0, + 0, 0, 0, 0, 0, 583, 584, 659, 380, 480, + 593, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 248, 209, + 386, 394, 570, 310, 215, 216, 217, 516, 517, 518, + 519, 607, 608, 612, 204, 457, 458, 459, 460, 291, + 602, 307, 463, 462, 329, 330, 375, 444, 532, 534, + 545, 549, 551, 553, 559, 562, 533, 535, 546, 550, + 552, 554, 560, 563, 522, 524, 526, 528, 541, 540, + 537, 565, 566, 543, 548, 527, 539, 544, 557, 564, + 561, 521, 525, 529, 538, 556, 555, 536, 547, 558, + 542, 530, 523, 531, 0, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 299, 300, 439, 440, 312, 313, 633, 634, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 0, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 392, 0, 372, 568, + 569, 314, 520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 203, 0, 481, 251, 373, 370, + 575, 281, 272, 268, 249, 315, 381, 423, 510, 417, + 0, 366, 0, 0, 491, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 247, 323, 202, 408, 492, 285, 0, 0, + 0, 0, 1918, 194, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 244, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 572, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 448, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 197, 224, 0, 0, 407, + 456, 468, 0, 0, 0, 252, 0, 466, 421, 594, + 232, 283, 453, 427, 464, 435, 286, 0, 0, 465, + 368, 577, 445, 591, 617, 618, 262, 401, 603, 514, + 611, 635, 225, 259, 415, 499, 597, 488, 393, 573, + 574, 327, 487, 294, 201, 365, 623, 223, 474, 367, + 241, 230, 579, 600, 288, 451, 630, 212, 509, 589, + 238, 478, 0, 0, 638, 246, 498, 214, 586, 497, + 389, 324, 325, 213, 0, 452, 267, 292, 0, 0, + 257, 410, 581, 582, 255, 639, 227, 610, 219, 0, + 609, 403, 576, 587, 390, 379, 218, 585, 388, 378, + 332, 351, 352, 279, 305, 442, 371, 443, 304, 306, + 399, 398, 400, 206, 598, 0, 207, 0, 493, 599, + 640, 447, 211, 233, 234, 236, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 441, 437, 446, 0, + 571, 592, 604, 615, 621, 622, 624, 625, 626, 627, + 628, 631, 629, 402, 309, 489, 331, 369, 0, 0, + 420, 467, 239, 596, 490, 199, 0, 0, 0, 0, + 253, 254, 0, 567, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 636, 500, 506, 501, 502, 503, 504, 505, 0, + 507, 0, 0, 0, 0, 0, 0, 583, 584, 659, + 380, 480, 593, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 248, 209, 386, 394, 570, 310, 215, 216, 217, 516, + 517, 518, 519, 607, 608, 612, 204, 457, 458, 459, + 460, 291, 602, 307, 463, 462, 329, 330, 375, 444, + 532, 534, 545, 549, 551, 553, 559, 562, 533, 535, + 546, 550, 552, 554, 560, 563, 522, 524, 526, 528, + 541, 540, 537, 565, 566, 543, 548, 527, 539, 544, + 557, 564, 561, 521, 525, 529, 538, 556, 555, 536, + 547, 558, 542, 530, 523, 531, 0, 196, 220, 364, + 0, 449, 287, 637, 606, 601, 205, 222, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 198, 200, 208, 221, 231, 235, 242, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 431, 432, 434, 436, 438, + 450, 455, 469, 470, 471, 472, 473, 476, 477, 482, + 483, 484, 485, 486, 494, 495, 508, 578, 580, 595, + 613, 619, 475, 299, 300, 439, 440, 312, 313, 633, + 634, 298, 590, 620, 588, 632, 614, 433, 374, 0, + 0, 377, 280, 303, 318, 0, 605, 496, 226, 461, + 289, 250, 0, 0, 210, 245, 229, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 243, 454, 240, + 479, 511, 512, 513, 515, 391, 265, 428, 392, 0, + 372, 568, 569, 314, 520, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 203, 0, 481, 251, + 373, 370, 575, 281, 272, 268, 249, 315, 381, 423, + 510, 417, 0, 366, 0, 0, 491, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 247, 323, 202, 408, 492, 285, + 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 448, 0, 0, 0, 616, 0, 0, 0, + 3893, 0, 0, 0, 361, 0, 328, 197, 224, 0, + 0, 407, 456, 468, 0, 0, 0, 252, 0, 466, + 421, 594, 232, 283, 453, 427, 464, 435, 286, 0, + 0, 465, 368, 577, 445, 591, 617, 618, 262, 401, + 603, 514, 611, 635, 225, 259, 415, 499, 597, 488, + 393, 573, 574, 327, 487, 294, 201, 365, 623, 223, + 474, 367, 241, 230, 579, 600, 288, 451, 630, 212, + 509, 589, 238, 478, 0, 0, 638, 246, 498, 214, + 586, 497, 389, 324, 325, 213, 0, 452, 267, 292, + 0, 0, 257, 410, 581, 582, 255, 639, 227, 610, + 219, 0, 609, 403, 576, 587, 390, 379, 218, 585, + 388, 378, 332, 351, 352, 279, 305, 442, 371, 443, + 304, 306, 399, 398, 400, 206, 598, 0, 207, 0, + 493, 599, 640, 447, 211, 233, 234, 236, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 441, 437, + 446, 0, 571, 592, 604, 615, 621, 622, 624, 625, + 626, 627, 628, 631, 629, 402, 309, 489, 331, 369, + 0, 0, 420, 467, 239, 596, 490, 199, 0, 0, + 0, 0, 253, 254, 0, 567, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, - 656, 634, 498, 504, 499, 500, 501, 502, 503, 0, - 505, 0, 0, 0, 0, 0, 0, 581, 582, 657, - 378, 478, 591, 331, 343, 346, 336, 355, 0, 356, - 332, 333, 338, 340, 341, 342, 347, 348, 352, 358, - 246, 207, 384, 392, 568, 308, 213, 214, 215, 514, - 515, 516, 517, 605, 606, 610, 202, 455, 456, 457, - 458, 289, 600, 305, 461, 460, 327, 328, 373, 442, - 530, 532, 543, 547, 549, 551, 557, 560, 531, 533, - 544, 548, 550, 552, 558, 561, 520, 522, 524, 526, - 539, 538, 535, 563, 564, 541, 546, 525, 537, 542, - 555, 562, 559, 519, 523, 527, 536, 554, 553, 534, - 545, 556, 540, 528, 521, 529, 0, 194, 218, 362, - 0, 447, 285, 635, 604, 599, 203, 220, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 196, 198, 206, 219, 229, 233, 240, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 429, 430, 432, 434, 436, - 448, 453, 467, 468, 469, 470, 471, 474, 475, 480, - 481, 482, 483, 484, 492, 493, 506, 576, 578, 593, - 611, 617, 473, 297, 298, 437, 438, 310, 311, 631, - 632, 296, 588, 618, 586, 630, 612, 431, 372, 0, - 0, 375, 278, 301, 316, 0, 603, 494, 224, 459, - 287, 248, 0, 0, 208, 243, 227, 256, 271, 274, - 320, 385, 393, 422, 427, 293, 268, 241, 452, 238, - 477, 509, 510, 511, 513, 389, 263, 426, 390, 0, - 370, 566, 567, 312, 518, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, - 0, 0, 0, 0, 1736, 267, 0, 0, 0, 0, - 360, 264, 0, 0, 423, 0, 201, 0, 479, 249, - 371, 368, 573, 279, 270, 266, 247, 313, 379, 421, - 508, 415, 0, 364, 0, 0, 489, 394, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 319, 245, 321, 200, 406, 490, 283, - 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 0, 0, 242, 0, - 0, 0, 345, 354, 353, 334, 335, 337, 339, 344, - 351, 357, 0, 0, 0, 0, 0, 262, 317, 269, - 261, 570, 0, 0, 0, 0, 0, 0, 0, 226, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 446, 0, 0, 0, 614, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 195, 222, 0, 0, - 405, 454, 466, 0, 0, 0, 250, 0, 464, 419, - 592, 230, 281, 451, 425, 462, 433, 284, 0, 0, - 463, 366, 575, 443, 589, 615, 616, 260, 399, 601, - 512, 609, 633, 223, 257, 413, 497, 595, 486, 391, - 571, 572, 325, 485, 292, 199, 363, 621, 221, 472, - 365, 239, 228, 577, 598, 286, 449, 628, 210, 507, - 587, 236, 476, 0, 0, 636, 244, 496, 212, 584, - 495, 387, 322, 323, 211, 0, 450, 265, 290, 0, - 0, 255, 408, 579, 580, 253, 637, 225, 608, 217, - 0, 607, 401, 574, 585, 388, 377, 216, 583, 386, - 376, 330, 349, 350, 277, 303, 440, 369, 441, 302, - 304, 397, 396, 398, 204, 596, 0, 205, 0, 491, - 597, 638, 445, 209, 231, 232, 234, 0, 276, 280, - 288, 291, 299, 300, 309, 361, 412, 439, 435, 444, - 0, 569, 590, 602, 613, 619, 620, 622, 623, 624, - 625, 626, 629, 627, 400, 307, 487, 329, 367, 0, - 0, 418, 465, 237, 594, 488, 197, 0, 0, 0, - 0, 251, 252, 0, 565, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 639, 640, 641, 642, 643, 644, - 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 655, 656, 634, 498, 504, 499, 500, 501, 502, 503, - 0, 505, 0, 0, 0, 0, 0, 0, 581, 582, - 657, 378, 478, 591, 331, 343, 346, 336, 355, 0, - 356, 332, 333, 338, 340, 341, 342, 347, 348, 352, - 358, 246, 207, 384, 392, 568, 308, 213, 214, 215, - 514, 515, 516, 517, 605, 606, 610, 202, 455, 456, - 457, 458, 289, 600, 305, 461, 460, 327, 328, 373, - 442, 530, 532, 543, 547, 549, 551, 557, 560, 531, - 533, 544, 548, 550, 552, 558, 561, 520, 522, 524, - 526, 539, 538, 535, 563, 564, 541, 546, 525, 537, - 542, 555, 562, 559, 519, 523, 527, 536, 554, 553, - 534, 545, 556, 540, 528, 521, 529, 0, 194, 218, - 362, 0, 447, 285, 635, 604, 599, 203, 220, 0, - 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 196, 198, 206, 219, 229, 233, 240, 258, - 273, 275, 282, 295, 306, 314, 315, 318, 324, 374, - 380, 381, 382, 383, 402, 403, 404, 407, 410, 411, - 414, 416, 417, 420, 424, 428, 429, 430, 432, 434, - 436, 448, 453, 467, 468, 469, 470, 471, 474, 475, - 480, 481, 482, 483, 484, 492, 493, 506, 576, 578, - 593, 611, 617, 473, 297, 298, 437, 438, 310, 311, - 631, 632, 296, 588, 618, 586, 630, 612, 431, 372, - 0, 0, 375, 278, 301, 316, 0, 603, 494, 224, - 459, 287, 248, 0, 0, 208, 243, 227, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 241, 452, - 238, 477, 509, 510, 511, 513, 389, 263, 426, 390, - 0, 370, 566, 567, 312, 518, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 201, 0, 479, - 249, 371, 368, 573, 279, 270, 266, 247, 313, 379, - 421, 508, 415, 0, 364, 0, 0, 489, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 245, 321, 200, 406, 490, - 283, 0, 93, 0, 0, 0, 939, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 0, 0, 242, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 570, 0, 0, 0, 0, 0, 0, 0, - 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 294, 0, 395, - 254, 0, 446, 0, 0, 0, 614, 0, 0, 0, - 0, 0, 0, 0, 359, 0, 326, 195, 222, 0, - 0, 405, 454, 466, 0, 0, 0, 250, 0, 464, - 419, 592, 230, 281, 451, 425, 462, 433, 284, 0, - 0, 463, 366, 575, 443, 589, 615, 616, 260, 399, - 601, 512, 609, 633, 223, 257, 413, 497, 595, 486, - 391, 571, 572, 325, 485, 292, 199, 363, 621, 221, - 472, 365, 239, 228, 577, 598, 286, 449, 628, 210, - 507, 587, 236, 476, 0, 0, 636, 244, 496, 212, - 584, 495, 387, 322, 323, 211, 0, 450, 265, 290, - 0, 0, 255, 408, 579, 580, 253, 637, 225, 608, - 217, 0, 607, 401, 574, 585, 388, 377, 216, 583, - 386, 376, 330, 349, 350, 277, 303, 440, 369, 441, - 302, 304, 397, 396, 398, 204, 596, 0, 205, 0, - 491, 597, 638, 445, 209, 231, 232, 234, 0, 276, - 280, 288, 291, 299, 300, 309, 361, 412, 439, 435, - 444, 0, 569, 590, 602, 613, 619, 620, 622, 623, - 624, 625, 626, 629, 627, 400, 307, 487, 329, 367, - 0, 0, 418, 465, 237, 594, 488, 197, 0, 0, - 0, 0, 251, 252, 0, 565, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 639, 640, 641, 642, 643, + 656, 657, 658, 636, 500, 506, 501, 502, 503, 504, + 505, 0, 507, 0, 0, 0, 0, 0, 0, 583, + 584, 659, 380, 480, 593, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 248, 209, 386, 394, 570, 310, 215, 216, + 217, 516, 517, 518, 519, 607, 608, 612, 204, 457, + 458, 459, 460, 291, 602, 307, 463, 462, 329, 330, + 375, 444, 532, 534, 545, 549, 551, 553, 559, 562, + 533, 535, 546, 550, 552, 554, 560, 563, 522, 524, + 526, 528, 541, 540, 537, 565, 566, 543, 548, 527, + 539, 544, 557, 564, 561, 521, 525, 529, 538, 556, + 555, 536, 547, 558, 542, 530, 523, 531, 0, 196, + 220, 364, 0, 449, 287, 637, 606, 601, 205, 222, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 198, 200, 208, 221, 231, 235, 242, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 431, 432, 434, + 436, 438, 450, 455, 469, 470, 471, 472, 473, 476, + 477, 482, 483, 484, 485, 486, 494, 495, 508, 578, + 580, 595, 613, 619, 475, 299, 300, 439, 440, 312, + 313, 633, 634, 298, 590, 620, 588, 632, 614, 433, + 374, 0, 0, 377, 280, 303, 318, 0, 605, 496, + 226, 461, 289, 250, 0, 0, 210, 245, 229, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 243, + 454, 240, 479, 511, 512, 513, 515, 391, 265, 428, + 392, 0, 372, 568, 569, 314, 520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 203, 0, + 481, 251, 373, 370, 575, 281, 272, 268, 249, 315, + 381, 423, 510, 417, 0, 366, 0, 0, 491, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 247, 323, 202, 408, + 492, 285, 0, 95, 0, 0, 0, 707, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 244, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 572, 0, 0, 0, 0, 0, 0, + 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 448, 0, 0, 0, 616, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 197, + 224, 0, 0, 407, 456, 468, 0, 0, 0, 252, + 0, 466, 421, 594, 232, 283, 453, 427, 464, 435, + 286, 0, 0, 465, 368, 577, 445, 591, 617, 618, + 262, 401, 603, 514, 611, 635, 225, 259, 415, 499, + 597, 488, 393, 573, 574, 327, 487, 294, 201, 365, + 623, 223, 474, 367, 241, 230, 579, 600, 288, 451, + 630, 212, 509, 589, 238, 478, 0, 0, 638, 246, + 498, 214, 586, 497, 389, 324, 325, 213, 0, 452, + 267, 292, 0, 0, 257, 410, 581, 582, 255, 639, + 227, 610, 219, 0, 609, 403, 576, 587, 390, 379, + 218, 585, 388, 378, 332, 351, 352, 279, 305, 442, + 371, 443, 304, 306, 399, 398, 400, 206, 598, 0, + 207, 0, 493, 599, 640, 447, 211, 233, 234, 236, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 441, 437, 446, 0, 571, 592, 604, 615, 621, 622, + 624, 625, 626, 627, 628, 631, 629, 402, 309, 489, + 331, 369, 0, 0, 420, 467, 239, 596, 490, 199, + 0, 0, 0, 0, 253, 254, 0, 567, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, - 654, 655, 656, 634, 498, 504, 499, 500, 501, 502, - 503, 0, 505, 0, 0, 0, 0, 0, 0, 581, - 582, 657, 378, 478, 591, 331, 343, 346, 336, 355, - 0, 356, 332, 333, 338, 340, 341, 342, 347, 348, - 352, 358, 246, 207, 384, 392, 568, 308, 213, 214, - 215, 514, 515, 516, 517, 605, 606, 610, 202, 455, - 456, 457, 458, 289, 600, 305, 461, 460, 327, 328, - 373, 442, 530, 532, 543, 547, 549, 551, 557, 560, - 531, 533, 544, 548, 550, 552, 558, 561, 520, 522, - 524, 526, 539, 538, 535, 563, 564, 541, 546, 525, - 537, 542, 555, 562, 559, 519, 523, 527, 536, 554, - 553, 534, 545, 556, 540, 528, 521, 529, 0, 194, - 218, 362, 0, 447, 285, 635, 604, 599, 203, 220, - 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 196, 198, 206, 219, 229, 233, 240, - 258, 273, 275, 282, 295, 306, 314, 315, 318, 324, - 374, 380, 381, 382, 383, 402, 403, 404, 407, 410, - 411, 414, 416, 417, 420, 424, 428, 429, 430, 432, - 434, 436, 448, 453, 467, 468, 469, 470, 471, 474, - 475, 480, 481, 482, 483, 484, 492, 493, 506, 576, - 578, 593, 611, 617, 473, 297, 298, 437, 438, 310, - 311, 631, 632, 296, 588, 618, 586, 630, 612, 431, - 372, 0, 0, 375, 278, 301, 316, 0, 603, 494, - 224, 459, 287, 248, 0, 0, 208, 243, 227, 256, - 271, 274, 320, 385, 393, 422, 427, 293, 268, 241, - 452, 238, 477, 509, 510, 511, 513, 389, 263, 426, - 390, 0, 370, 566, 567, 312, 518, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, - 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, - 0, 0, 360, 264, 0, 0, 423, 0, 201, 0, - 479, 249, 371, 368, 573, 279, 270, 266, 247, 313, - 379, 421, 508, 415, 0, 364, 0, 0, 489, 394, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 319, 245, 321, 200, 406, - 490, 283, 0, 0, 0, 0, 0, 192, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, - 242, 0, 0, 0, 345, 354, 353, 334, 335, 337, - 339, 344, 351, 357, 0, 0, 0, 0, 0, 262, - 317, 269, 261, 570, 0, 0, 0, 0, 0, 0, - 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1424, 0, 294, 0, - 395, 254, 0, 446, 0, 0, 0, 614, 0, 0, - 0, 0, 0, 0, 0, 359, 0, 326, 195, 222, - 0, 0, 405, 454, 466, 0, 0, 0, 250, 0, - 464, 419, 592, 230, 281, 451, 425, 462, 433, 284, - 0, 0, 463, 366, 575, 443, 589, 615, 616, 260, - 399, 601, 512, 609, 633, 223, 257, 413, 497, 595, - 486, 391, 571, 572, 325, 485, 292, 199, 363, 621, - 221, 472, 365, 239, 228, 577, 598, 286, 449, 628, - 210, 507, 587, 236, 476, 0, 0, 636, 244, 496, - 212, 584, 495, 387, 322, 323, 211, 0, 450, 265, - 290, 0, 0, 255, 408, 579, 580, 253, 637, 225, - 608, 217, 0, 607, 401, 574, 585, 388, 377, 216, - 583, 386, 376, 330, 349, 350, 277, 303, 440, 369, - 441, 302, 304, 397, 396, 398, 204, 596, 0, 205, - 0, 491, 597, 638, 445, 209, 231, 232, 234, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 439, - 435, 444, 0, 569, 590, 602, 613, 619, 620, 622, - 623, 624, 625, 626, 629, 627, 400, 307, 487, 329, - 367, 0, 0, 418, 465, 237, 594, 488, 197, 0, - 0, 0, 0, 251, 252, 0, 565, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 639, 640, 641, 642, - 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, - 653, 654, 655, 656, 634, 498, 504, 499, 500, 501, - 502, 503, 0, 505, 0, 0, 0, 0, 0, 0, - 581, 582, 657, 378, 478, 591, 331, 343, 346, 336, - 355, 0, 356, 332, 333, 338, 340, 341, 342, 347, - 348, 352, 358, 246, 207, 384, 392, 568, 308, 213, - 214, 215, 514, 515, 516, 517, 605, 606, 610, 202, - 455, 456, 457, 458, 289, 600, 305, 461, 460, 327, - 328, 373, 442, 530, 532, 543, 547, 549, 551, 557, - 560, 531, 533, 544, 548, 550, 552, 558, 561, 520, - 522, 524, 526, 539, 538, 535, 563, 564, 541, 546, - 525, 537, 542, 555, 562, 559, 519, 523, 527, 536, - 554, 553, 534, 545, 556, 540, 528, 521, 529, 0, - 194, 218, 362, 0, 447, 285, 635, 604, 599, 203, - 220, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 196, 198, 206, 219, 229, 233, - 240, 258, 273, 275, 282, 295, 306, 314, 315, 318, - 324, 374, 380, 381, 382, 383, 402, 403, 404, 407, - 410, 411, 414, 416, 417, 420, 424, 428, 429, 430, - 432, 434, 436, 448, 453, 467, 468, 469, 470, 471, - 474, 475, 480, 481, 482, 483, 484, 492, 493, 506, - 576, 578, 593, 611, 617, 473, 297, 298, 437, 438, - 310, 311, 631, 632, 1423, 588, 618, 586, 630, 612, - 431, 372, 0, 0, 375, 278, 301, 316, 0, 603, - 494, 224, 459, 287, 248, 0, 0, 208, 243, 227, - 256, 271, 274, 320, 385, 393, 422, 427, 293, 268, - 241, 452, 238, 477, 509, 510, 511, 513, 389, 263, - 426, 390, 0, 370, 566, 567, 312, 518, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, - 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, - 0, 0, 0, 360, 264, 0, 0, 423, 0, 201, - 0, 479, 249, 371, 368, 573, 279, 270, 266, 247, - 313, 379, 421, 508, 415, 0, 364, 0, 0, 489, - 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 319, 245, 321, 200, - 406, 490, 283, 0, 0, 0, 0, 0, 192, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, - 0, 242, 0, 0, 0, 345, 354, 353, 334, 335, - 337, 339, 344, 351, 357, 0, 0, 0, 0, 0, - 262, 317, 269, 261, 570, 0, 0, 0, 0, 0, - 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 0, 395, 254, 0, 446, 0, 0, 0, 614, 0, - 0, 0, 0, 0, 0, 0, 359, 0, 326, 195, - 222, 0, 0, 405, 454, 466, 0, 0, 0, 250, - 0, 464, 419, 592, 230, 281, 451, 425, 462, 433, - 284, 0, 0, 463, 366, 575, 443, 589, 615, 616, - 260, 399, 601, 512, 609, 633, 223, 257, 413, 497, - 595, 486, 391, 571, 572, 325, 485, 292, 199, 363, - 621, 221, 472, 365, 239, 228, 577, 598, 286, 449, - 628, 210, 507, 587, 236, 476, 0, 0, 636, 244, - 496, 212, 584, 495, 387, 322, 323, 211, 0, 450, - 265, 290, 0, 0, 255, 408, 579, 580, 253, 637, - 225, 608, 217, 0, 607, 401, 574, 585, 388, 377, - 216, 583, 386, 376, 330, 349, 350, 277, 303, 440, - 369, 441, 302, 304, 397, 396, 398, 204, 596, 0, - 205, 0, 491, 597, 638, 445, 209, 231, 232, 234, - 0, 276, 280, 288, 291, 299, 300, 309, 361, 412, - 439, 435, 444, 0, 569, 590, 602, 613, 619, 620, - 622, 623, 624, 625, 626, 629, 627, 400, 307, 487, - 329, 367, 0, 0, 418, 465, 237, 594, 488, 197, - 0, 0, 0, 0, 251, 252, 0, 565, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 639, 640, 641, + 654, 655, 656, 657, 658, 636, 500, 506, 501, 502, + 503, 504, 505, 0, 507, 0, 0, 0, 0, 0, + 0, 583, 584, 659, 380, 480, 593, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 248, 209, 386, 394, 570, 310, + 215, 216, 217, 516, 517, 518, 519, 607, 608, 612, + 204, 457, 458, 459, 460, 291, 602, 307, 463, 462, + 329, 330, 375, 444, 532, 534, 545, 549, 551, 553, + 559, 562, 533, 535, 546, 550, 552, 554, 560, 563, + 522, 524, 526, 528, 541, 540, 537, 565, 566, 543, + 548, 527, 539, 544, 557, 564, 561, 521, 525, 529, + 538, 556, 555, 536, 547, 558, 542, 530, 523, 531, + 0, 196, 220, 364, 0, 449, 287, 637, 606, 601, + 205, 222, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 200, 208, 221, 231, + 235, 242, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 431, + 432, 434, 436, 438, 450, 455, 469, 470, 471, 472, + 473, 476, 477, 482, 483, 484, 485, 486, 494, 495, + 508, 578, 580, 595, 613, 619, 475, 299, 300, 439, + 440, 312, 313, 633, 634, 298, 590, 620, 588, 632, + 614, 433, 374, 0, 0, 377, 280, 303, 318, 0, + 605, 496, 226, 461, 289, 250, 0, 0, 210, 245, + 229, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 243, 454, 240, 479, 511, 512, 513, 515, 391, + 265, 428, 392, 0, 372, 568, 569, 314, 520, 0, + 0, 0, 0, 2369, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 0, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 0, 0, 0, 0, 194, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 244, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 448, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 197, 224, 0, 0, 407, 456, 468, 0, 0, + 0, 252, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 581, 582, + 255, 639, 227, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 351, 352, 279, + 305, 442, 371, 443, 304, 306, 399, 398, 400, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 199, 0, 0, 0, 0, 253, 254, 0, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, - 652, 653, 654, 655, 656, 634, 498, 504, 499, 500, - 501, 502, 503, 0, 505, 0, 0, 0, 0, 0, - 0, 581, 582, 657, 378, 478, 591, 331, 343, 346, - 336, 355, 0, 356, 332, 333, 338, 340, 341, 342, - 347, 348, 352, 358, 246, 207, 384, 392, 568, 308, - 213, 214, 215, 514, 515, 516, 517, 605, 606, 610, - 202, 455, 456, 457, 458, 289, 600, 305, 461, 460, - 327, 328, 373, 442, 530, 532, 543, 547, 549, 551, - 557, 560, 531, 533, 544, 548, 550, 552, 558, 561, - 520, 522, 524, 526, 539, 538, 535, 563, 564, 541, - 546, 525, 537, 542, 555, 562, 559, 519, 523, 527, - 536, 554, 553, 534, 545, 556, 540, 528, 521, 529, - 0, 194, 218, 362, 0, 447, 285, 635, 604, 599, - 203, 220, 0, 259, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1025, 0, 0, 0, 196, 198, 206, 219, 229, - 233, 240, 258, 273, 275, 282, 295, 306, 314, 315, - 318, 324, 374, 380, 381, 382, 383, 402, 403, 404, - 407, 410, 411, 414, 416, 417, 420, 424, 428, 429, - 430, 432, 434, 436, 448, 453, 467, 468, 469, 470, - 471, 474, 475, 480, 481, 482, 483, 484, 492, 493, - 506, 576, 578, 593, 611, 617, 473, 297, 298, 437, - 438, 310, 311, 631, 632, 296, 588, 618, 586, 630, - 612, 431, 372, 0, 0, 375, 278, 301, 316, 0, - 603, 494, 224, 459, 287, 248, 0, 0, 208, 243, - 227, 256, 271, 274, 320, 385, 393, 422, 427, 293, - 268, 241, 452, 238, 477, 509, 510, 511, 513, 389, - 263, 426, 390, 0, 370, 566, 567, 312, 518, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 409, 0, 0, 0, 0, 0, 0, 0, 0, 267, - 0, 0, 0, 0, 360, 264, 0, 0, 423, 0, - 201, 0, 479, 249, 371, 368, 573, 279, 270, 266, - 247, 313, 379, 421, 508, 415, 0, 364, 0, 0, - 489, 394, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 319, 245, 321, - 200, 406, 490, 283, 0, 0, 0, 0, 0, 192, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 0, 0, 242, 0, 0, 0, 345, 354, 353, 334, - 335, 337, 339, 344, 351, 357, 0, 0, 0, 0, - 0, 262, 317, 269, 261, 570, 0, 0, 0, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 0, 395, 254, 0, 446, 0, 660, 0, 614, - 0, 0, 0, 0, 0, 0, 0, 359, 0, 326, - 195, 222, 0, 0, 405, 454, 466, 0, 0, 0, - 250, 0, 464, 419, 592, 230, 281, 451, 425, 462, - 433, 284, 0, 0, 463, 366, 575, 443, 589, 615, - 616, 260, 399, 601, 512, 609, 633, 223, 257, 413, - 497, 595, 486, 391, 571, 572, 325, 485, 292, 199, - 363, 621, 221, 472, 365, 239, 228, 577, 598, 286, - 449, 628, 210, 507, 587, 236, 476, 0, 0, 636, - 244, 496, 212, 584, 495, 387, 322, 323, 211, 0, - 450, 265, 290, 0, 0, 255, 408, 579, 580, 253, - 637, 225, 608, 217, 0, 607, 401, 574, 585, 388, - 377, 216, 583, 386, 376, 330, 349, 350, 277, 303, - 440, 369, 441, 302, 304, 397, 396, 398, 204, 596, - 0, 205, 0, 491, 597, 638, 445, 209, 231, 232, - 234, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 439, 435, 444, 0, 569, 590, 602, 613, 619, - 620, 622, 623, 624, 625, 626, 629, 627, 400, 307, - 487, 329, 367, 0, 0, 418, 465, 237, 594, 488, - 197, 0, 0, 0, 0, 251, 252, 0, 565, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, - 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, - 651, 652, 653, 654, 655, 656, 634, 498, 504, 499, - 500, 501, 502, 503, 0, 505, 0, 0, 0, 0, - 0, 0, 581, 582, 657, 378, 478, 591, 331, 343, - 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, - 342, 347, 348, 352, 358, 246, 207, 384, 392, 568, - 308, 213, 214, 215, 514, 515, 516, 517, 605, 606, - 610, 202, 455, 456, 457, 458, 289, 600, 305, 461, - 460, 327, 328, 373, 442, 530, 532, 543, 547, 549, - 551, 557, 560, 531, 533, 544, 548, 550, 552, 558, - 561, 520, 522, 524, 526, 539, 538, 535, 563, 564, - 541, 546, 525, 537, 542, 555, 562, 559, 519, 523, - 527, 536, 554, 553, 534, 545, 556, 540, 528, 521, - 529, 0, 194, 218, 362, 0, 447, 285, 635, 604, - 599, 203, 220, 0, 259, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 196, 198, 206, 219, - 229, 233, 240, 258, 273, 275, 282, 295, 306, 314, - 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, - 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, - 429, 430, 432, 434, 436, 448, 453, 467, 468, 469, - 470, 471, 474, 475, 480, 481, 482, 483, 484, 492, - 493, 506, 576, 578, 593, 611, 617, 473, 297, 298, - 437, 438, 310, 311, 631, 632, 296, 588, 618, 586, - 630, 612, 431, 372, 0, 0, 375, 278, 301, 316, - 0, 603, 494, 224, 459, 287, 248, 0, 0, 208, - 243, 227, 256, 271, 274, 320, 385, 393, 422, 427, - 293, 268, 241, 452, 238, 477, 509, 510, 511, 513, - 389, 263, 426, 390, 0, 370, 566, 567, 312, 518, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, - 267, 0, 0, 0, 0, 360, 264, 0, 0, 423, - 0, 201, 0, 479, 249, 371, 368, 573, 279, 270, - 266, 247, 313, 379, 421, 508, 415, 0, 364, 0, - 0, 489, 394, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 319, 245, - 321, 200, 406, 490, 283, 0, 0, 0, 0, 0, - 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 0, 0, 242, 0, 0, 0, 345, 354, 353, - 334, 335, 337, 339, 344, 351, 357, 0, 0, 0, - 0, 0, 262, 317, 269, 261, 570, 0, 0, 0, - 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 294, 0, 395, 254, 0, 446, 0, 0, 0, - 614, 0, 0, 0, 0, 0, 0, 0, 359, 0, - 326, 195, 222, 0, 0, 405, 454, 466, 0, 0, - 0, 250, 0, 464, 419, 592, 230, 281, 451, 425, - 462, 433, 284, 0, 0, 463, 366, 575, 443, 589, - 615, 616, 260, 399, 601, 512, 609, 633, 223, 257, - 413, 497, 595, 486, 391, 571, 572, 325, 485, 292, - 199, 363, 621, 221, 472, 365, 239, 228, 577, 598, - 286, 449, 628, 210, 507, 587, 236, 476, 0, 0, - 636, 244, 496, 212, 584, 495, 387, 322, 323, 211, - 0, 450, 265, 290, 0, 0, 255, 408, 579, 580, - 253, 637, 225, 608, 217, 0, 607, 401, 574, 585, - 388, 377, 216, 583, 386, 376, 330, 349, 350, 277, - 303, 440, 369, 441, 302, 304, 397, 396, 398, 204, - 596, 0, 205, 0, 491, 597, 638, 445, 209, 231, - 232, 234, 0, 276, 280, 288, 291, 299, 300, 309, - 361, 412, 439, 435, 444, 0, 569, 590, 602, 613, - 619, 620, 622, 623, 624, 625, 626, 629, 627, 400, - 307, 487, 329, 367, 0, 0, 418, 465, 237, 594, - 488, 197, 0, 0, 0, 0, 251, 252, 0, 565, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, - 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 654, 655, 656, 634, 498, 504, - 499, 500, 501, 502, 503, 0, 505, 0, 0, 0, - 0, 0, 0, 581, 582, 657, 378, 478, 591, 331, - 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, - 341, 342, 347, 348, 352, 358, 246, 207, 384, 392, - 568, 308, 213, 214, 215, 514, 515, 516, 517, 605, - 606, 610, 202, 455, 456, 457, 458, 289, 600, 305, - 461, 460, 327, 328, 373, 442, 530, 532, 543, 547, - 549, 551, 557, 560, 531, 533, 544, 548, 550, 552, - 558, 561, 520, 522, 524, 526, 539, 538, 535, 563, - 564, 541, 546, 525, 537, 542, 555, 562, 559, 519, - 523, 527, 536, 554, 553, 534, 545, 556, 540, 528, - 521, 529, 0, 194, 218, 362, 0, 447, 285, 635, - 604, 599, 203, 220, 0, 259, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 196, 198, 206, - 219, 229, 233, 240, 258, 273, 275, 282, 295, 306, - 314, 315, 318, 324, 374, 380, 381, 382, 383, 4017, - 403, 404, 407, 410, 411, 414, 416, 417, 420, 424, - 428, 429, 430, 432, 434, 436, 448, 453, 467, 468, - 469, 470, 471, 474, 475, 480, 481, 482, 483, 484, - 492, 493, 506, 576, 578, 593, 611, 617, 473, 297, - 298, 437, 438, 310, 311, 631, 632, 296, 588, 618, - 586, 630, 612, 431, 372, 0, 0, 375, 278, 301, - 316, 0, 603, 494, 224, 459, 287, 248, 0, 0, - 208, 243, 227, 256, 271, 274, 320, 385, 393, 422, - 427, 293, 268, 241, 452, 238, 477, 509, 510, 511, - 513, 389, 263, 426, 390, 0, 370, 566, 567, 312, - 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, - 0, 267, 0, 0, 0, 0, 360, 264, 0, 0, - 423, 0, 201, 0, 479, 249, 371, 368, 573, 279, - 270, 266, 247, 313, 379, 421, 508, 415, 0, 364, - 0, 0, 489, 394, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, - 245, 321, 200, 406, 490, 283, 0, 0, 0, 0, - 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 235, 0, 0, 242, 0, 0, 0, 345, 354, - 353, 334, 335, 337, 339, 344, 351, 357, 0, 0, - 0, 0, 0, 262, 317, 269, 261, 570, 0, 0, - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 395, 254, 0, 446, 0, 0, - 0, 614, 0, 0, 0, 0, 0, 0, 0, 359, - 0, 326, 195, 222, 0, 0, 405, 454, 466, 0, - 0, 0, 250, 0, 464, 419, 592, 230, 281, 451, - 425, 462, 433, 284, 0, 0, 463, 366, 575, 443, - 589, 615, 616, 260, 399, 601, 512, 609, 633, 223, - 257, 413, 497, 595, 486, 391, 571, 572, 325, 485, - 292, 199, 363, 621, 221, 472, 365, 239, 228, 577, - 598, 286, 449, 628, 210, 507, 587, 236, 476, 0, - 0, 636, 244, 496, 212, 584, 495, 387, 322, 323, - 211, 0, 450, 265, 290, 0, 0, 255, 408, 579, - 580, 253, 637, 225, 608, 217, 0, 607, 401, 574, - 585, 388, 377, 216, 583, 386, 376, 330, 349, 350, - 277, 303, 440, 369, 441, 302, 304, 397, 396, 398, - 204, 596, 0, 205, 0, 491, 597, 638, 445, 209, - 231, 232, 234, 0, 276, 280, 288, 291, 299, 300, - 309, 361, 412, 439, 435, 444, 0, 569, 590, 602, - 613, 619, 620, 622, 623, 624, 625, 626, 629, 627, - 400, 307, 487, 329, 367, 0, 0, 418, 465, 237, - 594, 488, 197, 0, 0, 0, 0, 251, 252, 0, - 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 634, 498, - 504, 499, 500, 501, 502, 503, 0, 505, 0, 0, - 0, 0, 0, 0, 581, 582, 657, 378, 478, 591, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 246, 207, 384, - 392, 568, 308, 213, 214, 215, 514, 515, 516, 517, - 605, 606, 610, 202, 455, 456, 457, 458, 289, 600, - 305, 461, 460, 327, 328, 373, 442, 530, 532, 543, - 547, 549, 551, 557, 560, 531, 533, 544, 548, 550, - 552, 558, 561, 520, 522, 524, 526, 539, 538, 535, - 563, 564, 541, 546, 525, 537, 542, 555, 562, 559, - 519, 523, 527, 536, 554, 553, 534, 545, 556, 540, - 528, 521, 529, 0, 194, 218, 362, 0, 447, 285, - 635, 604, 599, 203, 220, 0, 259, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 196, 198, - 206, 219, 229, 233, 240, 258, 273, 275, 282, 295, - 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, - 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, - 424, 428, 429, 430, 432, 434, 436, 448, 453, 467, - 468, 469, 470, 471, 474, 475, 480, 481, 482, 483, - 484, 492, 493, 506, 576, 578, 593, 611, 617, 473, - 297, 298, 437, 438, 310, 311, 631, 632, 296, 588, - 618, 586, 630, 612, 431, 372, 0, 0, 375, 278, - 301, 316, 0, 603, 494, 224, 459, 287, 248, 0, - 0, 208, 243, 227, 256, 271, 274, 320, 385, 393, - 422, 427, 293, 268, 241, 452, 238, 477, 509, 510, - 511, 513, 389, 263, 426, 390, 0, 370, 566, 567, - 312, 518, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, - 0, 0, 267, 0, 0, 0, 0, 360, 264, 0, - 0, 423, 0, 201, 0, 479, 249, 371, 368, 573, - 279, 270, 266, 247, 313, 379, 421, 508, 415, 0, - 364, 0, 0, 489, 394, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 319, 245, 321, 200, 406, 490, 283, 0, 0, 0, - 0, 0, 939, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 0, 0, 242, 0, 0, 0, 345, - 354, 353, 334, 335, 337, 339, 344, 351, 357, 0, - 0, 0, 0, 0, 262, 317, 269, 261, 570, 0, - 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 395, 254, 0, 446, 0, - 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, - 359, 0, 326, 195, 222, 0, 0, 405, 454, 466, - 0, 0, 0, 250, 0, 464, 419, 592, 230, 281, - 451, 425, 462, 433, 284, 0, 0, 463, 366, 575, - 443, 589, 615, 616, 260, 399, 601, 512, 609, 633, - 223, 257, 413, 497, 595, 486, 391, 571, 572, 325, - 485, 292, 199, 363, 621, 221, 472, 365, 239, 228, - 577, 598, 286, 449, 628, 210, 507, 587, 236, 476, - 0, 0, 636, 244, 496, 212, 584, 495, 387, 322, - 323, 211, 0, 450, 265, 290, 0, 0, 255, 408, - 579, 580, 253, 637, 225, 608, 217, 0, 607, 401, - 574, 585, 388, 377, 216, 583, 386, 376, 330, 349, - 350, 277, 303, 440, 369, 441, 302, 304, 397, 396, - 398, 204, 596, 0, 205, 0, 491, 597, 638, 445, - 209, 231, 232, 234, 0, 276, 280, 288, 291, 299, - 300, 309, 361, 412, 439, 435, 444, 0, 569, 590, - 602, 613, 619, 620, 622, 623, 624, 625, 626, 629, - 627, 400, 307, 487, 329, 367, 0, 0, 418, 465, - 237, 594, 488, 197, 0, 0, 0, 0, 251, 252, - 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 639, 640, 641, 642, 643, 644, 645, 646, 647, - 648, 649, 650, 651, 652, 653, 654, 655, 656, 634, - 498, 504, 499, 500, 501, 502, 503, 0, 505, 0, - 0, 0, 0, 0, 0, 581, 582, 657, 378, 478, - 591, 331, 343, 346, 336, 355, 0, 356, 332, 333, - 338, 340, 341, 342, 347, 348, 352, 358, 246, 207, - 384, 392, 568, 308, 213, 214, 215, 514, 515, 516, - 517, 605, 606, 610, 202, 455, 456, 457, 458, 289, - 600, 305, 461, 460, 327, 328, 373, 442, 530, 532, - 543, 547, 549, 551, 557, 560, 531, 533, 544, 548, - 550, 552, 558, 561, 520, 522, 524, 526, 539, 538, - 535, 563, 564, 541, 546, 525, 537, 542, 555, 562, - 559, 519, 523, 527, 536, 554, 553, 534, 545, 556, - 540, 528, 521, 529, 0, 194, 218, 362, 0, 447, - 285, 635, 604, 599, 203, 220, 0, 259, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, - 198, 206, 219, 229, 233, 240, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 429, 430, 432, 434, 436, 448, 453, - 467, 468, 469, 470, 471, 474, 475, 480, 481, 482, - 483, 484, 492, 493, 506, 576, 578, 593, 611, 617, - 473, 297, 298, 437, 438, 310, 311, 631, 632, 296, - 588, 618, 586, 630, 612, 431, 372, 0, 0, 375, - 278, 301, 316, 0, 603, 494, 224, 459, 287, 248, - 0, 0, 208, 243, 227, 256, 271, 274, 320, 385, - 393, 422, 427, 293, 268, 241, 452, 238, 477, 509, - 510, 511, 513, 389, 263, 426, 390, 0, 370, 566, - 567, 312, 518, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, - 0, 0, 0, 267, 0, 0, 0, 0, 360, 264, - 0, 0, 423, 0, 201, 0, 479, 249, 371, 368, - 573, 279, 270, 266, 247, 313, 379, 421, 508, 415, - 0, 364, 0, 0, 489, 394, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 319, 245, 321, 200, 406, 490, 283, 0, 0, - 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 235, 0, 0, 242, 0, 0, 0, - 345, 354, 353, 334, 335, 337, 339, 344, 351, 357, - 0, 0, 0, 0, 0, 262, 317, 269, 261, 570, - 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 446, - 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, - 0, 359, 0, 326, 195, 222, 0, 0, 405, 454, - 466, 0, 0, 0, 250, 0, 464, 419, 592, 230, - 281, 451, 425, 462, 433, 284, 0, 0, 463, 366, - 575, 443, 589, 615, 616, 260, 399, 601, 512, 609, - 633, 223, 257, 413, 497, 595, 486, 391, 571, 572, - 325, 485, 292, 199, 363, 621, 221, 472, 365, 239, - 228, 577, 598, 286, 449, 628, 210, 507, 587, 236, - 476, 0, 0, 636, 244, 496, 212, 584, 495, 387, - 322, 323, 211, 0, 450, 265, 290, 0, 0, 255, - 408, 579, 580, 253, 637, 225, 608, 217, 0, 607, - 401, 574, 585, 388, 377, 216, 583, 386, 376, 330, - 349, 350, 277, 303, 440, 369, 441, 302, 304, 397, - 396, 398, 204, 596, 0, 205, 0, 491, 597, 638, - 445, 209, 231, 232, 234, 0, 276, 280, 288, 291, - 299, 300, 309, 361, 412, 439, 435, 444, 0, 569, - 590, 602, 613, 619, 620, 622, 623, 624, 625, 626, - 629, 627, 400, 307, 487, 329, 367, 0, 0, 418, - 465, 237, 594, 488, 197, 0, 0, 0, 0, 251, - 252, 0, 565, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 639, 640, 641, 642, 643, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 634, 498, 504, 499, 500, 501, 502, 503, 0, 505, - 0, 0, 0, 0, 0, 0, 581, 582, 657, 378, - 478, 591, 331, 343, 346, 336, 355, 0, 356, 332, - 333, 338, 340, 341, 342, 347, 348, 352, 358, 246, - 207, 384, 392, 568, 308, 213, 214, 215, 514, 515, - 516, 517, 605, 606, 610, 202, 455, 456, 457, 458, - 289, 600, 305, 461, 460, 327, 328, 373, 442, 530, - 532, 543, 547, 549, 551, 557, 560, 531, 533, 544, - 548, 550, 552, 558, 561, 520, 522, 524, 526, 539, - 538, 535, 563, 564, 541, 546, 525, 537, 542, 555, - 562, 559, 519, 523, 527, 536, 554, 553, 534, 545, - 556, 540, 528, 521, 529, 0, 194, 218, 362, 0, - 447, 285, 635, 604, 599, 203, 220, 0, 259, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 196, 198, 206, 219, 229, 233, 240, 258, 273, 275, - 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, - 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, - 417, 420, 424, 428, 429, 430, 432, 434, 436, 448, - 453, 467, 468, 469, 470, 471, 474, 475, 480, 481, - 482, 483, 484, 492, 493, 506, 576, 578, 593, 611, - 617, 473, 297, 298, 437, 438, 310, 311, 631, 632, - 296, 588, 618, 586, 630, 612, 431, 372, 0, 0, - 375, 278, 301, 316, 0, 603, 494, 224, 459, 287, - 248, 0, 0, 208, 243, 227, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 241, 452, 238, 477, - 509, 510, 511, 513, 389, 263, 426, 0, 0, 370, - 566, 567, 312, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 0, 0, 0, + 0, 0, 0, 583, 584, 659, 380, 480, 593, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 248, 209, 386, 394, + 570, 310, 215, 216, 217, 516, 517, 518, 519, 607, + 608, 612, 204, 457, 458, 459, 460, 291, 602, 307, + 463, 462, 329, 330, 375, 444, 532, 534, 545, 549, + 551, 553, 559, 562, 533, 535, 546, 550, 552, 554, + 560, 563, 522, 524, 526, 528, 541, 540, 537, 565, + 566, 543, 548, 527, 539, 544, 557, 564, 561, 521, + 525, 529, 538, 556, 555, 536, 547, 558, 542, 530, + 523, 531, 0, 196, 220, 364, 0, 449, 287, 637, + 606, 601, 205, 222, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 299, + 300, 439, 440, 312, 313, 633, 634, 298, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 0, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 0, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 0, 0, 0, + 1739, 707, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 244, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 252, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 0, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 581, 582, 255, 639, 227, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 351, + 352, 279, 305, 442, 371, 443, 304, 306, 399, 398, + 400, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 199, 0, 0, 0, 0, 253, 254, + 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 0, + 0, 0, 0, 0, 0, 583, 584, 659, 380, 480, + 593, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 248, 209, + 386, 394, 570, 310, 215, 216, 217, 516, 517, 518, + 519, 607, 608, 612, 204, 457, 458, 459, 460, 291, + 602, 307, 463, 462, 329, 330, 375, 444, 532, 534, + 545, 549, 551, 553, 559, 562, 533, 535, 546, 550, + 552, 554, 560, 563, 522, 524, 526, 528, 541, 540, + 537, 565, 566, 543, 548, 527, 539, 544, 557, 564, + 561, 521, 525, 529, 538, 556, 555, 536, 547, 558, + 542, 530, 523, 531, 0, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 299, 300, 439, 440, 312, 313, 633, 634, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 0, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 392, 0, 372, 568, + 569, 314, 520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 203, 0, 481, 251, 373, 370, + 575, 281, 272, 268, 249, 315, 381, 423, 510, 417, + 0, 366, 0, 0, 491, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 247, 323, 202, 408, 492, 285, 0, 0, + 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 244, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 572, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 448, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 197, 224, 0, 0, 407, + 456, 468, 0, 0, 0, 252, 0, 466, 421, 594, + 232, 283, 453, 427, 464, 435, 286, 0, 0, 465, + 368, 577, 445, 591, 617, 618, 262, 401, 603, 514, + 611, 635, 225, 259, 415, 499, 597, 488, 393, 573, + 574, 327, 487, 294, 201, 365, 623, 223, 474, 367, + 241, 230, 579, 600, 288, 451, 630, 212, 509, 589, + 238, 478, 0, 0, 638, 246, 498, 214, 586, 497, + 389, 324, 325, 213, 0, 452, 267, 292, 0, 0, + 257, 410, 581, 582, 255, 639, 227, 610, 219, 0, + 609, 403, 576, 587, 390, 379, 218, 585, 388, 378, + 332, 351, 352, 279, 305, 442, 371, 443, 304, 306, + 399, 398, 400, 206, 598, 0, 207, 0, 493, 599, + 640, 447, 211, 233, 234, 236, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 441, 437, 446, 0, + 571, 592, 604, 615, 621, 622, 624, 625, 626, 627, + 628, 631, 629, 402, 309, 489, 331, 369, 0, 0, + 420, 467, 239, 596, 490, 199, 0, 0, 0, 0, + 253, 254, 0, 567, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 636, 500, 506, 501, 502, 503, 504, 505, 0, + 507, 0, 0, 0, 0, 0, 0, 583, 584, 659, + 380, 480, 593, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 248, 209, 386, 394, 570, 310, 215, 216, 217, 516, + 517, 518, 519, 607, 608, 612, 204, 457, 458, 459, + 460, 291, 602, 307, 463, 462, 329, 330, 375, 444, + 532, 534, 545, 549, 551, 553, 559, 562, 533, 535, + 546, 550, 552, 554, 560, 563, 522, 524, 526, 528, + 541, 540, 537, 565, 566, 543, 548, 527, 539, 544, + 557, 564, 561, 521, 525, 529, 538, 556, 555, 536, + 547, 558, 542, 530, 523, 531, 0, 196, 220, 364, + 2030, 449, 287, 637, 606, 601, 205, 222, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 198, 200, 208, 221, 231, 235, 242, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 431, 432, 434, 436, 438, + 450, 455, 469, 470, 471, 472, 473, 476, 477, 482, + 483, 484, 485, 486, 494, 495, 508, 578, 580, 595, + 613, 619, 475, 299, 300, 439, 440, 312, 313, 633, + 634, 298, 590, 620, 588, 632, 614, 433, 374, 0, + 0, 377, 280, 303, 318, 0, 605, 496, 226, 461, + 289, 250, 0, 0, 210, 245, 229, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 243, 454, 240, + 479, 511, 512, 513, 515, 391, 265, 428, 392, 0, + 372, 568, 569, 314, 520, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 203, 0, 481, 251, + 373, 370, 575, 281, 272, 268, 249, 315, 381, 423, + 510, 417, 0, 366, 0, 0, 491, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 247, 323, 202, 408, 492, 285, + 0, 0, 0, 0, 2021, 707, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 448, 0, 0, 0, 616, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 197, 224, 0, + 0, 407, 456, 468, 0, 0, 0, 252, 0, 466, + 421, 594, 232, 283, 453, 427, 464, 435, 286, 0, + 0, 465, 368, 577, 445, 591, 617, 618, 262, 401, + 603, 514, 611, 635, 225, 259, 415, 499, 597, 488, + 393, 573, 574, 327, 487, 294, 201, 365, 623, 223, + 474, 367, 241, 230, 579, 600, 288, 451, 630, 212, + 509, 589, 238, 478, 0, 0, 638, 246, 498, 214, + 586, 497, 389, 324, 325, 213, 0, 452, 267, 292, + 0, 0, 257, 410, 581, 582, 255, 639, 227, 610, + 219, 0, 609, 403, 576, 587, 390, 379, 218, 585, + 388, 378, 332, 351, 352, 279, 305, 442, 371, 443, + 304, 306, 399, 398, 400, 206, 598, 0, 207, 0, + 493, 599, 640, 447, 211, 233, 234, 236, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 441, 437, + 446, 0, 571, 592, 604, 615, 621, 622, 624, 625, + 626, 627, 628, 631, 629, 402, 309, 489, 331, 369, + 0, 0, 420, 467, 239, 596, 490, 199, 0, 0, + 0, 0, 253, 254, 0, 567, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, + 656, 657, 658, 636, 500, 506, 501, 502, 503, 504, + 505, 0, 507, 0, 0, 0, 0, 0, 0, 583, + 584, 659, 380, 480, 593, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 248, 209, 386, 394, 570, 310, 215, 216, + 217, 516, 517, 518, 519, 607, 608, 612, 204, 457, + 458, 459, 460, 291, 602, 307, 463, 462, 329, 330, + 375, 444, 532, 534, 545, 549, 551, 553, 559, 562, + 533, 535, 546, 550, 552, 554, 560, 563, 522, 524, + 526, 528, 541, 540, 537, 565, 566, 543, 548, 527, + 539, 544, 557, 564, 561, 521, 525, 529, 538, 556, + 555, 536, 547, 558, 542, 530, 523, 531, 0, 196, + 220, 364, 0, 449, 287, 637, 606, 601, 205, 222, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 198, 200, 208, 221, 231, 235, 242, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 431, 432, 434, + 436, 438, 450, 455, 469, 470, 471, 472, 473, 476, + 477, 482, 483, 484, 485, 486, 494, 495, 508, 578, + 580, 595, 613, 619, 475, 299, 300, 439, 440, 312, + 313, 633, 634, 298, 590, 620, 588, 632, 614, 433, + 374, 0, 0, 377, 280, 303, 318, 0, 605, 496, + 226, 461, 289, 250, 0, 0, 210, 245, 229, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 243, + 454, 240, 479, 511, 512, 513, 515, 391, 265, 428, + 392, 0, 372, 568, 569, 314, 520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 1885, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 203, 0, + 481, 251, 373, 370, 575, 281, 272, 268, 249, 315, + 381, 423, 510, 417, 0, 366, 0, 0, 491, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 247, 323, 202, 408, + 492, 285, 0, 0, 0, 0, 0, 707, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 244, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 572, 0, 0, 0, 0, 0, 0, + 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 448, 0, 0, 0, 616, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 197, + 224, 0, 0, 407, 456, 468, 0, 0, 0, 252, + 0, 466, 421, 594, 232, 283, 453, 427, 464, 435, + 286, 0, 0, 465, 368, 577, 445, 591, 617, 618, + 262, 401, 603, 514, 611, 635, 225, 259, 415, 499, + 597, 488, 393, 573, 574, 327, 487, 294, 201, 365, + 623, 223, 474, 367, 241, 230, 579, 600, 288, 451, + 630, 212, 509, 589, 238, 478, 0, 0, 638, 246, + 498, 214, 586, 497, 389, 324, 325, 213, 0, 452, + 267, 292, 0, 0, 257, 410, 581, 582, 255, 639, + 227, 610, 219, 0, 609, 403, 576, 587, 390, 379, + 218, 585, 388, 378, 332, 351, 352, 279, 305, 442, + 371, 443, 304, 306, 399, 398, 400, 206, 598, 0, + 207, 0, 493, 599, 640, 447, 211, 233, 234, 236, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 441, 437, 446, 0, 571, 592, 604, 615, 621, 622, + 624, 625, 626, 627, 628, 631, 629, 402, 309, 489, + 331, 369, 0, 0, 420, 467, 239, 596, 490, 199, + 0, 0, 0, 0, 253, 254, 0, 567, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, + 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 656, 657, 658, 636, 500, 506, 501, 502, + 503, 504, 505, 0, 507, 0, 0, 0, 0, 0, + 0, 583, 584, 659, 380, 480, 593, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 248, 209, 386, 394, 570, 310, + 215, 216, 217, 516, 517, 518, 519, 607, 608, 612, + 204, 457, 458, 459, 460, 291, 602, 307, 463, 462, + 329, 330, 375, 444, 532, 534, 545, 549, 551, 553, + 559, 562, 533, 535, 546, 550, 552, 554, 560, 563, + 522, 524, 526, 528, 541, 540, 537, 565, 566, 543, + 548, 527, 539, 544, 557, 564, 561, 521, 525, 529, + 538, 556, 555, 536, 547, 558, 542, 530, 523, 531, + 0, 196, 220, 364, 0, 449, 287, 637, 606, 601, + 205, 222, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 200, 208, 221, 231, + 235, 242, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 431, + 432, 434, 436, 438, 450, 455, 469, 470, 471, 472, + 473, 476, 477, 482, 483, 484, 485, 486, 494, 495, + 508, 578, 580, 595, 613, 619, 475, 299, 300, 439, + 440, 312, 313, 633, 634, 298, 590, 620, 588, 632, + 614, 433, 374, 0, 0, 377, 280, 303, 318, 0, + 605, 496, 226, 461, 289, 250, 0, 0, 210, 245, + 229, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 243, 454, 240, 479, 511, 512, 513, 515, 391, + 265, 428, 392, 0, 372, 568, 569, 314, 520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 1883, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 0, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 0, 0, 0, 0, 707, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 244, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 448, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 197, 224, 0, 0, 407, 456, 468, 0, 0, + 0, 252, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 581, 582, + 255, 639, 227, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 351, 352, 279, + 305, 442, 371, 443, 304, 306, 399, 398, 400, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 199, 0, 0, 0, 0, 253, 254, 0, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 0, 0, 0, + 0, 0, 0, 583, 584, 659, 380, 480, 593, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 248, 209, 386, 394, + 570, 310, 215, 216, 217, 516, 517, 518, 519, 607, + 608, 612, 204, 457, 458, 459, 460, 291, 602, 307, + 463, 462, 329, 330, 375, 444, 532, 534, 545, 549, + 551, 553, 559, 562, 533, 535, 546, 550, 552, 554, + 560, 563, 522, 524, 526, 528, 541, 540, 537, 565, + 566, 543, 548, 527, 539, 544, 557, 564, 561, 521, + 525, 529, 538, 556, 555, 536, 547, 558, 542, 530, + 523, 531, 0, 196, 220, 364, 0, 449, 287, 637, + 606, 601, 205, 222, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 299, + 300, 439, 440, 312, 313, 633, 634, 298, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 0, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1881, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 0, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 0, 0, 0, + 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 244, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 252, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 0, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 581, 582, 255, 639, 227, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 351, + 352, 279, 305, 442, 371, 443, 304, 306, 399, 398, + 400, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 199, 0, 0, 0, 0, 253, 254, + 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 0, + 0, 0, 0, 0, 0, 583, 584, 659, 380, 480, + 593, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 248, 209, + 386, 394, 570, 310, 215, 216, 217, 516, 517, 518, + 519, 607, 608, 612, 204, 457, 458, 459, 460, 291, + 602, 307, 463, 462, 329, 330, 375, 444, 532, 534, + 545, 549, 551, 553, 559, 562, 533, 535, 546, 550, + 552, 554, 560, 563, 522, 524, 526, 528, 541, 540, + 537, 565, 566, 543, 548, 527, 539, 544, 557, 564, + 561, 521, 525, 529, 538, 556, 555, 536, 547, 558, + 542, 530, 523, 531, 0, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 299, 300, 439, 440, 312, 313, 633, 634, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 0, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 392, 0, 372, 568, + 569, 314, 520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 1879, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 203, 0, 481, 251, 373, 370, + 575, 281, 272, 268, 249, 315, 381, 423, 510, 417, + 0, 366, 0, 0, 491, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 247, 323, 202, 408, 492, 285, 0, 0, + 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 244, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 572, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 448, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 197, 224, 0, 0, 407, + 456, 468, 0, 0, 0, 252, 0, 466, 421, 594, + 232, 283, 453, 427, 464, 435, 286, 0, 0, 465, + 368, 577, 445, 591, 617, 618, 262, 401, 603, 514, + 611, 635, 225, 259, 415, 499, 597, 488, 393, 573, + 574, 327, 487, 294, 201, 365, 623, 223, 474, 367, + 241, 230, 579, 600, 288, 451, 630, 212, 509, 589, + 238, 478, 0, 0, 638, 246, 498, 214, 586, 497, + 389, 324, 325, 213, 0, 452, 267, 292, 0, 0, + 257, 410, 581, 582, 255, 639, 227, 610, 219, 0, + 609, 403, 576, 587, 390, 379, 218, 585, 388, 378, + 332, 351, 352, 279, 305, 442, 371, 443, 304, 306, + 399, 398, 400, 206, 598, 0, 207, 0, 493, 599, + 640, 447, 211, 233, 234, 236, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 441, 437, 446, 0, + 571, 592, 604, 615, 621, 622, 624, 625, 626, 627, + 628, 631, 629, 402, 309, 489, 331, 369, 0, 0, + 420, 467, 239, 596, 490, 199, 0, 0, 0, 0, + 253, 254, 0, 567, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 636, 500, 506, 501, 502, 503, 504, 505, 0, + 507, 0, 0, 0, 0, 0, 0, 583, 584, 659, + 380, 480, 593, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 248, 209, 386, 394, 570, 310, 215, 216, 217, 516, + 517, 518, 519, 607, 608, 612, 204, 457, 458, 459, + 460, 291, 602, 307, 463, 462, 329, 330, 375, 444, + 532, 534, 545, 549, 551, 553, 559, 562, 533, 535, + 546, 550, 552, 554, 560, 563, 522, 524, 526, 528, + 541, 540, 537, 565, 566, 543, 548, 527, 539, 544, + 557, 564, 561, 521, 525, 529, 538, 556, 555, 536, + 547, 558, 542, 530, 523, 531, 0, 196, 220, 364, + 0, 449, 287, 637, 606, 601, 205, 222, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 198, 200, 208, 221, 231, 235, 242, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 431, 432, 434, 436, 438, + 450, 455, 469, 470, 471, 472, 473, 476, 477, 482, + 483, 484, 485, 486, 494, 495, 508, 578, 580, 595, + 613, 619, 475, 299, 300, 439, 440, 312, 313, 633, + 634, 298, 590, 620, 588, 632, 614, 433, 374, 0, + 0, 377, 280, 303, 318, 0, 605, 496, 226, 461, + 289, 250, 0, 0, 210, 245, 229, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 243, 454, 240, + 479, 511, 512, 513, 515, 391, 265, 428, 392, 0, + 372, 568, 569, 314, 520, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 1877, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 203, 0, 481, 251, + 373, 370, 575, 281, 272, 268, 249, 315, 381, 423, + 510, 417, 0, 366, 0, 0, 491, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 247, 323, 202, 408, 492, 285, + 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 448, 0, 0, 0, 616, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 197, 224, 0, + 0, 407, 456, 468, 0, 0, 0, 252, 0, 466, + 421, 594, 232, 283, 453, 427, 464, 435, 286, 0, + 0, 465, 368, 577, 445, 591, 617, 618, 262, 401, + 603, 514, 611, 635, 225, 259, 415, 499, 597, 488, + 393, 573, 574, 327, 487, 294, 201, 365, 623, 223, + 474, 367, 241, 230, 579, 600, 288, 451, 630, 212, + 509, 589, 238, 478, 0, 0, 638, 246, 498, 214, + 586, 497, 389, 324, 325, 213, 0, 452, 267, 292, + 0, 0, 257, 410, 581, 582, 255, 639, 227, 610, + 219, 0, 609, 403, 576, 587, 390, 379, 218, 585, + 388, 378, 332, 351, 352, 279, 305, 442, 371, 443, + 304, 306, 399, 398, 400, 206, 598, 0, 207, 0, + 493, 599, 640, 447, 211, 233, 234, 236, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 441, 437, + 446, 0, 571, 592, 604, 615, 621, 622, 624, 625, + 626, 627, 628, 631, 629, 402, 309, 489, 331, 369, + 0, 0, 420, 467, 239, 596, 490, 199, 0, 0, + 0, 0, 253, 254, 0, 567, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, + 656, 657, 658, 636, 500, 506, 501, 502, 503, 504, + 505, 0, 507, 0, 0, 0, 0, 0, 0, 583, + 584, 659, 380, 480, 593, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 248, 209, 386, 394, 570, 310, 215, 216, + 217, 516, 517, 518, 519, 607, 608, 612, 204, 457, + 458, 459, 460, 291, 602, 307, 463, 462, 329, 330, + 375, 444, 532, 534, 545, 549, 551, 553, 559, 562, + 533, 535, 546, 550, 552, 554, 560, 563, 522, 524, + 526, 528, 541, 540, 537, 565, 566, 543, 548, 527, + 539, 544, 557, 564, 561, 521, 525, 529, 538, 556, + 555, 536, 547, 558, 542, 530, 523, 531, 0, 196, + 220, 364, 0, 449, 287, 637, 606, 601, 205, 222, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 198, 200, 208, 221, 231, 235, 242, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 431, 432, 434, + 436, 438, 450, 455, 469, 470, 471, 472, 473, 476, + 477, 482, 483, 484, 485, 486, 494, 495, 508, 578, + 580, 595, 613, 619, 475, 299, 300, 439, 440, 312, + 313, 633, 634, 298, 590, 620, 588, 632, 614, 433, + 374, 0, 0, 377, 280, 303, 318, 0, 605, 496, + 226, 461, 289, 250, 0, 0, 210, 245, 229, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 243, + 454, 240, 479, 511, 512, 513, 515, 391, 265, 428, + 392, 0, 372, 568, 569, 314, 520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 1873, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 203, 0, + 481, 251, 373, 370, 575, 281, 272, 268, 249, 315, + 381, 423, 510, 417, 0, 366, 0, 0, 491, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 247, 323, 202, 408, + 492, 285, 0, 0, 0, 0, 0, 707, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 244, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 572, 0, 0, 0, 0, 0, 0, + 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 448, 0, 0, 0, 616, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 197, + 224, 0, 0, 407, 456, 468, 0, 0, 0, 252, + 0, 466, 421, 594, 232, 283, 453, 427, 464, 435, + 286, 0, 0, 465, 368, 577, 445, 591, 617, 618, + 262, 401, 603, 514, 611, 635, 225, 259, 415, 499, + 597, 488, 393, 573, 574, 327, 487, 294, 201, 365, + 623, 223, 474, 367, 241, 230, 579, 600, 288, 451, + 630, 212, 509, 589, 238, 478, 0, 0, 638, 246, + 498, 214, 586, 497, 389, 324, 325, 213, 0, 452, + 267, 292, 0, 0, 257, 410, 581, 582, 255, 639, + 227, 610, 219, 0, 609, 403, 576, 587, 390, 379, + 218, 585, 388, 378, 332, 351, 352, 279, 305, 442, + 371, 443, 304, 306, 399, 398, 400, 206, 598, 0, + 207, 0, 493, 599, 640, 447, 211, 233, 234, 236, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 441, 437, 446, 0, 571, 592, 604, 615, 621, 622, + 624, 625, 626, 627, 628, 631, 629, 402, 309, 489, + 331, 369, 0, 0, 420, 467, 239, 596, 490, 199, + 0, 0, 0, 0, 253, 254, 0, 567, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, + 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 656, 657, 658, 636, 500, 506, 501, 502, + 503, 504, 505, 0, 507, 0, 0, 0, 0, 0, + 0, 583, 584, 659, 380, 480, 593, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 248, 209, 386, 394, 570, 310, + 215, 216, 217, 516, 517, 518, 519, 607, 608, 612, + 204, 457, 458, 459, 460, 291, 602, 307, 463, 462, + 329, 330, 375, 444, 532, 534, 545, 549, 551, 553, + 559, 562, 533, 535, 546, 550, 552, 554, 560, 563, + 522, 524, 526, 528, 541, 540, 537, 565, 566, 543, + 548, 527, 539, 544, 557, 564, 561, 521, 525, 529, + 538, 556, 555, 536, 547, 558, 542, 530, 523, 531, + 0, 196, 220, 364, 0, 449, 287, 637, 606, 601, + 205, 222, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 200, 208, 221, 231, + 235, 242, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 431, + 432, 434, 436, 438, 450, 455, 469, 470, 471, 472, + 473, 476, 477, 482, 483, 484, 485, 486, 494, 495, + 508, 578, 580, 595, 613, 619, 475, 299, 300, 439, + 440, 312, 313, 633, 634, 298, 590, 620, 588, 632, + 614, 433, 374, 0, 0, 377, 280, 303, 318, 0, + 605, 496, 226, 461, 289, 250, 0, 0, 210, 245, + 229, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 243, 454, 240, 479, 511, 512, 513, 515, 391, + 265, 428, 392, 0, 372, 568, 569, 314, 520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 1871, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 0, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 0, 0, 0, 0, 707, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 244, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 448, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 197, 224, 0, 0, 407, 456, 468, 0, 0, + 0, 252, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 581, 582, + 255, 639, 227, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 351, 352, 279, + 305, 442, 371, 443, 304, 306, 399, 398, 400, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 199, 0, 0, 0, 0, 253, 254, 0, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 0, 0, 0, + 0, 0, 0, 583, 584, 659, 380, 480, 593, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 248, 209, 386, 394, + 570, 310, 215, 216, 217, 516, 517, 518, 519, 607, + 608, 612, 204, 457, 458, 459, 460, 291, 602, 307, + 463, 462, 329, 330, 375, 444, 532, 534, 545, 549, + 551, 553, 559, 562, 533, 535, 546, 550, 552, 554, + 560, 563, 522, 524, 526, 528, 541, 540, 537, 565, + 566, 543, 548, 527, 539, 544, 557, 564, 561, 521, + 525, 529, 538, 556, 555, 536, 547, 558, 542, 530, + 523, 531, 0, 196, 220, 364, 0, 449, 287, 637, + 606, 601, 205, 222, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 299, + 300, 439, 440, 312, 313, 633, 634, 298, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 0, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1869, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 0, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 0, 0, 0, + 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 244, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 252, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 0, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 581, 582, 255, 639, 227, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 351, + 352, 279, 305, 442, 371, 443, 304, 306, 399, 398, + 400, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 199, 0, 0, 0, 0, 253, 254, + 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 0, + 0, 0, 0, 0, 0, 583, 584, 659, 380, 480, + 593, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 248, 209, + 386, 394, 570, 310, 215, 216, 217, 516, 517, 518, + 519, 607, 608, 612, 204, 457, 458, 459, 460, 291, + 602, 307, 463, 462, 329, 330, 375, 444, 532, 534, + 545, 549, 551, 553, 559, 562, 533, 535, 546, 550, + 552, 554, 560, 563, 522, 524, 526, 528, 541, 540, + 537, 565, 566, 543, 548, 527, 539, 544, 557, 564, + 561, 521, 525, 529, 538, 556, 555, 536, 547, 558, + 542, 530, 523, 531, 0, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 299, 300, 439, 440, 312, 313, 633, 634, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 0, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 392, 0, 372, 568, + 569, 314, 520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 203, 0, 481, 251, 373, 370, + 575, 281, 272, 268, 249, 315, 381, 423, 510, 417, + 0, 366, 0, 0, 491, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 247, 323, 202, 408, 492, 285, 0, 1844, + 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 244, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 572, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 448, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 197, 224, 0, 0, 407, + 456, 468, 0, 0, 0, 252, 0, 466, 421, 594, + 232, 283, 453, 427, 464, 435, 286, 0, 0, 465, + 368, 577, 445, 591, 617, 618, 262, 401, 603, 514, + 611, 635, 225, 259, 415, 499, 597, 488, 393, 573, + 574, 327, 487, 294, 201, 365, 623, 223, 474, 367, + 241, 230, 579, 600, 288, 451, 630, 212, 509, 589, + 238, 478, 0, 0, 638, 246, 498, 214, 586, 497, + 389, 324, 325, 213, 0, 452, 267, 292, 0, 0, + 257, 410, 581, 582, 255, 639, 227, 610, 219, 0, + 609, 403, 576, 587, 390, 379, 218, 585, 388, 378, + 332, 351, 352, 279, 305, 442, 371, 443, 304, 306, + 399, 398, 400, 206, 598, 0, 207, 0, 493, 599, + 640, 447, 211, 233, 234, 236, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 441, 437, 446, 0, + 571, 592, 604, 615, 621, 622, 624, 625, 626, 627, + 628, 631, 629, 402, 309, 489, 331, 369, 0, 0, + 420, 467, 239, 596, 490, 199, 0, 0, 0, 0, + 253, 254, 0, 567, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 636, 500, 506, 501, 502, 503, 504, 505, 0, + 507, 0, 0, 0, 0, 0, 0, 583, 584, 659, + 380, 480, 593, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 248, 209, 386, 394, 570, 310, 215, 216, 217, 516, + 517, 518, 519, 607, 608, 612, 204, 457, 458, 459, + 460, 291, 602, 307, 463, 462, 329, 330, 375, 444, + 532, 534, 545, 549, 551, 553, 559, 562, 533, 535, + 546, 550, 552, 554, 560, 563, 522, 524, 526, 528, + 541, 540, 537, 565, 566, 543, 548, 527, 539, 544, + 557, 564, 561, 521, 525, 529, 538, 556, 555, 536, + 547, 558, 542, 530, 523, 531, 0, 196, 220, 364, + 0, 449, 287, 637, 606, 601, 205, 222, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 198, 200, 208, 221, 231, 235, 242, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 431, 432, 434, 436, 438, + 450, 455, 469, 470, 471, 472, 473, 476, 477, 482, + 483, 484, 485, 486, 494, 495, 508, 578, 580, 595, + 613, 619, 475, 299, 300, 439, 440, 312, 313, 633, + 634, 298, 590, 620, 588, 632, 614, 433, 374, 0, + 0, 377, 280, 303, 318, 0, 605, 496, 226, 461, + 289, 250, 0, 0, 210, 245, 229, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 243, 454, 240, + 479, 511, 512, 513, 515, 391, 265, 428, 392, 0, + 372, 568, 569, 314, 520, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 1743, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 203, 0, 481, 251, + 373, 370, 575, 281, 272, 268, 249, 315, 381, 423, + 510, 417, 0, 366, 0, 0, 491, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 247, 323, 202, 408, 492, 285, + 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 448, 0, 0, 0, 616, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 197, 224, 0, + 0, 407, 456, 468, 0, 0, 0, 252, 0, 466, + 421, 594, 232, 283, 453, 427, 464, 435, 286, 0, + 0, 465, 368, 577, 445, 591, 617, 618, 262, 401, + 603, 514, 611, 635, 225, 259, 415, 499, 597, 488, + 393, 573, 574, 327, 487, 294, 201, 365, 623, 223, + 474, 367, 241, 230, 579, 600, 288, 451, 630, 212, + 509, 589, 238, 478, 0, 0, 638, 246, 498, 214, + 586, 497, 389, 324, 325, 213, 0, 452, 267, 292, + 0, 0, 257, 410, 581, 582, 255, 639, 227, 610, + 219, 0, 609, 403, 576, 587, 390, 379, 218, 585, + 388, 378, 332, 351, 352, 279, 305, 442, 371, 443, + 304, 306, 399, 398, 400, 206, 598, 0, 207, 0, + 493, 599, 640, 447, 211, 233, 234, 236, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 441, 437, + 446, 0, 571, 592, 604, 615, 621, 622, 624, 625, + 626, 627, 628, 631, 629, 402, 309, 489, 331, 369, + 0, 0, 420, 467, 239, 596, 490, 199, 0, 0, + 0, 0, 253, 254, 0, 567, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, + 656, 657, 658, 636, 500, 506, 501, 502, 503, 504, + 505, 0, 507, 0, 0, 0, 0, 0, 0, 583, + 584, 659, 380, 480, 593, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 248, 209, 386, 394, 570, 310, 215, 216, + 217, 516, 517, 518, 519, 607, 608, 612, 204, 457, + 458, 459, 460, 291, 602, 307, 463, 462, 329, 330, + 375, 444, 532, 534, 545, 549, 551, 553, 559, 562, + 533, 535, 546, 550, 552, 554, 560, 563, 522, 524, + 526, 528, 541, 540, 537, 565, 566, 543, 548, 527, + 539, 544, 557, 564, 561, 521, 525, 529, 538, 556, + 555, 536, 547, 558, 542, 530, 523, 531, 0, 196, + 220, 364, 0, 449, 287, 637, 606, 601, 205, 222, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 198, 200, 208, 221, 231, 235, 242, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 431, 432, 434, + 436, 438, 450, 455, 469, 470, 471, 472, 473, 476, + 477, 482, 483, 484, 485, 486, 494, 495, 508, 578, + 580, 595, 613, 619, 475, 299, 300, 439, 440, 312, + 313, 633, 634, 298, 590, 620, 588, 632, 614, 433, + 374, 0, 0, 377, 280, 303, 318, 0, 605, 496, + 226, 461, 289, 250, 0, 0, 210, 245, 229, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 243, + 454, 240, 479, 511, 512, 513, 515, 391, 265, 428, + 392, 0, 372, 568, 569, 314, 520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 203, 0, + 481, 251, 373, 370, 575, 281, 272, 268, 249, 315, + 381, 423, 510, 417, 0, 366, 0, 0, 491, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 247, 323, 202, 408, + 492, 285, 0, 95, 0, 0, 0, 941, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 244, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 572, 0, 0, 0, 0, 0, 0, + 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 448, 0, 0, 0, 616, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 197, + 224, 0, 0, 407, 456, 468, 0, 0, 0, 252, + 0, 466, 421, 594, 232, 283, 453, 427, 464, 435, + 286, 0, 0, 465, 368, 577, 445, 591, 617, 618, + 262, 401, 603, 514, 611, 635, 225, 259, 415, 499, + 597, 488, 393, 573, 574, 327, 487, 294, 201, 365, + 623, 223, 474, 367, 241, 230, 579, 600, 288, 451, + 630, 212, 509, 589, 238, 478, 0, 0, 638, 246, + 498, 214, 586, 497, 389, 324, 325, 213, 0, 452, + 267, 292, 0, 0, 257, 410, 581, 582, 255, 639, + 227, 610, 219, 0, 609, 403, 576, 587, 390, 379, + 218, 585, 388, 378, 332, 351, 352, 279, 305, 442, + 371, 443, 304, 306, 399, 398, 400, 206, 598, 0, + 207, 0, 493, 599, 640, 447, 211, 233, 234, 236, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 441, 437, 446, 0, 571, 592, 604, 615, 621, 622, + 624, 625, 626, 627, 628, 631, 629, 402, 309, 489, + 331, 369, 0, 0, 420, 467, 239, 596, 490, 199, + 0, 0, 0, 0, 253, 254, 0, 567, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, + 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 656, 657, 658, 636, 500, 506, 501, 502, + 503, 504, 505, 0, 507, 0, 0, 0, 0, 0, + 0, 583, 584, 659, 380, 480, 593, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 248, 209, 386, 394, 570, 310, + 215, 216, 217, 516, 517, 518, 519, 607, 608, 612, + 204, 457, 458, 459, 460, 291, 602, 307, 463, 462, + 329, 330, 375, 444, 532, 534, 545, 549, 551, 553, + 559, 562, 533, 535, 546, 550, 552, 554, 560, 563, + 522, 524, 526, 528, 541, 540, 537, 565, 566, 543, + 548, 527, 539, 544, 557, 564, 561, 521, 525, 529, + 538, 556, 555, 536, 547, 558, 542, 530, 523, 531, + 0, 196, 220, 364, 0, 449, 287, 637, 606, 601, + 205, 222, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 200, 208, 221, 231, + 235, 242, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 431, + 432, 434, 436, 438, 450, 455, 469, 470, 471, 472, + 473, 476, 477, 482, 483, 484, 485, 486, 494, 495, + 508, 578, 580, 595, 613, 619, 475, 299, 300, 439, + 440, 312, 313, 633, 634, 298, 590, 620, 588, 632, + 614, 433, 374, 0, 0, 377, 280, 303, 318, 0, + 605, 496, 226, 461, 289, 250, 0, 0, 210, 245, + 229, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 243, 454, 240, 479, 511, 512, 513, 515, 391, + 265, 428, 392, 0, 372, 568, 569, 314, 520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 0, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 0, 0, 0, 0, 194, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 244, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1430, + 0, 296, 0, 397, 256, 0, 448, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 197, 224, 0, 0, 407, 456, 468, 0, 0, + 0, 252, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 581, 582, + 255, 639, 227, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 351, 352, 279, + 305, 442, 371, 443, 304, 306, 399, 398, 400, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 199, 0, 0, 0, 0, 253, 254, 0, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 0, 0, 0, + 0, 0, 0, 583, 584, 659, 380, 480, 593, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 248, 209, 386, 394, + 570, 310, 215, 216, 217, 516, 517, 518, 519, 607, + 608, 612, 204, 457, 458, 459, 460, 291, 602, 307, + 463, 462, 329, 330, 375, 444, 532, 534, 545, 549, + 551, 553, 559, 562, 533, 535, 546, 550, 552, 554, + 560, 563, 522, 524, 526, 528, 541, 540, 537, 565, + 566, 543, 548, 527, 539, 544, 557, 564, 561, 521, + 525, 529, 538, 556, 555, 536, 547, 558, 542, 530, + 523, 531, 0, 196, 220, 364, 0, 449, 287, 637, + 606, 601, 205, 222, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 299, + 300, 439, 440, 312, 313, 633, 634, 1429, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 0, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 0, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 0, 0, 0, + 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 244, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 252, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 0, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 581, 582, 255, 639, 227, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 351, + 352, 279, 305, 442, 371, 443, 304, 306, 399, 398, + 400, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 199, 0, 0, 0, 0, 253, 254, + 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 0, + 0, 0, 0, 0, 0, 583, 584, 659, 380, 480, + 593, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 248, 209, + 386, 394, 570, 310, 215, 216, 217, 516, 517, 518, + 519, 607, 608, 612, 204, 457, 458, 459, 460, 291, + 602, 307, 463, 462, 329, 330, 375, 444, 532, 534, + 545, 549, 551, 553, 559, 562, 533, 535, 546, 550, + 552, 554, 560, 563, 522, 524, 526, 528, 541, 540, + 537, 565, 566, 543, 548, 527, 539, 544, 557, 564, + 561, 521, 525, 529, 538, 556, 555, 536, 547, 558, + 542, 530, 523, 531, 0, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1030, 0, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 299, 300, 439, 440, 312, 313, 633, 634, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 0, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 392, 0, 372, 568, + 569, 314, 520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 203, 0, 481, 251, 373, 370, + 575, 281, 272, 268, 249, 315, 381, 423, 510, 417, + 0, 366, 0, 0, 491, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 247, 323, 202, 408, 492, 285, 0, 0, + 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 244, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 572, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 448, 0, 662, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 197, 224, 0, 0, 407, + 456, 468, 0, 0, 0, 252, 0, 466, 421, 594, + 232, 283, 453, 427, 464, 435, 286, 0, 0, 465, + 368, 577, 445, 591, 617, 618, 262, 401, 603, 514, + 611, 635, 225, 259, 415, 499, 597, 488, 393, 573, + 574, 327, 487, 294, 201, 365, 623, 223, 474, 367, + 241, 230, 579, 600, 288, 451, 630, 212, 509, 589, + 238, 478, 0, 0, 638, 246, 498, 214, 586, 497, + 389, 324, 325, 213, 0, 452, 267, 292, 0, 0, + 257, 410, 581, 582, 255, 639, 227, 610, 219, 0, + 609, 403, 576, 587, 390, 379, 218, 585, 388, 378, + 332, 351, 352, 279, 305, 442, 371, 443, 304, 306, + 399, 398, 400, 206, 598, 0, 207, 0, 493, 599, + 640, 447, 211, 233, 234, 236, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 441, 437, 446, 0, + 571, 592, 604, 615, 621, 622, 624, 625, 626, 627, + 628, 631, 629, 402, 309, 489, 331, 369, 0, 0, + 420, 467, 239, 596, 490, 199, 0, 0, 0, 0, + 253, 254, 0, 567, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 636, 500, 506, 501, 502, 503, 504, 505, 0, + 507, 0, 0, 0, 0, 0, 0, 583, 584, 659, + 380, 480, 593, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 248, 209, 386, 394, 570, 310, 215, 216, 217, 516, + 517, 518, 519, 607, 608, 612, 204, 457, 458, 459, + 460, 291, 602, 307, 463, 462, 329, 330, 375, 444, + 532, 534, 545, 549, 551, 553, 559, 562, 533, 535, + 546, 550, 552, 554, 560, 563, 522, 524, 526, 528, + 541, 540, 537, 565, 566, 543, 548, 527, 539, 544, + 557, 564, 561, 521, 525, 529, 538, 556, 555, 536, + 547, 558, 542, 530, 523, 531, 0, 196, 220, 364, + 0, 449, 287, 637, 606, 601, 205, 222, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 198, 200, 208, 221, 231, 235, 242, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 431, 432, 434, 436, 438, + 450, 455, 469, 470, 471, 472, 473, 476, 477, 482, + 483, 484, 485, 486, 494, 495, 508, 578, 580, 595, + 613, 619, 475, 299, 300, 439, 440, 312, 313, 633, + 634, 298, 590, 620, 588, 632, 614, 433, 374, 0, + 0, 377, 280, 303, 318, 0, 605, 496, 226, 461, + 289, 250, 0, 0, 210, 245, 229, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 243, 454, 240, + 479, 511, 512, 513, 515, 391, 265, 428, 392, 0, + 372, 568, 569, 314, 520, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 203, 0, 481, 251, + 373, 370, 575, 281, 272, 268, 249, 315, 381, 423, + 510, 417, 0, 366, 0, 0, 491, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 247, 323, 202, 408, 492, 285, + 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 448, 0, 0, 0, 616, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 197, 224, 0, + 0, 407, 456, 468, 0, 0, 0, 252, 0, 466, + 421, 594, 232, 283, 453, 427, 464, 435, 286, 0, + 0, 465, 368, 577, 445, 591, 617, 618, 262, 401, + 603, 514, 611, 635, 225, 259, 415, 499, 597, 488, + 393, 573, 574, 327, 487, 294, 201, 365, 623, 223, + 474, 367, 241, 230, 579, 600, 288, 451, 630, 212, + 509, 589, 238, 478, 0, 0, 638, 246, 498, 214, + 586, 497, 389, 324, 325, 213, 0, 452, 267, 292, + 0, 0, 257, 410, 581, 582, 255, 639, 227, 610, + 219, 0, 609, 403, 576, 587, 390, 379, 218, 585, + 388, 378, 332, 351, 352, 279, 305, 442, 371, 443, + 304, 306, 399, 398, 400, 206, 598, 0, 207, 0, + 493, 599, 640, 447, 211, 233, 234, 236, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 441, 437, + 446, 0, 571, 592, 604, 615, 621, 622, 624, 625, + 626, 627, 628, 631, 629, 402, 309, 489, 331, 369, + 0, 0, 420, 467, 239, 596, 490, 199, 0, 0, + 0, 0, 253, 254, 0, 567, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, + 656, 657, 658, 636, 500, 506, 501, 502, 503, 504, + 505, 0, 507, 0, 0, 0, 0, 0, 0, 583, + 584, 659, 380, 480, 593, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 248, 209, 386, 394, 570, 310, 215, 216, + 217, 516, 517, 518, 519, 607, 608, 612, 204, 457, + 458, 459, 460, 291, 602, 307, 463, 462, 329, 330, + 375, 444, 532, 534, 545, 549, 551, 553, 559, 562, + 533, 535, 546, 550, 552, 554, 560, 563, 522, 524, + 526, 528, 541, 540, 537, 565, 566, 543, 548, 527, + 539, 544, 557, 564, 561, 521, 525, 529, 538, 556, + 555, 536, 547, 558, 542, 530, 523, 531, 0, 196, + 220, 364, 0, 449, 287, 637, 606, 601, 205, 222, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 198, 200, 208, 221, 231, 235, 242, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 4024, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 431, 432, 434, + 436, 438, 450, 455, 469, 470, 471, 472, 473, 476, + 477, 482, 483, 484, 485, 486, 494, 495, 508, 578, + 580, 595, 613, 619, 475, 299, 300, 439, 440, 312, + 313, 633, 634, 298, 590, 620, 588, 632, 614, 433, + 374, 0, 0, 377, 280, 303, 318, 0, 605, 496, + 226, 461, 289, 250, 0, 0, 210, 245, 229, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 243, + 454, 240, 479, 511, 512, 513, 515, 391, 265, 428, + 392, 0, 372, 568, 569, 314, 520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 203, 0, + 481, 251, 373, 370, 575, 281, 272, 268, 249, 315, + 381, 423, 510, 417, 0, 366, 0, 0, 491, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 247, 323, 202, 408, + 492, 285, 0, 0, 0, 0, 0, 707, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 244, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 572, 0, 0, 0, 0, 0, 0, + 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 448, 0, 0, 0, 616, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 197, + 224, 0, 0, 407, 456, 468, 0, 0, 0, 252, + 0, 466, 421, 594, 232, 283, 453, 427, 464, 435, + 286, 0, 0, 465, 368, 577, 445, 591, 617, 618, + 262, 401, 603, 514, 611, 635, 225, 259, 415, 499, + 597, 488, 393, 573, 574, 327, 487, 294, 201, 365, + 623, 223, 474, 367, 241, 230, 579, 600, 288, 451, + 630, 212, 509, 589, 238, 478, 0, 0, 638, 246, + 498, 214, 586, 497, 389, 324, 325, 213, 0, 452, + 267, 292, 0, 0, 257, 410, 581, 582, 255, 639, + 227, 610, 219, 0, 609, 403, 576, 587, 390, 379, + 218, 585, 388, 378, 332, 351, 352, 279, 305, 442, + 371, 443, 304, 306, 399, 398, 400, 206, 598, 0, + 207, 0, 493, 599, 640, 447, 211, 233, 234, 236, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 441, 437, 446, 0, 571, 592, 604, 615, 621, 622, + 624, 625, 626, 627, 628, 631, 629, 402, 309, 489, + 331, 369, 0, 0, 420, 467, 239, 596, 490, 199, + 0, 0, 0, 0, 253, 254, 0, 567, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 641, 642, 643, + 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 656, 657, 658, 636, 500, 506, 501, 502, + 503, 504, 505, 0, 507, 0, 0, 0, 0, 0, + 0, 583, 584, 659, 380, 480, 593, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 248, 209, 386, 394, 570, 310, + 215, 216, 217, 516, 517, 518, 519, 607, 608, 612, + 204, 457, 458, 459, 460, 291, 602, 307, 463, 462, + 329, 330, 375, 444, 532, 534, 545, 549, 551, 553, + 559, 562, 533, 535, 546, 550, 552, 554, 560, 563, + 522, 524, 526, 528, 541, 540, 537, 565, 566, 543, + 548, 527, 539, 544, 557, 564, 561, 521, 525, 529, + 538, 556, 555, 536, 547, 558, 542, 530, 523, 531, + 0, 196, 220, 364, 0, 449, 287, 637, 606, 601, + 205, 222, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 198, 200, 208, 221, 231, + 235, 242, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 431, + 432, 434, 436, 438, 450, 455, 469, 470, 471, 472, + 473, 476, 477, 482, 483, 484, 485, 486, 494, 495, + 508, 578, 580, 595, 613, 619, 475, 299, 300, 439, + 440, 312, 313, 633, 634, 298, 590, 620, 588, 632, + 614, 433, 374, 0, 0, 377, 280, 303, 318, 0, + 605, 496, 226, 461, 289, 250, 0, 0, 210, 245, + 229, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 243, 454, 240, 479, 511, 512, 513, 515, 391, + 265, 428, 392, 0, 372, 568, 569, 314, 520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 203, 0, 481, 251, 373, 370, 575, 281, 272, 268, + 249, 315, 381, 423, 510, 417, 0, 366, 0, 0, + 491, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 247, 323, + 202, 408, 492, 285, 0, 0, 0, 0, 0, 941, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 244, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 448, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 197, 224, 0, 0, 407, 456, 468, 0, 0, + 0, 252, 0, 466, 421, 594, 232, 283, 453, 427, + 464, 435, 286, 0, 0, 465, 368, 577, 445, 591, + 617, 618, 262, 401, 603, 514, 611, 635, 225, 259, + 415, 499, 597, 488, 393, 573, 574, 327, 487, 294, + 201, 365, 623, 223, 474, 367, 241, 230, 579, 600, + 288, 451, 630, 212, 509, 589, 238, 478, 0, 0, + 638, 246, 498, 214, 586, 497, 389, 324, 325, 213, + 0, 452, 267, 292, 0, 0, 257, 410, 581, 582, + 255, 639, 227, 610, 219, 0, 609, 403, 576, 587, + 390, 379, 218, 585, 388, 378, 332, 351, 352, 279, + 305, 442, 371, 443, 304, 306, 399, 398, 400, 206, + 598, 0, 207, 0, 493, 599, 640, 447, 211, 233, + 234, 236, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 441, 437, 446, 0, 571, 592, 604, 615, + 621, 622, 624, 625, 626, 627, 628, 631, 629, 402, + 309, 489, 331, 369, 0, 0, 420, 467, 239, 596, + 490, 199, 0, 0, 0, 0, 253, 254, 0, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 636, 500, 506, + 501, 502, 503, 504, 505, 0, 507, 0, 0, 0, + 0, 0, 0, 583, 584, 659, 380, 480, 593, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 248, 209, 386, 394, + 570, 310, 215, 216, 217, 516, 517, 518, 519, 607, + 608, 612, 204, 457, 458, 459, 460, 291, 602, 307, + 463, 462, 329, 330, 375, 444, 532, 534, 545, 549, + 551, 553, 559, 562, 533, 535, 546, 550, 552, 554, + 560, 563, 522, 524, 526, 528, 541, 540, 537, 565, + 566, 543, 548, 527, 539, 544, 557, 564, 561, 521, + 525, 529, 538, 556, 555, 536, 547, 558, 542, 530, + 523, 531, 0, 196, 220, 364, 0, 449, 287, 637, + 606, 601, 205, 222, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 200, 208, + 221, 231, 235, 242, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 431, 432, 434, 436, 438, 450, 455, 469, 470, + 471, 472, 473, 476, 477, 482, 483, 484, 485, 486, + 494, 495, 508, 578, 580, 595, 613, 619, 475, 299, + 300, 439, 440, 312, 313, 633, 634, 298, 590, 620, + 588, 632, 614, 433, 374, 0, 0, 377, 280, 303, + 318, 0, 605, 496, 226, 461, 289, 250, 0, 0, + 210, 245, 229, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 243, 454, 240, 479, 511, 512, 513, + 515, 391, 265, 428, 392, 0, 372, 568, 569, 314, + 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 203, 0, 481, 251, 373, 370, 575, 281, + 272, 268, 249, 315, 381, 423, 510, 417, 0, 366, + 0, 0, 491, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 247, 323, 202, 408, 492, 285, 0, 0, 0, 0, + 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 244, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 572, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 448, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 197, 224, 0, 0, 407, 456, 468, + 0, 0, 0, 252, 0, 466, 421, 594, 232, 283, + 453, 427, 464, 435, 286, 0, 0, 465, 368, 577, + 445, 591, 617, 618, 262, 401, 603, 514, 611, 635, + 225, 259, 415, 499, 597, 488, 393, 573, 574, 327, + 487, 294, 201, 365, 623, 223, 474, 367, 241, 230, + 579, 600, 288, 451, 630, 212, 509, 589, 238, 478, + 0, 0, 638, 246, 498, 214, 586, 497, 389, 324, + 325, 213, 0, 452, 267, 292, 0, 0, 257, 410, + 581, 582, 255, 639, 227, 610, 219, 0, 609, 403, + 576, 587, 390, 379, 218, 585, 388, 378, 332, 351, + 352, 279, 305, 442, 371, 443, 304, 306, 399, 398, + 400, 206, 598, 0, 207, 0, 493, 599, 640, 447, + 211, 233, 234, 236, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 441, 437, 446, 0, 571, 592, + 604, 615, 621, 622, 624, 625, 626, 627, 628, 631, + 629, 402, 309, 489, 331, 369, 0, 0, 420, 467, + 239, 596, 490, 199, 0, 0, 0, 0, 253, 254, + 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 636, + 500, 506, 501, 502, 503, 504, 505, 0, 507, 0, + 0, 0, 0, 0, 0, 583, 584, 659, 380, 480, + 593, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 248, 209, + 386, 394, 570, 310, 215, 216, 217, 516, 517, 518, + 519, 607, 608, 612, 204, 457, 458, 459, 460, 291, + 602, 307, 463, 462, 329, 330, 375, 444, 532, 534, + 545, 549, 551, 553, 559, 562, 533, 535, 546, 550, + 552, 554, 560, 563, 522, 524, 526, 528, 541, 540, + 537, 565, 566, 543, 548, 527, 539, 544, 557, 564, + 561, 521, 525, 529, 538, 556, 555, 536, 547, 558, + 542, 530, 523, 531, 0, 196, 220, 364, 0, 449, + 287, 637, 606, 601, 205, 222, 0, 261, 3684, 3686, + 3685, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 789, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 200, 208, 221, 231, 235, 242, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 431, 432, 434, 436, 438, 450, 455, + 469, 470, 471, 472, 473, 476, 477, 482, 483, 484, + 485, 486, 494, 495, 508, 578, 580, 595, 613, 619, + 475, 299, 300, 439, 440, 312, 313, 633, 634, 298, + 590, 620, 588, 632, 614, 433, 374, 0, 0, 377, + 280, 303, 318, 0, 605, 496, 226, 461, 289, 250, + 0, 0, 210, 245, 229, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 243, 454, 240, 479, 511, + 512, 513, 515, 391, 265, 428, 0, 0, 372, 568, + 569, 314, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3690, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3698, + 3699, 0, 0, 3774, 3773, 3772, 0, 0, 3770, 3771, + 3769, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3775, 910, 0, 765, 766, 3776, 3777, + 914, 3778, 768, 769, 911, 912, 0, 763, 767, 913, + 915, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3681, 3682, 3683, 3687, 3688, + 3689, 3700, 3747, 3748, 3756, 3758, 866, 3757, 3759, 3760, + 3761, 3764, 3765, 3766, 3767, 3762, 3763, 3768, 3664, 3668, + 3665, 3666, 3667, 3679, 3669, 3670, 3671, 3672, 3673, 3674, + 3675, 3676, 3677, 3678, 3680, 3779, 3780, 3781, 3782, 3783, + 3784, 3693, 3697, 3696, 3694, 3695, 3691, 3692, 3719, 3718, + 3720, 3721, 3722, 3723, 3724, 3725, 3727, 3726, 3728, 3729, + 3730, 3731, 3732, 3733, 3701, 3702, 3705, 3706, 3704, 3703, + 3707, 3716, 3717, 3708, 3709, 3710, 3711, 3712, 3713, 3715, + 3714, 3734, 3735, 3736, 3737, 3738, 3740, 3739, 3743, 3744, + 3742, 3741, 3746, 3745, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 916, 0, 917, 0, + 0, 921, 0, 0, 0, 923, 922, 0, 924, 886, + 885, 0, 0, 918, 919, 0, 920, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, } var yyPact = [...]int{ - -1000, -1000, 4836, -1000, -529, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 5033, -1000, -531, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 2321, 2436, -1000, -1000, -1000, -1000, 2544, -1000, 995, + 2032, -1000, 2286, 4894, -1000, 54220, 494, -1000, 51332, 488, + 872, 237, 35448, -1000, 184, -1000, 165, 52776, 179, -1000, + -1000, -1000, -1000, -431, 21006, 2223, 48, 46, 54220, -1000, + -1000, -1000, -1000, -351, 2497, 2014, -1000, 408, -1000, -1000, + -1000, -1000, -1000, -1000, 50610, -1000, 1084, -1000, -1000, 2299, + 2287, 2559, 901, 2230, -1000, 2404, 2014, -1000, 21006, 2475, + 2366, 20284, 20284, 440, -1000, -1000, 268, -1000, -1000, 30394, + 54220, 38336, 891, -1000, 2286, -1000, -1000, -1000, 190, -1000, + 341, 1929, -1000, 1916, -1000, 1034, 1056, 398, 822, 814, + 396, 395, 394, 384, 382, 379, 359, 347, 380, -1000, + 934, 934, -216, -217, 4936, 469, 429, 429, 1074, 462, + 2254, 2250, -1000, -1000, 934, 934, 934, 362, 934, 934, + 934, 934, 294, 291, 934, 934, 934, 934, 934, 934, + 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, + 934, 870, 2286, 260, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 2494, 2791, -1000, -1000, -1000, -1000, 2658, -1000, 1009, 2093, - -1000, 2412, 1942, -1000, 54302, 778, -1000, 51418, 776, 899, - 237, 35556, -1000, 199, -1000, 183, 52860, 189, -1000, -1000, - -1000, -1000, -433, 21134, 2340, 51, 47, 54302, -1000, -1000, - -1000, -1000, 2583, 2079, -1000, 409, -1000, -1000, -1000, -1000, - -1000, -1000, 50697, -1000, 1151, -1000, -1000, 2411, 2401, 2626, - 927, 2337, -1000, 2484, 2079, -1000, 21134, 2562, 2470, 20413, - 20413, 480, -1000, -1000, 271, -1000, -1000, 30509, 54302, 38440, - 857, -1000, 2412, -1000, -1000, -1000, 214, -1000, 382, 1995, - -1000, 1990, -1000, 889, 900, 415, 882, 855, 413, 412, - 405, 396, 394, 393, 390, 389, 432, -1000, 958, 958, - -228, -229, 1445, 467, 474, 474, 1010, 499, 2374, 2371, - -1000, -1000, 958, 958, 958, 364, 958, 958, 958, 958, - 329, 326, 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, 958, 903, - 2412, 296, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -7225,69 +7264,67 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 54220, 213, 54220, -1000, 824, 54220, -435, 1088, 1088, 83, + 1088, 1088, 1088, 1088, 176, 938, 45, -1000, 166, 255, + 153, 249, 1062, 792, -1000, -1000, 242, 1062, 1714, -1000, + 903, 246, 173, -1000, 1088, 1088, -1000, 13761, 233, 13761, + 13761, -1000, 2262, -1000, -1000, -1000, -1000, -1000, 1291, -1000, + -1000, -1000, -1000, -33, 460, -1000, -1000, -1000, -1000, 52776, + 49888, 273, -1000, -1000, 47, -1000, -1000, 1798, 1429, 21006, + 1358, 895, -1000, -1000, 1294, 876, -1000, -1000, -1000, -1000, + -1000, 818, -1000, 23172, 23172, 23172, 23172, -1000, -1000, 1446, + 49166, 1446, 1446, 23172, 1446, 23172, 1446, 1446, 1446, 21006, + 1446, 1446, 1446, 1446, -1000, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, -1000, -1000, -1000, -1000, 1446, 817, 1446, 1446, + 1446, 1446, 1446, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1446, 1446, 1446, 1446, 1446, 1446, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 26060, 1497, 1494, 1486, -1000, 18118, 1446, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 54302, 195, - 54302, -1000, 848, 54302, -438, 1101, 1101, 67, 1101, 1101, - 1101, 1101, 231, 1003, 41, -1000, 215, 259, 154, 294, - 1075, 273, -1000, -1000, 270, 1075, 1831, -1000, 934, 262, - 152, -1000, 1101, 1101, -1000, 13899, 229, 13899, 13899, -1000, - 2388, -1000, -1000, -1000, -1000, -1000, 1312, -1000, -1000, -1000, - -1000, -46, 496, -1000, -1000, -1000, -1000, 52860, 49976, 236, - -1000, -1000, 768, -1000, -1000, 1835, 1278, 21134, 1215, 924, - -1000, -1000, 1391, 904, -1000, -1000, -1000, -1000, -1000, 807, - -1000, 23297, 23297, 23297, 23297, -1000, -1000, 1717, 49255, 1717, - 1717, 23297, 1717, 23297, 1717, 1717, 1717, 21134, 1717, 1717, - 1717, 1717, -1000, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - -1000, -1000, -1000, -1000, 1717, 847, 1717, 1717, 1717, 1717, - 1717, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1717, 1717, - 1717, 1717, 1717, 1717, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 26181, 1563, - 1560, 1557, -1000, 18250, 1717, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 54220, -1000, 1446, + 208, 52776, 52776, 317, 1280, -1000, -1000, 2404, 2014, -1000, + 2497, 2496, 408, -1000, 3048, 1529, 1547, 1357, 2014, 1888, + 54220, -1000, 1948, -1000, -1000, -1000, -1000, 2129, 1362, 1682, + -1000, -1000, -1000, -1000, 1749, 21006, -1000, -1000, 2528, -1000, + 27505, 816, 2524, 48444, -1000, 440, 440, 1915, 416, 13, + -1000, -1000, -1000, -1000, 959, 34726, -1000, -1000, -1000, -1000, + -1000, 1815, 54220, -1000, -1000, 5651, 1288, -1000, 2029, -1000, + 1775, -1000, 1964, 21006, 2012, 484, 1288, 478, 476, 474, + -1000, -66, -1000, -1000, -1000, -1000, -1000, -1000, 934, 934, + 934, -1000, 366, 2472, 4894, 6231, -1000, -1000, -1000, 47722, + 2027, 1288, -1000, 2026, -1000, 1010, 861, 900, 900, 1288, + -1000, -1000, 53498, 1288, 1009, 1008, 1288, 1288, 52776, 52776, + -1000, 47000, -1000, 46278, 45556, 1279, 52776, 44834, 44112, 43390, + 42668, 41946, -1000, 2123, -1000, 1982, -1000, -1000, -1000, 53498, + 1288, 1288, 53498, 52776, 53498, 54220, 1288, -1000, -1000, 361, + -1000, -1000, 1278, 1264, 1260, 934, 934, 1256, 1678, 1676, + 1665, 934, 934, 1254, 1662, 36892, 1655, 252, 1252, 1249, + 1245, 1241, 1630, 193, 1628, 1240, 1181, 1239, 52776, 2024, + 54220, -1000, 238, 973, 438, 954, 2286, 2221, 1914, 456, + 483, 1288, 432, 432, 52776, -1000, 14489, -1000, 245, -1000, + 1623, 21006, -1000, 1065, 1062, 1062, -1000, -1000, -1000, -1000, + -1000, -1000, 1088, 54220, 1065, -1000, -1000, -1000, 1062, 1088, + 54220, 1088, 1088, 1088, 1088, 1062, 1062, 1062, 1088, 54220, + 54220, 54220, 54220, 54220, 54220, 54220, 54220, 54220, 13761, 903, + 1088, -436, -1000, 1616, -1000, -1000, 2133, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 54302, -1000, 1717, 220, 52860, - 52860, 420, 2484, 2079, -1000, 2583, 2557, 409, -1000, 3790, - 1481, 1730, 1399, 2079, 1961, 54302, -1000, 2009, -1000, -1000, - -1000, -1000, 2264, 1437, 1822, -1000, -1000, -1000, -1000, 2281, - 21134, -1000, -1000, 2610, -1000, 27624, 846, 2606, 48534, -1000, - 480, 480, 1983, 419, 24, -1000, -1000, -1000, -1000, 980, - 34835, -1000, -1000, -1000, -1000, -1000, 1844, 54302, -1000, -1000, - 4098, 1375, -1000, 2092, -1000, 1837, -1000, 2033, 21134, 2106, - 774, 1375, 507, 505, 485, -1000, -71, -1000, -1000, -1000, - -1000, -1000, -1000, 958, 958, 958, -1000, 391, 2555, 1942, - 7587, -1000, -1000, -1000, 47813, 2081, 1375, -1000, 2080, -1000, - 1035, 871, 875, 875, 1375, -1000, -1000, 53581, 1375, 1033, - 1030, 1375, 1375, 52860, 52860, -1000, 47092, -1000, 46371, 45650, - 1359, 52860, 44929, 44208, 43487, 42766, 42045, -1000, 2384, -1000, - 2259, -1000, -1000, -1000, 53581, 1375, 1375, 53581, 52860, 53581, - 54302, 1375, -1000, -1000, 355, -1000, -1000, 1358, 1356, 1355, - 958, 958, 1350, 1818, 1809, 1803, 958, 958, 1349, 1797, - 36998, 1791, 272, 1348, 1346, 1339, 1369, 1784, 192, 1755, - 1347, 1247, 1336, 52860, 2072, 54302, -1000, 253, 943, 430, - 977, 2412, 2339, 1982, 488, 524, 1375, 477, 477, 52860, - -1000, 14626, -1000, 243, -1000, 1735, 21134, -1000, 1076, 1075, - 1075, -1000, -1000, -1000, -1000, -1000, -1000, 1101, 54302, 1076, - -1000, -1000, -1000, 1075, 1101, 54302, 1101, 1101, 1101, 1101, - 1075, 1075, 1075, 1101, 54302, 54302, 54302, 54302, 54302, 54302, - 54302, 54302, 54302, 13899, 934, 1101, -439, -1000, 1727, -1000, - -1000, 2178, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -7302,327 +7339,326 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 13899, 13899, - -1000, -1000, -1000, -1000, -1000, 1972, -1000, 181, 12, 186, - -1000, 41324, 486, 968, -1000, 486, -1000, -1000, -1000, 1971, - 40603, -1000, -440, -441, -443, -445, -1000, -1000, -1000, -450, - -451, -1000, -1000, -1000, 21134, 21134, 21134, 21134, -267, -1000, - 1320, 23297, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 21134, - 249, 1116, 23297, 23297, 23297, 23297, 23297, 23297, 23297, 24739, - 24018, 23297, 23297, 23297, 23297, 23297, 23297, -1000, -1000, 32672, - 4291, 4291, 904, 904, 904, 904, -1000, -186, 1968, 53581, - -1000, -1000, -1000, 845, 21134, 21134, 904, -1000, 1375, 1134, - 18250, 20413, 20413, 21134, 985, 1278, 53581, 21134, -1000, 1399, - -1000, -1000, -1000, -1000, 1309, -1000, -1000, 1088, 2380, 2380, - 2380, 2380, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, - 21134, 21134, 2380, 21134, 139, 139, 907, 21134, 21134, 21134, - 21134, 21134, 21134, 16807, 21134, 21134, 23297, 21134, 21134, 21134, - 1399, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, - 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, - 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, - 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, - 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, - 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, - 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, - 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, - 1399, 21134, 1303, 21134, 21134, 21134, 21134, 21134, 21134, 20413, - 16080, 20413, 20413, 20413, 20413, 20413, -1000, -1000, -1000, -1000, - -1000, -1000, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, - 1399, 21134, 21134, 21134, 21134, 21134, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1507, 1520, 1540, 21134, - -1000, 1964, -1000, -184, 29788, 21134, 1724, 2604, 2141, 52860, - -1000, -1000, -1000, 2484, -1000, 2484, 1507, 3493, 2267, 20413, - -1000, -1000, 3493, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1821, -1000, 54302, 1961, 2463, 52860, 2262, 1722, 348, - -1000, 21134, 21134, 1957, -1000, 1504, 54302, -1000, -267, -1000, - 39882, -1000, -1000, 13172, 54302, 384, 54302, -1000, 29067, 39161, - 321, -1000, 24, 1916, -1000, 17, 8, 17528, 902, -1000, - -1000, -1000, 1445, 25460, 1654, 902, 90, -1000, -1000, -1000, - 2033, -1000, 2033, 2033, 2033, 2033, 348, 348, 348, 348, - -1000, -1000, -1000, -1000, -1000, 2071, 2056, -1000, 2033, 2033, - 2033, 2033, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2054, - 2054, 2054, 2051, 2051, 2034, 2034, 464, -1000, 21134, 367, - 38440, 2421, 1328, 1341, 253, 478, 2139, 1375, 1375, 1375, - 478, -1000, 1457, 1428, 1419, -1000, -516, 1954, -1000, -1000, - 2553, -1000, -1000, 937, 1074, 1063, 948, 52860, 227, 375, - -1000, 456, -1000, 38440, 1375, 1026, 875, 1375, -1000, 1375, - -1000, -1000, -1000, -1000, -1000, 1375, -1000, -1000, 1953, -1000, - 1940, 1132, 1062, 1121, 1055, 1953, -1000, -1000, -192, 1953, - -1000, 1953, -1000, 1953, -1000, 1953, -1000, 1953, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 988, 278, -351, - 52860, 227, 487, -1000, 484, 32672, -1000, -1000, -1000, 32672, - 32672, -1000, -1000, -1000, -1000, 1716, 1710, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 13761, 13761, -1000, -1000, -1000, -1000, + -1000, 1905, -1000, 177, 8, 170, -1000, 41224, 482, 953, + -1000, 482, -1000, -1000, -1000, 1902, 40502, -1000, -441, -442, + -443, -444, -1000, -1000, -1000, -446, -454, -1000, -1000, -1000, + 21006, 21006, 21006, 21006, -246, -1000, 1136, 23172, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 21006, 243, 933, 23172, 23172, + 23172, 23172, 23172, 23172, 23172, 24616, 23894, 23172, 23172, 23172, + 23172, 23172, 23172, -1000, -1000, 32560, 8458, 8458, 876, 876, + 876, 876, -1000, -176, 1895, 53498, -1000, -1000, -1000, 813, + 21006, 21006, 876, -1000, 1288, 1198, 18118, 20284, 20284, 21006, + 944, 1429, 53498, 21006, -1000, 1357, -1000, -1000, -1000, -1000, + 1205, -1000, -1000, 1037, 2298, 2298, 2298, 2298, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 2298, 21006, + 703, 703, 150, 21006, 21006, 21006, 21006, 21006, 21006, 16673, + 21006, 21006, 23172, 21006, 21006, 21006, 1357, 21006, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, 1357, 21006, 1444, 21006, + 21006, 21006, 21006, 21006, 21006, 20284, 15945, 20284, 20284, 20284, + 20284, 20284, -1000, -1000, -1000, -1000, -1000, -1000, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, 1357, 21006, 21006, 21006, + 21006, 21006, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1593, 1485, 1410, 21006, -1000, 1894, -1000, -165, + 29672, 21006, 1612, 2517, 2050, 52776, -1000, -1000, -1000, -1000, + 2404, -1000, 2404, 1593, 2848, 2167, 20284, -1000, -1000, 2848, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1674, -1000, + 54220, 1888, 2362, 52776, 2163, 1598, 342, -1000, 21006, 21006, + 1881, -1000, 1380, 54220, -1000, -246, -1000, 39780, -1000, -1000, + 13033, 54220, 338, 54220, -1000, 28950, 39058, 314, -1000, 13, + 1857, -1000, 22, -5, 17395, 875, -1000, -1000, -1000, 4936, + 25338, 1763, 875, 96, -1000, -1000, -1000, 1964, -1000, 1964, + 1964, 1964, 1964, 342, 342, 342, 342, -1000, -1000, -1000, + -1000, -1000, 2021, 2020, -1000, 1964, 1964, 1964, 1964, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 2011, 2011, 2011, 2002, + 2002, 1974, 1974, 424, -1000, 21006, 383, 38336, 2314, 1237, + 1622, 238, 437, 2047, 1288, 1288, 1288, 437, -1000, 1346, + 1327, 1297, -1000, -519, 1875, -1000, -1000, 2468, -1000, -1000, + 1106, 1033, 1025, 940, 52776, 218, 311, -1000, 422, -1000, + 38336, 1288, 1007, 900, 1288, -1000, 1288, -1000, -1000, -1000, + -1000, -1000, 1288, -1000, -1000, 1871, -1000, 1882, 1092, 1023, + 1087, 1006, 1871, -1000, -1000, -181, 1871, -1000, 1871, -1000, + 1871, -1000, 1871, -1000, 1871, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 974, 304, -354, 52776, 218, 453, + -1000, 449, 32560, -1000, -1000, -1000, 32560, 32560, -1000, -1000, + -1000, -1000, 1595, 1590, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -498, 54302, -1000, 246, - 967, 305, 385, 316, 54302, 369, 2510, 2509, 2505, 2482, - 2466, 339, 324, 54302, 54302, 477, 2216, 54302, 2445, 54302, - -1000, -1000, -1000, -1000, 1707, 1703, -1000, 1278, 54302, -1000, - -1000, 1101, 1101, -1000, -1000, 54302, 1101, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1101, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 54302, -1000, -1000, -1000, -1000, -46, 177, -1000, -1000, - 52860, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -104, -1000, 779, 7, 404, -1000, -1000, -1000, -1000, -1000, - 2512, -1000, 1278, 1037, 1006, -1000, 1717, -1000, -1000, 1164, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 249, 23297, - 23297, 23297, 1542, 815, 1553, 1220, 1152, 1161, 1161, 929, - 23297, 929, 23297, 906, 906, 906, 906, 906, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1694, -1000, 1717, 53581, - 1817, 16080, 2454, 1653, 1399, 917, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -503, 54220, -1000, 231, 951, 297, 371, + 333, 54220, 357, 2388, 2387, 2386, 2385, 2373, 276, 266, + 54220, 54220, 432, 2103, 54220, 2333, 54220, -1000, -1000, -1000, + -1000, 1588, 1574, -1000, 1429, 54220, -1000, -1000, 1088, 1088, + -1000, -1000, 54220, 1088, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1088, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 54220, -1000, + -1000, -1000, -1000, -33, 156, -1000, -1000, 52776, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -100, -1000, 323, + 14, 397, -1000, -1000, -1000, -1000, -1000, 2399, -1000, 1429, + 970, 977, -1000, 1446, -1000, -1000, 1139, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 243, 23172, 23172, 23172, 1569, + 811, 1618, 1226, 1318, 1156, 1156, 896, 23172, 896, 23172, + 880, 880, 880, 880, 880, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1548, -1000, 1446, 53498, 1766, 15945, 1424, + 1443, 1357, 893, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 4109, 1815, -1000, 1815, - 2260, 1011, -1000, 21134, 1399, 4101, -1000, -1000, 1399, 1399, - 21134, -1000, -1000, 21134, 21134, 21134, 21134, 1341, 1341, 1341, - 1341, 1341, 1341, 1341, 1341, 1341, 1341, 21134, 1341, 1946, + -1000, -1000, -1000, 3840, 1743, -1000, 1743, 1200, 981, -1000, + 21006, 1357, 3814, -1000, -1000, 1357, 1357, 21006, -1000, -1000, + 21006, 21006, 21006, 21006, 1622, 1622, 1622, 1622, 1622, 1622, + 1622, 1622, 1622, 1622, 21006, 1622, 1870, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1925, 2598, - 1772, 1341, 1341, 1341, 1341, 1341, 21134, 1403, -1000, -1000, - -1000, 1522, 3865, 1468, 3846, 1341, 1341, -1000, 1341, 3838, - 3833, 1399, 1835, 2632, 2625, 1341, 1341, 1341, 1341, 1341, - 2620, 2614, 1341, 1341, 2607, 1341, 3809, 1341, 2603, 2595, - 2585, 2577, 2538, 2528, 2516, 2499, 2481, 2473, 2438, 2404, - 2399, 2373, 2359, 2342, 2304, 2298, 1341, 1341, 1341, 3805, - 1341, 3798, 1341, 3794, 1341, 1341, 3496, 2286, 2229, 1399, - 1921, -1000, 3489, 1341, 3478, 3465, 3461, 2225, 3448, 3432, - 3426, 1341, 1341, 1341, 2218, 3374, 3370, 3366, 3357, 3333, - 3182, 3169, 3042, 3012, 1341, 1540, 1540, 1540, 1540, 1540, - 3006, -269, 1341, 1399, -1000, -1000, -1000, -1000, -1000, 2956, - 2212, 2939, 2927, 2901, 2896, 1399, 1920, 1717, 844, -1000, - -1000, 1815, 1399, 1399, 1815, 1815, 2878, 2867, 2863, 2858, - 2853, 2836, 1341, 1341, -1000, 1341, 2798, 2765, 2198, 2194, - 1399, -1000, 1540, 54302, -1000, -428, -1000, -18, 965, 1717, - -1000, 36998, 1399, -1000, 3200, -1000, 1155, -1000, -1000, -1000, - -1000, -1000, 34114, 1941, 3493, -1000, -1000, 1717, 1808, -1000, - -1000, 348, 68, 33393, 898, 898, 107, 1278, 1278, 21134, - -1000, -1000, -1000, -1000, -1000, -1000, 842, 2574, 374, 1717, - -1000, 1915, 2991, -1000, -1000, -1000, 2460, 26903, -1000, -1000, - 1717, 1717, 54302, 1962, 1853, -1000, 836, -1000, 1388, 1916, - 24, 2, -1000, -1000, -1000, -1000, 1278, -1000, 1415, 388, - 342, -1000, 462, -1000, -1000, -1000, -1000, 2356, 81, -1000, - -1000, -1000, 894, 348, -1000, -1000, -1000, -1000, -1000, -1000, - 1684, 1684, -1000, -1000, -1000, -1000, -1000, 1318, -1000, -1000, - -1000, -1000, 1317, -1000, -1000, 1316, -1000, -1000, 2650, 2150, - 367, -1000, -1000, 958, 1679, -1000, -1000, 2360, 958, 958, - 52860, -1000, -1000, 1649, 2421, 246, 54302, 990, 2211, -1000, - 2139, 2139, 2139, 54302, -1000, -1000, -1000, -1000, -1000, -1000, - -504, 166, 565, -1000, -1000, -1000, 4888, 52860, 1778, -1000, - 221, -1000, 1641, -1000, 52860, -1000, 1770, 2048, 1375, 1375, - -1000, -1000, -1000, 52860, 1717, -1000, -1000, -1000, -1000, 519, - 2382, 336, -1000, -1000, -287, -1000, -1000, 227, 221, 53581, - 1375, 902, -1000, -1000, -1000, -1000, -1000, -506, 1768, 503, - 240, 564, 54302, 54302, 54302, 54302, 54302, 799, -1000, -1000, - 21, -1000, -1000, 210, -1000, -1000, -1000, -1000, 210, -1000, - -1000, -1000, -1000, 274, 482, -1000, 54302, 54302, 946, -1000, - -1000, -1000, -1000, -1000, 1075, -1000, -1000, 1075, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1866, 2513, 1283, 1622, 1622, + 1622, 1622, 1622, 21006, 1685, -1000, -1000, -1000, 1510, 3810, + 1558, 3801, 1622, 1622, -1000, 1622, 3797, 3494, 1357, 1798, + 2954, 2938, 1622, 1622, 1622, 1622, 1622, 2934, 2867, 1622, + 1622, 2805, 1622, 3474, 1622, 2719, 2677, 2673, 2652, 2616, + 2611, 2590, 2555, 2543, 2529, 2523, 2508, 2485, 2481, 2467, + 2460, 2448, 2437, 1622, 1622, 1622, 3453, 1622, 3435, 1622, + 3416, 1622, 1622, 3411, 2425, 2411, 1357, 1864, -1000, 3406, + 1622, 3400, 3391, 3377, 2402, 3371, 3363, 3344, 1622, 1622, + 1622, 2398, 3334, 3329, 3321, 3310, 3298, 3285, 3281, 3271, + 3259, 1622, 1410, 1410, 1410, 1410, 1410, 3254, -252, 1622, + 1357, -1000, -1000, -1000, -1000, -1000, 3247, 2354, 3189, 3176, + 3020, 3015, 1357, 1859, 1446, 804, -1000, -1000, 1743, 1357, + 1357, 1743, 1743, 3010, 2981, 2962, 2942, 2906, 2862, 1622, + 1622, -1000, 1622, 2856, 2831, 2311, 2278, 1357, -1000, 1410, + 54220, -1000, -427, -1000, 5, 929, 1446, -1000, 36892, 1357, + -1000, 5968, -1000, 1204, -1000, -1000, -1000, -1000, -1000, 34004, + 1783, 2848, -1000, -1000, 1446, 1734, -1000, -1000, 342, 87, + 33282, 869, 869, 111, 1429, 1429, 21006, -1000, -1000, -1000, + -1000, -1000, -1000, 798, 2486, 375, 1446, -1000, 1817, 2151, + -1000, -1000, -1000, 2359, 26783, -1000, -1000, 1446, 1446, 54220, + 1806, 1779, -1000, 788, -1000, 1312, 1857, 13, 2, -1000, + -1000, -1000, -1000, 1429, -1000, 1295, 344, 1464, -1000, 439, + -1000, -1000, -1000, -1000, 2243, 79, -1000, -1000, -1000, 360, + 342, -1000, -1000, -1000, -1000, -1000, -1000, 1542, 1542, -1000, + -1000, -1000, -1000, -1000, 1224, -1000, -1000, -1000, -1000, 1222, + -1000, -1000, 1218, -1000, -1000, 2442, 2124, 383, -1000, -1000, + 934, 1537, -1000, -1000, 2232, 934, 934, 52776, -1000, -1000, + 1735, 2314, 231, 54220, 941, 2102, -1000, 2047, 2047, 2047, + 54220, -1000, -1000, -1000, -1000, -1000, -1000, -510, 167, 364, + -1000, -1000, -1000, 2008, 52776, 1731, -1000, 211, -1000, 1726, + -1000, 52776, -1000, 1722, 1996, 1288, 1288, -1000, -1000, -1000, + 52776, 1446, -1000, -1000, -1000, -1000, 481, 2284, 340, -1000, + -1000, -279, -1000, -1000, 218, 211, 53498, 1288, 875, -1000, + -1000, -1000, -1000, -1000, -502, 1720, 470, 220, 566, 54220, + 54220, 54220, 54220, 54220, 793, -1000, -1000, 32, -1000, -1000, + 196, -1000, -1000, -1000, -1000, 196, -1000, -1000, -1000, -1000, + 253, 442, -1000, 54220, 54220, 947, -1000, -1000, -1000, -1000, + -1000, 1062, -1000, -1000, 1062, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2280, 54220, 12, + -469, -1000, -465, 21006, -1000, -1000, -1000, -1000, 1308, 810, + 1618, 23172, 23172, 1198, 1198, 23172, -1000, -1000, -1000, 353, + 353, 32560, -1000, 23172, 21006, 20284, -1000, -1000, 21006, 21006, + 930, -1000, 21006, 1262, -1000, 21006, -1000, -1000, 1410, 1622, + 1622, 1622, 1622, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1910, -1000, 21006, 21006, 21006, 1357, 310, + -1000, -1000, -1000, -1000, -1000, 2506, -1000, 21006, -1000, 32560, + 21006, 21006, 21006, -1000, -1000, -1000, 21006, 21006, -1000, -1000, + 21006, -1000, 21006, -1000, -1000, -1000, -1000, -1000, -1000, 21006, + -1000, 21006, -1000, -1000, -1000, 21006, -1000, 21006, -1000, -1000, + 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, + 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, + 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, + 21006, -1000, 21006, -1000, 21006, -1000, -1000, -1000, 21006, -1000, + 21006, -1000, 21006, -1000, -1000, 21006, -1000, 21006, -1000, 21006, + -1000, 21006, 21006, -1000, 21006, 21006, 21006, -1000, 21006, 21006, + 21006, 21006, -1000, -1000, -1000, -1000, 21006, 21006, 21006, 21006, + 21006, 21006, 21006, 21006, 21006, 21006, -1000, -1000, -1000, -1000, + -1000, -1000, 21006, -1000, 38336, 54, -252, 1444, 54, 1444, + 22450, 823, 815, 21728, -1000, 20284, 15217, -1000, -1000, -1000, + -1000, -1000, 21006, 21006, 21006, 21006, 21006, 21006, -1000, -1000, + -1000, 21006, 21006, -1000, 21006, -1000, 21006, -1000, -1000, -1000, + -1000, -1000, 929, -1000, 900, 900, 900, 52776, -1000, -1000, + -1000, -1000, 1855, -1000, 2453, -1000, 2176, 2172, 2505, 2486, + -1000, 28950, 2848, -1000, -1000, 52776, -418, -1000, 2216, 2197, + 869, 869, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 12305, + 2404, 21006, 2087, 53498, 240, -1000, 28228, 52776, 53498, 28950, + 28950, 28950, 28950, 28950, -1000, 2134, 2132, -1000, 2161, 2126, + 2242, 54220, -1000, 1593, 1713, -1000, 21006, 31116, 1794, 28950, + -1000, -1000, 28950, 54220, 11577, -1000, -1000, 3, -11, -1000, + -1000, -1000, -1000, 4936, -1000, -1000, 964, 2357, 2247, -1000, + -1000, -1000, -1000, -1000, 1708, -1000, 1687, 1847, 1672, 1669, + 304, -1000, 1989, 2279, 934, 934, -1000, 1217, -1000, 1288, + 1523, 1516, -1000, -1000, -1000, 441, -1000, 2325, 54220, 2086, + 2079, 2075, -1000, -518, 1212, 1994, 1980, 21006, 1993, 2464, + 1835, 52776, -1000, -1000, 53498, -1000, 275, -1000, 383, 52776, + -1000, -1000, -1000, 311, 54220, -1000, 4163, -1000, -1000, -1000, + 211, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 54220, 232, + -1000, 1987, 1230, -1000, -1000, 2042, -1000, -1000, -1000, -1000, + 178, 295, 1514, 191, 1512, 191, -1000, 54220, 860, 2124, + 54220, -1000, -1000, -1000, 1088, 1088, -1000, -1000, 2263, -1000, + 1288, 1622, 23172, 23172, -1000, 876, -1000, -1000, 393, -228, + 1964, 1964, -1000, 1964, 1974, -1000, 1964, 146, 1964, 139, + 1964, -1000, -1000, 1357, 1357, -1000, 1410, -1000, 2265, 2237, + -1000, 1429, 21006, 2703, -1000, -1000, -1000, -1000, -1000, -73, + 2643, 2633, 1622, -1000, 1963, 1962, 21006, 1622, 1357, 2261, + 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, + 1622, 1622, 2252, 2244, 2231, 2219, 2205, 2188, 2182, 2089, + 2073, 2065, 2017, 2007, 2003, 1984, 1975, 1957, 1622, 1622, + 1945, 1622, 1936, 1917, -1000, 1429, 1410, 2594, 1410, 1622, + 1622, 2518, 292, 1622, 1660, 1660, 1660, 1660, 1660, 1410, + 1410, 1410, 1410, 1622, 52776, -1000, -252, -1000, -1000, -297, + -298, -1000, 1357, -252, 1843, 23172, 1622, 23172, 23172, 23172, + 1622, 1357, -1000, 1912, 1844, 2288, 1838, 1622, 2054, 1622, + 1622, 1622, 1813, -1000, 2390, 2390, 2390, 1602, 1204, 54220, + -1000, -1000, -1000, -1000, 2486, 2445, 1840, -1000, -1000, 87, + 596, -1000, 2211, 2197, -1000, 2463, 2200, 2457, -1000, -1000, + -1000, -1000, -1000, 1429, -1000, 2296, 1822, -1000, 937, 1818, + -1000, -1000, 19562, 1609, 2156, 542, 1602, 1858, 2151, 2059, + 2067, 2967, -1000, -1000, -1000, -1000, 2128, -1000, 2114, -1000, + -1000, 1948, -1000, 1886, 338, 28950, 1823, 1823, -1000, 537, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1064, 7767, 2539, + -1000, 1505, -1000, 1287, 206, 1203, -1000, -1000, 934, 934, + -1000, 1005, 1000, -1000, 54220, 1961, -1000, 342, 1500, 342, + 1195, -1000, -1000, 1172, -1000, -1000, -1000, -1000, 1925, 2108, + -1000, -1000, -1000, -1000, 54220, -1000, -1000, 54220, 54220, 54220, + 1960, 2449, -1000, 21006, 1956, 936, 2330, 52776, 52776, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 2381, 54302, 4, -470, -1000, -467, 21134, -1000, -1000, -1000, - -1000, 1453, 483, 1553, 23297, 23297, 1134, 1134, 23297, -1000, - -1000, -1000, 352, 352, 32672, -1000, 23297, 21134, 20413, -1000, - -1000, 21134, 21134, 944, -1000, 21134, 1147, -1000, 21134, -1000, - -1000, 1540, 1341, 1341, 1341, 1341, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1919, -1000, 21134, 21134, - 21134, 1399, 304, -1000, -1000, -1000, -1000, -1000, 2593, -1000, - 21134, -1000, 32672, 21134, 21134, 21134, -1000, -1000, -1000, 21134, - 21134, -1000, -1000, 21134, -1000, 21134, -1000, -1000, -1000, -1000, - -1000, -1000, 21134, -1000, 21134, -1000, -1000, -1000, 21134, -1000, - 21134, -1000, -1000, 21134, -1000, 21134, -1000, 21134, -1000, 21134, - -1000, 21134, -1000, 21134, -1000, 21134, -1000, 21134, -1000, 21134, - -1000, 21134, -1000, 21134, -1000, 21134, -1000, 21134, -1000, 21134, - -1000, 21134, -1000, 21134, -1000, 21134, -1000, 21134, -1000, -1000, - -1000, 21134, -1000, 21134, -1000, 21134, -1000, -1000, 21134, -1000, - 21134, -1000, 21134, -1000, 21134, 21134, -1000, 21134, 21134, 21134, - -1000, 21134, 21134, 21134, 21134, -1000, -1000, -1000, -1000, 21134, - 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, 21134, -1000, - -1000, -1000, -1000, -1000, -1000, 21134, -1000, 38440, 19, -269, - 1303, 19, 1303, 22576, 852, 850, 21855, -1000, 20413, 15353, - -1000, -1000, -1000, -1000, -1000, 21134, 21134, 21134, 21134, 21134, - 21134, -1000, -1000, -1000, 21134, 21134, -1000, 21134, -1000, 21134, - -1000, -1000, -1000, -1000, -1000, 965, -1000, 875, 875, 875, - 52860, -1000, -1000, -1000, -1000, 1911, -1000, 2493, -1000, 2280, - 2276, 2591, 2574, -1000, 29067, 3493, -1000, -1000, 52860, -420, - -1000, 2336, 2422, 898, 898, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 12445, 2484, 21134, 2207, 53581, 239, -1000, 28346, - 52860, 53581, 29067, 29067, 29067, 29067, 29067, -1000, 2237, 2222, - -1000, 2252, 2249, 2309, 54302, -1000, 1507, 1760, -1000, 21134, - 31230, 1851, 29067, -1000, -1000, 29067, 54302, 11718, -1000, -1000, - -6, -15, -1000, -1000, -1000, -1000, 1445, -1000, -1000, 370, - 2456, 2348, -1000, -1000, -1000, -1000, -1000, 1742, -1000, 1733, - 1906, 1720, 1714, 278, -1000, 2099, 2378, 958, 958, -1000, - 1315, -1000, 1375, 1671, 1662, -1000, -1000, -1000, 501, -1000, - 2439, 54302, 2184, 2167, 2161, -1000, -515, 1310, 2045, 1948, - 21134, 2037, 2552, 1887, 52860, -1000, -1000, 53581, -1000, 269, - -1000, 367, 52860, -1000, -1000, -1000, 375, 54302, -1000, 8870, - -1000, -1000, -1000, 221, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 54302, 244, -1000, 2035, 1179, -1000, -1000, 2123, -1000, - -1000, -1000, -1000, 178, 275, 1650, 207, 1593, 207, -1000, - 54302, 923, 2150, 54302, -1000, -1000, -1000, 1101, 1101, -1000, - -1000, 2375, -1000, 1375, 1341, 23297, 23297, -1000, 904, -1000, - -1000, 397, -248, 2033, 2033, -1000, 2033, 2034, -1000, 2033, - 168, 2033, 155, 2033, -1000, -1000, 1399, 1399, -1000, 1540, - -1000, 2181, 1286, -1000, 1278, 21134, 2727, -1000, -1000, -1000, - -1000, -1000, -84, 2706, 2700, 1341, -1000, 2026, 2025, 21134, - 1341, 1399, 2170, 1341, 1341, 1341, 1341, 1341, 1341, 1341, - 1341, 1341, 1341, 1341, 1341, 2157, 2153, 2132, 2124, 2115, - 2111, 2098, 2089, 1998, 1992, 1988, 1969, 1959, 1950, 1943, - 1933, 1341, 1341, 1912, 1341, 1894, 1856, -1000, 1278, 1540, - 2695, 1540, 1341, 1341, 2672, 333, 1341, 1702, 1702, 1702, - 1702, 1702, 1540, 1540, 1540, 1540, 1341, 52860, -1000, -269, - -1000, -1000, -308, -311, -1000, 1399, -269, 1903, 23297, 1341, - 23297, 23297, 23297, 1341, 1399, -1000, 1839, 1801, 2659, 1776, - 1341, 2409, 1341, 1341, 1341, 1753, -1000, 2500, 2500, 2500, - 1683, 1155, 54302, -1000, -1000, -1000, -1000, 2574, 2567, 1902, - -1000, -1000, 68, 656, -1000, 2325, 2422, -1000, 2551, 2306, - 2548, -1000, -1000, -1000, -1000, -1000, 1278, -1000, 2405, 1939, - -1000, 963, 1864, -1000, -1000, 19692, 1689, 2272, 835, 1683, - 1935, 2991, 2137, 2159, 3277, -1000, -1000, -1000, -1000, 2180, - -1000, 2122, -1000, -1000, 2009, -1000, 2368, 384, 29067, 1846, - 1846, -1000, 833, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1123, 8299, 2624, -1000, 1589, -1000, 1413, 203, 1307, -1000, - -1000, 958, 958, -1000, 1024, 1022, -1000, 54302, 2022, -1000, - 348, 1573, 348, 1281, -1000, -1000, 1244, -1000, -1000, -1000, - -1000, 2112, 2315, -1000, -1000, -1000, -1000, 54302, -1000, -1000, - 54302, 54302, 54302, 2020, 2547, -1000, 21134, 2019, 959, 1984, - 52860, 52860, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 475, 958, -481, 307, 302, 958, 958, - 958, -521, -1000, -1000, 1677, 1670, -1000, -220, -1000, 21134, - -1000, -1000, -1000, 1241, 1241, 1563, 1560, 1557, -1000, 2009, - -1000, -1000, -1000, 1611, -1000, -1000, -206, 52860, 52860, 52860, - 52860, -1000, -1000, 1217, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 904, 1399, 386, -213, - 1399, -1000, -1000, 348, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 21134, -1000, 21134, -1000, 1278, 21134, - 2484, 1512, 21134, 21134, -1000, 1214, 1201, 1341, -1000, -1000, - -1000, 21134, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 21134, -1000, 21134, -1000, 21134, - -1000, 21134, -1000, 21134, -1000, 21134, -1000, 21134, -1000, 21134, - -1000, 21134, -1000, 21134, -1000, 21134, -1000, 21134, -1000, 21134, - -1000, 21134, -1000, 21134, -1000, 21134, -1000, -1000, 21134, -1000, - -1000, -1000, 21134, -1000, 21134, -1000, 21134, -1000, -1000, -1000, - 21134, 284, 352, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1399, 381, -1000, -1000, -1000, -1000, - 2588, -1000, 1399, 21134, 1134, -1000, 1134, 1134, 1134, -1000, - -1000, -1000, 21134, -1000, 21134, 21134, -1000, 21134, -1000, 21134, - -1000, -1000, -1000, -1000, 21134, 1717, 2387, 1717, 1717, 31230, - -1000, -1000, 2567, 2518, 2544, 2287, 2299, 2299, 2325, -1000, - 2543, 2533, -1000, 1483, 2529, 1478, 1015, -1000, 53581, 21134, - 239, -1000, 399, 52860, 239, 52860, -1000, 2564, -1000, -1000, - 21134, 2018, -1000, 21134, -1000, -1000, -1000, -1000, 4291, 2574, - 1846, -1000, -1000, 914, -1000, 21134, -1000, -1000, -1000, 9435, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1476, 1448, - -1000, -1000, 2017, 21134, -1000, -1000, -1000, 1571, 1523, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2009, -1000, -1000, - -1000, -1000, 375, -511, 1975, 52860, 1177, -1000, 1666, 1887, - 335, 239, 1440, 958, 958, 958, 1174, 1171, 36998, 1648, - -1000, 52860, 446, -1000, 375, -1000, -242, -243, 1341, -1000, - -1000, 2452, -1000, -1000, 15353, -1000, -1000, 2007, 2127, -1000, - -1000, -1000, -1000, 2242, -190, -218, -1000, -1000, 1341, 1341, - 2138, 1399, -1000, 1341, 1341, 1482, 1446, -1000, 1341, 1341, - 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, - 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1540, 1744, - -1000, 284, 1399, 2158, -1000, -1000, 4291, -1000, -1000, 2564, - 2527, 19, -1000, -1000, 233, 19, 1278, 999, 1399, 1399, - 999, 1674, 1341, 1644, 1640, 1341, 1341, 31951, -1000, 2524, - 2517, 37719, 37719, 965, 2518, -276, 21134, 21134, 2290, 1158, - -1000, -1000, -1000, -1000, 1431, 1426, -1000, 1422, -1000, 2622, - -1000, 1278, -1000, 239, -1000, 820, 1864, -1000, 2484, 1278, - 52860, 1278, 71, 2564, -1000, 1341, -1000, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, -1000, -1000, 52860, 1878, - -1000, -1000, 2450, 1646, 162, -1000, 1404, 1887, -1000, -1000, - 219, -1000, 21134, -1000, 36998, 1417, 1411, -1000, -1000, -1000, - -1000, -521, -1000, -1000, -1000, -1000, -1000, -1000, 409, 1880, - -1000, 955, 52860, 54302, -1000, 2171, -1000, -1000, -1000, 21134, + 426, 934, -484, 265, 264, 934, 934, 934, -526, -1000, + -1000, 1570, 1546, -1000, -214, -1000, 21006, -1000, -1000, -1000, + 1208, 1208, 1497, 1494, 1486, -1000, 1948, -1000, -1000, -1000, + 1717, -1000, -1000, -190, 52776, 52776, 52776, 52776, -1000, -1000, + 1188, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 876, 1357, 349, -201, 1357, -1000, -1000, + 342, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 21006, -1000, 21006, -1000, 1429, 21006, 2404, 1472, 21006, + 21006, -1000, 1171, 1166, 1622, -1000, -1000, -1000, 21006, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, + 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, + 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, 21006, -1000, + 21006, -1000, 21006, -1000, -1000, 21006, -1000, -1000, -1000, 21006, + -1000, 21006, -1000, 21006, -1000, -1000, -1000, 21006, 234, 353, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 21134, -1000, 1399, - 2148, -1000, -359, -1000, -485, 21134, -269, -1000, -1000, -269, - -1000, -1000, -1000, -1000, -1000, 21134, -1000, -1000, 21134, -1000, - 21134, -1000, -1000, 1616, -1000, -1000, -1000, -1000, -1000, 1616, - 1616, -1000, -276, -1000, 1865, -1000, 52860, 1278, 1835, -1000, - 1133, -1000, -1000, -1000, -1000, -1000, 53581, 1864, 52860, -1000, - 1610, 1399, 1717, 2484, -1000, 1608, -1000, 409, -1000, 2003, - 1948, -1000, -1000, -1000, 18971, -1000, -1000, -1000, -1000, -1000, - 289, -196, 15353, 10991, 1570, -1000, -193, 1341, 1540, -1000, - -459, -1000, -1000, -1000, -1000, 297, -1000, -1000, 1835, -1000, - -1000, 1603, 1510, 1398, 36277, -1000, -1000, -1000, -1000, -276, - -1000, -1000, 2448, -1000, -1000, 1668, -1000, -1000, 31230, 52139, - -1000, -181, 351, -196, 21134, 1723, 1399, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -34, -1000, -1000, 801, -1000, - -1000, -1000, 2123, -219, -1000, -1000, -1000, 303, -473, -298, - -300, 23297, -1000, 21134, -1000, 21134, -1000, 21134, -1000, -1000, - -1000, 52860, 1717, -1000, 1527, -1000, 3824, -339, 2147, -1000, - -129, -1000, -1000, -1000, 1092, 1394, -1000, -1000, -1000, -1000, - -1000, -1000, 1873, 52860, -1000, 455, -1000, -1000, 14626, -206, - -221, 996, -1000, -1000, -1000, -1000, -1000, 1134, 1308, 1292, - 1341, -1000, 52860, -1000, 52139, -322, 902, 4291, -1000, 2146, - 2113, 2596, -1000, -1000, -1000, -1000, -1000, -1000, -526, 1516, - 245, -1000, -1000, -1000, 303, -321, -1000, 21134, -1000, 21134, - -1000, 1399, -1000, -1000, 2424, 71, -1000, 2615, -1000, 2578, - 983, 983, -1000, 1162, -526, -1000, -1000, -1000, -1000, 1341, - 1341, -1000, -369, -1000, -1000, -1000, -1000, -1000, 452, 1175, - -1000, -1000, -1000, -1000, -1000, 4291, -1000, -1000, -1000, 261, - 261, -1000, -1000, + -1000, 1357, 336, -1000, -1000, -1000, -1000, 2465, -1000, 1357, + 21006, 1198, -1000, 1198, 1198, 1198, -1000, -1000, -1000, 21006, + -1000, 21006, 21006, -1000, 21006, -1000, 21006, -1000, -1000, -1000, + -1000, 21006, 1446, 2238, 1446, 1446, 31116, -1000, -1000, 2445, + 2438, 2447, 2190, 2208, 2208, 2211, -1000, 2430, 2429, -1000, + 1461, 2427, 1457, 996, -1000, 53498, 21006, 240, -1000, 378, + 52776, 240, 52776, -1000, 2426, -1000, -1000, 21006, 1954, -1000, + 21006, -1000, -1000, -1000, -1000, 8458, 2486, 1823, -1000, -1000, + 887, -1000, 21006, -1000, -1000, -1000, 54700, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1445, 1436, -1000, -1000, 1950, + 21006, -1000, -1000, -1000, 1528, 1468, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1948, -1000, -1000, -1000, -1000, 311, + -516, 2292, 52776, 1155, -1000, 1536, 1835, 307, 240, 1434, + 934, 934, 934, 1150, 1149, 36892, 1533, -1000, 52776, 401, + -1000, 311, -1000, -219, -224, 1622, -1000, -1000, 2352, -1000, + -1000, 15217, -1000, -1000, 1935, 2044, -1000, -1000, -1000, -1000, + 2154, -179, -206, -1000, -1000, 1622, 1622, 1849, 1357, -1000, + 1622, 1622, 1455, 1381, -1000, 1622, 1622, 1622, 1622, 1622, + 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, + 1622, 1622, 1622, 1622, 1622, 1410, 1808, -1000, 234, 1357, + 2064, -1000, -1000, 8458, -1000, -1000, 2426, 2407, 54, -1000, + -1000, 202, 54, 1429, 969, 1357, 1357, 969, 1799, 1622, + 1777, 1627, 1622, 1622, 31838, -1000, 2406, 2403, 37614, 37614, + 929, 2438, -269, 21006, 21006, 2184, 1154, -1000, -1000, -1000, + -1000, 1349, 1341, -1000, 1337, -1000, 2537, -1000, 1429, -1000, + 240, -1000, 512, 1818, -1000, 2404, 1429, 52776, 1429, 64, + 2426, -1000, 1622, -1000, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1446, 1446, -1000, -1000, 52776, 2274, -1000, -1000, 2349, + 1527, 164, -1000, 1359, 1835, -1000, -1000, 217, -1000, 21006, + -1000, 36892, 1334, 1329, -1000, -1000, -1000, -1000, -526, -1000, + -1000, -1000, -1000, -1000, -1000, 408, 1830, -1000, 932, 52776, + 54220, -1000, 2148, -1000, -1000, -1000, 21006, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 21006, -1000, 1357, 2062, -1000, -355, + -1000, -488, 21006, -252, -1000, -1000, -252, -1000, -1000, -1000, + -1000, -1000, 21006, -1000, -1000, 21006, -1000, 21006, -1000, -1000, + 1504, -1000, -1000, -1000, -1000, -1000, 1504, 1504, -1000, -269, + -1000, 1827, -1000, 52776, 1429, 1798, -1000, 1147, -1000, -1000, + -1000, -1000, -1000, 53498, 1818, 52776, -1000, 1491, 1357, 1446, + 2404, -1000, 1465, -1000, 408, -1000, 1931, 1980, -1000, -1000, + -1000, 18840, -1000, -1000, -1000, -1000, -1000, 284, -183, 15217, + 10849, 1450, -1000, -182, 1622, 1410, -1000, -458, -1000, -1000, + -1000, -1000, 293, -1000, -1000, 1798, -1000, -1000, 1541, 1467, + 1454, 36170, -1000, -1000, -1000, -1000, -269, -1000, -1000, 2344, + -1000, -1000, 1781, -1000, -1000, 31116, 52054, -1000, -174, 330, + -183, 21006, 1926, 1357, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -34, -1000, -1000, 499, -1000, -1000, -1000, 2042, + -204, -1000, -1000, -1000, 296, -476, -302, -304, 23172, -1000, + 21006, -1000, 21006, -1000, 21006, -1000, -1000, -1000, 52776, 1446, + -1000, 1406, -1000, 4875, -317, 2061, -1000, -127, -1000, -1000, + -1000, 1042, 1324, -1000, -1000, -1000, -1000, -1000, -1000, 1896, + 52776, -1000, 418, -1000, -1000, 14489, -190, -209, 956, -1000, + -1000, -1000, -1000, -1000, 1198, 1418, 1270, 1622, -1000, 52776, + -1000, 52054, -307, 875, 8458, -1000, 2053, 1955, 2494, -1000, + -1000, -1000, -1000, -1000, -1000, -528, 1356, 235, -1000, -1000, + -1000, 296, -313, -1000, 21006, -1000, 21006, -1000, 1357, -1000, + -1000, 2319, 64, -1000, 2510, -1000, 2487, 993, 993, -1000, + 1097, -528, -1000, -1000, -1000, -1000, 1622, 1622, -1000, -320, + -1000, -1000, -1000, -1000, -1000, 365, 1144, -1000, -1000, -1000, + -1000, -1000, 8458, -1000, -1000, -1000, 228, 228, -1000, -1000, } var yyPgo = [...]int{ - 0, 3319, 3318, 37, 5, 40, 35, 3317, 68, 102, - 208, 49, 219, 97, 3315, 175, 3314, 3313, 3312, 3309, - 3307, 3301, 2698, 2694, 2675, 3300, 3298, 3294, 3293, 3291, - 3277, 3271, 3268, 3255, 3251, 171, 162, 198, 3249, 3178, - 3176, 117, 193, 82, 85, 191, 3170, 3163, 69, 3161, - 3160, 3157, 190, 186, 182, 1075, 3156, 184, 113, 46, - 3155, 3152, 3150, 3149, 3146, 3144, 3143, 3141, 3129, 3128, - 3127, 3126, 3125, 3124, 3121, 3120, 3117, 3116, 297, 3115, - 3114, 20, 3110, 72, 3109, 3108, 3107, 3106, 3105, 7, - 3103, 3102, 27, 42, 3101, 3099, 48, 3096, 3093, 3092, - 3091, 3090, 47, 3089, 21, 3087, 39, 3086, 3085, 122, - 3082, 3077, 3076, 41, 3075, 3074, 3073, 30, 166, 3072, - 3071, 137, 3070, 3067, 3063, 168, 218, 3056, 3054, 178, - 107, 111, 3051, 3045, 93, 192, 3041, 124, 3039, 3036, - 3034, 150, 3033, 3162, 3032, 66, 62, 3030, 199, 3029, - 3028, 197, 63, 10, 16, 17, 3026, 3023, 64, 65, - 3021, 109, 3014, 3012, 104, 80, 3011, 89, 94, 3007, - 3003, 22, 6, 2998, 1, 4, 2, 95, 2996, 2993, - 106, 2988, 2987, 2985, 96, 2976, 2974, 6027, 2969, 88, - 128, 100, 144, 2968, 172, 115, 2967, 2965, 2964, 2963, - 2962, 51, 2958, 2956, 2953, 134, 244, 164, 2950, 146, - 340, 53, 145, 2949, 196, 77, 200, 165, 2948, 2947, - 131, 130, 2945, 2942, 56, 163, 189, 2938, 91, 127, - 123, 167, 90, 135, 2936, 2934, 57, 61, 2933, 2932, - 2929, 2925, 169, 2916, 2909, 60, 2901, 55, 2899, 201, - 2898, 136, 75, 2897, 170, 179, 2890, 140, 2887, 2885, - 67, 92, 70, 38, 2884, 158, 161, 125, 181, 2880, - 2874, 54, 2870, 2865, 2864, 194, 304, 2859, 2858, 295, - 176, 143, 148, 83, 2855, 263, 2854, 2851, 13, 4301, - 6943, 2844, 36, 160, 2838, 2835, 6299, 15, 43, 31, - 2828, 205, 2819, 2816, 2809, 2807, 195, 204, 110, 159, - 58, 2806, 2804, 2797, 34, 2793, 2787, 2785, 2784, 2781, - 2780, 73, 33, 32, 29, 212, 59, 19, 98, 157, - 151, 74, 2779, 2778, 2777, 119, 81, 2775, 155, 153, - 121, 99, 2772, 180, 139, 116, 2770, 101, 26, 2765, - 2758, 2757, 2754, 87, 2752, 2751, 2750, 2741, 149, 141, - 118, 78, 2735, 79, 114, 147, 142, 50, 2732, 44, - 2730, 2729, 23, 187, 28, 2728, 18, 103, 108, 2725, - 4924, 185, 2723, 8, 261, 156, 2722, 2717, 9, 12, - 11, 2712, 2711, 2707, 2706, 129, 2705, 2700, 2693, 2689, - 25, 45, 24, 14, 112, 76, 2688, 2687, 138, 2668, - 2656, 0, 1003, 126, 2642, 206, + 0, 3315, 3312, 41, 5, 39, 38, 3308, 3307, 3305, + 171, 3291, 3290, 3278, 3276, 3262, 3256, 2630, 2613, 2575, + 3185, 3183, 3177, 3171, 3170, 3169, 3168, 3167, 3164, 37, + 103, 68, 93, 214, 199, 3161, 176, 162, 198, 3159, + 3156, 3154, 117, 187, 80, 82, 195, 3151, 3148, 69, + 3137, 3136, 3135, 192, 185, 183, 1033, 3134, 184, 113, + 50, 3132, 3131, 3128, 3127, 3122, 3119, 3117, 3115, 3110, + 3109, 3107, 3106, 3101, 3100, 3099, 3093, 3092, 3089, 299, + 3088, 3083, 20, 3079, 72, 3075, 3071, 3070, 3068, 3067, + 7, 3066, 3063, 27, 49, 3061, 3059, 44, 3058, 3053, + 3051, 3028, 3016, 47, 3015, 21, 3013, 42, 3012, 3011, + 124, 3003, 3000, 2993, 43, 2992, 2987, 2986, 30, 166, + 2982, 2981, 135, 2976, 2975, 2972, 168, 216, 2970, 2969, + 178, 101, 105, 2968, 2967, 106, 193, 2963, 123, 2960, + 2957, 2954, 150, 2953, 3188, 2952, 66, 62, 2949, 194, + 2941, 2935, 233, 63, 10, 16, 17, 2929, 2925, 64, + 74, 2922, 108, 2915, 2911, 97, 83, 2908, 104, 92, + 2907, 2904, 22, 6, 2903, 1, 4, 2, 85, 2897, + 2892, 111, 2890, 2886, 2884, 91, 2883, 2881, 1056, 2880, + 89, 128, 99, 84, 2878, 172, 131, 2874, 2869, 2867, + 2865, 2863, 48, 2855, 2854, 2851, 134, 244, 164, 2849, + 145, 340, 51, 144, 2848, 196, 75, 200, 165, 2847, + 2844, 133, 132, 2842, 2836, 56, 163, 190, 2828, 96, + 127, 119, 167, 95, 130, 2826, 2823, 57, 61, 2822, + 2821, 2818, 2811, 169, 2805, 2801, 60, 2799, 55, 2797, + 189, 2788, 136, 70, 2787, 170, 177, 2784, 141, 2782, + 2781, 65, 100, 110, 35, 2780, 158, 161, 125, 174, + 2779, 2777, 54, 2774, 2772, 2771, 197, 272, 2769, 2768, + 295, 180, 140, 147, 81, 2767, 321, 2764, 2763, 13, + 4386, 6663, 2760, 32, 160, 2757, 2755, 6869, 15, 45, + 31, 2752, 205, 2749, 2748, 2746, 2744, 220, 204, 112, + 159, 58, 2743, 2739, 2738, 34, 2735, 2725, 2724, 2709, + 2708, 2706, 73, 36, 33, 29, 212, 59, 19, 94, + 157, 151, 67, 2703, 2702, 2701, 121, 79, 2696, 153, + 152, 120, 90, 2692, 182, 142, 116, 2690, 98, 26, + 2689, 2684, 2680, 2676, 87, 2675, 2674, 2673, 2668, 149, + 143, 118, 78, 2664, 76, 114, 148, 146, 53, 2662, + 46, 2659, 2657, 23, 188, 28, 2655, 18, 102, 109, + 2654, 5666, 186, 2653, 8, 314, 155, 2652, 2649, 9, + 12, 11, 2642, 2638, 2636, 2635, 129, 2634, 2629, 2622, + 2614, 25, 52, 24, 14, 115, 77, 2599, 2595, 137, + 2587, 2583, 2576, 0, 1003, 126, 2509, 206, } -//line sql.y:8538 +//line sql.y:8563 type yySymType struct { union any empty struct{} @@ -7946,6 +7982,11 @@ func (st *yySymType) jtOnResponseUnion() *JtOnResponse { return v } +func (st *yySymType) killTypeUnion() KillType { + v, _ := st.union.(KillType) + return v +} + func (st *yySymType) lagLeadExprTypeUnion() LagLeadExprType { v, _ := st.union.(LagLeadExprType) return v @@ -8302,195 +8343,168 @@ func (st *yySymType) withUnion() *With { } var yyR1 = [...]int{ - 0, 409, 410, 410, 7, 7, 7, 7, 7, 7, + 0, 411, 412, 412, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 257, 380, 381, 381, 255, 255, 33, 73, 35, 35, - 34, 34, 37, 37, 36, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, - 10, 11, 11, 11, 11, 13, 13, 13, 13, 13, - 20, 21, 12, 12, 22, 22, 107, 107, 23, 24, - 24, 24, 24, 413, 413, 182, 182, 180, 180, 181, - 181, 260, 260, 25, 264, 264, 266, 266, 266, 266, - 256, 256, 256, 26, 26, 265, 265, 267, 267, 267, - 270, 270, 270, 270, 309, 309, 309, 27, 27, 27, - 27, 27, 127, 127, 383, 383, 382, 376, 376, 375, - 375, 374, 379, 379, 378, 378, 377, 39, 40, 49, - 49, 49, 49, 50, 51, 384, 384, 349, 56, 56, - 55, 55, 55, 55, 55, 55, 57, 57, 53, 53, - 52, 52, 54, 54, 351, 351, 337, 337, 350, 350, - 350, 350, 350, 350, 350, 336, 336, 138, 138, 234, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 399, 399, 399, 398, - 398, 235, 235, 235, 235, 235, 235, 235, 235, 147, - 147, 158, 158, 158, 158, 158, 158, 145, 145, 146, - 144, 144, 144, 152, 152, 152, 152, 152, 152, 152, + 7, 258, 381, 382, 382, 256, 256, 28, 74, 36, + 36, 35, 35, 38, 38, 37, 31, 31, 31, 32, + 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, + 33, 33, 29, 29, 29, 29, 30, 30, 30, 30, + 30, 15, 16, 34, 34, 17, 17, 108, 108, 18, + 19, 19, 19, 19, 415, 415, 183, 183, 181, 181, + 182, 182, 261, 261, 20, 265, 265, 267, 267, 267, + 267, 257, 257, 257, 21, 21, 266, 266, 268, 268, + 268, 271, 271, 271, 271, 310, 310, 310, 22, 22, + 22, 22, 22, 128, 128, 384, 384, 383, 377, 377, + 376, 376, 375, 380, 380, 379, 379, 378, 40, 41, + 50, 50, 50, 50, 51, 52, 385, 385, 350, 57, + 57, 56, 56, 56, 56, 56, 56, 58, 58, 54, + 54, 53, 53, 55, 55, 352, 352, 338, 338, 351, + 351, 351, 351, 351, 351, 351, 337, 337, 139, 139, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 400, 400, 400, + 399, 399, 236, 236, 236, 236, 236, 236, 236, 236, + 148, 148, 159, 159, 159, 159, 159, 159, 146, 146, + 147, 145, 145, 145, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 158, 158, 154, 154, 154, 155, 155, + 155, 156, 156, 401, 401, 401, 401, 315, 315, 315, + 315, 318, 318, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 317, 317, 317, 317, 317, 317, 317, 319, + 319, 319, 319, 319, 320, 320, 320, 320, 320, 320, + 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, + 321, 321, 321, 321, 321, 321, 321, 321, 336, 336, + 322, 322, 330, 330, 331, 331, 332, 332, 332, 333, + 333, 333, 334, 334, 327, 327, 327, 327, 327, 327, + 327, 327, 327, 329, 329, 328, 328, 328, 339, 364, + 364, 363, 363, 361, 361, 361, 361, 361, 361, 361, + 361, 348, 348, 358, 358, 358, 358, 358, 347, 347, + 343, 343, 343, 344, 344, 345, 345, 342, 342, 346, + 346, 360, 360, 359, 359, 340, 340, 341, 341, 366, + 402, 402, 402, 402, 402, 403, 403, 367, 392, 394, + 394, 394, 393, 393, 390, 391, 389, 389, 389, 389, + 389, 84, 84, 84, 284, 284, 285, 285, 356, 356, + 355, 355, 355, 357, 357, 354, 354, 354, 354, 354, + 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, + 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, + 354, 354, 354, 354, 354, 354, 279, 279, 279, 388, + 388, 388, 388, 388, 388, 387, 387, 387, 353, 353, + 353, 353, 386, 386, 59, 59, 216, 216, 405, 405, + 406, 406, 406, 47, 47, 47, 47, 47, 47, 46, + 46, 46, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 48, 48, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 110, 110, 111, 111, 111, 111, 113, + 113, 113, 369, 369, 60, 60, 3, 3, 171, 173, + 174, 174, 172, 172, 172, 172, 172, 172, 62, 62, + 61, 61, 176, 175, 177, 177, 177, 1, 1, 2, + 2, 4, 4, 374, 374, 374, 374, 374, 374, 374, + 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, + 374, 374, 374, 374, 374, 335, 335, 335, 368, 368, + 370, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 116, 115, 115, 114, 117, 117, 117, 117, 117, + 117, 117, 117, 372, 372, 372, 63, 63, 373, 323, + 324, 325, 5, 6, 349, 371, 124, 124, 24, 39, + 39, 25, 25, 25, 25, 26, 26, 64, 67, 67, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 278, 278, 287, 287, 277, 277, 302, 302, + 302, 280, 280, 280, 281, 281, 398, 398, 398, 274, + 274, 66, 66, 66, 303, 303, 303, 303, 69, 69, + 407, 407, 408, 408, 409, 409, 409, 70, 71, 71, + 305, 305, 306, 306, 72, 73, 85, 85, 85, 85, + 85, 85, 85, 86, 86, 86, 86, 109, 109, 109, + 10, 10, 10, 10, 81, 81, 81, 9, 9, 11, + 68, 68, 75, 395, 395, 396, 397, 397, 397, 397, + 76, 78, 27, 27, 27, 27, 27, 27, 134, 134, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 129, 129, 129, 123, 123, 416, 79, 80, + 80, 127, 127, 127, 120, 120, 120, 126, 126, 126, + 12, 12, 13, 260, 260, 14, 14, 131, 131, 133, + 133, 133, 133, 133, 135, 135, 135, 135, 135, 135, + 135, 130, 130, 132, 132, 132, 132, 295, 295, 295, + 294, 294, 165, 165, 167, 166, 166, 168, 168, 169, + 169, 169, 169, 214, 214, 191, 191, 253, 253, 254, + 254, 252, 252, 259, 259, 255, 255, 255, 255, 262, + 262, 170, 170, 170, 170, 178, 178, 179, 179, 180, + 180, 304, 304, 300, 300, 300, 299, 299, 184, 184, + 184, 186, 185, 185, 185, 185, 187, 187, 189, 189, + 188, 188, 190, 195, 195, 194, 194, 192, 192, 192, + 192, 193, 193, 193, 193, 196, 196, 144, 144, 144, + 144, 144, 144, 144, 144, 157, 157, 157, 157, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 243, 243, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 403, 157, 157, 153, 153, 153, 154, 154, 154, - 155, 155, 400, 400, 400, 400, 314, 314, 314, 314, - 317, 317, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 316, 316, 316, 316, 316, 316, 316, 318, 318, - 318, 318, 318, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, 319, 320, - 320, 320, 320, 320, 320, 320, 320, 335, 335, 321, - 321, 329, 329, 330, 330, 331, 331, 331, 332, 332, - 332, 333, 333, 326, 326, 326, 326, 326, 326, 326, - 326, 326, 328, 328, 327, 327, 327, 338, 363, 363, - 362, 362, 360, 360, 360, 360, 360, 360, 360, 360, - 347, 347, 357, 357, 357, 357, 357, 346, 346, 342, - 342, 342, 343, 343, 344, 344, 341, 341, 345, 345, - 359, 359, 358, 358, 339, 339, 340, 340, 365, 401, - 401, 401, 401, 401, 402, 402, 366, 391, 393, 393, - 393, 392, 392, 389, 390, 388, 388, 388, 388, 388, - 83, 83, 83, 283, 283, 284, 284, 355, 355, 354, - 354, 354, 356, 356, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 278, 278, 278, 387, 387, - 387, 387, 387, 387, 386, 386, 386, 352, 352, 352, - 352, 385, 385, 58, 58, 215, 215, 404, 404, 405, - 405, 405, 46, 46, 46, 46, 46, 46, 45, 45, - 45, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 47, 47, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 109, 109, 110, 110, 110, 110, 112, 112, - 112, 368, 368, 59, 59, 3, 3, 170, 172, 173, - 173, 171, 171, 171, 171, 171, 171, 61, 61, 60, - 60, 175, 174, 176, 176, 176, 1, 1, 2, 2, - 4, 4, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 334, 334, 334, 367, 367, 369, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 115, 114, 114, 113, 116, 116, 116, 116, 116, 116, - 116, 116, 371, 371, 371, 62, 62, 372, 322, 323, - 324, 5, 6, 348, 370, 123, 123, 29, 38, 38, - 30, 30, 30, 30, 31, 31, 63, 66, 66, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 277, 277, 286, 286, 276, 276, 301, 301, 301, - 279, 279, 279, 280, 280, 397, 397, 397, 273, 273, - 65, 65, 65, 302, 302, 302, 302, 68, 68, 406, - 406, 407, 407, 408, 408, 408, 69, 70, 70, 304, - 304, 305, 305, 71, 72, 84, 84, 84, 84, 84, - 84, 84, 85, 85, 85, 85, 108, 108, 108, 15, - 15, 15, 15, 80, 80, 80, 14, 14, 17, 67, - 67, 74, 394, 394, 395, 396, 396, 396, 396, 75, - 77, 32, 32, 32, 32, 32, 32, 133, 133, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 128, 128, 128, 122, 122, 414, 78, 79, 79, - 126, 126, 126, 119, 119, 119, 125, 125, 125, 16, - 16, 18, 259, 259, 19, 19, 130, 130, 132, 132, - 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, - 129, 129, 131, 131, 131, 131, 294, 294, 294, 293, - 293, 164, 164, 166, 165, 165, 167, 167, 168, 168, - 168, 168, 213, 213, 190, 190, 252, 252, 253, 253, - 251, 251, 258, 258, 254, 254, 254, 254, 261, 261, - 169, 169, 169, 169, 177, 177, 178, 178, 179, 179, - 303, 303, 299, 299, 299, 298, 298, 183, 183, 183, - 185, 184, 184, 184, 184, 186, 186, 188, 188, 187, - 187, 189, 194, 194, 193, 193, 191, 191, 191, 191, - 192, 192, 192, 192, 195, 195, 143, 143, 143, 143, - 143, 143, 143, 143, 156, 156, 156, 156, 159, 159, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 242, - 242, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 218, 218, 217, 217, 86, 86, 86, 87, 87, - 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, - 89, 89, 91, 91, 90, 90, 208, 208, 291, 291, - 92, 93, 93, 96, 96, 95, 94, 94, 100, 100, - 97, 97, 99, 99, 98, 101, 101, 102, 103, 103, - 274, 274, 196, 196, 204, 204, 204, 204, 197, 197, - 197, 197, 197, 197, 197, 205, 205, 205, 212, 206, - 206, 202, 202, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 161, 161, 161, 161, 223, 223, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 150, 150, 162, 162, 162, - 162, 163, 163, 163, 163, 163, 163, 163, 311, 311, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 219, 219, 218, 218, 87, 87, 87, 88, + 88, 89, 89, 89, 89, 89, 90, 90, 90, 90, + 90, 90, 90, 92, 92, 91, 91, 209, 209, 292, + 292, 93, 94, 94, 97, 97, 96, 95, 95, 101, + 101, 98, 98, 100, 100, 99, 102, 102, 103, 104, + 104, 275, 275, 197, 197, 205, 205, 205, 205, 198, + 198, 198, 198, 198, 198, 198, 206, 206, 206, 213, + 207, 207, 203, 203, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 162, 162, 162, 162, 224, + 224, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 151, 151, 163, 163, + 163, 163, 164, 164, 164, 164, 164, 164, 164, 312, + 312, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 415, 415, - 325, 325, 325, 203, 203, 203, 203, 203, 124, 124, - 124, 124, 124, 308, 308, 308, 312, 312, 312, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 313, 313, 221, 221, 120, 120, - 219, 219, 220, 222, 222, 214, 214, 214, 214, 216, - 216, 199, 199, 199, 224, 224, 225, 225, 104, 105, - 105, 106, 106, 226, 226, 228, 227, 227, 229, 230, - 230, 230, 231, 231, 232, 232, 232, 48, 48, 48, - 48, 48, 43, 43, 43, 43, 44, 44, 44, 44, - 135, 135, 135, 135, 137, 137, 136, 136, 81, 81, - 82, 82, 82, 141, 141, 142, 142, 142, 139, 139, - 140, 140, 249, 249, 233, 233, 233, 240, 240, 240, - 236, 236, 238, 238, 238, 239, 239, 239, 237, 246, - 246, 248, 248, 247, 247, 243, 243, 244, 244, 245, - 245, 245, 241, 241, 198, 198, 198, 198, 198, 250, - 250, 250, 250, 262, 262, 209, 209, 211, 211, 210, - 210, 160, 263, 263, 271, 268, 268, 269, 269, 295, - 295, 295, 272, 272, 285, 285, 281, 281, 282, 282, - 275, 275, 287, 287, 287, 76, 207, 207, 364, 364, - 361, 290, 290, 292, 292, 296, 296, 300, 300, 297, - 297, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 417, + 417, 326, 326, 326, 204, 204, 204, 204, 204, 125, + 125, 125, 125, 125, 309, 309, 309, 313, 313, 313, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 314, 314, 222, 222, 121, + 121, 220, 220, 221, 223, 223, 215, 215, 215, 215, + 217, 217, 200, 200, 200, 225, 225, 226, 226, 105, + 106, 106, 107, 107, 227, 227, 229, 228, 228, 230, + 231, 231, 231, 232, 232, 233, 233, 233, 49, 49, + 49, 49, 49, 44, 44, 44, 44, 45, 45, 45, + 45, 136, 136, 136, 136, 138, 138, 137, 137, 82, + 82, 83, 83, 83, 142, 142, 143, 143, 143, 140, + 140, 141, 141, 250, 250, 234, 234, 234, 241, 241, + 241, 237, 237, 239, 239, 239, 240, 240, 240, 238, + 247, 247, 249, 249, 248, 248, 244, 244, 245, 245, + 246, 246, 246, 242, 242, 199, 199, 199, 199, 199, + 251, 251, 251, 251, 263, 263, 210, 210, 212, 212, + 211, 211, 161, 264, 264, 272, 269, 269, 270, 270, + 296, 296, 296, 273, 273, 286, 286, 282, 282, 283, + 283, 276, 276, 288, 288, 288, 77, 208, 208, 365, + 365, 362, 291, 291, 293, 293, 297, 297, 301, 301, + 298, 298, 8, 410, 410, 410, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, @@ -8505,190 +8519,219 @@ var yyR1 = [...]int{ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 411, 412, 306, 307, 307, 307, + 289, 289, 289, 289, 289, 289, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 413, 414, 307, 308, 308, 308, } var yyR2 = [...]int{ 0, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 1, 1, 0, 1, 1, 1, 2, 3, 2, 3, - 0, 1, 3, 1, 4, 3, 3, 4, 3, 2, - 3, 4, 3, 4, 2, 7, 1, 3, 3, 3, - 3, 1, 2, 1, 1, 3, 2, 3, 3, 2, - 5, 7, 10, 9, 7, 8, 1, 1, 10, 11, - 9, 8, 8, 1, 1, 1, 3, 1, 3, 1, - 3, 0, 4, 3, 1, 3, 3, 3, 3, 3, - 1, 1, 2, 5, 4, 1, 3, 3, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 2, 2, 6, - 12, 2, 0, 2, 0, 2, 1, 0, 2, 1, - 3, 3, 0, 1, 1, 3, 3, 6, 4, 7, - 8, 8, 8, 6, 3, 1, 1, 5, 0, 1, - 1, 1, 1, 2, 2, 2, 0, 1, 4, 4, - 4, 4, 4, 4, 2, 4, 1, 3, 1, 1, - 3, 4, 3, 3, 3, 5, 10, 0, 2, 0, - 2, 3, 5, 3, 4, 2, 3, 2, 3, 3, - 3, 3, 2, 2, 4, 4, 1, 1, 1, 1, - 1, 0, 2, 2, 3, 3, 2, 2, 2, 1, - 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 0, 1, 1, 1, 2, 3, 2, + 3, 0, 1, 3, 1, 4, 3, 3, 4, 3, + 2, 3, 4, 3, 4, 2, 7, 1, 3, 3, + 3, 3, 1, 2, 1, 1, 3, 2, 3, 3, + 2, 5, 7, 10, 9, 7, 8, 1, 1, 10, + 11, 9, 8, 8, 1, 1, 1, 3, 1, 3, + 1, 3, 0, 4, 3, 1, 3, 3, 3, 3, + 3, 1, 1, 2, 5, 4, 1, 3, 3, 2, + 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, + 6, 12, 2, 0, 2, 0, 2, 1, 0, 2, + 1, 3, 3, 0, 1, 1, 3, 3, 6, 4, + 7, 8, 8, 8, 6, 3, 1, 1, 5, 0, + 1, 1, 1, 1, 2, 2, 2, 0, 1, 4, + 4, 4, 4, 4, 4, 2, 4, 1, 3, 1, + 1, 3, 4, 3, 3, 3, 5, 10, 0, 2, + 0, 2, 3, 5, 3, 4, 2, 3, 2, 3, + 3, 3, 3, 2, 2, 4, 4, 1, 1, 1, + 1, 1, 0, 2, 2, 3, 3, 2, 2, 2, + 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, + 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 5, 5, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 0, - 3, 0, 5, 1, 3, 0, 3, 5, 0, 1, - 1, 0, 1, 0, 3, 3, 2, 2, 2, 1, - 2, 2, 0, 1, 0, 2, 2, 5, 0, 1, - 1, 2, 1, 3, 2, 1, 1, 3, 3, 3, - 0, 1, 4, 3, 3, 4, 2, 0, 2, 1, - 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, - 1, 3, 3, 4, 3, 1, 3, 1, 7, 6, - 7, 7, 8, 8, 0, 1, 5, 2, 1, 1, - 1, 0, 1, 3, 3, 1, 1, 2, 2, 2, - 0, 1, 1, 1, 2, 0, 1, 0, 1, 1, - 3, 2, 1, 2, 3, 3, 3, 4, 4, 3, - 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 1, 1, 2, 1, 2, 1, 3, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, + 2, 2, 2, 1, 1, 1, 1, 1, 5, 5, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 0, 3, 0, 5, 1, 3, 0, 3, 5, 0, + 1, 1, 0, 1, 0, 3, 3, 2, 2, 2, + 1, 2, 2, 0, 1, 0, 2, 2, 5, 0, + 1, 1, 2, 1, 3, 2, 1, 1, 3, 3, + 3, 0, 1, 4, 3, 3, 4, 2, 0, 2, + 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, + 1, 1, 3, 3, 4, 3, 1, 3, 1, 7, + 6, 7, 7, 8, 8, 0, 1, 5, 2, 1, + 1, 1, 0, 1, 3, 3, 1, 1, 2, 2, + 2, 0, 1, 1, 1, 2, 0, 1, 0, 1, + 1, 3, 2, 1, 2, 3, 3, 3, 4, 4, + 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 4, 5, 0, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, - 1, 0, 1, 0, 1, 0, 2, 0, 2, 0, - 2, 2, 0, 1, 5, 1, 3, 7, 1, 3, - 3, 1, 2, 2, 2, 5, 5, 5, 6, 8, - 5, 5, 4, 4, 4, 6, 5, 5, 5, 2, - 2, 2, 2, 3, 3, 3, 4, 3, 3, 1, - 3, 5, 1, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 2, 2, 3, 4, 4, 2, 11, 3, - 6, 8, 6, 6, 6, 13, 8, 6, 10, 5, - 5, 5, 7, 5, 5, 5, 5, 5, 7, 7, - 5, 5, 0, 6, 5, 6, 4, 5, 0, 8, - 9, 0, 3, 0, 1, 0, 3, 8, 4, 1, - 3, 3, 6, 7, 7, 8, 4, 0, 1, 0, - 1, 3, 3, 1, 1, 2, 1, 1, 0, 2, - 0, 2, 5, 3, 7, 4, 4, 4, 4, 3, - 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 2, 0, 2, 2, 1, 3, 2, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 1, 3, 3, 0, 2, 2, 2, 2, 2, - 2, 2, 4, 4, 3, 0, 1, 4, 3, 4, - 4, 3, 3, 3, 2, 1, 3, 3, 3, 5, - 7, 7, 6, 5, 3, 2, 3, 5, 5, 3, - 3, 7, 3, 3, 3, 3, 4, 7, 5, 2, - 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, - 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, - 4, 4, 2, 3, 3, 3, 3, 5, 2, 3, - 3, 2, 3, 4, 4, 4, 3, 4, 4, 5, - 3, 0, 1, 0, 1, 1, 1, 0, 2, 2, - 0, 2, 2, 0, 2, 0, 1, 1, 1, 1, - 2, 1, 3, 1, 1, 1, 1, 1, 3, 0, - 1, 1, 3, 3, 2, 2, 1, 1, 5, 0, - 1, 0, 1, 2, 3, 0, 3, 3, 3, 3, - 3, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 4, 4, 4, 2, - 2, 3, 1, 3, 2, 1, 2, 1, 2, 2, - 4, 3, 3, 6, 4, 7, 6, 1, 3, 2, - 2, 2, 2, 1, 1, 1, 3, 2, 1, 1, - 1, 0, 1, 1, 0, 3, 0, 2, 0, 2, - 1, 2, 2, 0, 1, 1, 0, 1, 1, 5, - 5, 4, 0, 2, 4, 4, 0, 1, 0, 1, - 2, 3, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 1, 2, 3, 5, 0, 1, 2, 1, - 1, 0, 1, 2, 1, 3, 1, 1, 1, 4, - 3, 1, 1, 2, 3, 7, 0, 3, 0, 1, - 1, 3, 1, 3, 1, 1, 3, 3, 1, 3, - 4, 4, 4, 3, 2, 4, 0, 1, 0, 2, - 0, 1, 0, 1, 2, 1, 1, 1, 2, 2, - 1, 2, 3, 2, 3, 2, 2, 2, 1, 1, - 3, 3, 0, 1, 1, 2, 6, 5, 6, 6, - 0, 2, 3, 3, 0, 2, 3, 3, 3, 2, - 3, 1, 3, 6, 3, 4, 3, 1, 3, 4, - 5, 6, 3, 4, 5, 6, 3, 4, 1, 1, - 1, 3, 3, 3, 3, 3, 3, 5, 5, 3, - 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, - 3, 1, 1, 1, 2, 2, 2, 2, 1, 1, - 2, 7, 7, 6, 6, 2, 2, 5, 6, 3, - 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, - 2, 4, 0, 1, 2, 5, 0, 3, 0, 1, - 4, 4, 2, 0, 1, 1, 2, 2, 1, 1, - 2, 2, 0, 1, 1, 1, 1, 5, 1, 3, - 0, 3, 1, 1, 1, 2, 1, 2, 1, 1, + 3, 3, 3, 3, 4, 5, 0, 2, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, + 1, 1, 0, 1, 0, 1, 0, 2, 0, 2, + 0, 2, 2, 0, 1, 5, 1, 3, 7, 1, + 3, 3, 1, 2, 2, 2, 5, 5, 5, 6, + 8, 5, 5, 4, 4, 4, 6, 5, 5, 5, + 2, 2, 2, 2, 3, 3, 3, 4, 3, 3, + 1, 3, 5, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 2, 3, 4, 4, 2, 11, + 3, 6, 8, 6, 6, 6, 13, 8, 6, 10, + 5, 5, 5, 7, 5, 5, 5, 5, 5, 7, + 7, 5, 5, 0, 6, 5, 6, 4, 5, 0, + 8, 9, 0, 3, 0, 1, 0, 3, 8, 4, + 1, 3, 3, 6, 7, 7, 8, 4, 0, 1, + 0, 1, 3, 3, 1, 1, 2, 1, 1, 0, + 2, 0, 2, 5, 3, 7, 4, 4, 4, 4, + 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 2, 0, 2, 2, 1, 3, + 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 1, 3, 3, 0, 2, 2, 2, 2, + 2, 2, 2, 4, 4, 3, 0, 1, 4, 3, + 4, 4, 3, 3, 3, 2, 1, 3, 3, 3, + 5, 7, 7, 6, 5, 3, 2, 3, 5, 5, + 3, 3, 7, 3, 3, 3, 3, 4, 7, 5, + 2, 4, 4, 4, 4, 4, 5, 5, 4, 4, + 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, + 4, 4, 4, 2, 3, 3, 3, 3, 5, 2, + 3, 3, 2, 3, 4, 4, 4, 3, 4, 4, + 5, 3, 0, 1, 0, 1, 1, 1, 0, 2, + 2, 0, 2, 2, 0, 2, 0, 1, 1, 1, + 1, 2, 1, 3, 1, 1, 1, 1, 1, 3, + 0, 1, 1, 3, 3, 2, 2, 1, 1, 5, + 0, 1, 0, 1, 2, 3, 0, 3, 3, 3, + 3, 3, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 1, 4, 4, 4, + 2, 2, 3, 1, 3, 2, 1, 2, 1, 2, + 2, 4, 3, 3, 6, 4, 7, 6, 1, 3, + 2, 2, 2, 2, 1, 1, 1, 3, 2, 1, + 1, 1, 0, 1, 1, 0, 3, 0, 2, 0, + 2, 1, 2, 2, 0, 1, 1, 0, 1, 1, + 5, 5, 4, 0, 2, 4, 4, 0, 1, 0, + 1, 2, 3, 4, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 1, 2, 3, 5, 0, 1, 2, + 1, 1, 0, 1, 2, 1, 3, 1, 1, 1, + 4, 3, 1, 1, 2, 3, 7, 0, 3, 0, + 1, 1, 3, 1, 3, 1, 1, 3, 3, 1, + 3, 4, 4, 4, 3, 2, 4, 0, 1, 0, + 2, 0, 1, 0, 1, 2, 1, 1, 1, 2, + 2, 1, 2, 3, 2, 3, 2, 2, 2, 1, + 1, 3, 3, 0, 1, 1, 2, 6, 5, 6, + 6, 0, 2, 3, 3, 0, 2, 3, 3, 3, + 2, 3, 1, 3, 6, 3, 4, 3, 1, 3, + 4, 5, 6, 3, 4, 5, 6, 3, 4, 1, + 1, 1, 3, 3, 3, 3, 3, 3, 5, 5, + 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 2, 2, 2, 2, 1, + 1, 2, 7, 7, 6, 6, 2, 2, 5, 6, + 3, 3, 1, 3, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 4, 2, 4, 0, 1, 2, 5, 0, 3, 0, + 1, 4, 4, 2, 0, 1, 1, 2, 2, 1, + 1, 2, 2, 0, 1, 1, 1, 1, 5, 1, + 3, 0, 3, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 4, 6, 4, 4, 8, 6, 8, 6, 5, - 4, 10, 2, 2, 1, 2, 2, 2, 2, 2, - 4, 5, 5, 5, 5, 5, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 8, 4, 8, 8, - 6, 5, 4, 4, 4, 4, 4, 7, 4, 4, - 6, 6, 6, 8, 6, 6, 4, 4, 3, 4, - 6, 6, 4, 4, 6, 4, 6, 4, 4, 4, - 4, 4, 4, 6, 4, 6, 4, 4, 4, 6, - 4, 6, 4, 4, 6, 4, 6, 4, 6, 8, + 1, 3, 4, 6, 4, 4, 8, 6, 8, 6, + 5, 4, 10, 2, 2, 1, 2, 2, 2, 2, + 2, 4, 5, 5, 5, 5, 5, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 8, 4, 8, + 8, 6, 5, 4, 4, 4, 4, 4, 7, 4, + 4, 6, 6, 6, 8, 6, 6, 4, 4, 3, + 4, 6, 6, 4, 4, 6, 4, 6, 4, 4, + 4, 4, 4, 4, 6, 4, 6, 4, 4, 4, + 6, 4, 6, 4, 4, 6, 4, 6, 4, 6, + 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, - 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, - 6, 8, 4, 6, 8, 4, 4, 4, 6, 4, - 6, 4, 8, 6, 4, 4, 6, 4, 6, 8, - 4, 6, 8, 4, 4, 6, 8, 6, 4, 6, - 6, 8, 10, 7, 8, 8, 9, 4, 4, 4, - 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 4, 4, 4, 4, 4, 4, 6, 4, 6, - 5, 9, 6, 9, 8, 6, 8, 8, 8, 6, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, - 6, 8, 10, 12, 14, 6, 8, 8, 10, 12, - 14, 6, 8, 10, 12, 6, 8, 4, 4, 3, - 4, 6, 6, 4, 6, 4, 6, 8, 0, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 4, 6, 8, 4, 6, 8, 4, 4, 4, 6, + 4, 6, 4, 8, 6, 4, 4, 6, 4, 6, + 8, 4, 6, 8, 4, 4, 6, 8, 6, 4, + 6, 6, 8, 10, 7, 8, 8, 9, 4, 4, + 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 4, 4, 4, 4, 4, 4, 6, 4, + 6, 5, 9, 6, 9, 8, 6, 8, 8, 8, + 6, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 2, 6, 8, 10, 12, 14, 6, 8, 8, 10, + 12, 14, 6, 8, 10, 12, 6, 8, 4, 4, + 3, 4, 6, 6, 4, 6, 4, 6, 8, 0, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, - 0, 2, 3, 4, 4, 4, 4, 4, 0, 3, - 4, 7, 3, 1, 1, 1, 0, 5, 5, 2, - 3, 1, 2, 2, 1, 2, 1, 2, 2, 1, - 2, 2, 1, 1, 0, 1, 0, 1, 0, 2, - 1, 2, 4, 0, 2, 1, 1, 3, 5, 1, - 1, 1, 2, 2, 0, 3, 0, 2, 2, 1, - 3, 0, 1, 0, 1, 3, 1, 3, 2, 0, - 1, 1, 0, 1, 2, 4, 4, 0, 2, 2, - 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, - 0, 3, 3, 3, 0, 3, 1, 1, 0, 4, - 0, 1, 1, 0, 3, 1, 3, 2, 1, 1, - 0, 1, 2, 4, 9, 3, 5, 0, 3, 3, - 0, 1, 0, 2, 2, 0, 2, 2, 2, 0, - 2, 1, 2, 3, 3, 0, 2, 1, 2, 3, - 4, 3, 0, 1, 2, 1, 5, 4, 4, 1, - 3, 3, 5, 0, 5, 1, 3, 1, 2, 3, - 4, 1, 1, 3, 3, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 0, 1, 0, 2, 0, 3, - 0, 1, 0, 1, 1, 5, 0, 1, 0, 1, - 2, 1, 1, 1, 1, 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 2, 0, 2, 3, 4, 4, 4, 4, 4, 0, + 3, 4, 7, 3, 1, 1, 1, 0, 5, 5, + 2, 3, 1, 2, 2, 1, 2, 1, 2, 2, + 1, 2, 2, 1, 1, 0, 1, 0, 1, 0, + 2, 1, 2, 4, 0, 2, 1, 1, 3, 5, + 1, 1, 1, 2, 2, 0, 3, 0, 2, 2, + 1, 3, 0, 1, 0, 1, 3, 1, 3, 2, + 0, 1, 1, 0, 1, 2, 4, 4, 0, 2, + 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, + 3, 0, 3, 3, 3, 0, 3, 1, 1, 0, + 4, 0, 1, 1, 0, 3, 1, 3, 2, 1, + 1, 0, 1, 2, 4, 9, 3, 5, 0, 3, + 3, 0, 1, 0, 2, 2, 0, 2, 2, 2, + 0, 2, 1, 2, 3, 3, 0, 2, 1, 2, + 3, 4, 3, 0, 1, 2, 1, 5, 4, 4, + 1, 3, 3, 5, 0, 5, 1, 3, 1, 2, + 3, 4, 1, 1, 3, 3, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 0, 1, 0, 2, 0, + 3, 0, 1, 0, 1, 1, 5, 0, 1, 0, + 1, 2, 1, 1, 1, 1, 1, 1, 0, 1, + 1, 1, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -8750,553 +8793,553 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, + 1, 1, 0, 0, 1, 1, } var yyChk = [...]int{ - -1000, -409, -78, -414, -7, -11, -20, -21, -22, -23, - -24, -25, -26, -27, -28, -29, -30, -31, -63, -66, - -64, -65, -68, -69, -70, -71, -72, -14, -17, -67, - -32, -33, -73, -74, -75, -76, -77, -16, -18, -19, - -9, -8, -13, 10, 11, -107, -34, 33, -39, -49, - 226, -50, -40, 227, -51, 229, 228, 266, 230, 378, - 259, 75, 314, 315, 317, 318, 319, 320, -108, 683, - 264, 265, 232, 37, 46, 34, 35, 38, 236, 272, - 273, 235, -10, -35, 9, -411, 12, 468, 261, 260, - 29, -12, 577, 87, -79, -410, 731, -249, -233, 23, - 34, 30, -232, -228, -126, -233, 21, 19, 8, -78, - -78, -78, 13, 14, -78, -349, -351, 87, 159, 87, - -78, -56, -55, -53, -52, -54, -57, 32, -46, -47, - -373, -45, -42, 231, 228, 276, 123, 124, 266, 267, - 268, 230, 250, 265, 269, 264, 285, -41, 82, 34, - 577, 580, -356, 227, 233, 234, 229, 469, 126, 125, - 76, -353, 373, 610, 701, -57, 703, 101, 104, 702, - 45, 240, 704, 705, 706, 617, 707, 249, 708, 709, - 710, 711, 717, 658, 718, 719, 720, 127, 8, -78, - -300, -296, 91, -289, 574, 252, 608, 422, 609, 301, - 82, 42, 513, 583, 370, 373, 610, 498, 701, 379, - 314, 330, 324, 503, 504, 505, 353, 345, 575, 611, - 584, 304, 253, 289, 695, 343, 135, 703, 308, 612, - 267, 380, 381, 613, 382, 101, 317, 419, 716, 307, - 614, 714, 104, 702, 322, 80, 497, 52, 698, 45, - 262, 427, 428, 341, 235, 337, 704, 290, 615, 586, - 283, 126, 123, 723, 37, 333, 51, 31, 713, 125, - 50, 705, 150, 616, 706, 617, 384, 360, 689, 49, - 385, 268, 618, 85, 273, 579, 311, 697, 386, 518, - 334, 387, 300, 712, 232, 619, 678, 670, 671, 388, - 389, 690, 365, 361, 366, 520, 620, 411, 502, 390, - 674, 675, 730, 53, 621, 622, 691, 124, 623, 79, - 707, 81, 328, 329, 624, 298, 251, 523, 524, 413, - 357, 480, 487, 488, 111, 112, 483, 113, 489, 114, - 490, 491, 492, 481, 115, 108, 482, 493, 494, 358, - 359, 116, 495, 110, 109, 484, 486, 117, 496, 249, - 36, 391, 576, 302, 59, 306, 277, 414, 47, 363, - 727, 46, 685, 525, 625, 688, 356, 352, 477, 54, - 626, 627, 628, 629, 499, 708, 355, 327, 351, 722, - 4, 295, 500, 709, 63, 234, 368, 367, 369, 284, - 410, 348, 630, 631, 632, 256, 83, 633, 338, 22, - 634, 635, 392, 291, 636, 57, 637, 638, 417, 265, - 639, 55, 710, 40, 640, 270, 724, 711, 641, 642, - 643, 684, 644, 272, 645, 394, 646, 672, 673, 393, - 362, 364, 526, 279, 395, 378, 237, 578, 647, 312, - 332, 269, 715, 648, 257, 514, 515, 516, 517, 696, - 522, 521, 271, 276, 264, 418, 258, 649, 650, 651, - 652, 653, 305, 669, 654, 655, 318, 717, 478, 44, - 656, 657, 658, 659, 660, 299, 294, 412, 421, 62, - 84, 375, 661, 662, 694, 326, 323, 292, 459, 461, - 462, 463, 464, 465, 460, 467, 663, 315, 56, 718, - 719, 720, 286, 721, 506, 507, 508, 509, 10, 560, - 543, 571, 544, 561, 545, 554, 546, 562, 570, 572, - 527, 535, 528, 536, 566, 549, 563, 555, 548, 547, - 569, 552, 556, 529, 537, 567, 553, 530, 538, 531, - 539, 532, 540, 565, 564, 557, 568, 533, 541, 559, - 534, 542, 558, 550, 551, 430, 728, 729, 501, 397, - 127, 296, 297, 48, 349, 278, 664, 309, 665, 339, - 340, 474, 475, 354, 325, 350, 681, 316, 679, 280, - 398, 479, 266, 666, 420, 293, 371, 376, 310, 582, - 519, 285, 399, 693, 581, 510, 511, 347, 344, 287, - 512, 667, 683, 400, 241, 281, 282, 668, 680, 401, - 402, 303, 403, 404, 405, 406, 407, 409, 313, 408, - 682, 676, 677, 288, 458, 580, 321, 342, 377, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 476, 239, -78, - 239, -187, -296, 239, 178, -268, 381, -286, 383, 396, - 391, 401, 389, -277, 392, 394, 279, -397, 411, 239, - 398, 226, 384, 393, 402, 403, 303, 409, 404, 313, - 408, 288, 405, 406, 407, -380, 178, 706, 721, 135, - 346, 388, 386, 412, 685, 91, -302, 91, 92, 93, - -289, 316, -304, 321, -290, -380, -289, 319, -78, -78, - -306, -306, -128, 685, 687, -206, -143, 143, -156, -257, - -159, 92, -148, -151, -200, -201, -202, -203, -157, -216, - -255, 167, 168, 175, 144, -212, -160, 27, 573, 470, - 469, 178, 32, 221, 69, 70, 472, 146, 58, 12, - 435, 436, -158, 425, 426, 437, 431, 432, 497, 499, - 500, 501, 498, 503, 504, 505, 506, 507, 508, 509, - 510, 511, 512, 502, 513, 474, 475, 118, 476, 108, - 110, 109, 477, 478, 479, 343, 525, 526, 520, 523, - 524, 522, 521, 358, 359, 480, 543, 544, 548, 547, - 545, 546, 549, 552, 553, 554, 555, 556, 557, 559, - 558, 550, 551, 528, 527, 529, 530, 531, 532, 533, - 534, 536, 535, 537, 538, 539, 540, 541, 542, 560, - 561, 562, 563, 564, 566, 565, 570, 569, 567, 568, - 572, 571, 481, 482, 111, 112, 113, 114, 115, 116, - 117, 483, 486, 484, 485, 487, 488, 489, 494, 495, - 490, 491, 492, 493, 496, 369, 367, 368, 364, 363, - 362, -88, -100, 599, 598, -101, 422, 427, 428, 430, - -149, -150, -162, -163, -290, -296, 244, 424, 238, 173, - 468, -152, -146, -214, 107, 93, -8, -210, 423, 433, - 434, 438, 429, 439, 585, 587, 602, 603, 605, 590, - 595, 594, 597, 514, 515, 516, 517, 518, 519, 670, - 671, 672, 673, 674, 675, 676, 677, -380, -289, 91, - -154, -153, -196, 94, 99, 102, 103, 105, -403, 262, - 339, 340, 119, -411, 699, 90, 95, 96, 97, 98, - 120, 121, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 45, 397, 397, -187, -78, -78, - -78, -78, -226, -126, -228, -10, -8, -411, 9, -78, - -8, -9, -13, -35, -37, 604, -36, -296, 100, -233, - -249, 13, 162, 43, 51, -231, -232, -12, -8, -143, - 20, 24, 25, -131, 169, -143, -296, -131, -275, 243, - -78, -78, -264, -309, 316, -266, 412, 685, 411, -256, - -269, 91, -255, -268, 410, 92, -350, 159, -336, -340, - -290, 254, -366, 250, -187, -359, -358, -290, -411, -127, - -285, 240, 248, 247, 136, -384, 139, 296, 424, 238, - -52, -53, -54, -268, 177, 705, -109, 271, 275, 88, - 88, -340, -339, -338, -385, 275, 254, -365, -357, 246, - 255, -346, 247, 248, -341, 240, 137, -385, -341, 245, - 255, 250, 254, 275, 275, 127, 275, 127, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 270, -347, 151, - -347, 581, 581, -353, -385, 250, 240, -385, -385, 246, - -287, -341, 242, 26, 242, 36, 36, -347, -347, -347, - -268, 177, -347, -347, -347, -347, 283, 283, -347, -347, - -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, - -347, -347, -347, -347, -347, 239, -384, -135, 408, 303, - 82, -55, 285, -38, -187, -285, 240, 241, -384, 272, - -187, 222, -187, 688, -279, 159, 16, -279, -276, 397, - 395, 382, 387, -279, -279, -279, -279, 286, 380, -342, - 240, 36, 251, 397, 286, 380, 286, 287, 286, 287, - 390, 400, 286, -301, 15, 162, 424, 385, 389, 279, - 239, 280, 241, 399, 287, -301, 90, -280, 159, 286, - 397, 282, -279, -279, -307, -411, -292, -290, -288, 231, - 24, 142, 26, 28, 145, 178, 130, 20, 146, 38, - 233, 346, 250, 177, 246, 469, 226, 73, 585, 425, - 432, 423, 431, 435, 471, 472, 424, 383, 32, 14, - 587, 29, 260, 25, 39, 171, 228, 149, 588, 263, - 27, 261, 118, 121, 590, 23, 76, 255, 15, 248, - 41, 17, 591, 592, 18, 244, 243, 162, 240, 71, - 12, 221, 30, 158, 67, 593, 137, 594, 595, 596, - 597, 131, 69, 159, 21, 725, 433, 434, 34, 686, - 573, 274, 173, 74, 60, 687, 143, 429, 598, 599, - 119, 600, 122, 77, 692, 139, 19, 72, 43, 601, - 275, 602, 245, 726, 603, 415, 604, 160, 229, 468, - 70, 161, 699, 605, 700, 238, 396, 9, 473, 33, - 259, 247, 129, 68, 439, 606, 239, 148, 242, 132, - 120, 8, 136, 35, 13, 75, 78, 436, 437, 438, - 58, 128, 577, 147, 16, 607, 416, 141, -380, 688, - -307, -307, 33, 92, -406, -407, -408, 577, 415, 242, - -290, -187, -84, 678, 230, -85, 684, 24, 237, -133, - 397, -121, 178, 706, 689, 690, 691, 688, 394, 696, - 694, 692, 286, 693, 88, 139, 141, 142, 4, -143, - 158, -197, 151, 152, 153, 154, 155, 156, 157, 163, - 162, 143, 145, 159, -242, 140, 164, 165, 166, 167, - 168, 169, 170, 172, 171, 173, 174, 160, 161, 177, - 224, 225, -151, -151, -151, -151, -212, -218, -217, -411, - -214, -380, -289, -296, -411, -411, -151, -274, -411, -148, - -411, -411, -411, -411, -221, -143, -411, -411, -415, -411, - -415, -415, -415, -325, -411, -325, -325, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - 222, -411, -411, -411, -411, -411, -325, -325, -325, -325, - -325, -325, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, 103, 99, 102, 94, - -216, 105, 90, 90, 90, 90, -8, -9, -206, -411, - -306, -394, -395, -190, -187, -411, 303, -290, -290, 272, - -231, -12, -8, -226, -232, -228, -8, -78, -119, -132, - 64, 65, -134, 25, 39, 68, 66, 24, -412, 89, - -412, -249, -412, 88, -37, -252, 87, 62, 44, 90, - 90, 88, 22, -227, -229, -143, 15, -294, 4, -293, - 26, -290, 90, 222, 15, -188, 30, -187, -275, -275, - 88, 91, 316, -265, -267, 413, 415, 151, -295, -290, - 90, 32, 89, 88, -187, -314, -317, -319, -318, -320, - -315, -316, 343, 344, 178, 347, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 360, 33, 262, 339, 340, - 341, 342, 361, 362, 363, 364, 366, 367, 368, 369, - 324, 345, 575, 325, 326, 327, 328, 329, 330, 332, - 333, 336, 334, 335, 337, 338, -381, -380, 87, 89, - 88, -321, 87, -143, -135, 239, -380, 240, 240, 240, - -78, 468, -347, -347, -347, 270, 20, -45, -42, -373, - 19, -41, -42, 231, 123, 124, 228, 87, -336, 87, - -345, -381, -380, 87, 137, 245, 136, -344, -341, -344, - -345, -380, -214, -380, 137, 137, -380, -380, -261, -290, - -261, -261, 24, -261, 24, -261, 24, 96, -290, -261, - 24, -261, 24, -261, 24, -261, 24, -261, 24, 32, - 79, 80, 81, 32, 83, 84, 85, -214, -380, -380, - -214, -336, -214, -187, -380, -268, 96, 96, 96, -347, - -347, 96, 90, 90, 90, -347, -347, 96, 90, -298, - -296, 90, 90, -386, 256, 300, 302, 96, 96, 96, - 96, 32, 90, -387, 32, 713, 712, 714, 715, 716, - 90, 96, 32, 96, 32, 96, -290, 87, -187, -141, - 290, 226, 228, 231, 77, 90, 306, 307, 304, 309, - 310, 151, 45, 88, 242, 239, -380, -281, 244, -281, - -290, -297, -296, -288, 242, 379, 90, -143, -343, 15, - 162, -301, -301, -279, -187, -343, -301, -279, -187, -279, - -279, -279, -279, -301, -301, -301, -279, -296, -296, -187, - -187, -187, -187, -187, -187, -187, -307, -280, -279, 688, - 90, -273, 15, 77, -307, -307, 88, 322, 416, 417, - -305, 319, -80, -290, 90, -15, -11, -23, -22, -24, - 151, -15, 88, 577, -180, -187, 688, 688, 688, 688, - 688, 688, -143, -143, -143, -143, 600, -204, 119, 143, - 120, 121, -159, -143, -205, -210, -212, 106, 162, 145, - 159, -242, -148, -151, -148, -148, -148, -148, -148, -148, - 221, -148, 221, -148, -148, -148, -148, -148, -148, -308, - -290, 90, 178, -155, -154, 105, -403, -155, 574, 88, - -217, 222, -143, -143, -380, -117, 441, 442, 443, 444, - 446, 447, 448, 451, 452, 456, 457, 440, 458, 445, - 450, 453, 454, 455, 449, 342, -143, -129, -131, -129, - -143, -219, -220, 147, -214, -143, -412, -412, 96, 169, - -125, 25, 39, -125, -125, -125, -125, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -125, -143, -118, - 440, 458, 445, 450, 453, 454, 455, 449, 342, 459, - 460, 461, 462, 463, 464, 465, 466, 467, -118, -117, - -143, -143, -143, -143, -143, -143, -86, -143, 130, 131, - 132, -206, -143, -148, -143, -143, -143, -412, -143, -143, - -143, -207, -206, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -143, -143, -379, - -378, -377, -143, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -206, -206, -206, -206, -206, - -143, -412, -143, -161, -146, 96, -257, 105, 92, -143, - -143, -143, -143, -143, -143, -130, -129, -292, -297, -288, - -289, -129, -130, -130, -129, -129, -143, -143, -143, -143, - -143, -143, -143, -143, -412, -143, -143, -143, -143, -143, - -249, -412, -206, 88, -396, 415, 416, 686, -299, 275, - -298, 26, -207, 90, 15, -259, 78, -290, -231, -231, - 64, 65, 60, -129, -134, -412, -36, 26, -251, -290, - 63, 90, -326, -268, 370, 371, 178, -143, -143, 88, - -230, 28, 29, -187, -293, 169, -297, -187, -260, 275, - -187, -165, -167, -168, -169, -190, -213, -411, -170, -8, - 596, 593, 15, -180, -181, -189, -296, -266, -309, -265, - 88, 414, 416, 417, 77, 122, -143, -327, 177, -355, - -354, -353, -336, -338, -339, -340, 89, -327, -332, 376, - 375, -321, -321, -321, -321, -321, -326, -326, -326, -326, - 87, 87, -321, -321, -321, -321, -329, 87, -329, -329, - -330, -329, 87, -330, -331, 87, -331, -366, -143, -363, - -362, -360, -361, 249, 101, 668, 624, 577, 617, 658, - 78, -358, -230, 96, -412, -141, -282, 244, -364, -361, - -380, -380, -380, -282, 91, 90, 91, 90, 91, 90, - -110, -59, -1, 725, 726, 727, 88, 20, -337, -336, - -58, 300, -369, -370, 275, -365, -359, -345, 137, -344, - -345, -345, -380, 88, 30, 127, 127, 127, 127, 577, - 228, 33, -283, 616, 143, 668, 624, -336, -58, 242, - 242, -308, -308, -308, 90, 90, -278, 721, -180, -137, - 292, 151, 281, 281, 239, 239, 294, -187, 305, 308, - 306, 307, 304, 309, 310, 24, 24, 24, 24, 24, - 293, 295, 297, 283, -187, -187, -281, 77, -182, -187, - 27, -296, 90, 90, -187, -279, -279, -187, -279, -279, - -187, -408, 323, -290, 357, 679, 680, 682, 681, -121, - 415, 88, 577, 23, -122, 23, -411, 119, 120, 121, - -205, -148, -151, -148, 142, 263, -148, -148, -411, -214, - -412, -292, 26, 88, 78, -412, 167, 88, 88, -412, - -412, 88, 15, -222, -220, 149, -143, -412, 88, -412, - -412, -206, -143, -143, -143, -143, -412, -412, -412, -412, - -412, -412, -412, -412, -412, -412, -206, -412, 88, 88, - 15, -312, 26, -412, -412, -412, -412, -412, -221, -412, - 15, -412, 78, 88, 162, 88, -412, -412, -412, 88, - 88, -412, -412, 88, -412, 88, -412, -412, -412, -412, - -412, -412, 88, -412, 88, -412, -412, -412, 88, -412, - 88, -412, -412, 88, -412, 88, -412, 88, -412, 88, - -412, 88, -412, 88, -412, 88, -412, 88, -412, 88, - -412, 88, -412, 88, -412, 88, -412, 88, -412, 88, - -412, 88, -412, 88, -412, 88, -412, 88, -412, -412, - -412, 88, -412, 88, -412, 88, -412, -412, 88, -412, - 88, -412, 88, -412, 88, 88, -412, 88, 88, 88, - -412, 88, 88, 88, 88, -412, -412, -412, -412, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, -412, - -412, -412, -412, -412, -412, 88, -93, 601, -412, -412, - 88, -412, 88, 88, 88, 88, 88, -412, -411, 222, - -412, -412, -412, -412, -412, 88, 88, 88, 88, 88, - 88, -412, -412, -412, 88, 88, -412, 88, -412, 88, - -412, -395, 685, 416, -194, -193, -191, 75, 243, 76, - -411, -298, -412, -155, -257, -258, -257, -199, -290, 96, - 105, -233, -164, -166, 15, -134, -212, 89, 88, -326, - -237, -243, -276, -290, 90, 178, -328, 178, -328, 370, - 371, -229, 222, -195, 16, -198, 33, 58, -11, -411, - -411, 33, 88, -183, -185, -184, -186, 67, 71, 73, - 68, 69, 70, 74, -303, 26, -8, -165, -8, -411, - -187, -180, -413, 15, 78, -413, 88, 222, -267, -270, - 418, 415, 421, -380, 90, -109, 88, -353, -340, -234, - -138, 41, -333, 377, -326, 584, -326, -335, 90, -335, - 96, 96, 96, 89, -48, -43, -44, 34, 82, -360, - -347, 90, 40, -347, -347, -290, 89, -230, -137, -187, - 143, 77, -364, -364, -364, -296, -2, 724, 730, 137, - 87, 382, 19, -251, 88, 89, -215, 301, 89, -111, - -290, 89, 87, -345, -345, -290, -411, 239, 32, 32, - 668, 624, 616, -58, -215, -214, -380, -327, 723, 722, - 89, 241, 299, -142, 435, -139, 90, 91, -187, -187, - -187, -187, -187, 231, 228, 405, -404, 311, -404, 284, - 242, -180, -187, 88, -83, 258, 253, -301, -301, 34, - -187, 415, 697, 695, -143, 142, 263, -159, -151, -117, - -117, -148, -310, 178, 343, 262, 341, 337, 357, 348, - 375, 339, 376, 334, 333, 332, -310, -308, -148, -206, - -131, -143, -143, 150, -143, 148, -143, -412, -412, -412, - -412, -412, -226, -143, -143, -143, -412, 178, 343, 15, - -143, -308, -143, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -377, -143, -206, - -143, -206, -143, -143, -143, -143, -143, -378, -378, -378, - -378, -378, -206, -206, -206, -206, -143, -411, -290, -96, - -95, -94, 651, 243, -93, -161, -96, -161, 221, -143, - 221, 221, 221, -143, -130, -292, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -191, -341, -341, -341, - -261, 88, -272, 23, 15, 58, 58, -164, -195, -165, - -134, -290, -240, 678, -246, 47, -244, -245, 48, -241, - 49, 57, -328, -328, 169, -231, -143, -262, 77, -263, - -271, -214, -209, -211, -210, -411, -250, -412, -290, -261, - -263, -167, -168, -168, -167, -168, 67, 67, 67, 72, - 67, 72, 67, -184, -296, -412, -143, -299, 78, -165, - -165, -189, -296, 169, 415, 419, 420, -353, -402, 119, - 143, 32, 77, 373, 101, -400, 177, 613, 663, 668, - 624, 617, 658, -401, 245, 136, 137, 257, 26, 42, - 89, 88, 89, 88, 89, 89, 88, -284, -283, -44, - -43, -347, -347, 96, -380, 90, 90, 241, 27, -187, - 77, 77, 77, -112, 728, 96, 87, -3, 82, -143, - 87, 20, -336, -214, -371, -322, -372, -323, -324, -5, - -6, -348, -115, 58, 101, -62, 45, 240, 708, 709, - 127, -411, 721, -363, -251, -367, -369, -187, -145, -411, - -144, -146, -152, 167, 168, 262, 339, 340, -215, -187, - -136, 290, 298, 87, -140, 92, -383, 78, 281, 373, - 281, 90, -405, 312, 90, -405, -187, -83, -48, -187, - -279, -279, 34, -380, -412, -159, -151, -124, 162, 577, - -313, 583, -321, -321, -321, -331, -321, 329, -321, 329, - -321, -412, -412, -412, 88, -412, 23, -412, -143, 88, - -120, 473, 88, 88, -412, 87, 87, -143, -412, -412, - -412, 88, -412, -412, -412, -412, -412, -412, -412, -412, - -412, -412, -412, -412, -412, 88, -412, 88, -412, 88, - -412, 88, -412, 88, -412, 88, -412, 88, -412, 88, - -412, 88, -412, 88, -412, 88, -412, 88, -412, 88, - -412, 88, -412, 88, -412, 88, -412, -412, 88, -412, - -412, -412, 88, -412, 88, -412, 88, -412, -412, -412, - 88, -311, 669, -412, -412, -412, -412, -412, -412, -412, - -412, -412, -412, -412, -92, -291, -290, -93, 633, 633, - -412, -93, -223, 88, -148, -412, -148, -148, -148, -412, - -412, -412, 88, -412, 88, 88, -412, 88, -412, 88, - -412, -412, -412, -412, 88, -192, 23, -192, -192, -412, - -257, -187, -195, -224, 17, -237, 52, 349, -248, -247, - 56, 48, -245, 20, 50, 20, 31, -262, 88, 151, - 88, -412, -412, 88, 58, 222, -412, -195, -178, -177, - 77, 78, -179, 77, -177, 67, 67, -252, 88, -260, - -165, -195, -195, 222, 119, -411, -147, -158, -145, 13, - 90, 90, -380, -399, 712, 713, 32, 96, -347, -347, - 137, 137, -187, 87, -326, 90, -326, 96, 96, 32, - 83, 84, 85, 32, 79, 80, 81, -187, -187, -187, - -187, -368, 87, 20, -143, 87, 151, 89, -251, -251, - 277, 162, -347, 706, 283, 283, -347, -347, -347, -114, - -113, 728, 89, -412, 88, -334, 577, 580, -143, -153, - -153, -252, 89, -376, 577, -382, -290, -290, -290, -290, - 96, 98, -412, 575, 74, 578, -412, -326, -143, -143, - -143, -231, 90, -143, -143, 96, 96, -412, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, - -143, -143, -143, -143, -143, -143, -143, -143, -206, -143, - -412, -175, -174, -176, 689, 119, 32, -310, -412, -208, - 275, -99, -98, -97, 15, -412, -143, -117, -117, -117, - -117, -143, -143, -143, -143, -143, -143, -411, 67, 19, - 17, -411, -411, -299, -224, -225, 18, 20, -238, 54, - -236, 53, -236, -247, 20, 20, 90, 20, 90, 137, - -271, -143, -211, 58, -11, -290, -209, -290, -226, -143, - 87, -143, -155, -195, -195, -143, -201, 497, 499, 500, - 501, 498, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 502, 513, 474, 475, 476, 108, 110, 109, - 477, 478, 479, 343, 525, 526, 520, 523, 524, 522, - 521, 358, 359, 480, 543, 544, 548, 547, 545, 546, - 549, 552, 553, 554, 555, 556, 557, 559, 558, 550, - 551, 528, 527, 529, 530, 531, 532, 533, 534, 536, - 535, 537, 538, 539, 540, 541, 542, 560, 561, 562, - 563, 564, 566, 565, 570, 569, 567, 568, 572, 571, - 481, 482, 111, 112, 113, 114, 115, 116, 117, 483, - 486, 484, 487, 488, 489, 494, 495, 490, 491, 492, - 493, 496, 369, 367, 368, 364, 363, 362, 422, 427, - 428, 430, 514, 515, 516, 517, 518, 519, 670, 671, - 672, 673, 674, 675, 676, 677, 90, 90, 87, -143, - 89, 89, -252, -367, -59, 89, -253, -251, 96, 89, - 278, -210, -411, 90, -347, -347, -347, 96, 96, -298, - -412, 88, -290, -401, -369, 581, 581, -412, 26, -375, - -374, -292, 87, 78, 63, 576, 579, -412, -412, 88, - -412, -412, -412, 89, 89, -412, -412, -412, -412, -412, - -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, - -412, -412, -412, -412, -412, -412, -412, 88, -412, -174, - -176, -412, 77, -155, -226, 20, -96, 300, 302, -96, - -412, -412, -412, -412, -412, 88, -412, -412, 88, -412, - 88, -412, -412, -254, -412, -290, 245, 20, 20, -254, - -254, -194, -225, -106, -105, -104, 607, -143, -206, -239, - 55, 77, 122, 90, 90, 90, 13, -209, 222, -231, - -251, -172, 382, -226, -412, -251, 89, 26, 89, 730, - 137, 89, -210, -123, -411, 274, -298, 90, 90, -113, - -116, -11, 88, 151, -251, -187, 63, -143, -206, -412, - 77, 588, 689, -91, -90, -87, 700, 726, -206, -93, - -93, -143, -143, -143, 88, -412, -412, -412, -106, 88, - -103, -102, -290, 77, 122, -263, -290, 89, -412, -411, - -231, 89, -235, -11, 87, -3, 274, -322, -372, -323, - -324, -5, -6, -348, -81, 577, -374, -352, -296, -292, - 90, 96, 89, 577, -412, -412, -89, 145, 698, 666, - -153, 221, -412, 88, -412, 88, -412, 88, -290, 245, - -104, 88, 26, -299, -173, -171, -290, 630, -392, -391, - 573, -402, -398, 119, 143, 101, -400, 668, 624, 128, - 129, -81, -143, 87, -412, -82, 289, 685, 222, -383, - 578, -89, 699, 644, 619, 644, 619, -148, -143, -143, - -143, -102, -411, -412, 88, 23, -314, -61, 641, -389, - -390, 77, -393, 388, 640, 661, 119, 90, 89, -251, - 250, -297, -376, 579, 142, -117, -412, 88, -412, 88, - -412, -92, -171, 637, -327, -155, -390, 77, -389, 77, - 14, 13, -4, 729, 89, 291, -89, 644, 619, -143, - -143, -412, -60, 27, -172, -388, 258, 253, 256, 33, - -388, 96, -4, -412, -412, 641, 252, 32, 119, -155, - -175, -174, -174, + -1000, -411, -79, -416, -7, -29, -15, -16, -17, -18, + -19, -20, -21, -22, -23, -24, -25, -26, -64, -67, + -65, -66, -69, -70, -71, -72, -73, -9, -11, -68, + -27, -28, -74, -75, -76, -77, -78, -12, -13, -14, + -8, -32, -31, -30, 10, 11, -108, -35, 33, -40, + -50, 227, -51, -41, 228, -52, 230, 229, 267, 231, + 379, 260, 75, 315, 316, 318, 319, 320, 321, -109, + 684, 265, 266, 233, 37, 46, 34, 35, 38, 237, + 273, 274, 236, 133, -33, -36, 9, -413, 12, 469, + 262, 261, 29, -34, 578, 87, -80, -412, 732, -250, + -234, 23, 34, 30, -233, -229, -127, -234, 21, 19, + 8, -79, -79, -79, 13, 14, -79, -350, -352, 87, + 160, 87, -79, -57, -56, -54, -53, -55, -58, 32, + -47, -48, -374, -46, -43, 232, 229, 277, 123, 124, + 267, 268, 269, 231, 251, 266, 270, 265, 286, -42, + 82, 34, 578, 581, -357, 228, 234, 235, 230, 470, + 126, 125, 76, -354, 374, 611, 702, -58, 704, 101, + 104, 703, 45, 241, 705, 706, 707, 618, 708, 250, + 709, 710, 711, 712, 718, 659, 719, 720, 721, 127, + 8, -79, -301, -297, 91, -290, 575, 253, 609, 423, + 610, 302, 82, 42, 514, 584, 371, 374, 611, 499, + 702, 380, 315, 331, 325, 504, 505, 506, 354, 346, + 576, 612, 585, 305, 254, 290, 696, 344, 136, 704, + 309, 613, 268, 381, 382, 614, 383, 101, 318, 420, + 717, 308, 615, 715, 104, 703, 323, 80, 498, 52, + 699, 45, 263, 428, 429, 342, 236, 338, 705, 291, + 616, 587, 284, 126, 123, 724, 37, 334, 51, 31, + 714, 125, 50, 706, 151, 617, 707, 618, 385, 361, + 690, 49, 386, 269, 619, 85, 274, 580, 312, 698, + 387, 519, 335, 388, 301, 713, 233, 620, 679, 671, + 672, 389, 390, 691, 366, 362, 367, 521, 621, 412, + 503, 391, 675, 676, 731, 53, 622, 623, 692, 124, + 624, 79, 708, 81, 329, 330, 625, 299, 252, 524, + 525, 414, 358, 481, 488, 489, 111, 112, 484, 113, + 490, 114, 491, 492, 493, 482, 115, 108, 483, 494, + 495, 359, 360, 116, 496, 110, 109, 485, 487, 117, + 497, 250, 36, 392, 577, 303, 59, 307, 278, 415, + 47, 364, 728, 46, 686, 526, 626, 689, 357, 353, + 478, 54, 627, 628, 629, 630, 500, 709, 356, 328, + 352, 723, 4, 296, 501, 710, 63, 235, 369, 368, + 370, 285, 411, 349, 631, 632, 633, 257, 83, 634, + 339, 22, 635, 636, 393, 292, 637, 57, 638, 639, + 418, 266, 640, 55, 711, 40, 641, 271, 725, 712, + 642, 643, 644, 685, 645, 273, 646, 395, 647, 673, + 674, 394, 363, 365, 527, 280, 396, 379, 238, 579, + 648, 313, 333, 270, 716, 649, 258, 515, 516, 517, + 518, 697, 523, 522, 272, 277, 265, 419, 259, 650, + 651, 652, 653, 654, 306, 670, 655, 656, 319, 718, + 479, 44, 657, 658, 659, 660, 661, 300, 295, 413, + 422, 62, 84, 376, 662, 663, 695, 327, 324, 293, + 460, 462, 463, 464, 465, 466, 461, 468, 664, 316, + 56, 719, 720, 721, 287, 722, 507, 508, 509, 510, + 10, 561, 544, 572, 545, 562, 546, 555, 547, 563, + 571, 573, 528, 536, 529, 537, 567, 550, 564, 556, + 549, 548, 570, 553, 557, 530, 538, 568, 554, 531, + 539, 532, 540, 533, 541, 566, 565, 558, 569, 534, + 542, 560, 535, 543, 559, 551, 552, 431, 729, 730, + 502, 398, 127, 297, 298, 48, 350, 279, 665, 310, + 666, 340, 341, 475, 476, 355, 326, 351, 682, 317, + 680, 281, 399, 480, 267, 667, 421, 294, 372, 377, + 311, 583, 520, 286, 400, 694, 582, 511, 512, 348, + 345, 288, 513, 668, 684, 401, 242, 282, 283, 669, + 681, 402, 403, 304, 404, 405, 406, 407, 408, 410, + 314, 409, 683, 677, 678, 289, 459, 581, 322, 343, + 378, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 477, + 240, -79, 240, -188, -297, 240, 179, -269, 382, -287, + 384, 397, 392, 402, 390, -278, 393, 395, 280, -398, + 412, 240, 399, 227, 385, 394, 403, 404, 304, 410, + 405, 314, 409, 289, 406, 407, 408, -381, 179, 707, + 722, 136, 347, 389, 387, 413, 686, 91, -303, 91, + 92, 93, -290, 317, -305, 322, -291, -381, -290, 320, + -79, -79, -307, -307, -129, 686, 688, -207, -144, 144, + -157, -258, -160, 92, -149, -152, -201, -202, -203, -204, + -158, -217, -256, 168, 169, 176, 145, -213, -161, 27, + 574, 471, 470, 179, 32, 222, 69, 70, 473, 147, + 58, 12, 436, 437, -159, 426, 427, 438, 432, 433, + 498, 500, 501, 502, 499, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 503, 514, 475, 476, 118, + 477, 108, 110, 109, 478, 479, 480, 344, 526, 527, + 521, 524, 525, 523, 522, 359, 360, 481, 544, 545, + 549, 548, 546, 547, 550, 553, 554, 555, 556, 557, + 558, 560, 559, 551, 552, 529, 528, 530, 531, 532, + 533, 534, 535, 537, 536, 538, 539, 540, 541, 542, + 543, 561, 562, 563, 564, 565, 567, 566, 571, 570, + 568, 569, 573, 572, 482, 483, 111, 112, 113, 114, + 115, 116, 117, 484, 487, 485, 486, 488, 489, 490, + 495, 496, 491, 492, 493, 494, 497, 370, 368, 369, + 365, 364, 363, -89, -101, 600, 599, -102, 423, 428, + 429, 431, -150, -151, -163, -164, -291, -297, 245, 425, + 239, 174, 469, -153, -147, -215, 107, 93, -31, -211, + 424, 434, 435, 439, 430, 440, 586, 588, 603, 604, + 606, 591, 596, 595, 598, 515, 516, 517, 518, 519, + 520, 671, 672, 673, 674, 675, 676, 677, 678, -381, + -290, 91, -155, -154, -197, 94, 99, 102, 103, 105, + -404, 263, 340, 341, 119, -413, 700, 90, 95, 96, + 97, 98, 120, 121, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 45, 398, 398, -188, + -79, -79, -79, -79, -410, 703, 579, -227, -127, -229, + -33, -31, -413, 9, -79, -31, -32, -30, -36, -38, + 605, -37, -297, 100, -234, -250, 13, 163, 43, 51, + -232, -233, -34, -31, -144, 20, 24, 25, -132, 170, + -144, -297, -132, -276, 244, -79, -79, -265, -310, 317, + -267, 413, 686, 412, -257, -270, 91, -256, -269, 411, + 92, -351, 160, -337, -341, -291, 255, -367, 251, -188, + -360, -359, -291, -413, -128, -286, 241, 249, 248, 137, + -385, 140, 297, 425, 239, -53, -54, -55, -269, 178, + 706, -110, 272, 276, 88, 88, -341, -340, -339, -386, + 276, 255, -366, -358, 247, 256, -347, 248, 249, -342, + 241, 138, -386, -342, 246, 256, 251, 255, 276, 276, + 127, 276, 127, 276, 276, 276, 276, 276, 276, 276, + 276, 276, 271, -348, 152, -348, 582, 582, -354, -386, + 251, 241, -386, -386, 247, -288, -342, 243, 26, 243, + 36, 36, -348, -348, -348, -269, 178, -348, -348, -348, + -348, 284, 284, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + 240, -385, -136, 409, 304, 82, -56, 286, -39, -188, + -286, 241, 242, -385, 273, -188, 223, -188, 689, -280, + 160, 16, -280, -277, 398, 396, 383, 388, -280, -280, + -280, -280, 287, 381, -343, 241, 36, 252, 398, 287, + 381, 287, 288, 287, 288, 391, 401, 287, -302, 15, + 163, 425, 386, 390, 280, 240, 281, 242, 400, 288, + -302, 90, -281, 160, 287, 398, 283, -280, -280, -308, + -413, -293, -291, -289, 232, 24, 143, 26, 28, 146, + 179, 130, 20, 147, 38, 234, 347, 251, 178, 247, + 470, 227, 73, 586, 426, 433, 424, 432, 436, 472, + 473, 425, 384, 32, 14, 588, 29, 261, 25, 39, + 172, 229, 150, 589, 264, 27, 262, 118, 121, 591, + 23, 76, 256, 15, 249, 41, 17, 592, 593, 18, + 245, 244, 163, 241, 71, 12, 222, 30, 159, 67, + 594, 138, 133, 595, 596, 597, 598, 131, 69, 160, + 21, 726, 434, 435, 34, 687, 574, 275, 174, 74, + 60, 688, 144, 430, 599, 600, 119, 601, 122, 77, + 693, 140, 19, 72, 43, 602, 276, 603, 246, 727, + 604, 416, 605, 161, 230, 469, 70, 162, 700, 606, + 701, 239, 397, 9, 474, 33, 260, 248, 129, 68, + 440, 607, 240, 149, 243, 132, 120, 8, 137, 35, + 13, 75, 78, 437, 438, 439, 58, 128, 578, 148, + 16, 608, 417, 142, -381, 689, -308, -308, 33, 92, + -407, -408, -409, 578, 416, 243, -291, -188, -85, 679, + 231, -86, 685, 24, 238, -134, 398, -122, 179, 707, + 690, 691, 692, 689, 395, 697, 695, 693, 287, 694, + 88, 140, 142, 143, 4, -144, 159, -198, 152, 153, + 154, 155, 156, 157, 158, 164, 163, 144, 146, 160, + -243, 141, 165, 166, 167, 168, 169, 170, 171, 173, + 172, 174, 175, 161, 162, 178, 225, 226, -152, -152, + -152, -152, -213, -219, -218, -413, -215, -381, -290, -297, + -413, -413, -152, -275, -413, -149, -413, -413, -413, -413, + -222, -144, -413, -413, -417, -413, -417, -417, -417, -326, + -413, -326, -326, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, 223, -413, -413, -413, + -413, -413, -326, -326, -326, -326, -326, -326, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, 103, 99, 102, 94, -217, 105, 90, 90, + 90, 90, -31, -32, -207, -413, -307, -395, -396, -191, + -188, -413, 304, -291, -291, 273, 96, -232, -34, -31, + -227, -233, -229, -31, -79, -120, -133, 64, 65, -135, + 25, 39, 68, 66, 24, -414, 89, -414, -250, -414, + 88, -38, -253, 87, 62, 44, 90, 90, 88, 22, + -228, -230, -144, 15, -295, 4, -294, 26, -291, 90, + 223, 15, -189, 30, -188, -276, -276, 88, 91, 317, + -266, -268, 414, 416, 152, -296, -291, 90, 32, 89, + 88, -188, -315, -318, -320, -319, -321, -316, -317, 344, + 345, 179, 348, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 361, 33, 263, 340, 341, 342, 343, 362, + 363, 364, 365, 367, 368, 369, 370, 325, 346, 576, + 326, 327, 328, 329, 330, 331, 333, 334, 337, 335, + 336, 338, 339, -382, -381, 87, 89, 88, -322, 87, + -144, -136, 240, -381, 241, 241, 241, -79, 469, -348, + -348, -348, 271, 20, -46, -43, -374, 19, -42, -43, + 232, 123, 124, 229, 87, -337, 87, -346, -382, -381, + 87, 138, 246, 137, -345, -342, -345, -346, -381, -215, + -381, 138, 138, -381, -381, -262, -291, -262, -262, 24, + -262, 24, -262, 24, 96, -291, -262, 24, -262, 24, + -262, 24, -262, 24, -262, 24, 32, 79, 80, 81, + 32, 83, 84, 85, -215, -381, -381, -215, -337, -215, + -188, -381, -269, 96, 96, 96, -348, -348, 96, 90, + 90, 90, -348, -348, 96, 90, -299, -297, 90, 90, + -387, 257, 301, 303, 96, 96, 96, 96, 32, 90, + -388, 32, 714, 713, 715, 716, 717, 90, 96, 32, + 96, 32, 96, -291, 87, -188, -142, 291, 227, 229, + 232, 77, 90, 307, 308, 305, 310, 311, 152, 45, + 88, 243, 240, -381, -282, 245, -282, -291, -298, -297, + -289, 243, 380, 90, -144, -344, 15, 163, -302, -302, + -280, -188, -344, -302, -280, -188, -280, -280, -280, -280, + -302, -302, -302, -280, -297, -297, -188, -188, -188, -188, + -188, -188, -188, -308, -281, -280, 689, 90, -274, 15, + 77, -308, -308, 88, 323, 417, 418, -306, 320, -81, + -291, 90, -10, -29, -18, -17, -19, 152, -10, 88, + 578, -181, -188, 689, 689, 689, 689, 689, 689, -144, + -144, -144, -144, 601, -205, 119, 144, 120, 121, -160, + -144, -206, -211, -213, 106, 163, 146, 160, -243, -149, + -152, -149, -149, -149, -149, -149, -149, 222, -149, 222, + -149, -149, -149, -149, -149, -149, -309, -291, 90, 179, + -156, -155, 105, -404, -156, 575, 88, -218, 223, -144, + -144, -381, -118, 442, 443, 444, 445, 447, 448, 449, + 452, 453, 457, 458, 441, 459, 446, 451, 454, 455, + 456, 450, 343, -144, -130, -132, -130, -144, -220, -221, + 148, -215, -144, -414, -414, 96, 170, -126, 25, 39, + -126, -126, -126, -126, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -126, -144, -119, 441, 459, 446, + 451, 454, 455, 456, 450, 343, 460, 461, 462, 463, + 464, 465, 466, 467, 468, -119, -118, -144, -144, -144, + -144, -144, -144, -87, -144, 130, 131, 132, -207, -144, + -149, -144, -144, -144, -414, -144, -144, -144, -208, -207, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -380, -379, -378, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -207, -207, -207, -207, -207, -144, -414, -144, + -162, -147, 96, -258, 105, 92, -144, -144, -144, -144, + -144, -144, -131, -130, -293, -298, -289, -290, -130, -131, + -131, -130, -130, -144, -144, -144, -144, -144, -144, -144, + -144, -414, -144, -144, -144, -144, -144, -250, -414, -207, + 88, -397, 416, 417, 687, -300, 276, -299, 26, -208, + 90, 15, -260, 78, -291, -232, -232, 64, 65, 60, + -130, -135, -414, -37, 26, -252, -291, 63, 90, -327, + -269, 371, 372, 179, -144, -144, 88, -231, 28, 29, + -188, -294, 170, -298, -188, -261, 276, -188, -166, -168, + -169, -170, -191, -214, -413, -171, -31, 597, 594, 15, + -181, -182, -190, -297, -267, -310, -266, 88, 415, 417, + 418, 77, 122, -144, -328, 178, -356, -355, -354, -337, + -339, -340, -341, 89, -328, -333, 377, 376, -322, -322, + -322, -322, -322, -327, -327, -327, -327, 87, 87, -322, + -322, -322, -322, -330, 87, -330, -330, -331, -330, 87, + -331, -332, 87, -332, -367, -144, -364, -363, -361, -362, + 250, 101, 669, 625, 578, 618, 659, 78, -359, -231, + 96, -414, -142, -283, 245, -365, -362, -381, -381, -381, + -283, 91, 90, 91, 90, 91, 90, -111, -60, -1, + 726, 727, 728, 88, 20, -338, -337, -59, 301, -370, + -371, 276, -366, -360, -346, 138, -345, -346, -346, -381, + 88, 30, 127, 127, 127, 127, 578, 229, 33, -284, + 617, 144, 669, 625, -337, -59, 243, 243, -309, -309, + -309, 90, 90, -279, 722, -181, -138, 293, 152, 282, + 282, 240, 240, 295, -188, 306, 309, 307, 308, 305, + 310, 311, 24, 24, 24, 24, 24, 294, 296, 298, + 284, -188, -188, -282, 77, -183, -188, 27, -297, 90, + 90, -188, -280, -280, -188, -280, -280, -188, -409, 324, + -291, 358, 680, 681, 683, 682, -122, 416, 88, 578, + 23, -123, 23, -413, 119, 120, 121, -206, -149, -152, + -149, 143, 264, -149, -149, -413, -215, -414, -293, 26, + 88, 78, -414, 168, 88, 88, -414, -414, 88, 15, + -223, -221, 150, -144, -414, 88, -414, -414, -207, -144, + -144, -144, -144, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -207, -414, 88, 88, 15, -313, 26, + -414, -414, -414, -414, -414, -222, -414, 15, -414, 78, + 88, 163, 88, -414, -414, -414, 88, 88, -414, -414, + 88, -414, 88, -414, -414, -414, -414, -414, -414, 88, + -414, 88, -414, -414, -414, 88, -414, 88, -414, -414, + 88, -414, 88, -414, 88, -414, 88, -414, 88, -414, + 88, -414, 88, -414, 88, -414, 88, -414, 88, -414, + 88, -414, 88, -414, 88, -414, 88, -414, 88, -414, + 88, -414, 88, -414, 88, -414, -414, -414, 88, -414, + 88, -414, 88, -414, -414, 88, -414, 88, -414, 88, + -414, 88, 88, -414, 88, 88, 88, -414, 88, 88, + 88, 88, -414, -414, -414, -414, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, -414, -414, -414, -414, + -414, -414, 88, -94, 602, -414, -414, 88, -414, 88, + 88, 88, 88, 88, -414, -413, 223, -414, -414, -414, + -414, -414, 88, 88, 88, 88, 88, 88, -414, -414, + -414, 88, 88, -414, 88, -414, 88, -414, -396, 686, + 417, -195, -194, -192, 75, 244, 76, -413, -299, -414, + -156, -258, -259, -258, -200, -291, 96, 105, -234, -165, + -167, 15, -135, -213, 89, 88, -327, -238, -244, -277, + -291, 90, 179, -329, 179, -329, 371, 372, -230, 223, + -196, 16, -199, 33, 58, -29, -413, -413, 33, 88, + -184, -186, -185, -187, 67, 71, 73, 68, 69, 70, + 74, -304, 26, -31, -166, -31, -413, -188, -181, -415, + 15, 78, -415, 88, 223, -268, -271, 419, 416, 422, + -381, 90, -110, 88, -354, -341, -235, -139, 41, -334, + 378, -327, 585, -327, -336, 90, -336, 96, 96, 96, + 89, -49, -44, -45, 34, 82, -361, -348, 90, 40, + -348, -348, -291, 89, -231, -138, -188, 144, 77, -365, + -365, -365, -297, -2, 725, 731, 138, 87, 383, 19, + -252, 88, 89, -216, 302, 89, -112, -291, 89, 87, + -346, -346, -291, -413, 240, 32, 32, 669, 625, 617, + -59, -216, -215, -381, -328, 724, 723, 89, 242, 300, + -143, 436, -140, 90, 91, -188, -188, -188, -188, -188, + 232, 229, 406, -405, 312, -405, 285, 243, -181, -188, + 88, -84, 259, 254, -302, -302, 34, -188, 416, 698, + 696, -144, 143, 264, -160, -152, -118, -118, -149, -311, + 179, 344, 263, 342, 338, 358, 349, 376, 340, 377, + 335, 334, 333, -311, -309, -149, -207, -132, -144, -144, + 151, -144, 149, -144, -414, -414, -414, -414, -414, -227, + -144, -144, -144, -414, 179, 344, 15, -144, -309, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -378, -144, -207, -144, -207, -144, + -144, -144, -144, -144, -379, -379, -379, -379, -379, -207, + -207, -207, -207, -144, -413, -291, -97, -96, -95, 652, + 244, -94, -162, -97, -162, 222, -144, 222, 222, 222, + -144, -131, -293, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -192, -342, -342, -342, -262, 88, -273, + 23, 15, 58, 58, -165, -196, -166, -135, -291, -241, + 679, -247, 47, -245, -246, 48, -242, 49, 57, -329, + -329, 170, -232, -144, -263, 77, -264, -272, -215, -210, + -212, -211, -413, -251, -414, -291, -262, -264, -168, -169, + -169, -168, -169, 67, 67, 67, 72, 67, 72, 67, + -185, -297, -414, -144, -300, 78, -166, -166, -190, -297, + 170, 416, 420, 421, -354, -403, 119, 144, 32, 77, + 374, 101, -401, 178, 614, 664, 669, 625, 618, 659, + -402, 246, 137, 138, 258, 26, 42, 89, 88, 89, + 88, 89, 89, 88, -285, -284, -45, -44, -348, -348, + 96, -381, 90, 90, 242, 27, -188, 77, 77, 77, + -113, 729, 96, 87, -3, 82, -144, 87, 20, -337, + -215, -372, -323, -373, -324, -325, -5, -6, -349, -116, + 58, 101, -63, 45, 241, 709, 710, 127, -413, 722, + -364, -252, -368, -370, -188, -146, -413, -145, -147, -153, + 168, 169, 263, 340, 341, -216, -188, -137, 291, 299, + 87, -141, 92, -384, 78, 282, 374, 282, 90, -406, + 313, 90, -406, -188, -84, -49, -188, -280, -280, 34, + -381, -414, -160, -152, -125, 163, 578, -314, 584, -322, + -322, -322, -332, -322, 330, -322, 330, -322, -414, -414, + -414, 88, -414, 23, -414, -144, 88, -121, 474, 88, + 88, -414, 87, 87, -144, -414, -414, -414, 88, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, 88, -414, 88, -414, 88, -414, 88, -414, + 88, -414, 88, -414, 88, -414, 88, -414, 88, -414, + 88, -414, 88, -414, 88, -414, 88, -414, 88, -414, + 88, -414, 88, -414, -414, 88, -414, -414, -414, 88, + -414, 88, -414, 88, -414, -414, -414, 88, -312, 670, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -93, -292, -291, -94, 634, 634, -414, -94, -224, + 88, -149, -414, -149, -149, -149, -414, -414, -414, 88, + -414, 88, 88, -414, 88, -414, 88, -414, -414, -414, + -414, 88, -193, 23, -193, -193, -414, -258, -188, -196, + -225, 17, -238, 52, 350, -249, -248, 56, 48, -246, + 20, 50, 20, 31, -263, 88, 152, 88, -414, -414, + 88, 58, 223, -414, -196, -179, -178, 77, 78, -180, + 77, -178, 67, 67, -253, 88, -261, -166, -196, -196, + 223, 119, -413, -148, -159, -146, 13, 90, 90, -381, + -400, 713, 714, 32, 96, -348, -348, 138, 138, -188, + 87, -327, 90, -327, 96, 96, 32, 83, 84, 85, + 32, 79, 80, 81, -188, -188, -188, -188, -369, 87, + 20, -144, 87, 152, 89, -252, -252, 278, 163, -348, + 707, 284, 284, -348, -348, -348, -115, -114, 729, 89, + -414, 88, -335, 578, 581, -144, -154, -154, -253, 89, + -377, 578, -383, -291, -291, -291, -291, 96, 98, -414, + 576, 74, 579, -414, -327, -144, -144, -144, -232, 90, + -144, -144, 96, 96, -414, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -207, -144, -414, -176, -175, + -177, 690, 119, 32, -311, -414, -209, 276, -100, -99, + -98, 15, -414, -144, -118, -118, -118, -118, -144, -144, + -144, -144, -144, -144, -413, 67, 19, 17, -413, -413, + -300, -225, -226, 18, 20, -239, 54, -237, 53, -237, + -248, 20, 20, 90, 20, 90, 138, -272, -144, -212, + 58, -29, -291, -210, -291, -227, -144, 87, -144, -156, + -196, -196, -144, -202, 498, 500, 501, 502, 499, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 503, + 514, 475, 476, 477, 108, 110, 109, 478, 479, 480, + 344, 526, 527, 521, 524, 525, 523, 522, 359, 360, + 481, 544, 545, 549, 548, 546, 547, 550, 553, 554, + 555, 556, 557, 558, 560, 559, 551, 552, 529, 528, + 530, 531, 532, 533, 534, 535, 537, 536, 538, 539, + 540, 541, 542, 543, 561, 562, 563, 564, 565, 567, + 566, 571, 570, 568, 569, 573, 572, 482, 483, 111, + 112, 113, 114, 115, 116, 117, 484, 487, 485, 488, + 489, 490, 495, 496, 491, 492, 493, 494, 497, 370, + 368, 369, 365, 364, 363, 423, 428, 429, 431, 515, + 516, 517, 518, 519, 520, 671, 672, 673, 674, 675, + 676, 677, 678, 90, 90, 87, -144, 89, 89, -253, + -368, -60, 89, -254, -252, 96, 89, 279, -211, -413, + 90, -348, -348, -348, 96, 96, -299, -414, 88, -291, + -402, -370, 582, 582, -414, 26, -376, -375, -293, 87, + 78, 63, 577, 580, -414, -414, 88, -414, -414, -414, + 89, 89, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, 88, -414, -175, -177, -414, 77, + -156, -227, 20, -97, 301, 303, -97, -414, -414, -414, + -414, -414, 88, -414, -414, 88, -414, 88, -414, -414, + -255, -414, -291, 246, 20, 20, -255, -255, -195, -226, + -107, -106, -105, 608, -144, -207, -240, 55, 77, 122, + 90, 90, 90, 13, -210, 223, -232, -252, -173, 383, + -227, -414, -252, 89, 26, 89, 731, 138, 89, -211, + -124, -413, 275, -299, 90, 90, -114, -117, -29, 88, + 152, -252, -188, 63, -144, -207, -414, 77, 589, 690, + -92, -91, -88, 701, 727, -207, -94, -94, -144, -144, + -144, 88, -414, -414, -414, -107, 88, -104, -103, -291, + 77, 122, -264, -291, 89, -414, -413, -232, 89, -236, + -29, 87, -3, 275, -323, -373, -324, -325, -5, -6, + -349, -82, 578, -375, -353, -297, -293, 90, 96, 89, + 578, -414, -414, -90, 146, 699, 667, -154, 222, -414, + 88, -414, 88, -414, 88, -291, 246, -105, 88, 26, + -300, -174, -172, -291, 631, -393, -392, 574, -403, -399, + 119, 144, 101, -401, 669, 625, 128, 129, -82, -144, + 87, -414, -83, 290, 686, 223, -384, 579, -90, 700, + 645, 620, 645, 620, -149, -144, -144, -144, -103, -413, + -414, 88, 23, -315, -62, 642, -390, -391, 77, -394, + 389, 641, 662, 119, 90, 89, -252, 251, -298, -377, + 580, 143, -118, -414, 88, -414, 88, -414, -93, -172, + 638, -328, -156, -391, 77, -390, 77, 14, 13, -4, + 730, 89, 292, -90, 645, 620, -144, -144, -414, -61, + 27, -173, -389, 259, 254, 257, 33, -389, 96, -4, + -414, -414, 642, 253, 32, 119, -156, -176, -175, -175, } var yyDef = [...]int{ - 876, -2, -2, 878, 2, 4, 5, 6, 7, 8, + 877, -2, -2, 879, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 71, 73, 74, 876, 876, 876, 0, 876, 0, 0, - 876, -2, -2, 876, 1607, 0, 876, 0, 0, 0, - -2, 791, 797, 0, 806, -2, 0, 0, 876, 876, - 2226, 2226, 871, 0, 0, 0, 0, 0, 876, 876, - 876, 876, 1473, 51, 876, 0, 86, 87, 826, 827, - 828, 66, 0, 2224, 877, 1, 3, 72, 76, 0, - 0, 0, 59, 1482, 0, 79, 0, 0, 880, 0, - 0, 1590, 876, 876, 0, 127, 128, 0, 0, 0, - -2, 131, -2, 160, 161, 162, 0, 167, 602, 525, - 577, 523, 562, -2, 511, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 528, 400, 400, - 0, 0, -2, 511, 511, 511, 1592, 0, 0, 0, - 559, 462, 400, 400, 400, 0, 400, 400, 400, 400, - 0, 0, 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, 400, 1500, - 166, 1608, 1605, 1606, 1760, 1761, 1762, 1763, 1764, 1765, - 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, - 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, - 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, - 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, - 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, - 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, - 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, - 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, - 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, - 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, - 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, - 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, - 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, - 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, - 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, - 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, - 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, - 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, - 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, - 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, - 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, - 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, - 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, - 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, - 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, - 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, - 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, - 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, - 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, - 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, - 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, - 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, - 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, - 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, - 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, - 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, - 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, - 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, - 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, - 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, - 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, - 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, - 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, - 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, - 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 0, 1584, - 0, 715, 979, 0, 0, 780, 780, 0, 780, 780, - 780, 780, 0, 0, 0, 729, 0, 0, 0, 0, - 777, 0, 745, 746, 0, 777, 0, 752, 783, 0, - 0, 758, 780, 780, 761, 2227, 0, 2227, 2227, 1575, - 0, 774, 772, 786, 787, 41, 790, 793, 794, 795, - 796, 799, 0, 810, 813, 1601, 1602, 0, 815, 822, - 839, 840, 0, 872, 873, 46, 1129, 0, 1001, 0, - 1007, -2, 1018, 1035, 1036, 1037, 1038, 1039, 1041, 1042, - 1043, 0, 0, 0, 0, 1048, 1049, 0, 0, 0, - 0, 0, 1110, 0, 0, 0, 0, 1446, 0, 0, - 1408, 1408, 1144, 1408, 1408, 1410, 1410, 1410, 1812, 1950, - 1958, 2134, 1773, 1779, 1780, 1781, 2080, 2081, 2082, 2083, - 2171, 2172, 2176, 1874, 1768, 2147, 2148, 0, 2223, 1911, - 1919, 1920, 1944, 2044, 2157, 1791, 1939, 2008, 1871, 1893, - 1894, 2026, 2027, 1915, 1916, 1897, 2086, 2088, 2104, 2105, - 2090, 2092, 2101, 2107, 2112, 2091, 2103, 2108, 2121, 2125, - 2128, 2129, 2130, 2098, 2096, 2109, 2113, 2115, 2117, 2123, - 2126, 2099, 2097, 2110, 2114, 2116, 2118, 2124, 2127, 2085, - 2089, 2093, 2102, 2120, 2100, 2119, 2094, 2106, 2111, 2122, - 2095, 2087, 1909, 1912, 1900, 1901, 1903, 1905, 1910, 1917, - 1923, 1902, 1922, 1921, 0, 1898, 1899, 1904, 1914, 1918, - 1906, 1907, 1908, 1913, 1924, 1964, 1963, 1962, 2007, 1935, - 2006, 0, 0, 0, 0, 0, 1763, 1817, 1818, 2131, - 1330, 1331, 1332, 1333, 0, 0, 0, 0, 0, 0, - 0, 292, 293, 1459, 1460, 45, 1128, 1571, 1410, 1410, - 1410, 1410, 1410, 1410, 1070, 1071, 1072, 1073, 1074, 1098, - 1099, 1105, 1106, 2021, 2022, 2023, 2024, 1855, 2166, 1863, - 1864, 2003, 2004, 1876, 1877, 2197, 2198, -2, -2, -2, - 233, 234, 235, 236, 237, 238, 239, 240, 0, 1816, - 2145, 2146, 229, 0, 0, 297, 298, 294, 295, 296, - 1112, 1113, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 2226, 0, 849, 0, 0, 0, - 0, 0, 1482, 0, 1474, 1473, 64, 0, 876, -2, - 0, 0, 0, 0, 48, 0, 53, 936, 879, 78, - 77, 1522, 0, 0, 0, 60, 1483, 68, 70, 1484, - 0, 881, 882, 0, 912, 916, 0, 0, 0, 1591, - 1590, 1590, 103, 0, 0, 104, 124, 125, 126, 0, - 0, 110, 111, 1577, 1578, 44, 0, 0, 178, 179, - 0, 42, 427, 0, 174, 0, 420, 359, 0, 1500, - 0, 0, 0, 0, 0, 876, 0, 1585, 155, 156, - 163, 164, 165, 400, 400, 400, 574, 0, 0, 166, - 166, 532, 533, 534, 0, 0, -2, 425, 0, 512, - 0, 0, 414, 414, 418, 416, 417, 0, 0, 0, - 0, 0, 0, 0, 0, 551, 0, 552, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 663, 0, 401, - 0, 572, 573, 463, 0, 0, 0, 0, 0, 0, - 0, 0, 1593, 1594, 0, 549, 550, 0, 0, 0, - 400, 400, 0, 0, 0, 0, 400, 400, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 154, 1513, 0, 0, - 0, -2, 0, 707, 0, 0, 0, 1586, 1586, 0, - 714, 0, 716, 0, 719, 0, 0, 720, 0, 777, - 777, 775, 776, 722, 723, 724, 725, 780, 0, 0, - 409, 410, 411, 777, 780, 0, 780, 780, 780, 780, - 777, 777, 777, 780, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2227, 783, 780, 0, 753, 0, 754, - 755, 756, 759, 760, 762, 2228, 2229, 1603, 1604, 1611, - 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, + 39, 72, 74, 75, 877, 877, 877, 0, 877, 0, + 0, 877, -2, -2, 877, 1608, 0, 877, 0, 0, + 0, -2, 792, 798, 0, 807, -2, 0, 0, 877, + 877, 2232, 2232, 872, 0, 0, 0, 0, 0, 877, + 877, 877, 877, 1613, 1474, 52, 877, 0, 87, 88, + 827, 828, 829, 67, 0, 2230, 878, 1, 3, 73, + 77, 0, 0, 0, 60, 1483, 0, 80, 0, 0, + 881, 0, 0, 1591, 877, 877, 0, 128, 129, 0, + 0, 0, -2, 132, -2, 161, 162, 163, 0, 168, + 603, 526, 578, 524, 563, -2, 512, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, + 401, 401, 0, 0, -2, 512, 512, 512, 1593, 0, + 0, 0, 560, 463, 401, 401, 401, 0, 401, 401, + 401, 401, 0, 0, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 1501, 167, 1609, 1606, 1607, 1766, 1767, 1768, 1769, + 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, + 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, + 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, + 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, + 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, + 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, + 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, + 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, + 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, + 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, + 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, + 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, + 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, + 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, + 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, + 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, + 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, + 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, + 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, + 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, + 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, + 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, + 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, + 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, + 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, + 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, + 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, + 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, + 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, + 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, + 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, + 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, + 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, + 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, + 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, + 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, + 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, + 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, + 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, + 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, + 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, + 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, + 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, + 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, + 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, + 0, 1585, 0, 716, 980, 0, 0, 781, 781, 0, + 781, 781, 781, 781, 0, 0, 0, 730, 0, 0, + 0, 0, 778, 0, 746, 747, 0, 778, 0, 753, + 784, 0, 0, 759, 781, 781, 762, 2233, 0, 2233, + 2233, 1576, 0, 775, 773, 787, 788, 42, 791, 794, + 795, 796, 797, 800, 0, 811, 814, 1602, 1603, 0, + 816, 823, 840, 841, 0, 873, 874, 47, 1130, 0, + 1002, 0, 1008, -2, 1019, 1036, 1037, 1038, 1039, 1040, + 1042, 1043, 1044, 0, 0, 0, 0, 1049, 1050, 0, + 0, 0, 0, 0, 1111, 0, 0, 0, 0, 1447, + 0, 0, 1409, 1409, 1145, 1409, 1409, 1411, 1411, 1411, + 1818, 1956, 1964, 2140, 1779, 1785, 1786, 1787, 2086, 2087, + 2088, 2089, 2177, 2178, 2182, 1880, 1774, 2153, 2154, 0, + 2229, 1917, 1925, 1926, 1950, 2050, 2163, 1797, 1945, 2014, + 1877, 1899, 1900, 2032, 2033, 1921, 1922, 1903, 2092, 2094, + 2110, 2111, 2096, 2098, 2107, 2113, 2118, 2097, 2109, 2114, + 2127, 2131, 2134, 2135, 2136, 2104, 2102, 2115, 2119, 2121, + 2123, 2129, 2132, 2105, 2103, 2116, 2120, 2122, 2124, 2130, + 2133, 2091, 2095, 2099, 2108, 2126, 2106, 2125, 2100, 2112, + 2117, 2128, 2101, 2093, 1915, 1918, 1906, 1907, 1909, 1911, + 1916, 1923, 1929, 1908, 1928, 1927, 0, 1904, 1905, 1910, + 1920, 1924, 1912, 1913, 1914, 1919, 1930, 1970, 1969, 1968, + 2013, 1941, 2012, 0, 0, 0, 0, 0, 1769, 1823, + 1824, 2137, 1331, 1332, 1333, 1334, 0, 0, 0, 0, + 0, 0, 0, 293, 294, 1460, 1461, 46, 1129, 1572, + 1411, 1411, 1411, 1411, 1411, 1411, 1071, 1072, 1073, 1074, + 1075, 1099, 1100, 1106, 1107, 2027, 2028, 2029, 2030, 1861, + 2172, 1869, 1870, 2009, 2010, 1882, 1883, 2203, 2204, -2, + -2, -2, 234, 235, 236, 237, 238, 239, 240, 241, + 0, 1822, 2151, 2152, 230, 0, 0, 298, 299, 295, + 296, 297, 1113, 1114, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 2232, 0, 850, 0, + 0, 0, 0, 0, 0, 1614, 1615, 1483, 0, 1475, + 1474, 65, 0, 877, -2, 0, 0, 0, 0, 49, + 0, 54, 937, 880, 79, 78, 1523, 0, 0, 0, + 61, 1484, 69, 71, 1485, 0, 882, 883, 0, 913, + 917, 0, 0, 0, 1592, 1591, 1591, 104, 0, 0, + 105, 125, 126, 127, 0, 0, 111, 112, 1578, 1579, + 45, 0, 0, 179, 180, 0, 43, 428, 0, 175, + 0, 421, 360, 0, 1501, 0, 0, 0, 0, 0, + 877, 0, 1586, 156, 157, 164, 165, 166, 401, 401, + 401, 575, 0, 0, 167, 167, 533, 534, 535, 0, + 0, -2, 426, 0, 513, 0, 0, 415, 415, 419, + 417, 418, 0, 0, 0, 0, 0, 0, 0, 0, + 552, 0, 553, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 664, 0, 402, 0, 573, 574, 464, 0, + 0, 0, 0, 0, 0, 0, 0, 1594, 1595, 0, + 550, 551, 0, 0, 0, 401, 401, 0, 0, 0, + 0, 401, 401, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 155, 1514, 0, 0, 0, -2, 0, 708, 0, + 0, 0, 1587, 1587, 0, 715, 0, 717, 0, 720, + 0, 0, 721, 0, 778, 778, 776, 777, 723, 724, + 725, 726, 781, 0, 0, 410, 411, 412, 778, 781, + 0, 781, 781, 781, 781, 778, 778, 778, 781, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2233, 784, + 781, 0, 754, 0, 755, 756, 757, 760, 761, 763, + 2234, 2235, 1604, 1605, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, @@ -9310,295 +9353,295 @@ var yyDef = [...]int{ 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, - 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 2227, 2227, - 766, 770, 1576, 792, 798, 800, 801, 0, 0, 811, - 814, 833, 50, 1862, 821, 50, 823, 824, 825, 851, - 852, 857, 0, 0, 0, 0, 863, 864, 865, 0, - 0, 868, 869, 870, 0, 0, 0, 0, 0, 999, - 0, 0, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1019, 1020, 0, - 0, 0, 1044, 1045, 1046, 1047, 1050, 0, 1061, 0, - 1063, 1455, -2, 0, 0, 0, 1055, 1056, 0, 0, - 0, 0, 0, 0, 0, 1447, 0, 0, 1142, 0, - 1143, 1145, 1146, 1147, 0, 1148, 1149, 886, 886, 886, - 886, 886, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1596, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 896, - 0, 0, 896, 896, 0, 0, 221, 222, 223, 224, - 225, 226, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 241, 242, 243, 244, - 245, 246, 299, 247, 248, 249, 1128, 0, 0, 0, - 47, 841, 842, 0, 962, 1596, 0, 0, 892, 0, - 58, 67, 69, 1482, 62, 1482, 0, 898, 0, 0, - -2, -2, 899, 905, 906, 907, 908, 909, 55, 2225, - 56, 0, 75, 0, 49, 0, 0, 0, 0, 373, - 1525, 0, 0, 1475, 1476, 1479, 0, 913, 1956, 917, - 0, 919, 920, 0, 0, 101, 0, 978, 0, 0, - 0, 112, 0, 114, 115, 0, 0, 0, 384, 1579, - 1580, 1581, -2, 407, 0, 384, 368, 307, 308, 309, - 359, 311, 359, 359, 359, 359, 373, 373, 373, 373, - 342, 343, 344, 345, 346, 0, 0, 328, 359, 359, - 359, 359, 349, 350, 351, 352, 353, 354, 355, 356, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 361, - 361, 361, 361, 361, 365, 365, 0, 43, 0, 388, - 0, 1479, 0, 0, 1513, 1588, 1598, 0, 0, 0, - 1588, 133, 0, 0, 0, 575, 613, 526, 563, 576, - 0, 529, 530, -2, 0, 0, 511, 0, 513, 0, - 408, 0, -2, 0, 418, 0, 414, 418, 415, 418, - 406, 419, 553, 554, 555, 0, 557, 558, 643, 948, - 0, 0, 0, 0, 0, 649, 650, 651, 0, 653, - 654, 655, 656, 657, 658, 659, 660, 661, 662, 564, - 565, 566, 567, 568, 569, 570, 571, 0, 0, 0, - 0, 513, 0, 560, 0, 0, 464, 465, 466, 0, - 0, 469, 470, 471, 472, 0, 0, 475, 476, 477, - 965, 966, 478, 479, 504, 505, 506, 480, 481, 482, - 483, 484, 485, 486, 498, 499, 500, 501, 502, 503, - 487, 488, 489, 490, 491, 492, 495, 0, 148, 1504, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1586, 0, 0, 0, 0, - 895, 980, 1609, 1610, 0, 0, 781, 782, 0, 412, - 413, 780, 780, 726, 767, 0, 780, 730, 768, 731, - 733, 732, 734, 747, 748, 780, 737, 778, 779, 738, - 739, 740, 741, 742, 743, 744, 763, 749, 750, 751, - 784, 0, 788, 789, 764, 765, 0, 0, 804, 805, - 0, 812, 836, 834, 835, 837, 829, 830, 831, 832, - 0, 838, 0, 0, 854, 97, 859, 860, 861, 862, - 874, 867, 1130, 996, 997, 998, 0, 1000, 1004, 0, - 1114, 1116, 1006, 1002, 1008, 1125, 1126, 1127, 0, 0, - 0, 0, 0, 1012, 1016, 1021, 1022, 1023, 1024, 1025, - 0, 1026, 0, 1029, 1030, 1031, 1032, 1033, 1034, 1040, - 1423, 1424, 1425, 1059, 300, 301, 0, 1060, 0, 0, - 0, 0, 0, 0, 0, 0, 1370, 1371, 1372, 1373, - 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, - 1384, 1385, 1386, 1387, 1388, 1389, 1129, 0, 910, 0, - 0, 1453, 1450, 0, 0, 0, 1409, 1411, 0, 0, - 0, 887, 888, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, - 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 0, 0, - 1426, 0, 0, 0, 0, 0, 1446, 0, 1065, 1066, - 1067, 0, 0, 0, 0, 0, 0, 1188, 0, 0, - 0, 0, 1597, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 143, 144, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1334, 1335, 1336, 1337, 40, 0, - 0, 0, 0, 0, 0, 0, 897, 1457, 0, -2, - -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1359, 0, 0, 0, 0, 0, - 0, 1569, 0, 0, 844, 845, 847, 0, 982, 0, - 963, 0, 0, 850, 0, 891, 0, 894, 61, 63, - 903, 904, 0, 921, 900, 57, 52, 0, 0, 940, - 1523, 373, 1545, 0, 382, 382, 379, 1485, 1486, 0, - 1478, 1480, 1481, 80, 918, 914, 0, 994, 0, 0, - 977, 0, 924, 926, 927, 928, 960, 0, 931, 932, - 0, 0, 0, 0, 0, 99, 979, 105, 0, 113, - 0, 0, 118, 119, 106, 107, 108, 109, 0, 602, - -2, 459, 180, 182, 183, 184, 175, -2, 371, 369, - 370, 310, 373, 373, 336, 337, 338, 339, 340, 341, - 0, 0, 329, 330, 331, 332, 321, 0, 322, 323, - 324, 363, 0, 325, 326, 0, 327, 426, 0, 1487, - 389, 390, 392, 400, 0, 395, 396, 0, 400, 400, - 0, 421, 422, 0, 1479, 1504, 0, 0, 0, 1599, - 1598, 1598, 1598, 0, 168, 169, 170, 171, 172, 173, - 638, 0, 0, 614, 636, 637, 166, 0, 0, 176, - 515, 514, 0, 670, 0, 424, 0, 0, 418, 418, - 403, 404, 556, 0, 0, 645, 646, 647, 648, 0, - 0, 0, 542, 453, 0, 543, 544, 513, 515, 0, - 0, 384, 467, 468, 473, 474, 493, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 589, 590, - 591, 594, 596, 517, 600, 593, 595, 597, 517, 601, - 1501, 1502, 1503, 0, 0, 708, 0, 0, 450, 95, - 1587, 713, 717, 718, 777, 736, 769, 777, 728, 735, - 757, 802, 803, 808, 816, 817, 818, 819, 820, 858, - 0, 0, 0, 0, 866, 0, 0, 1005, 1115, 1117, - 1009, 0, 1013, 1017, 0, 0, 0, 0, 0, 1064, - 1062, 1457, 0, 0, 0, 1111, 0, 0, 0, 1133, - 1134, 0, 0, 0, 1451, 0, 0, 1140, 0, 1412, - 1150, 0, 0, 0, 0, 0, 1156, 1157, 1158, 1159, - 1160, 1161, 1162, 1163, 1164, 1165, 1473, 1167, 0, 0, - 0, 0, 0, 1172, 1173, 1174, 1175, 1176, 0, 1178, - 0, 1179, 0, 0, 0, 0, 1186, 1187, 1189, 0, - 0, 1192, 1193, 0, 1195, 0, 1197, 1198, 1199, 1200, - 1201, 1202, 0, 1204, 0, 1206, 1207, 1208, 0, 1210, - 0, 1212, 1213, 0, 1215, 0, 1217, 0, 1220, 0, - 1223, 0, 1226, 0, 1229, 0, 1232, 0, 1235, 0, - 1238, 0, 1241, 0, 1244, 0, 1247, 0, 1250, 0, - 1253, 0, 1256, 0, 1259, 0, 1262, 0, 1265, 1266, - 1267, 0, 1269, 0, 1271, 0, 1274, 1275, 0, 1277, - 0, 1280, 0, 1283, 0, 0, 1284, 0, 0, 0, - 1288, 0, 0, 0, 0, 1297, 1298, 1299, 1300, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1311, - 1312, 1313, 1314, 1315, 1316, 0, 1318, 0, 1093, 0, - 0, 1093, 0, 0, 0, 0, 0, 1131, 896, 0, - 1413, 1414, 1415, 1416, 1417, 0, 0, 0, 0, 0, - 0, 1357, 1358, 1360, 0, 0, 1363, 0, 1365, 0, - 1570, 843, 846, 848, 934, 983, 984, 0, 0, 0, - 0, 964, 1595, 889, 890, 893, 942, 0, 1461, 0, - 0, 921, 994, 922, 0, 901, 54, 937, 0, 1527, - 1526, 1539, 1552, 382, 382, 376, 377, 383, 378, 380, - 381, 1477, 0, 1482, 0, 1563, 0, 0, 1555, 0, - 0, 0, 0, 0, 0, 0, 0, 967, 0, 0, - 970, 0, 0, 0, 0, 961, 932, 0, 933, 0, - -2, 0, 0, 93, 94, 0, 0, 0, 116, 117, - 0, 0, 123, 385, 386, 157, 166, 461, 181, 434, - 0, 0, 306, 372, 333, 334, 335, 0, 357, 0, - 0, 0, 0, 455, 129, 1491, 1490, 400, 400, 391, - 0, 394, 0, 0, 0, 1600, 360, 423, 0, 147, - 0, 0, 0, 0, 0, 153, 608, 0, 0, 615, - 0, 0, 0, 524, 0, 535, 536, 0, 642, -2, - 704, 388, 0, 402, 405, 949, 0, 0, 537, 0, - 540, 541, 454, 515, 546, 547, 561, 548, 496, 497, - 494, 0, 0, 1514, 1515, 1520, 1518, 1519, 134, 582, - 584, 583, 587, 0, 0, 0, 519, 0, 519, 580, - 0, 450, 1487, 0, 712, 451, 452, 780, 780, 853, - 98, 0, 856, 0, 0, 0, 0, 1010, 1014, 1027, - 1028, 1418, 1444, 359, 359, 1431, 359, 365, 1434, 359, - 1436, 359, 1439, 359, 1442, 1443, 0, 0, 1057, 0, - 911, 0, 0, 1139, 1454, 0, 0, 1151, 1152, 1153, - 1154, 1155, 1448, 0, 0, 0, 1171, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 145, 146, 0, - 0, 0, 0, 0, 0, 1368, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1088, 1092, 0, - 1094, 1095, 0, 0, 1320, 0, 0, 1338, 0, 0, - 0, 0, 0, 0, 0, 1458, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 985, 990, 990, 990, - 0, 0, 0, 1582, 1583, 1462, 1463, 994, 1464, 923, - 902, 941, 1545, 0, 1538, 0, -2, 1547, 0, 0, - 0, 1553, 374, 375, 915, 81, 995, 84, 0, 1563, - 1572, 0, 1554, 1565, 1567, 0, 0, 0, 1559, 0, - 994, 925, 956, 958, 0, 953, 968, 969, 971, 0, - 973, 0, 975, 976, 936, 930, 0, 101, 0, 994, - 994, 100, 0, 981, 120, 121, 122, 460, 185, 190, - 0, 0, 0, 195, 0, 197, 0, 0, 0, 202, - 203, 400, 400, 435, 0, 303, 305, 0, 0, 188, - 373, 0, 373, 0, 364, 366, 0, 436, 456, 1488, - 1489, 0, 0, 393, 397, 398, 399, 0, 1589, 149, - 0, 0, 0, 611, 0, 639, 0, 0, 0, 0, - 0, 0, 177, 516, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 0, 400, 0, 0, 0, 400, 400, - 400, 0, 696, 387, 0, 0, 667, 664, 538, 0, - 227, 228, 230, 0, 0, 0, 0, 0, 545, 936, - 1505, 1506, 1507, 0, 1517, 1521, 137, 0, 0, 0, - 0, 592, 598, 0, 518, 599, 709, 710, 711, 96, - 721, 727, 855, 875, 1003, 1011, 1015, 0, 0, 0, - 0, 1445, 1429, 373, 1432, 1433, 1435, 1437, 1438, 1440, - 1441, 1053, 1054, 1058, 0, 1136, 0, 1138, 1452, 0, - 1482, 0, 0, 0, 1170, 0, 0, 0, 1181, 1180, - 1182, 0, 1184, 1185, 1190, 1191, 1194, 1196, 1203, 1205, - 1209, 1211, 1214, 1216, 1218, 0, 1221, 0, 1224, 0, - 1227, 0, 1230, 0, 1233, 0, 1236, 0, 1239, 0, - 1242, 0, 1245, 0, 1248, 0, 1251, 0, 1254, 0, - 1257, 0, 1260, 0, 1263, 0, 1268, 1270, 0, 1273, - 1276, 1278, 0, 1281, 0, 1285, 0, 1287, 1289, 1290, - 0, 0, 0, 1301, 1302, 1303, 1304, 1305, 1306, 1307, - 1308, 1309, 1310, 1317, 0, 1086, 1089, 1319, 1096, 1097, - 1102, 1322, 0, 0, 0, 1325, 0, 0, 0, 1329, - 1132, 1340, 0, 1345, 0, 0, 1351, 0, 1355, 0, - 1361, 1362, 1364, 1366, 0, 0, 0, 0, 0, 962, - 943, 65, 1464, 1466, 0, 1532, 1530, 1530, 1540, 1541, - 0, 0, 1548, 0, 0, 0, 0, 85, 0, 0, - 0, 1568, 0, 0, 0, 0, 102, 1473, 950, 957, - 0, 0, 951, 0, 952, 972, 974, 929, 0, 994, - 994, 91, 92, 0, 191, 0, 193, 219, 220, 0, - 196, 198, 199, 200, 206, 207, 208, 201, 0, 0, - 302, 304, 0, 0, 347, 358, 348, 0, 0, 1492, - 1493, 1494, 1495, 1496, 1497, 1498, 1499, 936, 150, 151, - 152, 603, 0, 613, 0, 938, 0, 606, 0, 527, - 0, 0, 0, 400, 400, 400, 0, 0, 0, 0, - 681, 0, 0, 644, 0, 652, 0, 0, 0, 231, - 232, 0, 1516, 581, 0, 135, 136, 0, 0, 586, - 520, 521, 1051, 0, 0, 0, 1052, 1430, 0, 0, - 0, 0, 1449, 0, 0, 0, 0, 1177, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1293, 0, 0, 0, 633, 634, 0, 1369, 1091, 1473, - 0, 1093, 1103, 1104, 0, 1093, 1339, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 991, 0, - 0, 0, 0, 982, 1466, 1471, 0, 0, 1535, 0, - 1528, 1531, 1529, 1542, 0, 0, 1549, 0, 1551, 0, - 1573, 1574, 1566, 0, 1558, 1561, 1557, 1560, 1482, 954, - 0, 959, 0, 1473, 90, 0, 194, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 204, 205, 0, 0, - 362, 367, 0, 0, 0, 604, 0, 939, 616, 607, - 0, 694, 0, 698, 0, 0, 0, 701, 702, 703, - 680, 0, 684, 428, 668, 665, 666, 539, 0, 138, - 139, 0, 0, 0, 1419, 0, 1422, 1135, 1137, 0, - 1166, 1168, 1169, 1427, 1428, 1183, 1219, 1222, 1225, 1228, - 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, - 1261, 1264, 1272, 1279, 1282, 1286, 1291, 0, 1294, 0, - 0, 1295, 0, 635, 1082, 0, 0, 1100, 1101, 0, - 1324, 1326, 1327, 1328, 1341, 0, 1346, 1347, 0, 1352, - 0, 1356, 1367, 0, 987, 944, 945, 992, 993, 0, - 0, 935, 1471, 83, 1472, 1469, 0, 1467, 1465, 1524, - 0, 1533, 1534, 1543, 1544, 1550, 0, 1556, 0, 88, - 0, 0, 0, 1482, 192, 0, 211, 0, 612, 0, - 615, 605, 692, 693, 0, 705, 697, 699, 700, 682, - -2, 1508, 0, 0, 0, 588, 1420, 0, 0, 1296, - 0, 631, 632, 1090, 1083, 0, 1068, 1069, 1087, 1321, - 1323, 0, 0, 0, 0, 986, 988, 989, 82, 0, - 1468, 1108, 0, 1536, 1537, 1564, 1562, 955, 962, 0, - 89, 441, 434, 1508, 0, 0, 0, 685, 686, 687, - 688, 689, 690, 691, 578, 1510, 140, 141, 0, 508, - 509, 510, 134, 0, 1141, 1292, 1084, 0, 0, 0, - 0, 0, 1342, 0, 1348, 0, 1353, 0, 946, 947, - 1470, 0, 0, 617, 0, 619, 0, -2, 429, 442, - 0, 186, 212, 213, 0, 0, 216, 217, 218, 209, - 210, 130, 0, 0, 706, 0, 1511, 1512, 0, 137, - 0, 0, 1075, 1076, 1077, 1078, 1080, 0, 0, 0, - 0, 1109, 1088, 618, 0, 0, 384, 0, 628, 430, - 431, 0, 437, 438, 439, 440, 214, 215, 640, 0, - 0, 507, 585, 1421, 0, 0, 1343, 0, 1349, 0, - 1354, 0, 620, 621, 629, 0, 432, 0, 433, 0, - 0, 0, 609, 0, 640, 1509, 1085, 1079, 1081, 0, - 0, 1107, 0, 630, 626, 443, 445, 446, 0, 0, - 444, 641, 610, 1344, 1350, 0, 447, 448, 449, 622, - 623, 624, 625, + 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, + 1762, 1763, 1764, 1765, 2233, 2233, 767, 771, 1577, 793, + 799, 801, 802, 0, 0, 812, 815, 834, 51, 1868, + 822, 51, 824, 825, 826, 852, 853, 858, 0, 0, + 0, 0, 864, 865, 866, 0, 0, 869, 870, 871, + 0, 0, 0, 0, 0, 1000, 0, 0, 1119, 1120, + 1121, 1122, 1123, 1124, 1125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1020, 1021, 0, 0, 0, 1045, 1046, + 1047, 1048, 1051, 0, 1062, 0, 1064, 1456, -2, 0, + 0, 0, 1056, 1057, 0, 0, 0, 0, 0, 0, + 0, 1448, 0, 0, 1143, 0, 1144, 1146, 1147, 1148, + 0, 1149, 1150, 887, 887, 887, 887, 887, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1597, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 897, 0, 0, 897, 897, + 0, 0, 222, 223, 224, 225, 226, 227, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 242, 243, 244, 245, 246, 247, 300, 248, + 249, 250, 1129, 0, 0, 0, 48, 842, 843, 0, + 963, 1597, 0, 0, 893, 0, 1612, 59, 68, 70, + 1483, 63, 1483, 0, 899, 0, 0, -2, -2, 900, + 906, 907, 908, 909, 910, 56, 2231, 57, 0, 76, + 0, 50, 0, 0, 0, 0, 374, 1526, 0, 0, + 1476, 1477, 1480, 0, 914, 1962, 918, 0, 920, 921, + 0, 0, 102, 0, 979, 0, 0, 0, 113, 0, + 115, 116, 0, 0, 0, 385, 1580, 1581, 1582, -2, + 408, 0, 385, 369, 308, 309, 310, 360, 312, 360, + 360, 360, 360, 374, 374, 374, 374, 343, 344, 345, + 346, 347, 0, 0, 329, 360, 360, 360, 360, 350, + 351, 352, 353, 354, 355, 356, 357, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 362, 362, 362, 362, + 362, 366, 366, 0, 44, 0, 389, 0, 1480, 0, + 0, 1514, 1589, 1599, 0, 0, 0, 1589, 134, 0, + 0, 0, 576, 614, 527, 564, 577, 0, 530, 531, + -2, 0, 0, 512, 0, 514, 0, 409, 0, -2, + 0, 419, 0, 415, 419, 416, 419, 407, 420, 554, + 555, 556, 0, 558, 559, 644, 949, 0, 0, 0, + 0, 0, 650, 651, 652, 0, 654, 655, 656, 657, + 658, 659, 660, 661, 662, 663, 565, 566, 567, 568, + 569, 570, 571, 572, 0, 0, 0, 0, 514, 0, + 561, 0, 0, 465, 466, 467, 0, 0, 470, 471, + 472, 473, 0, 0, 476, 477, 478, 966, 967, 479, + 480, 505, 506, 507, 481, 482, 483, 484, 485, 486, + 487, 499, 500, 501, 502, 503, 504, 488, 489, 490, + 491, 492, 493, 496, 0, 149, 1505, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1587, 0, 0, 0, 0, 896, 981, 1610, + 1611, 0, 0, 782, 783, 0, 413, 414, 781, 781, + 727, 768, 0, 781, 731, 769, 732, 734, 733, 735, + 748, 749, 781, 738, 779, 780, 739, 740, 741, 742, + 743, 744, 745, 764, 750, 751, 752, 785, 0, 789, + 790, 765, 766, 0, 0, 805, 806, 0, 813, 837, + 835, 836, 838, 830, 831, 832, 833, 0, 839, 0, + 0, 855, 98, 860, 861, 862, 863, 875, 868, 1131, + 997, 998, 999, 0, 1001, 1005, 0, 1115, 1117, 1007, + 1003, 1009, 1126, 1127, 1128, 0, 0, 0, 0, 0, + 1013, 1017, 1022, 1023, 1024, 1025, 1026, 0, 1027, 0, + 1030, 1031, 1032, 1033, 1034, 1035, 1041, 1424, 1425, 1426, + 1060, 301, 302, 0, 1061, 0, 0, 0, 0, 0, + 0, 0, 0, 1371, 1372, 1373, 1374, 1375, 1376, 1377, + 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, + 1388, 1389, 1390, 1130, 0, 911, 0, 0, 1454, 1451, + 0, 0, 0, 1410, 1412, 0, 0, 0, 888, 889, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1391, 1392, 1393, + 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, + 1404, 1405, 1406, 1407, 1408, 0, 0, 1427, 0, 0, + 0, 0, 0, 1447, 0, 1066, 1067, 1068, 0, 0, + 0, 0, 0, 0, 1189, 0, 0, 0, 0, 1598, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 144, 145, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1335, 1336, 1337, 1338, 41, 0, 0, 0, 0, + 0, 0, 0, 898, 1458, 0, -2, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1360, 0, 0, 0, 0, 0, 0, 1570, 0, + 0, 845, 846, 848, 0, 983, 0, 964, 0, 0, + 851, 0, 892, 0, 895, 62, 64, 904, 905, 0, + 922, 901, 58, 53, 0, 0, 941, 1524, 374, 1546, + 0, 383, 383, 380, 1486, 1487, 0, 1479, 1481, 1482, + 81, 919, 915, 0, 995, 0, 0, 978, 0, 925, + 927, 928, 929, 961, 0, 932, 933, 0, 0, 0, + 0, 0, 100, 980, 106, 0, 114, 0, 0, 119, + 120, 107, 108, 109, 110, 0, 603, -2, 460, 181, + 183, 184, 185, 176, -2, 372, 370, 371, 311, 374, + 374, 337, 338, 339, 340, 341, 342, 0, 0, 330, + 331, 332, 333, 322, 0, 323, 324, 325, 364, 0, + 326, 327, 0, 328, 427, 0, 1488, 390, 391, 393, + 401, 0, 396, 397, 0, 401, 401, 0, 422, 423, + 0, 1480, 1505, 0, 0, 0, 1600, 1599, 1599, 1599, + 0, 169, 170, 171, 172, 173, 174, 639, 0, 0, + 615, 637, 638, 167, 0, 0, 177, 516, 515, 0, + 671, 0, 425, 0, 0, 419, 419, 404, 405, 557, + 0, 0, 646, 647, 648, 649, 0, 0, 0, 543, + 454, 0, 544, 545, 514, 516, 0, 0, 385, 468, + 469, 474, 475, 494, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 590, 591, 592, 595, 597, + 518, 601, 594, 596, 598, 518, 602, 1502, 1503, 1504, + 0, 0, 709, 0, 0, 451, 96, 1588, 714, 718, + 719, 778, 737, 770, 778, 729, 736, 758, 803, 804, + 809, 817, 818, 819, 820, 821, 859, 0, 0, 0, + 0, 867, 0, 0, 1006, 1116, 1118, 1010, 0, 1014, + 1018, 0, 0, 0, 0, 0, 1065, 1063, 1458, 0, + 0, 0, 1112, 0, 0, 0, 1134, 1135, 0, 0, + 0, 1452, 0, 0, 1141, 0, 1413, 1151, 0, 0, + 0, 0, 0, 1157, 1158, 1159, 1160, 1161, 1162, 1163, + 1164, 1165, 1166, 1474, 1168, 0, 0, 0, 0, 0, + 1173, 1174, 1175, 1176, 1177, 0, 1179, 0, 1180, 0, + 0, 0, 0, 1187, 1188, 1190, 0, 0, 1193, 1194, + 0, 1196, 0, 1198, 1199, 1200, 1201, 1202, 1203, 0, + 1205, 0, 1207, 1208, 1209, 0, 1211, 0, 1213, 1214, + 0, 1216, 0, 1218, 0, 1221, 0, 1224, 0, 1227, + 0, 1230, 0, 1233, 0, 1236, 0, 1239, 0, 1242, + 0, 1245, 0, 1248, 0, 1251, 0, 1254, 0, 1257, + 0, 1260, 0, 1263, 0, 1266, 1267, 1268, 0, 1270, + 0, 1272, 0, 1275, 1276, 0, 1278, 0, 1281, 0, + 1284, 0, 0, 1285, 0, 0, 0, 1289, 0, 0, + 0, 0, 1298, 1299, 1300, 1301, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1312, 1313, 1314, 1315, + 1316, 1317, 0, 1319, 0, 1094, 0, 0, 1094, 0, + 0, 0, 0, 0, 1132, 897, 0, 1414, 1415, 1416, + 1417, 1418, 0, 0, 0, 0, 0, 0, 1358, 1359, + 1361, 0, 0, 1364, 0, 1366, 0, 1571, 844, 847, + 849, 935, 984, 985, 0, 0, 0, 0, 965, 1596, + 890, 891, 894, 943, 0, 1462, 0, 0, 922, 995, + 923, 0, 902, 55, 938, 0, 1528, 1527, 1540, 1553, + 383, 383, 377, 378, 384, 379, 381, 382, 1478, 0, + 1483, 0, 1564, 0, 0, 1556, 0, 0, 0, 0, + 0, 0, 0, 0, 968, 0, 0, 971, 0, 0, + 0, 0, 962, 933, 0, 934, 0, -2, 0, 0, + 94, 95, 0, 0, 0, 117, 118, 0, 0, 124, + 386, 387, 158, 167, 462, 182, 435, 0, 0, 307, + 373, 334, 335, 336, 0, 358, 0, 0, 0, 0, + 456, 130, 1492, 1491, 401, 401, 392, 0, 395, 0, + 0, 0, 1601, 361, 424, 0, 148, 0, 0, 0, + 0, 0, 154, 609, 0, 0, 616, 0, 0, 0, + 525, 0, 536, 537, 0, 643, -2, 705, 389, 0, + 403, 406, 950, 0, 0, 538, 0, 541, 542, 455, + 516, 547, 548, 562, 549, 497, 498, 495, 0, 0, + 1515, 1516, 1521, 1519, 1520, 135, 583, 585, 584, 588, + 0, 0, 0, 520, 0, 520, 581, 0, 451, 1488, + 0, 713, 452, 453, 781, 781, 854, 99, 0, 857, + 0, 0, 0, 0, 1011, 1015, 1028, 1029, 1419, 1445, + 360, 360, 1432, 360, 366, 1435, 360, 1437, 360, 1440, + 360, 1443, 1444, 0, 0, 1058, 0, 912, 0, 0, + 1140, 1455, 0, 0, 1152, 1153, 1154, 1155, 1156, 1449, + 0, 0, 0, 1172, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 146, 147, 0, 0, 0, 0, + 0, 0, 1369, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1089, 1093, 0, 1095, 1096, 0, + 0, 1321, 0, 0, 1339, 0, 0, 0, 0, 0, + 0, 0, 1459, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 986, 991, 991, 991, 0, 0, 0, + 1583, 1584, 1463, 1464, 995, 1465, 924, 903, 942, 1546, + 0, 1539, 0, -2, 1548, 0, 0, 0, 1554, 375, + 376, 916, 82, 996, 85, 0, 1564, 1573, 0, 1555, + 1566, 1568, 0, 0, 0, 1560, 0, 995, 926, 957, + 959, 0, 954, 969, 970, 972, 0, 974, 0, 976, + 977, 937, 931, 0, 102, 0, 995, 995, 101, 0, + 982, 121, 122, 123, 461, 186, 191, 0, 0, 0, + 196, 0, 198, 0, 0, 0, 203, 204, 401, 401, + 436, 0, 304, 306, 0, 0, 189, 374, 0, 374, + 0, 365, 367, 0, 437, 457, 1489, 1490, 0, 0, + 394, 398, 399, 400, 0, 1590, 150, 0, 0, 0, + 612, 0, 640, 0, 0, 0, 0, 0, 0, 178, + 517, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 0, 401, 0, 0, 0, 401, 401, 401, 0, 697, + 388, 0, 0, 668, 665, 539, 0, 228, 229, 231, + 0, 0, 0, 0, 0, 546, 937, 1506, 1507, 1508, + 0, 1518, 1522, 138, 0, 0, 0, 0, 593, 599, + 0, 519, 600, 710, 711, 712, 97, 722, 728, 856, + 876, 1004, 1012, 1016, 0, 0, 0, 0, 1446, 1430, + 374, 1433, 1434, 1436, 1438, 1439, 1441, 1442, 1054, 1055, + 1059, 0, 1137, 0, 1139, 1453, 0, 1483, 0, 0, + 0, 1171, 0, 0, 0, 1182, 1181, 1183, 0, 1185, + 1186, 1191, 1192, 1195, 1197, 1204, 1206, 1210, 1212, 1215, + 1217, 1219, 0, 1222, 0, 1225, 0, 1228, 0, 1231, + 0, 1234, 0, 1237, 0, 1240, 0, 1243, 0, 1246, + 0, 1249, 0, 1252, 0, 1255, 0, 1258, 0, 1261, + 0, 1264, 0, 1269, 1271, 0, 1274, 1277, 1279, 0, + 1282, 0, 1286, 0, 1288, 1290, 1291, 0, 0, 0, + 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, + 1318, 0, 1087, 1090, 1320, 1097, 1098, 1103, 1323, 0, + 0, 0, 1326, 0, 0, 0, 1330, 1133, 1341, 0, + 1346, 0, 0, 1352, 0, 1356, 0, 1362, 1363, 1365, + 1367, 0, 0, 0, 0, 0, 963, 944, 66, 1465, + 1467, 0, 1533, 1531, 1531, 1541, 1542, 0, 0, 1549, + 0, 0, 0, 0, 86, 0, 0, 0, 1569, 0, + 0, 0, 0, 103, 1474, 951, 958, 0, 0, 952, + 0, 953, 973, 975, 930, 0, 995, 995, 92, 93, + 0, 192, 0, 194, 220, 221, 0, 197, 199, 200, + 201, 207, 208, 209, 202, 0, 0, 303, 305, 0, + 0, 348, 359, 349, 0, 0, 1493, 1494, 1495, 1496, + 1497, 1498, 1499, 1500, 937, 151, 152, 153, 604, 0, + 614, 0, 939, 0, 607, 0, 528, 0, 0, 0, + 401, 401, 401, 0, 0, 0, 0, 682, 0, 0, + 645, 0, 653, 0, 0, 0, 232, 233, 0, 1517, + 582, 0, 136, 137, 0, 0, 587, 521, 522, 1052, + 0, 0, 0, 1053, 1431, 0, 0, 0, 0, 1450, + 0, 0, 0, 0, 1178, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1294, 0, 0, + 0, 634, 635, 0, 1370, 1092, 1474, 0, 1094, 1104, + 1105, 0, 1094, 1340, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 992, 0, 0, 0, 0, + 983, 1467, 1472, 0, 0, 1536, 0, 1529, 1532, 1530, + 1543, 0, 0, 1550, 0, 1552, 0, 1574, 1575, 1567, + 0, 1559, 1562, 1558, 1561, 1483, 955, 0, 960, 0, + 1474, 91, 0, 195, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 205, 206, 0, 0, 363, 368, 0, + 0, 0, 605, 0, 940, 617, 608, 0, 695, 0, + 699, 0, 0, 0, 702, 703, 704, 681, 0, 685, + 429, 669, 666, 667, 540, 0, 139, 140, 0, 0, + 0, 1420, 0, 1423, 1136, 1138, 0, 1167, 1169, 1170, + 1428, 1429, 1184, 1220, 1223, 1226, 1229, 1232, 1235, 1238, + 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1273, + 1280, 1283, 1287, 1292, 0, 1295, 0, 0, 1296, 0, + 636, 1083, 0, 0, 1101, 1102, 0, 1325, 1327, 1328, + 1329, 1342, 0, 1347, 1348, 0, 1353, 0, 1357, 1368, + 0, 988, 945, 946, 993, 994, 0, 0, 936, 1472, + 84, 1473, 1470, 0, 1468, 1466, 1525, 0, 1534, 1535, + 1544, 1545, 1551, 0, 1557, 0, 89, 0, 0, 0, + 1483, 193, 0, 212, 0, 613, 0, 616, 606, 693, + 694, 0, 706, 698, 700, 701, 683, -2, 1509, 0, + 0, 0, 589, 1421, 0, 0, 1297, 0, 632, 633, + 1091, 1084, 0, 1069, 1070, 1088, 1322, 1324, 0, 0, + 0, 0, 987, 989, 990, 83, 0, 1469, 1109, 0, + 1537, 1538, 1565, 1563, 956, 963, 0, 90, 442, 435, + 1509, 0, 0, 0, 686, 687, 688, 689, 690, 691, + 692, 579, 1511, 141, 142, 0, 509, 510, 511, 135, + 0, 1142, 1293, 1085, 0, 0, 0, 0, 0, 1343, + 0, 1349, 0, 1354, 0, 947, 948, 1471, 0, 0, + 618, 0, 620, 0, -2, 430, 443, 0, 187, 213, + 214, 0, 0, 217, 218, 219, 210, 211, 131, 0, + 0, 707, 0, 1512, 1513, 0, 138, 0, 0, 1076, + 1077, 1078, 1079, 1081, 0, 0, 0, 0, 1110, 1089, + 619, 0, 0, 385, 0, 629, 431, 432, 0, 438, + 439, 440, 441, 215, 216, 641, 0, 0, 508, 586, + 1422, 0, 0, 1344, 0, 1350, 0, 1355, 0, 621, + 622, 630, 0, 433, 0, 434, 0, 0, 0, 610, + 0, 641, 1510, 1086, 1080, 1082, 0, 0, 1108, 0, + 631, 627, 444, 446, 447, 0, 0, 445, 642, 611, + 1345, 1351, 0, 448, 449, 450, 623, 624, 625, 626, } var yyTok1 = [...]int{ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 144, 3, 3, 3, 172, 164, 3, - 87, 89, 169, 167, 88, 168, 222, 170, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 731, - 152, 151, 153, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 145, 3, 3, 3, 173, 165, 3, + 87, 89, 170, 168, 88, 169, 223, 171, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 732, + 153, 152, 154, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 174, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 175, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 140, 3, 175, + 3, 3, 3, 3, 141, 3, 176, } var yyTok2 = [...]int{ @@ -9615,14 +9658,14 @@ var yyTok2 = [...]int{ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 141, 142, 143, 145, 146, - 147, 148, 149, 150, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 165, 166, 171, 173, 176, 177, + 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, + 147, 148, 149, 150, 151, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 166, 167, 172, 174, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 223, 224, 225, 226, 227, 228, + 218, 219, 220, 221, 222, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, @@ -9722,7 +9765,7 @@ var yyTok3 = [...]int{ 58040, 715, 58041, 716, 58042, 717, 58043, 718, 58044, 719, 58045, 720, 58046, 721, 58047, 722, 58048, 723, 58049, 724, 58050, 725, 58051, 726, 58052, 727, 58053, 728, 58054, 729, - 58055, 730, 0, + 58055, 730, 58056, 731, 0, } var yyErrorMessages = [...]struct { @@ -10072,7 +10115,7 @@ yydefault: case 1: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:598 +//line sql.y:599 { stmt := yyDollar[2].statementUnion() // If the statement is empty and we have comments @@ -10086,199 +10129,199 @@ yydefault: } case 2: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:611 +//line sql.y:612 { } case 3: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:612 +//line sql.y:613 { } case 4: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:616 +//line sql.y:617 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 39: + case 40: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:654 +//line sql.y:656 { setParseTree(yylex, nil) } - case 40: + case 41: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:660 +//line sql.y:662 { yyLOCAL = NewVariableExpression(yyDollar[1].str, SingleAt) } yyVAL.union = yyLOCAL - case 41: + case 42: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:666 +//line sql.y:668 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 42: + case 43: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:671 +//line sql.y:673 { yyVAL.identifierCI = NewIdentifierCI("") } - case 43: + case 44: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:675 +//line sql.y:677 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 44: + case 45: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:681 +//line sql.y:683 { yyLOCAL = NewVariableExpression(string(yyDollar[1].str), SingleAt) } yyVAL.union = yyLOCAL - case 45: + case 46: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:685 +//line sql.y:687 { yyLOCAL = NewVariableExpression(string(yyDollar[1].str), DoubleAt) } yyVAL.union = yyLOCAL - case 46: + case 47: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:691 +//line sql.y:693 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 47: + case 48: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:697 +//line sql.y:699 { yyLOCAL = &Load{} } yyVAL.union = yyLOCAL - case 48: + case 49: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *With -//line sql.y:703 +//line sql.y:705 { yyLOCAL = &With{ctes: yyDollar[2].ctesUnion(), Recursive: false} } yyVAL.union = yyLOCAL - case 49: + case 50: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *With -//line sql.y:707 +//line sql.y:709 { yyLOCAL = &With{ctes: yyDollar[3].ctesUnion(), Recursive: true} } yyVAL.union = yyLOCAL - case 50: + case 51: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *With -//line sql.y:712 +//line sql.y:714 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 51: + case 52: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *With -//line sql.y:716 +//line sql.y:718 { yyLOCAL = yyDollar[1].withUnion() } yyVAL.union = yyLOCAL - case 52: + case 53: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:722 +//line sql.y:724 { yySLICE := (*[]*CommonTableExpr)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].cteUnion()) } - case 53: + case 54: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*CommonTableExpr -//line sql.y:726 +//line sql.y:728 { yyLOCAL = []*CommonTableExpr{yyDollar[1].cteUnion()} } yyVAL.union = yyLOCAL - case 54: + case 55: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *CommonTableExpr -//line sql.y:732 +//line sql.y:734 { yyLOCAL = &CommonTableExpr{ID: yyDollar[1].identifierCS, Columns: yyDollar[2].columnsUnion(), Subquery: yyDollar[4].subqueryUnion()} } yyVAL.union = yyLOCAL - case 55: + case 56: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:738 +//line sql.y:740 { yyLOCAL = yyDollar[2].selStmtUnion() } yyVAL.union = yyLOCAL - case 56: + case 57: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:742 +//line sql.y:744 { yyLOCAL = yyDollar[2].selStmtUnion() } yyVAL.union = yyLOCAL - case 57: + case 58: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:746 +//line sql.y:748 { setLockInSelect(yyDollar[2].selStmtUnion(), yyDollar[3].lockUnion()) yyLOCAL = yyDollar[2].selStmtUnion() } yyVAL.union = yyLOCAL - case 58: + case 59: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:769 +//line sql.y:771 { yyDollar[1].selStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) yyDollar[1].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 59: + case 60: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:775 +//line sql.y:777 { yyDollar[1].selStmtUnion().SetLimit(yyDollar[2].limitUnion()) yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 60: + case 61: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:780 +//line sql.y:782 { yyDollar[1].selStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) yyDollar[1].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 61: + case 62: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:786 +//line sql.y:788 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].selStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) @@ -10286,20 +10329,20 @@ yydefault: yyLOCAL = yyDollar[2].selStmtUnion() } yyVAL.union = yyLOCAL - case 62: + case 63: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:793 +//line sql.y:795 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) yyLOCAL = yyDollar[2].selStmtUnion() } yyVAL.union = yyLOCAL - case 63: + case 64: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:799 +//line sql.y:801 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].selStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) @@ -10307,175 +10350,175 @@ yydefault: yyLOCAL = yyDollar[2].selStmtUnion() } yyVAL.union = yyLOCAL - case 64: + case 65: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:806 +//line sql.y:808 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) } - case 65: + case 66: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:810 +//line sql.y:812 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), SelectExprs{&Nextval{Expr: yyDollar[5].exprUnion()}}, []string{yyDollar[3].str} /*options*/, nil, TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}, nil /*where*/, nil /*groupBy*/, nil /*having*/, nil) } yyVAL.union = yyLOCAL - case 66: + case 67: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:816 +//line sql.y:818 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 67: + case 68: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:820 +//line sql.y:822 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } yyVAL.union = yyLOCAL - case 68: + case 69: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:824 +//line sql.y:826 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } yyVAL.union = yyLOCAL - case 69: + case 70: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:828 +//line sql.y:830 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } yyVAL.union = yyLOCAL - case 70: + case 71: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:832 +//line sql.y:834 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } yyVAL.union = yyLOCAL - case 71: + case 72: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:838 +//line sql.y:840 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 72: + case 73: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:842 +//line sql.y:844 { setLockInSelect(yyDollar[1].selStmtUnion(), yyDollar[2].lockUnion()) yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 73: + case 74: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:847 +//line sql.y:849 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 74: + case 75: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:851 +//line sql.y:853 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 75: + case 76: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:857 +//line sql.y:859 { yyLOCAL = yyDollar[2].selStmtUnion() } yyVAL.union = yyLOCAL - case 76: + case 77: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:861 +//line sql.y:863 { yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 77: + case 78: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:866 +//line sql.y:868 { yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) yyDollar[1].selStmtUnion().SetLock(yyDollar[3].lockUnion()) yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 78: + case 79: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:872 +//line sql.y:874 { yyDollar[1].selStmtUnion().SetInto(yyDollar[3].selectIntoUnion()) yyDollar[1].selStmtUnion().SetLock(yyDollar[2].lockUnion()) yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 79: + case 80: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:878 +//line sql.y:880 { yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 80: + case 81: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:885 +//line sql.y:887 { yyLOCAL = &Stream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName} } yyVAL.union = yyLOCAL - case 81: + case 82: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:891 +//line sql.y:893 { yyLOCAL = &VStream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName, Where: NewWhere(WhereClause, yyDollar[6].exprUnion()), Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL - case 82: + case 83: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:899 +//line sql.y:901 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, yyDollar[5].selectIntoUnion() /*into*/, yyDollar[6].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[7].exprUnion()), GroupBy(yyDollar[8].exprsUnion()), NewWhere(HavingClause, yyDollar[9].exprUnion()), yyDollar[10].namedWindowsUnion()) } yyVAL.union = yyLOCAL - case 83: + case 84: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:903 +//line sql.y:905 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, nil, yyDollar[5].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[6].exprUnion()), GroupBy(yyDollar[7].exprsUnion()), NewWhere(HavingClause, yyDollar[8].exprUnion()), yyDollar[9].namedWindowsUnion()) } yyVAL.union = yyLOCAL - case 84: + case 85: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:909 +//line sql.y:911 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].insUnion() @@ -10488,10 +10531,10 @@ yydefault: yyLOCAL = ins } yyVAL.union = yyLOCAL - case 85: + case 86: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:921 +//line sql.y:923 { cols := make(Columns, 0, len(yyDollar[7].updateExprsUnion())) vals := make(ValTuple, 0, len(yyDollar[8].updateExprsUnion())) @@ -10502,329 +10545,329 @@ yydefault: yyLOCAL = &Insert{Action: yyDollar[1].insertActionUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Ignore: yyDollar[3].ignoreUnion(), Table: getAliasedTableExprFromTableName(yyDollar[4].tableName), Partitions: yyDollar[5].partitionsUnion(), Columns: cols, Rows: Values{vals}, OnDup: OnDup(yyDollar[8].updateExprsUnion())} } yyVAL.union = yyLOCAL - case 86: + case 87: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:933 +//line sql.y:935 { yyLOCAL = InsertAct } yyVAL.union = yyLOCAL - case 87: + case 88: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:937 +//line sql.y:939 { yyLOCAL = ReplaceAct } yyVAL.union = yyLOCAL - case 88: + case 89: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:943 +//line sql.y:945 { yyLOCAL = &Update{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: yyDollar[5].tableExprsUnion(), Exprs: yyDollar[7].updateExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion()), OrderBy: yyDollar[9].orderByUnion(), Limit: yyDollar[10].limitUnion()} } yyVAL.union = yyLOCAL - case 89: + case 90: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:949 +//line sql.y:951 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[6].tableName, As: yyDollar[7].identifierCS}}, Partitions: yyDollar[8].partitionsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion()), OrderBy: yyDollar[10].orderByUnion(), Limit: yyDollar[11].limitUnion()} } yyVAL.union = yyLOCAL - case 90: + case 91: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Statement -//line sql.y:953 +//line sql.y:955 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[6].tableNamesUnion(), TableExprs: yyDollar[8].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion())} } yyVAL.union = yyLOCAL - case 91: + case 92: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:957 +//line sql.y:959 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } yyVAL.union = yyLOCAL - case 92: + case 93: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:961 +//line sql.y:963 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } yyVAL.union = yyLOCAL - case 93: + case 94: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:966 +//line sql.y:968 { } - case 94: + case 95: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:967 +//line sql.y:969 { } - case 95: + case 96: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:971 +//line sql.y:973 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 96: + case 97: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:975 +//line sql.y:977 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 97: + case 98: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:981 +//line sql.y:983 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 98: + case 99: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:985 +//line sql.y:987 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 99: + case 100: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:991 +//line sql.y:993 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 100: + case 101: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:995 +//line sql.y:997 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 101: + case 102: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Partitions -//line sql.y:1000 +//line sql.y:1002 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 102: + case 103: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Partitions -//line sql.y:1004 +//line sql.y:1006 { yyLOCAL = yyDollar[3].partitionsUnion() } yyVAL.union = yyLOCAL - case 103: + case 104: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:1010 +//line sql.y:1012 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[3].setExprsUnion()) } yyVAL.union = yyLOCAL - case 104: + case 105: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1016 +//line sql.y:1018 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL - case 105: + case 106: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1020 +//line sql.y:1022 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) } - case 106: + case 107: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1026 +//line sql.y:1028 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("on")} } yyVAL.union = yyLOCAL - case 107: + case 108: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1030 +//line sql.y:1032 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("off")} } yyVAL.union = yyLOCAL - case 108: + case 109: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1034 +//line sql.y:1036 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 109: + case 110: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1038 +//line sql.y:1040 { yyLOCAL = &SetExpr{Var: NewSetVariable(string(yyDollar[1].str), SessionScope), Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 110: + case 111: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1044 +//line sql.y:1046 { yyLOCAL = NewSetVariable(string(yyDollar[1].str), SessionScope) } yyVAL.union = yyLOCAL - case 111: + case 112: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1048 +//line sql.y:1050 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 112: + case 113: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Variable -//line sql.y:1052 +//line sql.y:1054 { yyLOCAL = NewSetVariable(string(yyDollar[2].str), yyDollar[1].scopeUnion()) } yyVAL.union = yyLOCAL - case 113: + case 114: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:1058 +//line sql.y:1060 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), UpdateSetExprsScope(yyDollar[5].setExprsUnion(), yyDollar[3].scopeUnion())) } yyVAL.union = yyLOCAL - case 114: + case 115: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:1062 +//line sql.y:1064 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[4].setExprsUnion()) } yyVAL.union = yyLOCAL - case 115: + case 116: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1068 +//line sql.y:1070 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL - case 116: + case 117: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1072 +//line sql.y:1074 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) } - case 117: + case 118: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1078 +//line sql.y:1080 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionIsolationStr, NextTxScope), Expr: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 118: + case 119: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1082 +//line sql.y:1084 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("off")} } yyVAL.union = yyLOCAL - case 119: + case 120: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1086 +//line sql.y:1088 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("on")} } yyVAL.union = yyLOCAL - case 120: + case 121: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1092 +//line sql.y:1094 { yyVAL.str = RepeatableReadStr } - case 121: + case 122: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1096 +//line sql.y:1098 { yyVAL.str = ReadCommittedStr } - case 122: + case 123: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1100 +//line sql.y:1102 { yyVAL.str = ReadUncommittedStr } - case 123: + case 124: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1104 +//line sql.y:1106 { yyVAL.str = SerializableStr } - case 124: + case 125: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1110 +//line sql.y:1112 { yyLOCAL = SessionScope } yyVAL.union = yyLOCAL - case 125: + case 126: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1114 +//line sql.y:1116 { yyLOCAL = SessionScope } yyVAL.union = yyLOCAL - case 126: + case 127: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1118 +//line sql.y:1120 { yyLOCAL = GlobalScope } yyVAL.union = yyLOCAL - case 127: + case 128: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1124 +//line sql.y:1126 { yyDollar[1].createTableUnion().TableSpec = yyDollar[2].tableSpecUnion() yyDollar[1].createTableUnion().FullyParsed = true yyLOCAL = yyDollar[1].createTableUnion() } yyVAL.union = yyLOCAL - case 128: + case 129: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1130 +//line sql.y:1132 { // Create table [name] like [name] yyDollar[1].createTableUnion().OptLike = yyDollar[2].optLikeUnion() @@ -10832,10 +10875,10 @@ yydefault: yyLOCAL = yyDollar[1].createTableUnion() } yyVAL.union = yyLOCAL - case 129: + case 130: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:1137 +//line sql.y:1139 { indexDef := yyDollar[1].alterTableUnion().AlterOptions[0].(*AddIndexDefinition).IndexDefinition indexDef.Columns = yyDollar[3].indexColumnsUnion() @@ -10845,413 +10888,413 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 130: + case 131: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Statement -//line sql.y:1146 +//line sql.y:1148 { yyLOCAL = &CreateView{ViewName: yyDollar[8].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), IsReplace: yyDollar[3].booleanUnion(), Algorithm: yyDollar[4].str, Definer: yyDollar[5].definerUnion(), Security: yyDollar[6].str, Columns: yyDollar[9].columnsUnion(), Select: yyDollar[11].selStmtUnion(), CheckOption: yyDollar[12].str} } yyVAL.union = yyLOCAL - case 131: + case 132: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1150 +//line sql.y:1152 { yyDollar[1].createDatabaseUnion().FullyParsed = true yyDollar[1].createDatabaseUnion().CreateOptions = yyDollar[2].databaseOptionsUnion() yyLOCAL = yyDollar[1].createDatabaseUnion() } yyVAL.union = yyLOCAL - case 132: + case 133: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:1157 +//line sql.y:1159 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 133: + case 134: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:1161 +//line sql.y:1163 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 134: + case 135: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1166 +//line sql.y:1168 { yyVAL.identifierCI = NewIdentifierCI("") } - case 135: + case 136: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1170 +//line sql.y:1172 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 136: + case 137: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1176 +//line sql.y:1178 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 137: + case 138: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1181 +//line sql.y:1183 { var v []VindexParam yyLOCAL = v } yyVAL.union = yyLOCAL - case 138: + case 139: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1186 +//line sql.y:1188 { yyLOCAL = yyDollar[2].vindexParamsUnion() } yyVAL.union = yyLOCAL - case 139: + case 140: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1192 +//line sql.y:1194 { yyLOCAL = make([]VindexParam, 0, 4) yyLOCAL = append(yyLOCAL, yyDollar[1].vindexParam) } yyVAL.union = yyLOCAL - case 140: + case 141: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1197 +//line sql.y:1199 { yySLICE := (*[]VindexParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].vindexParam) } - case 141: + case 142: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1203 +//line sql.y:1205 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].identifierCI, Val: yyDollar[3].str} } - case 142: + case 143: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1208 +//line sql.y:1210 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 143: + case 144: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1212 +//line sql.y:1214 { yyLOCAL = yyDollar[1].jsonObjectParamsUnion() } yyVAL.union = yyLOCAL - case 144: + case 145: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1218 +//line sql.y:1220 { yyLOCAL = []*JSONObjectParam{yyDollar[1].jsonObjectParam} } yyVAL.union = yyLOCAL - case 145: + case 146: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1222 +//line sql.y:1224 { yySLICE := (*[]*JSONObjectParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jsonObjectParam) } - case 146: + case 147: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1228 +//line sql.y:1230 { yyVAL.jsonObjectParam = &JSONObjectParam{Key: yyDollar[1].exprUnion(), Value: yyDollar[3].exprUnion()} } - case 147: + case 148: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateTable -//line sql.y:1234 +//line sql.y:1236 { yyLOCAL = &CreateTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Temp: yyDollar[3].booleanUnion()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 148: + case 149: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1241 +//line sql.y:1243 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[4].tableName} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 149: + case 150: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1248 +//line sql.y:1250 { yyLOCAL = &AlterTable{Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].identifierCI, Type: string(yyDollar[3].str)}, Options: yyDollar[5].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 150: + case 151: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1253 +//line sql.y:1255 { yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Fulltext: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 151: + case 152: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1258 +//line sql.y:1260 { yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Spatial: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 152: + case 153: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1263 +//line sql.y:1265 { yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Unique: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 153: + case 154: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateDatabase -//line sql.y:1270 +//line sql.y:1272 { yyLOCAL = &CreateDatabase{Comments: Comments(yyDollar[4].strs).Parsed(), DBName: yyDollar[6].identifierCS, IfNotExists: yyDollar[5].booleanUnion()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 154: + case 155: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AlterDatabase -//line sql.y:1277 +//line sql.y:1279 { yyLOCAL = &AlterDatabase{} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 157: + case 158: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1288 +//line sql.y:1290 { yyLOCAL = yyDollar[2].tableSpecUnion() yyLOCAL.Options = yyDollar[4].tableOptionsUnion() yyLOCAL.PartitionOption = yyDollar[5].partitionOptionUnion() } yyVAL.union = yyLOCAL - case 158: + case 159: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1295 +//line sql.y:1297 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 159: + case 160: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1299 +//line sql.y:1301 { yyLOCAL = yyDollar[1].databaseOptionsUnion() } yyVAL.union = yyLOCAL - case 160: + case 161: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1305 +//line sql.y:1307 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL - case 161: + case 162: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1309 +//line sql.y:1311 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL - case 162: + case 163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1313 +//line sql.y:1315 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL - case 163: + case 164: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1317 +//line sql.y:1319 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } - case 164: + case 165: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1321 +//line sql.y:1323 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } - case 165: + case 166: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1325 +//line sql.y:1327 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } - case 166: + case 167: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:1331 +//line sql.y:1333 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 167: + case 168: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:1335 +//line sql.y:1337 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 168: + case 169: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1341 +//line sql.y:1343 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 169: + case 170: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1345 +//line sql.y:1347 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 170: + case 171: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1351 +//line sql.y:1353 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 171: + case 172: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1355 +//line sql.y:1357 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 172: + case 173: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1361 +//line sql.y:1363 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 173: + case 174: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1365 +//line sql.y:1367 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 174: + case 175: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1371 +//line sql.y:1373 { yyLOCAL = &OptLike{LikeTable: yyDollar[2].tableName} } yyVAL.union = yyLOCAL - case 175: + case 176: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1375 +//line sql.y:1377 { yyLOCAL = &OptLike{LikeTable: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 176: + case 177: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColumnDefinition -//line sql.y:1381 +//line sql.y:1383 { yyLOCAL = []*ColumnDefinition{yyDollar[1].columnDefinitionUnion()} } yyVAL.union = yyLOCAL - case 177: + case 178: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1385 +//line sql.y:1387 { yySLICE := (*[]*ColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].columnDefinitionUnion()) } - case 178: + case 179: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1391 +//line sql.y:1393 { yyLOCAL = &TableSpec{} yyLOCAL.AddColumn(yyDollar[1].columnDefinitionUnion()) } yyVAL.union = yyLOCAL - case 179: + case 180: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1396 +//line sql.y:1398 { yyLOCAL = &TableSpec{} yyLOCAL.AddConstraint(yyDollar[1].constraintDefinitionUnion()) } yyVAL.union = yyLOCAL - case 180: + case 181: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1401 +//line sql.y:1403 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) } - case 181: + case 182: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1405 +//line sql.y:1407 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) yyVAL.tableSpecUnion().AddConstraint(yyDollar[4].constraintDefinitionUnion()) } - case 182: + case 183: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1410 +//line sql.y:1412 { yyVAL.tableSpecUnion().AddIndex(yyDollar[3].indexDefinitionUnion()) } - case 183: + case 184: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1414 +//line sql.y:1416 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } - case 184: + case 185: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1418 +//line sql.y:1420 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } - case 185: + case 186: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1429 +//line sql.y:1431 { yyDollar[2].columnType.Options = yyDollar[4].columnTypeOptionsUnion() if yyDollar[2].columnType.Options.Collate == "" { @@ -11261,10 +11304,10 @@ yydefault: yyLOCAL = &ColumnDefinition{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType} } yyVAL.union = yyLOCAL - case 186: + case 187: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1438 +//line sql.y:1440 { yyDollar[2].columnType.Options = yyDollar[9].columnTypeOptionsUnion() yyDollar[2].columnType.Options.As = yyDollar[7].exprUnion() @@ -11273,928 +11316,920 @@ yydefault: yyLOCAL = &ColumnDefinition{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType} } yyVAL.union = yyLOCAL - case 187: + case 188: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1447 +//line sql.y:1449 { yyVAL.str = "" } - case 188: + case 189: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1451 +//line sql.y:1453 { yyVAL.str = "" } - case 189: + case 190: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1460 +//line sql.y:1462 { yyLOCAL = &ColumnTypeOptions{Null: nil, Default: nil, OnUpdate: nil, Autoincrement: false, KeyOpt: ColKeyNone, Comment: nil, As: nil, Invisible: nil, Format: UnspecifiedFormat, EngineAttribute: nil, SecondaryEngineAttribute: nil} } yyVAL.union = yyLOCAL - case 190: + case 191: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1464 +//line sql.y:1466 { val := true yyDollar[1].columnTypeOptionsUnion().Null = &val yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 191: + case 192: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1470 +//line sql.y:1472 { val := false yyDollar[1].columnTypeOptionsUnion().Null = &val yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 192: + case 193: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1476 +//line sql.y:1478 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 193: + case 194: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1481 +//line sql.y:1483 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[3].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 194: + case 195: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1486 +//line sql.y:1488 { yyDollar[1].columnTypeOptionsUnion().OnUpdate = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 195: + case 196: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1491 +//line sql.y:1493 { yyDollar[1].columnTypeOptionsUnion().Autoincrement = true yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 196: + case 197: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1496 +//line sql.y:1498 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 197: + case 198: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1501 +//line sql.y:1503 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 198: + case 199: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1506 +//line sql.y:1508 { yyDollar[1].columnTypeOptionsUnion().Collate = encodeSQLString(yyDollar[3].str) } - case 199: + case 200: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1510 +//line sql.y:1512 { yyDollar[1].columnTypeOptionsUnion().Collate = string(yyDollar[3].identifierCI.String()) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 200: + case 201: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1515 +//line sql.y:1517 { yyDollar[1].columnTypeOptionsUnion().Format = yyDollar[3].columnFormatUnion() } - case 201: + case 202: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1519 +//line sql.y:1521 { yyDollar[1].columnTypeOptionsUnion().SRID = NewIntLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 202: + case 203: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1524 +//line sql.y:1526 { val := false yyDollar[1].columnTypeOptionsUnion().Invisible = &val yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 203: + case 204: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1530 +//line sql.y:1532 { val := true yyDollar[1].columnTypeOptionsUnion().Invisible = &val yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 204: + case 205: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1536 +//line sql.y:1538 { yyDollar[1].columnTypeOptionsUnion().EngineAttribute = NewStrLiteral(yyDollar[4].str) } - case 205: + case 206: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1540 +//line sql.y:1542 { yyDollar[1].columnTypeOptionsUnion().SecondaryEngineAttribute = NewStrLiteral(yyDollar[4].str) } - case 206: + case 207: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1546 +//line sql.y:1548 { yyLOCAL = FixedFormat } yyVAL.union = yyLOCAL - case 207: + case 208: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1550 +//line sql.y:1552 { yyLOCAL = DynamicFormat } yyVAL.union = yyLOCAL - case 208: + case 209: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1554 +//line sql.y:1556 { yyLOCAL = DefaultFormat } yyVAL.union = yyLOCAL - case 209: + case 210: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1560 +//line sql.y:1562 { yyLOCAL = VirtualStorage } yyVAL.union = yyLOCAL - case 210: + case 211: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1564 +//line sql.y:1566 { yyLOCAL = StoredStorage } yyVAL.union = yyLOCAL - case 211: + case 212: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1569 +//line sql.y:1571 { yyLOCAL = &ColumnTypeOptions{} } yyVAL.union = yyLOCAL - case 212: + case 213: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1573 +//line sql.y:1575 { yyDollar[1].columnTypeOptionsUnion().Storage = yyDollar[2].columnStorageUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 213: + case 214: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1578 +//line sql.y:1580 { val := true yyDollar[1].columnTypeOptionsUnion().Null = &val yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 214: + case 215: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1584 +//line sql.y:1586 { val := false yyDollar[1].columnTypeOptionsUnion().Null = &val yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 215: + case 216: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1590 +//line sql.y:1592 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 216: + case 217: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1595 +//line sql.y:1597 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 217: + case 218: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1600 +//line sql.y:1602 { val := false yyDollar[1].columnTypeOptionsUnion().Invisible = &val yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 218: + case 219: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1606 +//line sql.y:1608 { val := true yyDollar[1].columnTypeOptionsUnion().Invisible = &val yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 219: + case 220: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1614 +//line sql.y:1616 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 221: + case 222: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1621 +//line sql.y:1623 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_timestamp"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 222: + case 223: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1625 +//line sql.y:1627 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtime"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 223: + case 224: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1629 +//line sql.y:1631 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtimestamp"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 224: + case 225: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1633 +//line sql.y:1635 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_timestamp"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 225: + case 226: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1637 +//line sql.y:1639 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("now"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 226: + case 227: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1641 +//line sql.y:1643 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("sysdate"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 229: + case 230: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1651 +//line sql.y:1653 { yyLOCAL = &NullVal{} } yyVAL.union = yyLOCAL - case 231: + case 232: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1658 +//line sql.y:1660 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 232: + case 233: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1662 +//line sql.y:1664 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 233: + case 234: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1668 +//line sql.y:1670 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 234: + case 235: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1672 +//line sql.y:1674 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 235: + case 236: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1676 +//line sql.y:1678 { yyLOCAL = yyDollar[1].boolValUnion() } yyVAL.union = yyLOCAL - case 236: + case 237: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1680 +//line sql.y:1682 { yyLOCAL = NewHexLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 237: + case 238: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1684 +//line sql.y:1686 { yyLOCAL = NewHexNumLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 238: + case 239: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1688 +//line sql.y:1690 { yyLOCAL = NewBitLiteral(yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL - case 239: + case 240: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1692 +//line sql.y:1694 { yyLOCAL = NewBitLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 240: + case 241: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1696 +//line sql.y:1698 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 241: + case 242: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1700 +//line sql.y:1702 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 242: + case 243: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1704 +//line sql.y:1706 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexNumLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 243: + case 244: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1708 +//line sql.y:1710 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral(yyDollar[2].str[2:])} } yyVAL.union = yyLOCAL - case 244: + case 245: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1712 +//line sql.y:1714 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 245: + case 246: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1716 +//line sql.y:1718 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 246: + case 247: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1720 +//line sql.y:1722 { arg := parseBindVariable(yylex, yyDollar[2].str[1:]) yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: arg} } yyVAL.union = yyLOCAL - case 247: + case 248: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1725 +//line sql.y:1727 { yyLOCAL = NewDateLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 248: + case 249: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1729 +//line sql.y:1731 { yyLOCAL = NewTimeLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 249: + case 250: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1733 +//line sql.y:1735 { yyLOCAL = NewTimestampLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 250: + case 251: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1739 +//line sql.y:1741 { yyVAL.str = Armscii8Str } - case 251: + case 252: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1743 +//line sql.y:1745 { yyVAL.str = ASCIIStr } - case 252: + case 253: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1747 +//line sql.y:1749 { yyVAL.str = Big5Str } - case 253: + case 254: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1751 +//line sql.y:1753 { yyVAL.str = UBinaryStr } - case 254: + case 255: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1755 +//line sql.y:1757 { yyVAL.str = Cp1250Str } - case 255: + case 256: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1759 +//line sql.y:1761 { yyVAL.str = Cp1251Str } - case 256: + case 257: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1763 +//line sql.y:1765 { yyVAL.str = Cp1256Str } - case 257: + case 258: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1767 +//line sql.y:1769 { yyVAL.str = Cp1257Str } - case 258: + case 259: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1771 +//line sql.y:1773 { yyVAL.str = Cp850Str } - case 259: + case 260: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1775 +//line sql.y:1777 { yyVAL.str = Cp852Str } - case 260: + case 261: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1779 +//line sql.y:1781 { yyVAL.str = Cp866Str } - case 261: + case 262: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1783 +//line sql.y:1785 { yyVAL.str = Cp932Str } - case 262: + case 263: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1787 +//line sql.y:1789 { yyVAL.str = Dec8Str } - case 263: + case 264: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1791 +//line sql.y:1793 { yyVAL.str = EucjpmsStr } - case 264: + case 265: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1795 +//line sql.y:1797 { yyVAL.str = EuckrStr } - case 265: + case 266: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1799 +//line sql.y:1801 { yyVAL.str = Gb18030Str } - case 266: + case 267: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1803 +//line sql.y:1805 { yyVAL.str = Gb2312Str } - case 267: + case 268: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1807 +//line sql.y:1809 { yyVAL.str = GbkStr } - case 268: + case 269: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1811 +//line sql.y:1813 { yyVAL.str = Geostd8Str } - case 269: + case 270: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1815 +//line sql.y:1817 { yyVAL.str = GreekStr } - case 270: + case 271: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1819 +//line sql.y:1821 { yyVAL.str = HebrewStr } - case 271: + case 272: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1823 +//line sql.y:1825 { yyVAL.str = Hp8Str } - case 272: + case 273: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1827 +//line sql.y:1829 { yyVAL.str = Keybcs2Str } - case 273: + case 274: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1831 +//line sql.y:1833 { yyVAL.str = Koi8rStr } - case 274: + case 275: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1835 +//line sql.y:1837 { yyVAL.str = Koi8uStr } - case 275: + case 276: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1839 +//line sql.y:1841 { yyVAL.str = Latin1Str } - case 276: + case 277: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1843 +//line sql.y:1845 { yyVAL.str = Latin2Str } - case 277: + case 278: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1847 +//line sql.y:1849 { yyVAL.str = Latin5Str } - case 278: + case 279: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1851 +//line sql.y:1853 { yyVAL.str = Latin7Str } - case 279: + case 280: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1855 +//line sql.y:1857 { yyVAL.str = MacceStr } - case 280: + case 281: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1859 +//line sql.y:1861 { yyVAL.str = MacromanStr } - case 281: + case 282: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1863 +//line sql.y:1865 { yyVAL.str = SjisStr } - case 282: + case 283: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1867 +//line sql.y:1869 { yyVAL.str = Swe7Str } - case 283: + case 284: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1871 +//line sql.y:1873 { yyVAL.str = Tis620Str } - case 284: + case 285: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1875 +//line sql.y:1877 { yyVAL.str = Ucs2Str } - case 285: + case 286: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1879 +//line sql.y:1881 { yyVAL.str = UjisStr } - case 286: + case 287: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1883 +//line sql.y:1885 { yyVAL.str = Utf16Str } - case 287: + case 288: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1887 +//line sql.y:1889 { yyVAL.str = Utf16leStr } - case 288: + case 289: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1891 +//line sql.y:1893 { yyVAL.str = Utf32Str } - case 289: + case 290: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1895 +//line sql.y:1897 { yyVAL.str = Utf8Str } - case 290: + case 291: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1899 +//line sql.y:1901 { yyVAL.str = Utf8mb4Str } - case 291: + case 292: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1903 +//line sql.y:1905 { yyVAL.str = Utf8Str } - case 294: + case 295: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1913 +//line sql.y:1915 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 295: + case 296: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1917 +//line sql.y:1919 { yyLOCAL = NewFloatLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 296: + case 297: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1921 +//line sql.y:1923 { yyLOCAL = NewDecimalLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 297: + case 298: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1927 +//line sql.y:1929 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 298: + case 299: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1931 +//line sql.y:1933 { yyLOCAL = &UnaryExpr{Operator: NStringOp, Expr: NewStrLiteral(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 299: + case 300: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1935 +//line sql.y:1937 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewStrLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 300: + case 301: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1941 +//line sql.y:1943 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 301: + case 302: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1945 +//line sql.y:1947 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 302: + case 303: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1951 +//line sql.y:1953 { yyLOCAL = ColKeyPrimary } yyVAL.union = yyLOCAL - case 303: + case 304: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1955 +//line sql.y:1957 { yyLOCAL = ColKeyUnique } yyVAL.union = yyLOCAL - case 304: + case 305: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1959 +//line sql.y:1961 { yyLOCAL = ColKeyUniqueKey } yyVAL.union = yyLOCAL - case 305: + case 306: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1963 +//line sql.y:1965 { yyLOCAL = ColKey } yyVAL.union = yyLOCAL - case 306: + case 307: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1969 +//line sql.y:1971 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].booleanUnion() yyVAL.columnType.Zerofill = yyDollar[3].booleanUnion() } - case 310: + case 311: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1980 +//line sql.y:1982 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].literalUnion() } - case 311: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1985 - { - yyVAL.columnType = yyDollar[1].columnType - } case 312: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1991 +//line sql.y:1987 { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} + yyVAL.columnType = yyDollar[1].columnType } case 313: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1995 +//line sql.y:1993 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 314: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1999 +//line sql.y:1997 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 315: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2003 +//line sql.y:2001 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 316: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2007 +//line sql.y:2005 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 317: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2011 +//line sql.y:2009 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 318: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2015 +//line sql.y:2013 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 319: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2019 +//line sql.y:2017 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 320: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2023 +//line sql.y:2021 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 321: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2029 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2025 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} - yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length - yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 322: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2035 +//line sql.y:2031 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -12202,7 +12237,7 @@ yydefault: } case 323: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2041 +//line sql.y:2037 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -12210,7 +12245,7 @@ yydefault: } case 324: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2047 +//line sql.y:2043 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -12218,7 +12253,7 @@ yydefault: } case 325: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2053 +//line sql.y:2049 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -12226,7 +12261,7 @@ yydefault: } case 326: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2059 +//line sql.y:2055 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -12234,1759 +12269,1767 @@ yydefault: } case 327: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2065 +//line sql.y:2061 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 328: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2073 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2067 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} + yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length + yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 329: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2077 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2075 { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 330: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2081 +//line sql.y:2079 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 331: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2085 +//line sql.y:2083 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 332: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2089 +//line sql.y:2087 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 333: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2091 + { + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} + } + case 334: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2095 +//line sql.y:2097 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } - case 334: + case 335: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2099 +//line sql.y:2101 { // CHAR BYTE is an alias for binary. See also: // https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html yyVAL.columnType = &ColumnType{Type: "binary", Length: yyDollar[2].literalUnion()} } - case 335: + case 336: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2105 +//line sql.y:2107 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } - case 336: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2109 - { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} - } case 337: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2113 +//line sql.y:2111 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 338: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2117 +//line sql.y:2115 { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 339: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2121 +//line sql.y:2119 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 340: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2125 +//line sql.y:2123 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 341: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2129 +//line sql.y:2127 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 342: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2133 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2131 { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 343: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2137 +//line sql.y:2135 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 344: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2141 +//line sql.y:2139 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 345: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2145 +//line sql.y:2143 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2149 +//line sql.y:2147 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 347: - yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2153 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2151 { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 348: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2158 +//line sql.y:2155 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } case 349: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2164 + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:2160 { - yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } case 350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2168 +//line sql.y:2166 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2172 +//line sql.y:2170 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2176 +//line sql.y:2174 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2180 +//line sql.y:2178 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2184 +//line sql.y:2182 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 355: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2188 +//line sql.y:2186 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 356: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2192 +//line sql.y:2190 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 357: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2198 +//line sql.y:2194 + { + yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} + } + case 358: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2200 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, encodeSQLString(yyDollar[1].str)) } - case 358: + case 359: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2203 +//line sql.y:2205 { yyVAL.strs = append(yyDollar[1].strs, encodeSQLString(yyDollar[3].str)) } - case 359: + case 360: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Literal -//line sql.y:2208 +//line sql.y:2210 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 360: + case 361: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -//line sql.y:2212 +//line sql.y:2214 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 361: + case 362: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2217 +//line sql.y:2219 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 362: + case 363: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2221 +//line sql.y:2223 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), Scale: NewIntLiteral(yyDollar[4].str), } } - case 363: + case 364: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2230 +//line sql.y:2232 { yyVAL.LengthScaleOption = yyDollar[1].LengthScaleOption } - case 364: + case 365: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2234 +//line sql.y:2236 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), } } - case 365: + case 366: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2241 +//line sql.y:2243 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 366: + case 367: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2245 +//line sql.y:2247 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), } } - case 367: + case 368: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2251 +//line sql.y:2253 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), Scale: NewIntLiteral(yyDollar[4].str), } } - case 368: + case 369: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2259 +//line sql.y:2261 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 369: + case 370: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2263 +//line sql.y:2265 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 370: + case 371: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2267 +//line sql.y:2269 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 371: + case 372: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2272 +//line sql.y:2274 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 372: + case 373: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2276 +//line sql.y:2278 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 373: + case 374: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2281 +//line sql.y:2283 { yyVAL.columnCharset = ColumnCharset{} } - case 374: + case 375: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2285 +//line sql.y:2287 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].identifierCI.String()), Binary: yyDollar[3].booleanUnion()} } - case 375: + case 376: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2289 +//line sql.y:2291 { yyVAL.columnCharset = ColumnCharset{Name: encodeSQLString(yyDollar[2].str), Binary: yyDollar[3].booleanUnion()} } - case 376: + case 377: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2293 +//line sql.y:2295 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].str)} } - case 377: + case 378: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2297 +//line sql.y:2299 { // ASCII: Shorthand for CHARACTER SET latin1. yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: yyDollar[2].booleanUnion()} } - case 378: + case 379: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2302 +//line sql.y:2304 { // UNICODE: Shorthand for CHARACTER SET ucs2. yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: yyDollar[2].booleanUnion()} } - case 379: + case 380: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2307 +//line sql.y:2309 { // BINARY: Shorthand for default CHARACTER SET but with binary collation yyVAL.columnCharset = ColumnCharset{Name: "", Binary: true} } - case 380: + case 381: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2312 +//line sql.y:2314 { // BINARY ASCII: Shorthand for CHARACTER SET latin1 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: true} } - case 381: + case 382: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2317 +//line sql.y:2319 { // BINARY UNICODE: Shorthand for CHARACTER SET ucs2 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: true} } - case 382: + case 383: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2323 +//line sql.y:2325 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 383: + case 384: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2327 +//line sql.y:2329 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 384: + case 385: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2332 +//line sql.y:2334 { yyVAL.str = "" } - case 385: + case 386: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2336 +//line sql.y:2338 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 386: + case 387: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2340 +//line sql.y:2342 { yyVAL.str = encodeSQLString(yyDollar[2].str) } - case 387: + case 388: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexDefinition -//line sql.y:2346 +//line sql.y:2348 { yyLOCAL = &IndexDefinition{Info: yyDollar[1].indexInfoUnion(), Columns: yyDollar[3].indexColumnsUnion(), Options: yyDollar[5].indexOptionsUnion()} } yyVAL.union = yyLOCAL - case 388: + case 389: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2351 +//line sql.y:2353 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 389: + case 390: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2355 +//line sql.y:2357 { yyLOCAL = yyDollar[1].indexOptionsUnion() } yyVAL.union = yyLOCAL - case 390: + case 391: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2361 +//line sql.y:2363 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 391: + case 392: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2365 +//line sql.y:2367 { yySLICE := (*[]*IndexOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexOptionUnion()) } - case 392: + case 393: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2371 +//line sql.y:2373 { yyLOCAL = yyDollar[1].indexOptionUnion() } yyVAL.union = yyLOCAL - case 393: + case 394: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2375 +//line sql.y:2377 { // should not be string yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 394: + case 395: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2380 +//line sql.y:2382 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 395: + case 396: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2384 +//line sql.y:2386 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 396: + case 397: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2388 +//line sql.y:2390 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 397: + case 398: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2392 +//line sql.y:2394 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str) + " " + string(yyDollar[2].str), String: yyDollar[3].identifierCI.String()} } yyVAL.union = yyLOCAL - case 398: + case 399: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2396 +//line sql.y:2398 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 399: + case 400: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2400 +//line sql.y:2402 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 400: + case 401: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2406 +//line sql.y:2408 { yyVAL.str = "" } - case 401: + case 402: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2410 +//line sql.y:2412 { yyVAL.str = string(yyDollar[1].str) } - case 402: + case 403: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2416 +//line sql.y:2418 { yyLOCAL = &IndexInfo{Type: string(yyDollar[2].str) + " " + string(yyDollar[3].str), ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI("PRIMARY"), Primary: true, Unique: true} } yyVAL.union = yyLOCAL - case 403: + case 404: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2420 +//line sql.y:2422 { yyLOCAL = &IndexInfo{Type: string(yyDollar[1].str) + " " + string(yyDollar[2].str), Name: NewIdentifierCI(yyDollar[3].str), Spatial: true, Unique: false} } yyVAL.union = yyLOCAL - case 404: + case 405: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2424 +//line sql.y:2426 { yyLOCAL = &IndexInfo{Type: string(yyDollar[1].str) + " " + string(yyDollar[2].str), Name: NewIdentifierCI(yyDollar[3].str), Fulltext: true, Unique: false} } yyVAL.union = yyLOCAL - case 405: + case 406: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2428 +//line sql.y:2430 { yyLOCAL = &IndexInfo{Type: string(yyDollar[2].str) + " " + string(yyDollar[3].str), ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[4].str), Unique: true} } yyVAL.union = yyLOCAL - case 406: + case 407: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2432 +//line sql.y:2434 { yyLOCAL = &IndexInfo{Type: string(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[2].str), Unique: false} } yyVAL.union = yyLOCAL - case 407: + case 408: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2437 +//line sql.y:2439 { yyVAL.str = "" } - case 408: + case 409: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2441 +//line sql.y:2443 { yyVAL.str = yyDollar[2].str } - case 409: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2447 - { - yyVAL.str = string(yyDollar[1].str) - } case 410: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2451 +//line sql.y:2449 { yyVAL.str = string(yyDollar[1].str) } case 411: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2455 +//line sql.y:2453 { yyVAL.str = string(yyDollar[1].str) } case 412: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2461 +//line sql.y:2457 { yyVAL.str = string(yyDollar[1].str) } case 413: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2465 +//line sql.y:2463 { yyVAL.str = string(yyDollar[1].str) } case 414: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2467 + { + yyVAL.str = string(yyDollar[1].str) + } + case 415: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2470 +//line sql.y:2472 { yyVAL.str = "key" } - case 415: + case 416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2474 +//line sql.y:2476 { yyVAL.str = yyDollar[1].str } - case 416: + case 417: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2480 +//line sql.y:2482 { yyVAL.str = string(yyDollar[1].str) } - case 417: + case 418: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2484 +//line sql.y:2486 { yyVAL.str = string(yyDollar[1].str) } - case 418: + case 419: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2489 +//line sql.y:2491 { yyVAL.str = "" } - case 419: + case 420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2493 +//line sql.y:2495 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 420: + case 421: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexColumn -//line sql.y:2499 +//line sql.y:2501 { yyLOCAL = []*IndexColumn{yyDollar[1].indexColumnUnion()} } yyVAL.union = yyLOCAL - case 421: + case 422: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2503 +//line sql.y:2505 { yySLICE := (*[]*IndexColumn)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].indexColumnUnion()) } - case 422: + case 423: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2509 +//line sql.y:2511 { yyLOCAL = &IndexColumn{Column: yyDollar[1].identifierCI, Length: yyDollar[2].literalUnion(), Direction: yyDollar[3].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 423: + case 424: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2513 +//line sql.y:2515 { yyLOCAL = &IndexColumn{Expression: yyDollar[2].exprUnion(), Direction: yyDollar[4].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 424: + case 425: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2519 +//line sql.y:2521 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 425: + case 426: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2523 +//line sql.y:2525 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 426: + case 427: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2529 +//line sql.y:2531 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 427: + case 428: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2533 +//line sql.y:2535 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 428: + case 429: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2539 +//line sql.y:2541 { yyLOCAL = &ForeignKeyDefinition{IndexName: NewIdentifierCI(yyDollar[3].str), Source: yyDollar[5].columnsUnion(), ReferenceDefinition: yyDollar[7].referenceDefinitionUnion()} } yyVAL.union = yyLOCAL - case 429: + case 430: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2545 +//line sql.y:2547 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion()} } yyVAL.union = yyLOCAL - case 430: + case 431: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2549 +//line sql.y:2551 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 431: + case 432: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2553 +//line sql.y:2555 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 432: + case 433: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2557 +//line sql.y:2559 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion(), OnUpdate: yyDollar[8].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 433: + case 434: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2561 +//line sql.y:2563 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion(), OnDelete: yyDollar[8].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 434: + case 435: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2566 +//line sql.y:2568 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 435: + case 436: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2570 +//line sql.y:2572 { yyLOCAL = yyDollar[1].referenceDefinitionUnion() } yyVAL.union = yyLOCAL - case 436: + case 437: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2576 +//line sql.y:2578 { yyLOCAL = &CheckConstraintDefinition{Expr: yyDollar[3].exprUnion(), Enforced: yyDollar[5].booleanUnion()} } yyVAL.union = yyLOCAL - case 437: + case 438: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2582 +//line sql.y:2584 { yyLOCAL = yyDollar[2].matchActionUnion() } yyVAL.union = yyLOCAL - case 438: + case 439: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2588 +//line sql.y:2590 { yyLOCAL = Full } yyVAL.union = yyLOCAL - case 439: + case 440: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2592 +//line sql.y:2594 { yyLOCAL = Partial } yyVAL.union = yyLOCAL - case 440: + case 441: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2596 +//line sql.y:2598 { yyLOCAL = Simple } yyVAL.union = yyLOCAL - case 441: + case 442: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2601 +//line sql.y:2603 { yyLOCAL = DefaultMatch } yyVAL.union = yyLOCAL - case 442: + case 443: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2605 +//line sql.y:2607 { yyLOCAL = yyDollar[1].matchActionUnion() } yyVAL.union = yyLOCAL - case 443: + case 444: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2611 +//line sql.y:2613 { yyLOCAL = yyDollar[3].referenceActionUnion() } yyVAL.union = yyLOCAL - case 444: + case 445: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2617 +//line sql.y:2619 { yyLOCAL = yyDollar[3].referenceActionUnion() } yyVAL.union = yyLOCAL - case 445: + case 446: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2623 +//line sql.y:2625 { yyLOCAL = Restrict } yyVAL.union = yyLOCAL - case 446: + case 447: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2627 +//line sql.y:2629 { yyLOCAL = Cascade } yyVAL.union = yyLOCAL - case 447: + case 448: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2631 +//line sql.y:2633 { yyLOCAL = NoAction } yyVAL.union = yyLOCAL - case 448: + case 449: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2635 +//line sql.y:2637 { yyLOCAL = SetDefault } yyVAL.union = yyLOCAL - case 449: + case 450: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2639 +//line sql.y:2641 { yyLOCAL = SetNull } yyVAL.union = yyLOCAL - case 450: + case 451: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2644 +//line sql.y:2646 { yyVAL.str = "" } - case 451: + case 452: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2648 +//line sql.y:2650 { yyVAL.str = string(yyDollar[1].str) } - case 452: + case 453: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2652 +//line sql.y:2654 { yyVAL.str = string(yyDollar[1].str) } - case 453: + case 454: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2658 +//line sql.y:2660 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 454: + case 455: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:2662 +//line sql.y:2664 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 455: + case 456: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2667 +//line sql.y:2669 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 456: + case 457: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2671 +//line sql.y:2673 { yyLOCAL = yyDollar[1].booleanUnion() } yyVAL.union = yyLOCAL - case 457: + case 458: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2676 +//line sql.y:2678 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 458: + case 459: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2680 +//line sql.y:2682 { yyLOCAL = yyDollar[1].tableOptionsUnion() } yyVAL.union = yyLOCAL - case 459: + case 460: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2686 +//line sql.y:2688 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL - case 460: + case 461: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2690 +//line sql.y:2692 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableOptionUnion()) } - case 461: + case 462: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2694 +//line sql.y:2696 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) } - case 462: + case 463: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2700 +//line sql.y:2702 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL - case 463: + case 464: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2704 +//line sql.y:2706 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) } - case 464: + case 465: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2710 +//line sql.y:2712 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 465: + case 466: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2714 +//line sql.y:2716 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 466: + case 467: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2718 +//line sql.y:2720 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 467: + case 468: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2722 +//line sql.y:2724 { yyLOCAL = &TableOption{Name: (string(yyDollar[2].str)), String: yyDollar[4].str, CaseSensitive: true} } yyVAL.union = yyLOCAL - case 468: + case 469: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2726 +//line sql.y:2728 { yyLOCAL = &TableOption{Name: string(yyDollar[2].str), String: yyDollar[4].str, CaseSensitive: true} } yyVAL.union = yyLOCAL - case 469: + case 470: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2730 +//line sql.y:2732 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 470: + case 471: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2734 +//line sql.y:2736 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 471: + case 472: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2738 +//line sql.y:2740 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 472: + case 473: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2742 +//line sql.y:2744 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 473: + case 474: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2746 +//line sql.y:2748 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 474: + case 475: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2750 +//line sql.y:2752 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 475: + case 476: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2754 +//line sql.y:2756 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 476: + case 477: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2758 +//line sql.y:2760 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 477: + case 478: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2762 +//line sql.y:2764 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: yyDollar[3].identifierCS.String(), CaseSensitive: true} } yyVAL.union = yyLOCAL - case 478: + case 479: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2766 +//line sql.y:2768 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 479: + case 480: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2770 +//line sql.y:2772 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 480: + case 481: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2774 +//line sql.y:2776 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 481: + case 482: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2778 +//line sql.y:2780 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 482: + case 483: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2782 +//line sql.y:2784 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 483: + case 484: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2786 +//line sql.y:2788 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 484: + case 485: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2790 +//line sql.y:2792 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 485: + case 486: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2794 +//line sql.y:2796 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 486: + case 487: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2798 +//line sql.y:2800 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 487: + case 488: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2802 +//line sql.y:2804 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 488: + case 489: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2806 +//line sql.y:2808 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 489: + case 490: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2810 +//line sql.y:2812 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 490: + case 491: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2814 +//line sql.y:2816 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 491: + case 492: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2818 +//line sql.y:2820 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 492: + case 493: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2822 +//line sql.y:2824 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 493: + case 494: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2826 +//line sql.y:2828 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: (yyDollar[3].identifierCI.String() + yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 494: + case 495: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2830 +//line sql.y:2832 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Tables: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 495: + case 496: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2835 +//line sql.y:2837 { yyVAL.str = "" } - case 496: + case 497: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2839 +//line sql.y:2841 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 497: + case 498: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2843 +//line sql.y:2845 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 507: + case 508: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2862 +//line sql.y:2864 { yyVAL.str = String(TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}) } - case 508: + case 509: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2866 +//line sql.y:2868 { yyVAL.str = yyDollar[1].identifierCI.String() } - case 509: + case 510: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2870 +//line sql.y:2872 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 510: + case 511: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2874 +//line sql.y:2876 { yyVAL.str = string(yyDollar[1].str) } - case 511: + case 512: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2879 +//line sql.y:2881 { yyVAL.str = "" } - case 513: + case 514: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2885 +//line sql.y:2887 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 514: + case 515: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2889 +//line sql.y:2891 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 515: + case 516: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColName -//line sql.y:2894 +//line sql.y:2896 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 516: + case 517: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColName -//line sql.y:2898 +//line sql.y:2900 { yyLOCAL = yyDollar[2].colNameUnion() } yyVAL.union = yyLOCAL - case 517: + case 518: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2903 +//line sql.y:2905 { yyVAL.str = "" } - case 518: + case 519: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2907 +//line sql.y:2909 { yyVAL.str = string(yyDollar[2].str) } - case 519: + case 520: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Literal -//line sql.y:2912 +//line sql.y:2914 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 520: + case 521: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:2916 +//line sql.y:2918 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 521: + case 522: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:2920 +//line sql.y:2922 { yyLOCAL = NewDecimalLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 522: + case 523: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2925 +//line sql.y:2927 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 523: + case 524: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2929 +//line sql.y:2931 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL - case 524: + case 525: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2933 +//line sql.y:2935 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &OrderByOption{Cols: yyDollar[5].columnsUnion()}) } - case 525: + case 526: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2937 +//line sql.y:2939 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL - case 526: + case 527: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2941 +//line sql.y:2943 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionsUnion()...) } - case 527: + case 528: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2945 +//line sql.y:2947 { yyLOCAL = append(append(yyDollar[1].alterOptionsUnion(), yyDollar[3].alterOptionsUnion()...), &OrderByOption{Cols: yyDollar[7].columnsUnion()}) } yyVAL.union = yyLOCAL - case 528: + case 529: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2951 +//line sql.y:2953 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 529: + case 530: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2955 +//line sql.y:2957 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } - case 530: + case 531: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2959 +//line sql.y:2961 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } - case 531: + case 532: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2965 +//line sql.y:2967 { yyLOCAL = yyDollar[1].tableOptionsUnion() } yyVAL.union = yyLOCAL - case 532: + case 533: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2969 +//line sql.y:2971 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } yyVAL.union = yyLOCAL - case 533: + case 534: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2973 +//line sql.y:2975 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } yyVAL.union = yyLOCAL - case 534: + case 535: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2977 +//line sql.y:2979 { yyLOCAL = &AddIndexDefinition{IndexDefinition: yyDollar[2].indexDefinitionUnion()} } yyVAL.union = yyLOCAL - case 535: + case 536: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2981 +//line sql.y:2983 { yyLOCAL = &AddColumns{Columns: yyDollar[4].columnDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 536: + case 537: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2985 +//line sql.y:2987 { yyLOCAL = &AddColumns{Columns: []*ColumnDefinition{yyDollar[3].columnDefinitionUnion()}, First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } yyVAL.union = yyLOCAL - case 537: + case 538: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2989 +//line sql.y:2991 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: true} } yyVAL.union = yyLOCAL - case 538: + case 539: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2993 +//line sql.y:2995 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 539: + case 540: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2997 +//line sql.y:2999 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 540: + case 541: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3001 +//line sql.y:3003 { val := false yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: &val} } yyVAL.union = yyLOCAL - case 541: + case 542: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3006 +//line sql.y:3008 { val := true yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: &val} } yyVAL.union = yyLOCAL - case 542: + case 543: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3011 +//line sql.y:3013 { yyLOCAL = &AlterCheck{Name: yyDollar[3].identifierCI, Enforced: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 543: + case 544: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3015 +//line sql.y:3017 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: false} } yyVAL.union = yyLOCAL - case 544: + case 545: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3019 +//line sql.y:3021 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: true} } yyVAL.union = yyLOCAL - case 545: + case 546: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3023 +//line sql.y:3025 { yyLOCAL = &ChangeColumn{OldColumn: yyDollar[3].colNameUnion(), NewColDefinition: yyDollar[4].columnDefinitionUnion(), First: yyDollar[5].booleanUnion(), After: yyDollar[6].colNameUnion()} } yyVAL.union = yyLOCAL - case 546: + case 547: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3027 +//line sql.y:3029 { yyLOCAL = &ModifyColumn{NewColDefinition: yyDollar[3].columnDefinitionUnion(), First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } yyVAL.union = yyLOCAL - case 547: + case 548: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3031 +//line sql.y:3033 { yyLOCAL = &RenameColumn{OldName: yyDollar[3].colNameUnion(), NewName: yyDollar[5].colNameUnion()} } yyVAL.union = yyLOCAL - case 548: + case 549: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3035 +//line sql.y:3037 { yyLOCAL = &AlterCharset{CharacterSet: yyDollar[4].str, Collate: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 549: + case 550: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3039 +//line sql.y:3041 { yyLOCAL = &KeyState{Enable: false} } yyVAL.union = yyLOCAL - case 550: + case 551: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3043 +//line sql.y:3045 { yyLOCAL = &KeyState{Enable: true} } yyVAL.union = yyLOCAL - case 551: + case 552: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3047 +//line sql.y:3049 { yyLOCAL = &TablespaceOperation{Import: false} } yyVAL.union = yyLOCAL - case 552: + case 553: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3051 +//line sql.y:3053 { yyLOCAL = &TablespaceOperation{Import: true} } yyVAL.union = yyLOCAL - case 553: + case 554: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3055 +//line sql.y:3057 { yyLOCAL = &DropColumn{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL - case 554: + case 555: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3059 +//line sql.y:3061 { yyLOCAL = &DropKey{Type: NormalKeyType, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 555: + case 556: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3063 +//line sql.y:3065 { yyLOCAL = &DropKey{Type: PrimaryKeyType} } yyVAL.union = yyLOCAL - case 556: + case 557: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3067 +//line sql.y:3069 { yyLOCAL = &DropKey{Type: ForeignKeyType, Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 557: + case 558: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3071 +//line sql.y:3073 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 558: + case 559: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3075 +//line sql.y:3077 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 559: + case 560: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3079 +//line sql.y:3081 { yyLOCAL = &Force{} } yyVAL.union = yyLOCAL - case 560: + case 561: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3083 +//line sql.y:3085 { yyLOCAL = &RenameTableName{Table: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 561: + case 562: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3087 +//line sql.y:3089 { yyLOCAL = &RenameIndex{OldName: yyDollar[3].identifierCI, NewName: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 562: + case 563: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3093 +//line sql.y:3095 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 563: + case 564: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3097 +//line sql.y:3099 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } - case 564: + case 565: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3103 +//line sql.y:3105 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 565: + case 566: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3107 +//line sql.y:3109 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 566: + case 567: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3111 +//line sql.y:3113 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 567: + case 568: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3115 +//line sql.y:3117 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 568: + case 569: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3119 +//line sql.y:3121 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 569: + case 570: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3123 +//line sql.y:3125 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 570: + case 571: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3127 +//line sql.y:3129 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 571: + case 572: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3131 +//line sql.y:3133 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 572: + case 573: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3135 +//line sql.y:3137 { yyLOCAL = &Validation{With: true} } yyVAL.union = yyLOCAL - case 573: + case 574: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3139 +//line sql.y:3141 { yyLOCAL = &Validation{With: false} } yyVAL.union = yyLOCAL - case 574: + case 575: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3145 +//line sql.y:3147 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -13994,10 +14037,10 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 575: + case 576: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3152 +//line sql.y:3154 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -14005,10 +14048,10 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 576: + case 577: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3159 +//line sql.y:3161 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -14016,28 +14059,28 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 577: + case 578: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:3166 +//line sql.y:3168 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().PartitionSpec = yyDollar[2].partSpecUnion() yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 578: + case 579: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:3172 +//line sql.y:3174 { yyLOCAL = &AlterView{ViewName: yyDollar[7].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].selStmtUnion(), CheckOption: yyDollar[11].str} } yyVAL.union = yyLOCAL - case 579: + case 580: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3182 +//line sql.y:3184 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -14045,10 +14088,10 @@ yydefault: yyLOCAL = yyDollar[1].alterDatabaseUnion() } yyVAL.union = yyLOCAL - case 580: + case 581: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3189 +//line sql.y:3191 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -14056,10 +14099,10 @@ yydefault: yyLOCAL = yyDollar[1].alterDatabaseUnion() } yyVAL.union = yyLOCAL - case 581: + case 582: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3196 +//line sql.y:3198 { yyLOCAL = &AlterVschema{ Action: CreateVindexDDLAction, @@ -14072,10 +14115,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 582: + case 583: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3208 +//line sql.y:3210 { yyLOCAL = &AlterVschema{ Action: DropVindexDDLAction, @@ -14086,26 +14129,26 @@ yydefault: } } yyVAL.union = yyLOCAL - case 583: + case 584: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3218 +//line sql.y:3220 { yyLOCAL = &AlterVschema{Action: AddVschemaTableDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 584: + case 585: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3222 +//line sql.y:3224 { yyLOCAL = &AlterVschema{Action: DropVschemaTableDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 585: + case 586: yyDollar = yyS[yypt-13 : yypt+1] var yyLOCAL Statement -//line sql.y:3226 +//line sql.y:3228 { yyLOCAL = &AlterVschema{ Action: AddColVindexDDLAction, @@ -14119,10 +14162,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 586: + case 587: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3239 +//line sql.y:3241 { yyLOCAL = &AlterVschema{ Action: DropColVindexDDLAction, @@ -14133,18 +14176,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 587: + case 588: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3249 +//line sql.y:3251 { yyLOCAL = &AlterVschema{Action: AddSequenceDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 588: + case 589: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:3253 +//line sql.y:3255 { yyLOCAL = &AlterVschema{ Action: AddAutoIncDDLAction, @@ -14156,10 +14199,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 589: + case 590: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3264 +//line sql.y:3266 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -14167,10 +14210,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 590: + case 591: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3271 +//line sql.y:3273 { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -14178,10 +14221,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 591: + case 592: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3278 +//line sql.y:3280 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -14189,10 +14232,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 592: + case 593: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3285 +//line sql.y:3287 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -14201,20 +14244,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 593: + case 594: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3293 +//line sql.y:3295 { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, } } yyVAL.union = yyLOCAL - case 594: + case 595: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3299 +//line sql.y:3301 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -14222,20 +14265,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 595: + case 596: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3306 +//line sql.y:3308 { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, } } yyVAL.union = yyLOCAL - case 596: + case 597: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3312 +//line sql.y:3314 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -14243,20 +14286,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 597: + case 598: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3319 +//line sql.y:3321 { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, } } yyVAL.union = yyLOCAL - case 598: + case 599: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3325 +//line sql.y:3327 { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -14266,10 +14309,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 599: + case 600: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3334 +//line sql.y:3336 { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -14278,10 +14321,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 600: + case 601: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3342 +//line sql.y:3344 { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -14289,28 +14332,28 @@ yydefault: } } yyVAL.union = yyLOCAL - case 601: + case 602: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3349 +//line sql.y:3351 { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, } } yyVAL.union = yyLOCAL - case 602: + case 603: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3356 +//line sql.y:3358 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 603: + case 604: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3360 +//line sql.y:3362 { yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion() yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion() @@ -14318,10 +14361,10 @@ yydefault: yyLOCAL = yyDollar[3].partitionOptionUnion() } yyVAL.union = yyLOCAL - case 604: + case 605: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3369 +//line sql.y:3371 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -14330,10 +14373,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 605: + case 606: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3377 +//line sql.y:3379 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -14343,10 +14386,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 606: + case 607: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3386 +//line sql.y:3388 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -14354,10 +14397,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 607: + case 608: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3393 +//line sql.y:3395 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -14365,18 +14408,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 608: + case 609: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3401 +//line sql.y:3403 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 609: + case 610: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3405 +//line sql.y:3407 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -14386,10 +14429,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 610: + case 611: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3414 +//line sql.y:3416 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -14400,682 +14443,682 @@ yydefault: } } yyVAL.union = yyLOCAL - case 611: + case 612: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3425 +//line sql.y:3427 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 612: + case 613: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3429 +//line sql.y:3431 { yyLOCAL = yyDollar[2].partDefsUnion() } yyVAL.union = yyLOCAL - case 613: + case 614: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3434 +//line sql.y:3436 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 614: + case 615: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3438 +//line sql.y:3440 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 615: + case 616: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3443 +//line sql.y:3445 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 616: + case 617: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3447 +//line sql.y:3449 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 617: + case 618: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL TableExpr -//line sql.y:3453 +//line sql.y:3455 { yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS} } yyVAL.union = yyLOCAL - case 618: + case 619: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3459 +//line sql.y:3461 { yyLOCAL = yyDollar[3].jtColumnListUnion() } yyVAL.union = yyLOCAL - case 619: + case 620: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3465 +//line sql.y:3467 { yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()} } yyVAL.union = yyLOCAL - case 620: + case 621: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3469 +//line sql.y:3471 { yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion()) } - case 621: + case 622: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3475 +//line sql.y:3477 { yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}} } yyVAL.union = yyLOCAL - case 622: + case 623: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3479 +//line sql.y:3481 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 623: + case 624: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3485 +//line sql.y:3487 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 624: + case 625: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3491 +//line sql.y:3493 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 625: + case 626: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3497 +//line sql.y:3499 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 626: + case 627: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3503 +//line sql.y:3505 { jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()} yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath} } yyVAL.union = yyLOCAL - case 627: + case 628: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3509 +//line sql.y:3511 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 628: + case 629: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3513 +//line sql.y:3515 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 629: + case 630: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3517 +//line sql.y:3519 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 630: + case 631: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3521 +//line sql.y:3523 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 631: + case 632: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3527 +//line sql.y:3529 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 632: + case 633: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3533 +//line sql.y:3535 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 633: + case 634: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3539 +//line sql.y:3541 { yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} } yyVAL.union = yyLOCAL - case 634: + case 635: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3543 +//line sql.y:3545 { yyLOCAL = &JtOnResponse{ResponseType: NullJSONType} } yyVAL.union = yyLOCAL - case 635: + case 636: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3547 +//line sql.y:3549 { yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 636: + case 637: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3553 +//line sql.y:3555 { yyLOCAL = RangeType } yyVAL.union = yyLOCAL - case 637: + case 638: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3557 +//line sql.y:3559 { yyLOCAL = ListType } yyVAL.union = yyLOCAL - case 638: + case 639: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3562 +//line sql.y:3564 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 639: + case 640: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3566 +//line sql.y:3568 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 640: + case 641: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3571 +//line sql.y:3573 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 641: + case 642: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3575 +//line sql.y:3577 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 642: + case 643: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3581 +//line sql.y:3583 { yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}} } yyVAL.union = yyLOCAL - case 643: + case 644: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3585 +//line sql.y:3587 { yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 644: + case 645: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3589 +//line sql.y:3591 { yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()} } yyVAL.union = yyLOCAL - case 645: + case 646: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3593 +//line sql.y:3595 { yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 646: + case 647: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3597 +//line sql.y:3599 { yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true} } yyVAL.union = yyLOCAL - case 647: + case 648: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3601 +//line sql.y:3603 { yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 648: + case 649: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3605 +//line sql.y:3607 { yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true} } yyVAL.union = yyLOCAL - case 649: + case 650: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3609 +//line sql.y:3611 { yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 650: + case 651: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3613 +//line sql.y:3615 { yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} } yyVAL.union = yyLOCAL - case 651: + case 652: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3617 +//line sql.y:3619 { yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 652: + case 653: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3621 +//line sql.y:3623 { yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()} } yyVAL.union = yyLOCAL - case 653: + case 654: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3625 +//line sql.y:3627 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 654: + case 655: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3629 +//line sql.y:3631 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 655: + case 656: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3633 +//line sql.y:3635 { yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 656: + case 657: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3637 +//line sql.y:3639 { yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true} } yyVAL.union = yyLOCAL - case 657: + case 658: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3641 +//line sql.y:3643 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 658: + case 659: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3645 +//line sql.y:3647 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 659: + case 660: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3649 +//line sql.y:3651 { yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 660: + case 661: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3653 +//line sql.y:3655 { yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true} } yyVAL.union = yyLOCAL - case 661: + case 662: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3657 +//line sql.y:3659 { yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 662: + case 663: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3661 +//line sql.y:3663 { yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true} } yyVAL.union = yyLOCAL - case 663: + case 664: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3665 +//line sql.y:3667 { yyLOCAL = &PartitionSpec{Action: UpgradeAction} } yyVAL.union = yyLOCAL - case 664: + case 665: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3670 +//line sql.y:3672 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 665: + case 666: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3674 +//line sql.y:3676 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 666: + case 667: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3678 +//line sql.y:3680 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 667: + case 668: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3684 +//line sql.y:3686 { yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()} } yyVAL.union = yyLOCAL - case 668: + case 669: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3688 +//line sql.y:3690 { yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].partDefUnion()) } - case 669: + case 670: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3694 +//line sql.y:3696 { yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion() } - case 670: + case 671: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3699 +//line sql.y:3701 { yyLOCAL = &PartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 671: + case 672: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3703 +//line sql.y:3705 { yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 672: + case 673: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3708 +//line sql.y:3710 { yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 673: + case 674: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3713 +//line sql.y:3715 { yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 674: + case 675: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3718 +//line sql.y:3720 { yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 675: + case 676: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3723 +//line sql.y:3725 { yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 676: + case 677: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3728 +//line sql.y:3730 { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = &val yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 677: + case 678: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3734 +//line sql.y:3736 { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MinRows = &val yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 678: + case 679: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3740 +//line sql.y:3742 { yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 679: + case 680: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3745 +//line sql.y:3747 { yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 680: + case 681: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:3751 +//line sql.y:3753 { yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion() } yyVAL.union = yyLOCAL - case 681: + case 682: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:3757 +//line sql.y:3759 { yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()} } yyVAL.union = yyLOCAL - case 682: + case 683: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3761 +//line sql.y:3763 { yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion()) } - case 683: + case 684: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SubPartitionDefinition -//line sql.y:3767 +//line sql.y:3769 { yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()} } yyVAL.union = yyLOCAL - case 684: + case 685: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3772 +//line sql.y:3774 { yyLOCAL = &SubPartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 685: + case 686: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3776 +//line sql.y:3778 { yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 686: + case 687: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3781 +//line sql.y:3783 { yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 687: + case 688: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3786 +//line sql.y:3788 { yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 688: + case 689: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3791 +//line sql.y:3793 { yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 689: + case 690: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3796 +//line sql.y:3798 { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = &val yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 690: + case 691: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3802 +//line sql.y:3804 { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = &val yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 691: + case 692: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3808 +//line sql.y:3810 { yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 692: + case 693: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3815 +//line sql.y:3817 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -15083,10 +15126,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 693: + case 694: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3822 +//line sql.y:3824 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -15094,10 +15137,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 694: + case 695: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3829 +//line sql.y:3831 { yyLOCAL = &PartitionValueRange{ Type: InType, @@ -15105,131 +15148,131 @@ yydefault: } } yyVAL.union = yyLOCAL - case 695: + case 696: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3837 +//line sql.y:3839 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 696: + case 697: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3841 +//line sql.y:3843 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 697: + case 698: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionEngine -//line sql.y:3847 +//line sql.y:3849 { yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()} } yyVAL.union = yyLOCAL - case 698: + case 699: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -//line sql.y:3853 +//line sql.y:3855 { yyLOCAL = NewStrLiteral(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 699: + case 700: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:3859 +//line sql.y:3861 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 700: + case 701: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:3865 +//line sql.y:3867 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 701: + case 702: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3871 +//line sql.y:3873 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 702: + case 703: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3877 +//line sql.y:3879 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 703: + case 704: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3883 +//line sql.y:3885 { yyVAL.str = yyDollar[3].identifierCS.String() } - case 704: + case 705: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinition -//line sql.y:3889 +//line sql.y:3891 { yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 705: + case 706: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3895 +//line sql.y:3897 { yyVAL.str = "" } - case 706: + case 707: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3899 +//line sql.y:3901 { yyVAL.str = "" } - case 707: + case 708: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3905 +//line sql.y:3907 { yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()} } yyVAL.union = yyLOCAL - case 708: + case 709: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*RenameTablePair -//line sql.y:3911 +//line sql.y:3913 { yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}} } yyVAL.union = yyLOCAL - case 709: + case 710: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3915 +//line sql.y:3917 { yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName}) } - case 710: + case 711: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3921 +//line sql.y:3923 { yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} } yyVAL.union = yyLOCAL - case 711: + case 712: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3925 +//line sql.y:3927 { // Change this to an alter statement if yyDollar[4].identifierCI.Lowered() == "primary" { @@ -15239,1335 +15282,1335 @@ yydefault: } } yyVAL.union = yyLOCAL - case 712: + case 713: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3934 +//line sql.y:3936 { yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 713: + case 714: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3938 +//line sql.y:3940 { yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 714: + case 715: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3944 +//line sql.y:3946 { yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 715: + case 716: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:3948 +//line sql.y:3950 { yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName} } yyVAL.union = yyLOCAL - case 716: + case 717: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3954 +//line sql.y:3956 { yyLOCAL = &OtherRead{} } yyVAL.union = yyLOCAL - case 717: + case 718: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3960 +//line sql.y:3962 { yyLOCAL = &PurgeBinaryLogs{To: string(yyDollar[5].str)} } yyVAL.union = yyLOCAL - case 718: + case 719: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3964 +//line sql.y:3966 { yyLOCAL = &PurgeBinaryLogs{Before: string(yyDollar[5].str)} } yyVAL.union = yyLOCAL - case 719: + case 720: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3970 +//line sql.y:3972 { yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 720: + case 721: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3974 +//line sql.y:3976 { yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 721: + case 722: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3978 +//line sql.y:3980 { yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 722: + case 723: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3982 +//line sql.y:3984 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 723: + case 724: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3986 +//line sql.y:3988 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 724: + case 725: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3990 +//line sql.y:3992 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 725: + case 726: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3994 +//line sql.y:3996 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 726: + case 727: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3998 +//line sql.y:4000 { yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 727: + case 728: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4002 +//line sql.y:4004 { yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 728: + case 729: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4006 +//line sql.y:4008 { yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 729: + case 730: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4010 +//line sql.y:4012 { yyLOCAL = &Show{&ShowBasic{Command: Privilege}} } yyVAL.union = yyLOCAL - case 730: + case 731: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4014 +//line sql.y:4016 { yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 731: + case 732: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4018 +//line sql.y:4020 { yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 732: + case 733: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4022 +//line sql.y:4024 { yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 733: + case 734: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4026 +//line sql.y:4028 { yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 734: + case 735: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4030 +//line sql.y:4032 { yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 735: + case 736: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4034 +//line sql.y:4036 { yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 736: + case 737: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4038 +//line sql.y:4040 { yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 737: + case 738: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4042 +//line sql.y:4044 { yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 738: + case 739: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4046 +//line sql.y:4048 { yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 739: + case 740: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4050 +//line sql.y:4052 { yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 740: + case 741: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4054 +//line sql.y:4056 { yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 741: + case 742: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4058 +//line sql.y:4060 { yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 742: + case 743: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4062 +//line sql.y:4064 { yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 743: + case 744: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4066 +//line sql.y:4068 { yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 744: + case 745: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4070 +//line sql.y:4072 { yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 745: + case 746: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4074 +//line sql.y:4076 { yyLOCAL = &Show{&ShowBasic{Command: Engines}} } yyVAL.union = yyLOCAL - case 746: + case 747: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4078 +//line sql.y:4080 { yyLOCAL = &Show{&ShowBasic{Command: Plugins}} } yyVAL.union = yyLOCAL - case 747: + case 748: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4082 +//line sql.y:4084 { yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 748: + case 749: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4086 +//line sql.y:4088 { yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 749: + case 750: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4090 +//line sql.y:4092 { yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 750: + case 751: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4094 +//line sql.y:4096 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 751: + case 752: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4098 +//line sql.y:4100 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 752: + case 753: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4102 +//line sql.y:4104 { yyLOCAL = &ShowThrottledApps{} } yyVAL.union = yyLOCAL - case 753: + case 754: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4106 +//line sql.y:4108 { yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 754: + case 755: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4110 +//line sql.y:4112 { yyLOCAL = &ShowThrottlerStatus{} } yyVAL.union = yyLOCAL - case 755: + case 756: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4114 +//line sql.y:4116 { yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} } yyVAL.union = yyLOCAL - case 756: + case 757: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4118 +//line sql.y:4120 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} } yyVAL.union = yyLOCAL - case 757: + case 758: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4122 +//line sql.y:4124 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} } yyVAL.union = yyLOCAL - case 758: + case 759: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4126 +//line sql.y:4128 { yyLOCAL = &Show{&ShowBasic{Command: Warnings}} } yyVAL.union = yyLOCAL - case 759: + case 760: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4130 +//line sql.y:4132 { yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 760: + case 761: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4134 +//line sql.y:4136 { yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 761: + case 762: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4138 +//line sql.y:4140 { yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} } yyVAL.union = yyLOCAL - case 762: + case 763: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4145 +//line sql.y:4147 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} } yyVAL.union = yyLOCAL - case 763: + case 764: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4149 +//line sql.y:4151 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 764: + case 765: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4153 +//line sql.y:4155 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} } yyVAL.union = yyLOCAL - case 765: + case 766: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4157 +//line sql.y:4159 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 766: + case 767: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4161 +//line sql.y:4163 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 767: + case 768: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4165 +//line sql.y:4167 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 768: + case 769: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4169 +//line sql.y:4171 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 769: + case 770: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4173 +//line sql.y:4175 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 770: + case 771: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4177 +//line sql.y:4179 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 771: + case 772: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4183 +//line sql.y:4185 { yyVAL.str = "" } - case 772: + case 773: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4187 +//line sql.y:4189 { yyVAL.str = "extended " } - case 773: + case 774: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4193 +//line sql.y:4195 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 774: + case 775: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4197 +//line sql.y:4199 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 775: + case 776: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4203 +//line sql.y:4205 { yyVAL.str = string(yyDollar[1].str) } - case 776: + case 777: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4207 +//line sql.y:4209 { yyVAL.str = string(yyDollar[1].str) } - case 777: + case 778: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4213 +//line sql.y:4215 { yyVAL.identifierCS = NewIdentifierCS("") } - case 778: + case 779: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4217 +//line sql.y:4219 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 779: + case 780: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4221 +//line sql.y:4223 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 780: + case 781: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4227 +//line sql.y:4229 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 781: + case 782: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4231 +//line sql.y:4233 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 782: + case 783: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4235 +//line sql.y:4237 { yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 783: + case 784: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4241 +//line sql.y:4243 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 784: + case 785: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4245 +//line sql.y:4247 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 785: + case 786: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4251 +//line sql.y:4253 { yyVAL.empty = struct{}{} } - case 786: + case 787: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4255 +//line sql.y:4257 { yyVAL.empty = struct{}{} } - case 787: + case 788: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4259 +//line sql.y:4261 { yyVAL.empty = struct{}{} } - case 788: + case 789: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4265 +//line sql.y:4267 { yyVAL.str = string(yyDollar[1].str) } - case 789: + case 790: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4269 +//line sql.y:4271 { yyVAL.str = string(yyDollar[1].str) } - case 790: + case 791: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4275 +//line sql.y:4277 { yyLOCAL = &Use{DBName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 791: + case 792: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4279 +//line sql.y:4281 { yyLOCAL = &Use{DBName: IdentifierCS{v: ""}} } yyVAL.union = yyLOCAL - case 792: + case 793: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4283 +//line sql.y:4285 { yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))} } yyVAL.union = yyLOCAL - case 793: + case 794: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4290 +//line sql.y:4292 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 794: + case 795: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4294 +//line sql.y:4296 { yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) } - case 795: + case 796: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4298 +//line sql.y:4300 { yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) } - case 796: + case 797: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4302 +//line sql.y:4304 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 797: + case 798: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4309 +//line sql.y:4311 { yyLOCAL = &Begin{} } yyVAL.union = yyLOCAL - case 798: + case 799: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4313 +//line sql.y:4315 { yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()} } yyVAL.union = yyLOCAL - case 799: + case 800: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4318 +//line sql.y:4320 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 800: + case 801: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4322 +//line sql.y:4324 { yyLOCAL = yyDollar[1].txAccessModesUnion() } yyVAL.union = yyLOCAL - case 801: + case 802: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4328 +//line sql.y:4330 { yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()} } yyVAL.union = yyLOCAL - case 802: + case 803: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4332 +//line sql.y:4334 { yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion()) } - case 803: + case 804: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4338 +//line sql.y:4340 { yyLOCAL = WithConsistentSnapshot } yyVAL.union = yyLOCAL - case 804: + case 805: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4342 +//line sql.y:4344 { yyLOCAL = ReadWrite } yyVAL.union = yyLOCAL - case 805: + case 806: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4346 +//line sql.y:4348 { yyLOCAL = ReadOnly } yyVAL.union = yyLOCAL - case 806: + case 807: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4353 +//line sql.y:4355 { yyLOCAL = &Commit{} } yyVAL.union = yyLOCAL - case 807: + case 808: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4359 +//line sql.y:4361 { yyLOCAL = &Rollback{} } yyVAL.union = yyLOCAL - case 808: + case 809: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4363 +//line sql.y:4365 { yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 809: + case 810: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4368 +//line sql.y:4370 { yyVAL.empty = struct{}{} } - case 810: + case 811: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4370 +//line sql.y:4372 { yyVAL.empty = struct{}{} } - case 811: + case 812: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4373 +//line sql.y:4375 { yyVAL.empty = struct{}{} } - case 812: + case 813: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4375 +//line sql.y:4377 { yyVAL.empty = struct{}{} } - case 813: + case 814: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4379 +//line sql.y:4381 { yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 814: + case 815: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4385 +//line sql.y:4387 { yyLOCAL = &Release{Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 815: + case 816: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4390 +//line sql.y:4392 { yyLOCAL = EmptyType } yyVAL.union = yyLOCAL - case 816: + case 817: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4394 +//line sql.y:4396 { yyLOCAL = JSONType } yyVAL.union = yyLOCAL - case 817: + case 818: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4398 +//line sql.y:4400 { yyLOCAL = TreeType } yyVAL.union = yyLOCAL - case 818: + case 819: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4402 +//line sql.y:4404 { yyLOCAL = VitessType } yyVAL.union = yyLOCAL - case 819: + case 820: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4406 +//line sql.y:4408 { yyLOCAL = VTExplainType } yyVAL.union = yyLOCAL - case 820: + case 821: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4410 +//line sql.y:4412 { yyLOCAL = TraditionalType } yyVAL.union = yyLOCAL - case 821: + case 822: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4414 +//line sql.y:4416 { yyLOCAL = AnalyzeType } yyVAL.union = yyLOCAL - case 822: + case 823: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4419 +//line sql.y:4421 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 823: + case 824: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4423 +//line sql.y:4425 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 824: + case 825: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4427 +//line sql.y:4429 { yyLOCAL = AllVExplainType } yyVAL.union = yyLOCAL - case 825: + case 826: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4431 +//line sql.y:4433 { yyLOCAL = QueriesVExplainType } yyVAL.union = yyLOCAL - case 826: + case 827: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4437 +//line sql.y:4439 { yyVAL.str = yyDollar[1].str } - case 827: + case 828: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4441 +//line sql.y:4443 { yyVAL.str = yyDollar[1].str } - case 828: + case 829: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4445 +//line sql.y:4447 { yyVAL.str = yyDollar[1].str } - case 829: + case 830: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4451 +//line sql.y:4453 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 830: + case 831: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4455 +//line sql.y:4457 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 831: + case 832: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4459 +//line sql.y:4461 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 832: + case 833: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4463 +//line sql.y:4465 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 833: + case 834: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4468 +//line sql.y:4470 { yyVAL.str = "" } - case 834: + case 835: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4472 +//line sql.y:4474 { yyVAL.str = yyDollar[1].identifierCI.val } - case 835: + case 836: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4476 +//line sql.y:4478 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 836: + case 837: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4482 +//line sql.y:4484 { yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} } yyVAL.union = yyLOCAL - case 837: + case 838: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4486 +//line sql.y:4488 { yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 838: + case 839: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4492 +//line sql.y:4494 { yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 839: + case 840: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4498 +//line sql.y:4500 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 840: + case 841: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4502 +//line sql.y:4504 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 841: + case 842: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4508 +//line sql.y:4510 { yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()} } yyVAL.union = yyLOCAL - case 842: + case 843: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableAndLockTypes -//line sql.y:4514 +//line sql.y:4516 { yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()} } yyVAL.union = yyLOCAL - case 843: + case 844: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4518 +//line sql.y:4520 { yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion()) } - case 844: + case 845: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *TableAndLockType -//line sql.y:4524 +//line sql.y:4526 { yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()} } yyVAL.union = yyLOCAL - case 845: + case 846: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4530 +//line sql.y:4532 { yyLOCAL = Read } yyVAL.union = yyLOCAL - case 846: + case 847: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4534 +//line sql.y:4536 { yyLOCAL = ReadLocal } yyVAL.union = yyLOCAL - case 847: + case 848: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4538 +//line sql.y:4540 { yyLOCAL = Write } yyVAL.union = yyLOCAL - case 848: + case 849: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4542 +//line sql.y:4544 { yyLOCAL = LowPriorityWrite } yyVAL.union = yyLOCAL - case 849: + case 850: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4548 +//line sql.y:4550 { yyLOCAL = &UnlockTables{} } yyVAL.union = yyLOCAL - case 850: + case 851: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4554 +//line sql.y:4556 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 851: + case 852: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4560 +//line sql.y:4562 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} } yyVAL.union = yyLOCAL - case 852: + case 853: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4564 +//line sql.y:4566 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL - case 853: + case 854: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4568 +//line sql.y:4570 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 854: + case 855: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4572 +//line sql.y:4574 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 855: + case 856: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4576 +//line sql.y:4578 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 856: + case 857: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4580 +//line sql.y:4582 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true} } yyVAL.union = yyLOCAL - case 857: + case 858: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4586 +//line sql.y:4588 { yyVAL.strs = []string{yyDollar[1].str} } - case 858: + case 859: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4590 +//line sql.y:4592 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) } - case 859: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4596 - { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) - } case 860: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4600 +//line sql.y:4598 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 861: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4604 +//line sql.y:4602 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 862: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4608 +//line sql.y:4606 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 863: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4612 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:4610 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 864: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4616 +//line sql.y:4614 { yyVAL.str = string(yyDollar[1].str) } case 865: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4620 +//line sql.y:4618 { yyVAL.str = string(yyDollar[1].str) } case 866: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4622 + { + yyVAL.str = string(yyDollar[1].str) + } + case 867: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4624 +//line sql.y:4626 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str } - case 867: + case 868: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4628 +//line sql.y:4630 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 868: + case 869: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4632 +//line sql.y:4634 { yyVAL.str = string(yyDollar[1].str) } - case 869: + case 870: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4636 +//line sql.y:4638 { yyVAL.str = string(yyDollar[1].str) } - case 870: + case 871: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4640 +//line sql.y:4642 { yyVAL.str = string(yyDollar[1].str) } - case 871: + case 872: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4645 +//line sql.y:4647 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 872: + case 873: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4649 +//line sql.y:4651 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 873: + case 874: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4653 +//line sql.y:4655 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 874: + case 875: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4658 +//line sql.y:4660 { yyVAL.str = "" } - case 875: + case 876: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4662 +//line sql.y:4664 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() } - case 876: + case 877: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4667 +//line sql.y:4669 { setAllowComments(yylex, true) } - case 877: + case 878: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4671 +//line sql.y:4673 { yyVAL.strs = yyDollar[2].strs setAllowComments(yylex, false) } - case 878: + case 879: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4677 +//line sql.y:4679 { yyVAL.strs = nil } - case 879: + case 880: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4681 +//line sql.y:4683 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 880: + case 881: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4687 +//line sql.y:4689 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 881: + case 882: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4691 +//line sql.y:4693 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 882: + case 883: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4695 +//line sql.y:4697 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 883: + case 884: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4700 +//line sql.y:4702 { yyVAL.str = "" } - case 884: + case 885: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4704 +//line sql.y:4706 { yyVAL.str = SQLNoCacheStr } - case 885: + case 886: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4708 +//line sql.y:4710 { yyVAL.str = SQLCacheStr } - case 886: + case 887: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4713 +//line sql.y:4715 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 887: + case 888: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4717 +//line sql.y:4719 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 888: + case 889: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4721 +//line sql.y:4723 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 889: + case 890: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4727 +//line sql.y:4729 { yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 890: + case 891: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4731 +//line sql.y:4733 { yyLOCAL = &PrepareStmt{ Name: yyDollar[3].identifierCI, @@ -16576,595 +16619,595 @@ yydefault: } } yyVAL.union = yyLOCAL - case 891: + case 892: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4741 +//line sql.y:4743 { yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} } yyVAL.union = yyLOCAL - case 892: + case 893: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4746 +//line sql.y:4748 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 893: + case 894: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4750 +//line sql.y:4752 { yyLOCAL = yyDollar[2].variablesUnion() } yyVAL.union = yyLOCAL - case 894: + case 895: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4756 +//line sql.y:4758 { yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 895: + case 896: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4760 +//line sql.y:4762 { yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 896: + case 897: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:4765 +//line sql.y:4767 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 897: + case 898: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:4769 +//line sql.y:4771 { yyLOCAL = yyDollar[1].selectExprsUnion() } yyVAL.union = yyLOCAL - case 898: + case 899: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4774 +//line sql.y:4776 { yyVAL.strs = nil } - case 899: + case 900: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4778 +//line sql.y:4780 { yyVAL.strs = []string{yyDollar[1].str} } - case 900: + case 901: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4782 +//line sql.y:4784 { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} } - case 901: + case 902: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4786 +//line sql.y:4788 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} } - case 902: + case 903: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4790 +//line sql.y:4792 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} } - case 903: + case 904: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4796 +//line sql.y:4798 { yyVAL.str = SQLNoCacheStr } - case 904: + case 905: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4800 +//line sql.y:4802 { yyVAL.str = SQLCacheStr } - case 905: + case 906: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4804 +//line sql.y:4806 { yyVAL.str = DistinctStr } - case 906: + case 907: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4808 +//line sql.y:4810 { yyVAL.str = DistinctStr } - case 907: + case 908: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4812 +//line sql.y:4814 { yyVAL.str = StraightJoinHint } - case 908: + case 909: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4816 +//line sql.y:4818 { yyVAL.str = SQLCalcFoundRowsStr } - case 909: + case 910: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4820 +//line sql.y:4822 { yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway } - case 910: + case 911: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:4826 +//line sql.y:4828 { yyLOCAL = SelectExprs{yyDollar[1].selectExprUnion()} } yyVAL.union = yyLOCAL - case 911: + case 912: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4830 +//line sql.y:4832 { yySLICE := (*SelectExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].selectExprUnion()) } - case 912: + case 913: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4836 +//line sql.y:4838 { yyLOCAL = &StarExpr{} } yyVAL.union = yyLOCAL - case 913: + case 914: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4840 +//line sql.y:4842 { yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 914: + case 915: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4844 +//line sql.y:4846 { yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}} } yyVAL.union = yyLOCAL - case 915: + case 916: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4848 +//line sql.y:4850 { yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 916: + case 917: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4853 +//line sql.y:4855 { yyVAL.identifierCI = IdentifierCI{} } - case 917: + case 918: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4857 +//line sql.y:4859 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 918: + case 919: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4861 +//line sql.y:4863 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 920: + case 921: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4868 +//line sql.y:4870 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 921: + case 922: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4873 +//line sql.y:4875 { yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}} } yyVAL.union = yyLOCAL - case 922: + case 923: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4877 +//line sql.y:4879 { yyLOCAL = yyDollar[1].tableExprsUnion() } yyVAL.union = yyLOCAL - case 923: + case 924: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4883 +//line sql.y:4885 { yyLOCAL = yyDollar[2].tableExprsUnion() } yyVAL.union = yyLOCAL - case 924: + case 925: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4889 +//line sql.y:4891 { yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()} } yyVAL.union = yyLOCAL - case 925: + case 926: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4893 +//line sql.y:4895 { yySLICE := (*TableExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion()) } - case 928: + case 929: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:4903 +//line sql.y:4905 { yyLOCAL = yyDollar[1].aliasedTableNameUnion() } yyVAL.union = yyLOCAL - case 929: + case 930: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:4907 +//line sql.y:4909 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 930: + case 931: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:4911 +//line sql.y:4913 { yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()} } yyVAL.union = yyLOCAL - case 931: + case 932: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:4915 +//line sql.y:4917 { yyLOCAL = yyDollar[1].tableExprUnion() } yyVAL.union = yyLOCAL - case 932: + case 933: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:4921 +//line sql.y:4923 { yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 933: + case 934: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:4925 +//line sql.y:4927 { yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].selStmtUnion()} } yyVAL.union = yyLOCAL - case 934: + case 935: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:4931 +//line sql.y:4933 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 935: + case 936: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:4935 +//line sql.y:4937 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 936: + case 937: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:4940 +//line sql.y:4942 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 937: + case 938: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:4944 +//line sql.y:4946 { yyLOCAL = yyDollar[2].columnsUnion() } yyVAL.union = yyLOCAL - case 938: + case 939: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:4949 +//line sql.y:4951 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 939: + case 940: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:4953 +//line sql.y:4955 { yyLOCAL = yyDollar[1].columnsUnion() } yyVAL.union = yyLOCAL - case 940: + case 941: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:4959 +//line sql.y:4961 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 941: + case 942: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4963 +//line sql.y:4965 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 942: + case 943: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4969 +//line sql.y:4971 { yyLOCAL = []*Variable{yyDollar[1].variableUnion()} } yyVAL.union = yyLOCAL - case 943: + case 944: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4973 +//line sql.y:4975 { yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) } - case 944: + case 945: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:4979 +//line sql.y:4981 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 945: + case 946: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:4983 +//line sql.y:4985 { yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 946: + case 947: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4987 +//line sql.y:4989 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 947: + case 948: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4991 +//line sql.y:4993 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str))) } - case 948: + case 949: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Partitions -//line sql.y:4997 +//line sql.y:4999 { yyLOCAL = Partitions{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 949: + case 950: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5001 +//line sql.y:5003 { yySLICE := (*Partitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 950: + case 951: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5014 +//line sql.y:5016 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 951: + case 952: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5018 +//line sql.y:5020 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 952: + case 953: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5022 +//line sql.y:5024 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 953: + case 954: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5026 +//line sql.y:5028 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()} } yyVAL.union = yyLOCAL - case 954: + case 955: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5032 +//line sql.y:5034 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 955: + case 956: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5034 +//line sql.y:5036 { yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} } - case 956: + case 957: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5038 +//line sql.y:5040 { yyVAL.joinCondition = &JoinCondition{} } - case 957: + case 958: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5040 +//line sql.y:5042 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 958: + case 959: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5044 +//line sql.y:5046 { yyVAL.joinCondition = &JoinCondition{} } - case 959: + case 960: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5046 +//line sql.y:5048 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 960: + case 961: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5049 +//line sql.y:5051 { yyVAL.empty = struct{}{} } - case 961: + case 962: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5051 +//line sql.y:5053 { yyVAL.empty = struct{}{} } - case 962: + case 963: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5054 +//line sql.y:5056 { yyVAL.identifierCS = NewIdentifierCS("") } - case 963: + case 964: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5058 +//line sql.y:5060 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 964: + case 965: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5062 +//line sql.y:5064 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 966: + case 967: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5069 +//line sql.y:5071 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 967: + case 968: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5075 +//line sql.y:5077 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 968: + case 969: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5079 +//line sql.y:5081 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 969: + case 970: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5083 +//line sql.y:5085 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 970: + case 971: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5089 +//line sql.y:5091 { yyLOCAL = StraightJoinType } yyVAL.union = yyLOCAL - case 971: + case 972: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5095 +//line sql.y:5097 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 972: + case 973: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5099 +//line sql.y:5101 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 973: + case 974: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5103 +//line sql.y:5105 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 974: + case 975: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5107 +//line sql.y:5109 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 975: + case 976: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5113 +//line sql.y:5115 { yyLOCAL = NaturalJoinType } yyVAL.union = yyLOCAL - case 976: + case 977: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5117 +//line sql.y:5119 { if yyDollar[2].joinTypeUnion() == LeftJoinType { yyLOCAL = NaturalLeftJoinType @@ -17173,617 +17216,617 @@ yydefault: } } yyVAL.union = yyLOCAL - case 977: + case 978: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5127 +//line sql.y:5129 { yyVAL.tableName = yyDollar[2].tableName } - case 978: + case 979: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5131 +//line sql.y:5133 { yyVAL.tableName = yyDollar[1].tableName } - case 979: + case 980: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5137 +//line sql.y:5139 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 980: + case 981: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5141 +//line sql.y:5143 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} } - case 981: + case 982: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5147 +//line sql.y:5149 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 982: + case 983: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5152 +//line sql.y:5154 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 983: + case 984: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5156 +//line sql.y:5158 { yyLOCAL = yyDollar[1].indexHintsUnion() } yyVAL.union = yyLOCAL - case 984: + case 985: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5162 +//line sql.y:5164 { yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()} } yyVAL.union = yyLOCAL - case 985: + case 986: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5166 +//line sql.y:5168 { yySLICE := (*IndexHints)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion()) } - case 986: + case 987: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5172 +//line sql.y:5174 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 987: + case 988: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5176 +//line sql.y:5178 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()} } yyVAL.union = yyLOCAL - case 988: + case 989: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5180 +//line sql.y:5182 { yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 989: + case 990: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5184 +//line sql.y:5186 { yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 990: + case 991: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5189 +//line sql.y:5191 { yyLOCAL = NoForType } yyVAL.union = yyLOCAL - case 991: + case 992: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5193 +//line sql.y:5195 { yyLOCAL = JoinForType } yyVAL.union = yyLOCAL - case 992: + case 993: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5197 +//line sql.y:5199 { yyLOCAL = OrderByForType } yyVAL.union = yyLOCAL - case 993: + case 994: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5201 +//line sql.y:5203 { yyLOCAL = GroupByForType } yyVAL.union = yyLOCAL - case 994: + case 995: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:5207 +//line sql.y:5209 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 995: + case 996: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5211 +//line sql.y:5213 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 996: + case 997: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5218 +//line sql.y:5220 { yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 997: + case 998: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5222 +//line sql.y:5224 { yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 998: + case 999: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5226 +//line sql.y:5228 { yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 999: + case 1000: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5230 +//line sql.y:5232 { yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1000: + case 1001: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5234 +//line sql.y:5236 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} } yyVAL.union = yyLOCAL - case 1001: + case 1002: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5238 +//line sql.y:5240 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1002: + case 1003: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5242 +//line sql.y:5244 { yyLOCAL = &AssignmentExpr{Left: yyDollar[1].variableUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1003: + case 1004: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5246 +//line sql.y:5248 { yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1004: + case 1005: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5252 +//line sql.y:5254 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} } yyVAL.union = yyLOCAL - case 1005: + case 1006: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5256 +//line sql.y:5258 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} } yyVAL.union = yyLOCAL - case 1006: + case 1007: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5260 +//line sql.y:5262 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1007: + case 1008: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5264 +//line sql.y:5266 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1008: + case 1009: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5270 +//line sql.y:5272 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1009: + case 1010: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5274 +//line sql.y:5276 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1010: + case 1011: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5278 +//line sql.y:5280 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1011: + case 1012: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5282 +//line sql.y:5284 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1012: + case 1013: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5286 +//line sql.y:5288 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1013: + case 1014: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5290 +//line sql.y:5292 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1014: + case 1015: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5294 +//line sql.y:5296 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1015: + case 1016: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5298 +//line sql.y:5300 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1016: + case 1017: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5302 +//line sql.y:5304 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1017: + case 1018: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5306 +//line sql.y:5308 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1018: + case 1019: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5310 +//line sql.y:5312 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1019: + case 1020: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5316 +//line sql.y:5318 { } - case 1020: + case 1021: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5319 +//line sql.y:5321 { } - case 1021: + case 1022: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5325 +//line sql.y:5327 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1022: + case 1023: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5329 +//line sql.y:5331 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1023: + case 1024: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5333 +//line sql.y:5335 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1024: + case 1025: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5337 +//line sql.y:5339 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1025: + case 1026: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5341 +//line sql.y:5343 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1026: + case 1027: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5345 +//line sql.y:5347 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1027: + case 1028: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5349 +//line sql.y:5351 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAdd, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1028: + case 1029: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5353 +//line sql.y:5355 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinarySub, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1029: + case 1030: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5357 +//line sql.y:5359 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1030: + case 1031: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5361 +//line sql.y:5363 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1031: + case 1032: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5365 +//line sql.y:5367 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1032: + case 1033: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5369 +//line sql.y:5371 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1033: + case 1034: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5373 +//line sql.y:5375 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1034: + case 1035: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5377 +//line sql.y:5379 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1035: + case 1036: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5381 +//line sql.y:5383 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1036: + case 1037: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5387 +//line sql.y:5389 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1037: + case 1038: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5391 +//line sql.y:5393 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1038: + case 1039: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5395 +//line sql.y:5397 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1039: + case 1040: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5399 +//line sql.y:5401 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1040: + case 1041: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5403 +//line sql.y:5405 { yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} } yyVAL.union = yyLOCAL - case 1041: + case 1042: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5407 +//line sql.y:5409 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1042: + case 1043: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5411 +//line sql.y:5413 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1043: + case 1044: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5415 +//line sql.y:5417 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1044: + case 1045: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5419 +//line sql.y:5421 { yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? } yyVAL.union = yyLOCAL - case 1045: + case 1046: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5423 +//line sql.y:5425 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1046: + case 1047: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5427 +//line sql.y:5429 { yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1047: + case 1048: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5431 +//line sql.y:5433 { yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1048: + case 1049: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5435 +//line sql.y:5437 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1049: + case 1050: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5439 +//line sql.y:5441 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1050: + case 1051: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5443 +//line sql.y:5445 { yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1051: + case 1052: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5447 +//line sql.y:5449 { yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} } yyVAL.union = yyLOCAL - case 1052: + case 1053: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5451 +//line sql.y:5453 { yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} } yyVAL.union = yyLOCAL - case 1053: + case 1054: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5455 +//line sql.y:5457 { yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1054: + case 1055: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5459 +//line sql.y:5461 { yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1055: + case 1056: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5463 +//line sql.y:5465 { // From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary // To convert a string expression to a binary string, these constructs are equivalent: @@ -17792,3169 +17835,3169 @@ yydefault: yyLOCAL = &ConvertExpr{Expr: yyDollar[2].exprUnion(), Type: &ConvertType{Type: yyDollar[1].str}} } yyVAL.union = yyLOCAL - case 1056: + case 1057: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5471 +//line sql.y:5473 { yyLOCAL = &Default{ColName: yyDollar[2].str} } yyVAL.union = yyLOCAL - case 1057: + case 1058: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5475 +//line sql.y:5477 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAddLeft, Date: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion(), Interval: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1058: + case 1059: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5479 +//line sql.y:5481 { yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1059: + case 1060: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5483 +//line sql.y:5485 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1060: + case 1061: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5487 +//line sql.y:5489 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONUnquoteExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1061: + case 1062: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5493 +//line sql.y:5495 { yyLOCAL = yyDollar[1].colNamesUnion() } yyVAL.union = yyLOCAL - case 1062: + case 1063: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5497 +//line sql.y:5499 { yyLOCAL = yyDollar[2].colNamesUnion() } yyVAL.union = yyLOCAL - case 1063: + case 1064: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5503 +//line sql.y:5505 { yyLOCAL = []*ColName{yyDollar[1].colNameUnion()} } yyVAL.union = yyLOCAL - case 1064: + case 1065: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5507 +//line sql.y:5509 { yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].colNameUnion()) } - case 1065: + case 1066: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5513 +//line sql.y:5515 { yyLOCAL = BothTrimType } yyVAL.union = yyLOCAL - case 1066: + case 1067: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5517 +//line sql.y:5519 { yyLOCAL = LeadingTrimType } yyVAL.union = yyLOCAL - case 1067: + case 1068: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5521 +//line sql.y:5523 { yyLOCAL = TrailingTrimType } yyVAL.union = yyLOCAL - case 1068: + case 1069: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5527 +//line sql.y:5529 { yyLOCAL = FrameRowsType } yyVAL.union = yyLOCAL - case 1069: + case 1070: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5531 +//line sql.y:5533 { yyLOCAL = FrameRangeType } yyVAL.union = yyLOCAL - case 1070: + case 1071: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5538 +//line sql.y:5540 { yyLOCAL = CumeDistExprType } yyVAL.union = yyLOCAL - case 1071: + case 1072: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5542 +//line sql.y:5544 { yyLOCAL = DenseRankExprType } yyVAL.union = yyLOCAL - case 1072: + case 1073: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5546 +//line sql.y:5548 { yyLOCAL = PercentRankExprType } yyVAL.union = yyLOCAL - case 1073: + case 1074: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5550 +//line sql.y:5552 { yyLOCAL = RankExprType } yyVAL.union = yyLOCAL - case 1074: + case 1075: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5554 +//line sql.y:5556 { yyLOCAL = RowNumberExprType } yyVAL.union = yyLOCAL - case 1075: + case 1076: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5560 +//line sql.y:5562 { yyLOCAL = &FramePoint{Type: CurrentRowType} } yyVAL.union = yyLOCAL - case 1076: + case 1077: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5564 +//line sql.y:5566 { yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} } yyVAL.union = yyLOCAL - case 1077: + case 1078: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5568 +//line sql.y:5570 { yyLOCAL = &FramePoint{Type: UnboundedFollowingType} } yyVAL.union = yyLOCAL - case 1078: + case 1079: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5572 +//line sql.y:5574 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1079: + case 1080: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5576 +//line sql.y:5578 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1080: + case 1081: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5580 +//line sql.y:5582 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1081: + case 1082: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5584 +//line sql.y:5586 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1082: + case 1083: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5589 +//line sql.y:5591 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1083: + case 1084: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5593 +//line sql.y:5595 { yyLOCAL = yyDollar[1].frameClauseUnion() } yyVAL.union = yyLOCAL - case 1084: + case 1085: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5599 +//line sql.y:5601 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()} } yyVAL.union = yyLOCAL - case 1085: + case 1086: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5603 +//line sql.y:5605 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()} } yyVAL.union = yyLOCAL - case 1086: + case 1087: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:5608 +//line sql.y:5610 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1087: + case 1088: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:5612 +//line sql.y:5614 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1088: + case 1089: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5617 +//line sql.y:5619 { } - case 1089: + case 1090: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5620 +//line sql.y:5622 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1090: + case 1091: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *WindowSpecification -//line sql.y:5626 +//line sql.y:5628 { yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()} } yyVAL.union = yyLOCAL - case 1091: + case 1092: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5632 +//line sql.y:5634 { yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1092: + case 1093: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5636 +//line sql.y:5638 { yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 1093: + case 1094: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5641 +//line sql.y:5643 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1095: + case 1096: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5648 +//line sql.y:5650 { yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} } yyVAL.union = yyLOCAL - case 1096: + case 1097: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5654 +//line sql.y:5656 { yyLOCAL = RespectNullsType } yyVAL.union = yyLOCAL - case 1097: + case 1098: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5658 +//line sql.y:5660 { yyLOCAL = IgnoreNullsType } yyVAL.union = yyLOCAL - case 1098: + case 1099: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:5664 +//line sql.y:5666 { yyLOCAL = FirstValueExprType } yyVAL.union = yyLOCAL - case 1099: + case 1100: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:5668 +//line sql.y:5670 { yyLOCAL = LastValueExprType } yyVAL.union = yyLOCAL - case 1100: + case 1101: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:5674 +//line sql.y:5676 { yyLOCAL = FromFirstType } yyVAL.union = yyLOCAL - case 1101: + case 1102: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:5678 +//line sql.y:5680 { yyLOCAL = FromLastType } yyVAL.union = yyLOCAL - case 1102: + case 1103: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:5683 +//line sql.y:5685 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1104: + case 1105: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:5690 +//line sql.y:5692 { yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} } yyVAL.union = yyLOCAL - case 1105: + case 1106: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:5696 +//line sql.y:5698 { yyLOCAL = LagExprType } yyVAL.union = yyLOCAL - case 1106: + case 1107: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:5700 +//line sql.y:5702 { yyLOCAL = LeadExprType } yyVAL.union = yyLOCAL - case 1107: + case 1108: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *WindowDefinition -//line sql.y:5706 +//line sql.y:5708 { yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1108: + case 1109: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL WindowDefinitions -//line sql.y:5712 +//line sql.y:5714 { yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()} } yyVAL.union = yyLOCAL - case 1109: + case 1110: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5716 +//line sql.y:5718 { yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion()) } - case 1110: + case 1111: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5722 +//line sql.y:5724 { yyVAL.str = "" } - case 1111: + case 1112: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5726 +//line sql.y:5728 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 1112: + case 1113: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:5732 +//line sql.y:5734 { yyLOCAL = BoolVal(true) } yyVAL.union = yyLOCAL - case 1113: + case 1114: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:5736 +//line sql.y:5738 { yyLOCAL = BoolVal(false) } yyVAL.union = yyLOCAL - case 1114: + case 1115: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5743 +//line sql.y:5745 { yyLOCAL = IsTrueOp } yyVAL.union = yyLOCAL - case 1115: + case 1116: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5747 +//line sql.y:5749 { yyLOCAL = IsNotTrueOp } yyVAL.union = yyLOCAL - case 1116: + case 1117: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5751 +//line sql.y:5753 { yyLOCAL = IsFalseOp } yyVAL.union = yyLOCAL - case 1117: + case 1118: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5755 +//line sql.y:5757 { yyLOCAL = IsNotFalseOp } yyVAL.union = yyLOCAL - case 1118: + case 1119: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5761 +//line sql.y:5763 { yyLOCAL = EqualOp } yyVAL.union = yyLOCAL - case 1119: + case 1120: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5765 +//line sql.y:5767 { yyLOCAL = LessThanOp } yyVAL.union = yyLOCAL - case 1120: + case 1121: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5769 +//line sql.y:5771 { yyLOCAL = GreaterThanOp } yyVAL.union = yyLOCAL - case 1121: + case 1122: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5773 +//line sql.y:5775 { yyLOCAL = LessEqualOp } yyVAL.union = yyLOCAL - case 1122: + case 1123: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5777 +//line sql.y:5779 { yyLOCAL = GreaterEqualOp } yyVAL.union = yyLOCAL - case 1123: + case 1124: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5781 +//line sql.y:5783 { yyLOCAL = NotEqualOp } yyVAL.union = yyLOCAL - case 1124: + case 1125: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5785 +//line sql.y:5787 { yyLOCAL = NullSafeEqualOp } yyVAL.union = yyLOCAL - case 1125: + case 1126: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:5791 +//line sql.y:5793 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1126: + case 1127: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:5795 +//line sql.y:5797 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1127: + case 1128: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:5799 +//line sql.y:5801 { yyLOCAL = ListArg(yyDollar[1].str[2:]) markBindVariable(yylex, yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL - case 1128: + case 1129: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Subquery -//line sql.y:5806 +//line sql.y:5808 { yyLOCAL = &Subquery{yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1129: + case 1130: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:5812 +//line sql.y:5814 { yyLOCAL = Exprs{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1130: + case 1131: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5816 +//line sql.y:5818 { yySLICE := (*Exprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].exprUnion()) } - case 1131: + case 1132: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5826 +//line sql.y:5828 { yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1132: + case 1133: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5830 +//line sql.y:5832 { yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1133: + case 1134: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5840 +//line sql.y:5842 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1134: + case 1135: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5844 +//line sql.y:5846 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1135: + case 1136: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:5848 +//line sql.y:5850 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1136: + case 1137: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5852 +//line sql.y:5854 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1137: + case 1138: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:5856 +//line sql.y:5858 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1138: + case 1139: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5860 +//line sql.y:5862 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1139: + case 1140: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5864 +//line sql.y:5866 { yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1140: + case 1141: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5868 +//line sql.y:5870 { yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL - case 1141: + case 1142: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:5872 +//line sql.y:5874 { yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1142: + case 1143: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5876 +//line sql.y:5878 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1143: + case 1144: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5887 +//line sql.y:5889 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} } yyVAL.union = yyLOCAL - case 1144: + case 1145: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5891 +//line sql.y:5893 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1145: + case 1146: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5897 +//line sql.y:5899 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} } yyVAL.union = yyLOCAL - case 1146: + case 1147: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5901 +//line sql.y:5903 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("curdate")} } yyVAL.union = yyLOCAL - case 1147: + case 1148: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5905 +//line sql.y:5907 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1148: + case 1149: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5910 +//line sql.y:5912 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("curtime"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1149: + case 1150: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5915 +//line sql.y:5917 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1150: + case 1151: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5919 +//line sql.y:5921 { yyLOCAL = &CountStar{} } yyVAL.union = yyLOCAL - case 1151: + case 1152: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5923 +//line sql.y:5925 { yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1152: + case 1153: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5927 +//line sql.y:5929 { yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1153: + case 1154: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5931 +//line sql.y:5933 { yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1154: + case 1155: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5935 +//line sql.y:5937 { yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1155: + case 1156: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5939 +//line sql.y:5941 { yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1156: + case 1157: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5943 +//line sql.y:5945 { yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1157: + case 1158: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5947 +//line sql.y:5949 { yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1158: + case 1159: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5951 +//line sql.y:5953 { yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1159: + case 1160: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5955 +//line sql.y:5957 { yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1160: + case 1161: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5959 +//line sql.y:5961 { yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1161: + case 1162: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5963 +//line sql.y:5965 { yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1162: + case 1163: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5967 +//line sql.y:5969 { yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1163: + case 1164: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5971 +//line sql.y:5973 { yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1164: + case 1165: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5975 +//line sql.y:5977 { yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1165: + case 1166: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5979 +//line sql.y:5981 { yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1166: + case 1167: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:5983 +//line sql.y:5985 { yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL - case 1167: + case 1168: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5987 +//line sql.y:5989 { yyLOCAL = &AnyValue{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1168: + case 1169: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:5991 +//line sql.y:5993 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprTimestampadd, Date: yyDollar[7].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1169: + case 1170: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:5995 +//line sql.y:5997 { yyLOCAL = &TimestampDiffExpr{Unit: yyDollar[3].intervalTypeUnion(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1170: + case 1171: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5999 +//line sql.y:6001 { yyLOCAL = &ExtractFuncExpr{IntervalType: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1171: + case 1172: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6003 +//line sql.y:6005 { yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1172: + case 1173: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6007 +//line sql.y:6009 { yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1173: + case 1174: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6011 +//line sql.y:6013 { yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1174: + case 1175: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6015 +//line sql.y:6017 { yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1175: + case 1176: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6019 +//line sql.y:6021 { yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, Type: LeadingTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1176: + case 1177: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6023 +//line sql.y:6025 { yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, Type: TrailingTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1177: + case 1178: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6027 +//line sql.y:6029 { yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1178: + case 1179: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6031 +//line sql.y:6033 { yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1179: + case 1180: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6035 +//line sql.y:6037 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1180: + case 1181: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6039 +//line sql.y:6041 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1181: + case 1182: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6043 +//line sql.y:6045 { yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1182: + case 1183: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6047 +//line sql.y:6049 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1183: + case 1184: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6051 +//line sql.y:6053 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1184: + case 1185: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6055 +//line sql.y:6057 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1185: + case 1186: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6059 +//line sql.y:6061 { yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1186: + case 1187: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6063 +//line sql.y:6065 { yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1187: + case 1188: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6067 +//line sql.y:6069 { yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1188: + case 1189: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6071 +//line sql.y:6073 { yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} } yyVAL.union = yyLOCAL - case 1189: + case 1190: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6075 +//line sql.y:6077 { yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1190: + case 1191: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6079 +//line sql.y:6081 { yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1191: + case 1192: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6083 +//line sql.y:6085 { yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1192: + case 1193: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6087 +//line sql.y:6089 { yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1193: + case 1194: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6091 +//line sql.y:6093 { yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1194: + case 1195: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6095 +//line sql.y:6097 { yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1195: + case 1196: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6099 +//line sql.y:6101 { yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1196: + case 1197: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6103 +//line sql.y:6105 { yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1197: + case 1198: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6107 +//line sql.y:6109 { yyLOCAL = &GeomPropertyFuncExpr{Property: IsEmpty, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1198: + case 1199: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6111 +//line sql.y:6113 { yyLOCAL = &GeomPropertyFuncExpr{Property: IsSimple, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1199: + case 1200: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6115 +//line sql.y:6117 { yyLOCAL = &GeomPropertyFuncExpr{Property: Dimension, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1200: + case 1201: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6119 +//line sql.y:6121 { yyLOCAL = &GeomPropertyFuncExpr{Property: Envelope, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1201: + case 1202: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6123 +//line sql.y:6125 { yyLOCAL = &GeomPropertyFuncExpr{Property: GeometryType, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1202: + case 1203: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6127 +//line sql.y:6129 { yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1203: + case 1204: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6131 +//line sql.y:6133 { yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1204: + case 1205: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6135 +//line sql.y:6137 { yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1205: + case 1206: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6139 +//line sql.y:6141 { yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1206: + case 1207: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6143 +//line sql.y:6145 { yyLOCAL = &LinestrPropertyFuncExpr{Property: EndPoint, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1207: + case 1208: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6147 +//line sql.y:6149 { yyLOCAL = &LinestrPropertyFuncExpr{Property: IsClosed, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1208: + case 1209: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6151 +//line sql.y:6153 { yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1209: + case 1210: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6155 +//line sql.y:6157 { yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1210: + case 1211: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6159 +//line sql.y:6161 { yyLOCAL = &LinestrPropertyFuncExpr{Property: NumPoints, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1211: + case 1212: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6163 +//line sql.y:6165 { yyLOCAL = &LinestrPropertyFuncExpr{Property: PointN, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1212: + case 1213: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6167 +//line sql.y:6169 { yyLOCAL = &LinestrPropertyFuncExpr{Property: StartPoint, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1213: + case 1214: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6171 +//line sql.y:6173 { yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1214: + case 1215: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6175 +//line sql.y:6177 { yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1215: + case 1216: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6179 +//line sql.y:6181 { yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1216: + case 1217: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6183 +//line sql.y:6185 { yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1217: + case 1218: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6187 +//line sql.y:6189 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1218: + case 1219: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6191 +//line sql.y:6193 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1219: + case 1220: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6195 +//line sql.y:6197 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1220: + case 1221: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6199 +//line sql.y:6201 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1221: + case 1222: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6203 +//line sql.y:6205 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1222: + case 1223: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6207 +//line sql.y:6209 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1223: + case 1224: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6211 +//line sql.y:6213 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1224: + case 1225: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6215 +//line sql.y:6217 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1225: + case 1226: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6219 +//line sql.y:6221 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1226: + case 1227: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6223 +//line sql.y:6225 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1227: + case 1228: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6227 +//line sql.y:6229 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1228: + case 1229: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6231 +//line sql.y:6233 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1229: + case 1230: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6235 +//line sql.y:6237 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1230: + case 1231: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6239 +//line sql.y:6241 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1231: + case 1232: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6243 +//line sql.y:6245 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1232: + case 1233: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6247 +//line sql.y:6249 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1233: + case 1234: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6251 +//line sql.y:6253 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1234: + case 1235: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6255 +//line sql.y:6257 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1235: + case 1236: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6259 +//line sql.y:6261 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1236: + case 1237: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6263 +//line sql.y:6265 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1237: + case 1238: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6267 +//line sql.y:6269 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1238: + case 1239: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6271 +//line sql.y:6273 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1239: + case 1240: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6275 +//line sql.y:6277 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1240: + case 1241: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6279 +//line sql.y:6281 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1241: + case 1242: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6283 +//line sql.y:6285 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1242: + case 1243: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6287 +//line sql.y:6289 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1243: + case 1244: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6291 +//line sql.y:6293 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1244: + case 1245: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6295 +//line sql.y:6297 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1245: + case 1246: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6299 +//line sql.y:6301 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1246: + case 1247: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6303 +//line sql.y:6305 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1247: + case 1248: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6307 +//line sql.y:6309 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1248: + case 1249: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6311 +//line sql.y:6313 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1249: + case 1250: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6315 +//line sql.y:6317 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1250: + case 1251: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6319 +//line sql.y:6321 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1251: + case 1252: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6323 +//line sql.y:6325 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1252: + case 1253: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6327 +//line sql.y:6329 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1253: + case 1254: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6331 +//line sql.y:6333 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1254: + case 1255: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6335 +//line sql.y:6337 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1255: + case 1256: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6339 +//line sql.y:6341 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1256: + case 1257: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6343 +//line sql.y:6345 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1257: + case 1258: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6347 +//line sql.y:6349 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1258: + case 1259: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6351 +//line sql.y:6353 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1259: + case 1260: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6355 +//line sql.y:6357 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1260: + case 1261: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6359 +//line sql.y:6361 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1261: + case 1262: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6363 +//line sql.y:6365 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1262: + case 1263: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6367 +//line sql.y:6369 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1263: + case 1264: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6371 +//line sql.y:6373 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1264: + case 1265: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6375 +//line sql.y:6377 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1265: + case 1266: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6379 +//line sql.y:6381 { yyLOCAL = &PolygonPropertyFuncExpr{Property: Area, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1266: + case 1267: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6383 +//line sql.y:6385 { yyLOCAL = &PolygonPropertyFuncExpr{Property: Centroid, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1267: + case 1268: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6387 +//line sql.y:6389 { yyLOCAL = &PolygonPropertyFuncExpr{Property: ExteriorRing, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1268: + case 1269: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6391 +//line sql.y:6393 { yyLOCAL = &PolygonPropertyFuncExpr{Property: InteriorRingN, Polygon: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1269: + case 1270: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6395 +//line sql.y:6397 { yyLOCAL = &PolygonPropertyFuncExpr{Property: NumInteriorRings, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1270: + case 1271: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6399 +//line sql.y:6401 { yyLOCAL = &GeomCollPropertyFuncExpr{Property: GeometryN, GeomColl: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1271: + case 1272: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6403 +//line sql.y:6405 { yyLOCAL = &GeomCollPropertyFuncExpr{Property: NumGeometries, GeomColl: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1272: + case 1273: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6407 +//line sql.y:6409 { yyLOCAL = &GeoHashFromLatLongExpr{Longitude: yyDollar[3].exprUnion(), Latitude: yyDollar[5].exprUnion(), MaxLength: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1273: + case 1274: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6411 +//line sql.y:6413 { yyLOCAL = &GeoHashFromPointExpr{Point: yyDollar[3].exprUnion(), MaxLength: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1274: + case 1275: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6415 +//line sql.y:6417 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: LatitudeFromHash, GeoHash: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1275: + case 1276: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6419 +//line sql.y:6421 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: LongitudeFromHash, GeoHash: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1276: + case 1277: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6423 +//line sql.y:6425 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: PointFromHash, GeoHash: yyDollar[3].exprUnion(), SridOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1277: + case 1278: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6427 +//line sql.y:6429 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1278: + case 1279: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6431 +//line sql.y:6433 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1279: + case 1280: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6435 +//line sql.y:6437 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion(), Srid: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1280: + case 1281: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6439 +//line sql.y:6441 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1281: + case 1282: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6443 +//line sql.y:6445 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1282: + case 1283: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6447 +//line sql.y:6449 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion(), Bitmask: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1283: + case 1284: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6451 +//line sql.y:6453 { yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1284: + case 1285: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6455 +//line sql.y:6457 { yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1285: + case 1286: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6459 +//line sql.y:6461 { yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1286: + case 1287: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6463 +//line sql.y:6465 { yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} } yyVAL.union = yyLOCAL - case 1287: + case 1288: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6467 +//line sql.y:6469 { yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1288: + case 1289: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6471 +//line sql.y:6473 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1289: + case 1290: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6475 +//line sql.y:6477 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1290: + case 1291: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6479 +//line sql.y:6481 { yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1291: + case 1292: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6483 +//line sql.y:6485 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1292: + case 1293: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6487 +//line sql.y:6489 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1293: + case 1294: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6491 +//line sql.y:6493 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1294: + case 1295: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6495 +//line sql.y:6497 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1295: + case 1296: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6499 +//line sql.y:6501 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1296: + case 1297: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6503 +//line sql.y:6505 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1297: + case 1298: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6507 +//line sql.y:6509 { yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1298: + case 1299: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6511 +//line sql.y:6513 { yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1299: + case 1300: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6515 +//line sql.y:6517 { yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1300: + case 1301: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6519 +//line sql.y:6521 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1301: + case 1302: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6523 +//line sql.y:6525 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1302: + case 1303: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6527 +//line sql.y:6529 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1303: + case 1304: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6531 +//line sql.y:6533 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1304: + case 1305: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6535 +//line sql.y:6537 { yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1305: + case 1306: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6539 +//line sql.y:6541 { yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1306: + case 1307: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6543 +//line sql.y:6545 { yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1307: + case 1308: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6547 +//line sql.y:6549 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1308: + case 1309: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6551 +//line sql.y:6553 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1309: + case 1310: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6555 +//line sql.y:6557 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1310: + case 1311: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6559 +//line sql.y:6561 { yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1311: + case 1312: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6563 +//line sql.y:6565 { yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1312: + case 1313: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6567 +//line sql.y:6569 { yyLOCAL = &MultiPolygonExpr{PolygonParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1313: + case 1314: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6571 +//line sql.y:6573 { yyLOCAL = &MultiPointExpr{PointParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1314: + case 1315: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6575 +//line sql.y:6577 { yyLOCAL = &MultiLinestringExpr{LinestringParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1315: + case 1316: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6579 +//line sql.y:6581 { yyLOCAL = &PolygonExpr{LinestringParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1316: + case 1317: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6583 +//line sql.y:6585 { yyLOCAL = &LineStringExpr{PointParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1317: + case 1318: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6587 +//line sql.y:6589 { yyLOCAL = &PointExpr{XCordinate: yyDollar[3].exprUnion(), YCordinate: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1318: + case 1319: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6591 +//line sql.y:6593 { yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1319: + case 1320: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6595 +//line sql.y:6597 { yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1320: + case 1321: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6599 +//line sql.y:6601 { yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1321: + case 1322: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6603 +//line sql.y:6605 { yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1322: + case 1323: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6607 +//line sql.y:6609 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1323: + case 1324: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6611 +//line sql.y:6613 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1324: + case 1325: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6615 +//line sql.y:6617 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1325: + case 1326: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6619 +//line sql.y:6621 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone} } yyVAL.union = yyLOCAL - case 1326: + case 1327: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6623 +//line sql.y:6625 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateAdd, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1327: + case 1328: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6627 +//line sql.y:6629 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateSub, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1328: + case 1329: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6631 +//line sql.y:6633 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1329: + case 1330: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6635 +//line sql.y:6637 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone} } yyVAL.union = yyLOCAL - case 1334: + case 1335: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6645 +//line sql.y:6647 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1335: + case 1336: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6649 +//line sql.y:6651 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1336: + case 1337: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6653 +//line sql.y:6655 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1337: + case 1338: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6657 +//line sql.y:6659 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1338: + case 1339: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6662 +//line sql.y:6664 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1339: + case 1340: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6666 +//line sql.y:6668 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1340: + case 1341: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6672 +//line sql.y:6674 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1341: + case 1342: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6676 +//line sql.y:6678 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1342: + case 1343: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6680 +//line sql.y:6682 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1343: + case 1344: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6684 +//line sql.y:6686 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1344: + case 1345: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6688 +//line sql.y:6690 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1345: + case 1346: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6693 +//line sql.y:6695 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1346: + case 1347: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6697 +//line sql.y:6699 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1347: + case 1348: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6701 +//line sql.y:6703 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1348: + case 1349: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6705 +//line sql.y:6707 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1349: + case 1350: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6709 +//line sql.y:6711 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1350: + case 1351: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6713 +//line sql.y:6715 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1351: + case 1352: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6718 +//line sql.y:6720 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1352: + case 1353: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6722 +//line sql.y:6724 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1353: + case 1354: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6726 +//line sql.y:6728 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1354: + case 1355: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6730 +//line sql.y:6732 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1355: + case 1356: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6737 +//line sql.y:6739 { yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1356: + case 1357: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6741 +//line sql.y:6743 { yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1357: + case 1358: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6747 +//line sql.y:6749 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1358: + case 1359: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6751 +//line sql.y:6753 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1359: + case 1360: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6755 +//line sql.y:6757 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType} } yyVAL.union = yyLOCAL - case 1360: + case 1361: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6759 +//line sql.y:6761 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1361: + case 1362: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6765 +//line sql.y:6767 { yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1362: + case 1363: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6769 +//line sql.y:6771 { yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1363: + case 1364: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6773 +//line sql.y:6775 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1364: + case 1365: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6777 +//line sql.y:6779 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1365: + case 1366: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6781 +//line sql.y:6783 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1366: + case 1367: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6785 +//line sql.y:6787 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1367: + case 1368: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6789 +//line sql.y:6791 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1368: + case 1369: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6794 +//line sql.y:6796 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1369: + case 1370: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6798 +//line sql.y:6800 { yyLOCAL = yyDollar[2].convertTypeUnion() } yyVAL.union = yyLOCAL - case 1370: + case 1371: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6804 +//line sql.y:6806 { yyLOCAL = IntervalDayHour } yyVAL.union = yyLOCAL - case 1371: + case 1372: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6808 +//line sql.y:6810 { yyLOCAL = IntervalDayMicrosecond } yyVAL.union = yyLOCAL - case 1372: + case 1373: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6812 +//line sql.y:6814 { yyLOCAL = IntervalDayMinute } yyVAL.union = yyLOCAL - case 1373: + case 1374: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6816 +//line sql.y:6818 { yyLOCAL = IntervalDaySecond } yyVAL.union = yyLOCAL - case 1374: + case 1375: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6820 +//line sql.y:6822 { yyLOCAL = IntervalHourMicrosecond } yyVAL.union = yyLOCAL - case 1375: + case 1376: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6824 +//line sql.y:6826 { yyLOCAL = IntervalHourMinute } yyVAL.union = yyLOCAL - case 1376: + case 1377: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6828 +//line sql.y:6830 { yyLOCAL = IntervalHourSecond } yyVAL.union = yyLOCAL - case 1377: + case 1378: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6832 +//line sql.y:6834 { yyLOCAL = IntervalMinuteMicrosecond } yyVAL.union = yyLOCAL - case 1378: + case 1379: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6836 +//line sql.y:6838 { yyLOCAL = IntervalMinuteSecond } yyVAL.union = yyLOCAL - case 1379: + case 1380: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6840 +//line sql.y:6842 { yyLOCAL = IntervalSecondMicrosecond } yyVAL.union = yyLOCAL - case 1380: + case 1381: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6844 +//line sql.y:6846 { yyLOCAL = IntervalYearMonth } yyVAL.union = yyLOCAL - case 1381: + case 1382: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6848 +//line sql.y:6850 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1382: + case 1383: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6852 +//line sql.y:6854 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1383: + case 1384: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6856 +//line sql.y:6858 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1384: + case 1385: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6860 +//line sql.y:6862 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1385: + case 1386: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6864 +//line sql.y:6866 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1386: + case 1387: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6868 +//line sql.y:6870 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1387: + case 1388: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6872 +//line sql.y:6874 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1388: + case 1389: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6876 +//line sql.y:6878 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1389: + case 1390: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6880 +//line sql.y:6882 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1390: + case 1391: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6886 +//line sql.y:6888 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1391: + case 1392: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6890 +//line sql.y:6892 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1392: + case 1393: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6894 +//line sql.y:6896 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1393: + case 1394: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6898 +//line sql.y:6900 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1394: + case 1395: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6902 +//line sql.y:6904 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1395: + case 1396: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6906 +//line sql.y:6908 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1396: + case 1397: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6910 +//line sql.y:6912 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1397: + case 1398: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6914 +//line sql.y:6916 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1398: + case 1399: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6918 +//line sql.y:6920 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1399: + case 1400: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6922 +//line sql.y:6924 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1400: + case 1401: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6926 +//line sql.y:6928 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1401: + case 1402: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6930 +//line sql.y:6932 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1402: + case 1403: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6934 +//line sql.y:6936 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1403: + case 1404: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6938 +//line sql.y:6940 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1404: + case 1405: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6942 +//line sql.y:6944 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1405: + case 1406: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6946 +//line sql.y:6948 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1406: + case 1407: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6950 +//line sql.y:6952 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1407: + case 1408: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6954 +//line sql.y:6956 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1410: + case 1411: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:6964 +//line sql.y:6966 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 1411: + case 1412: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:6968 +//line sql.y:6970 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 1412: + case 1413: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:6972 +//line sql.y:6974 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 1413: + case 1414: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6982 +//line sql.y:6984 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1414: + case 1415: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6986 +//line sql.y:6988 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1415: + case 1416: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6990 +//line sql.y:6992 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1416: + case 1417: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6994 +//line sql.y:6996 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1417: + case 1418: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6998 +//line sql.y:7000 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1418: + case 1419: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7004 +//line sql.y:7006 { yyLOCAL = NoOption } yyVAL.union = yyLOCAL - case 1419: + case 1420: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7008 +//line sql.y:7010 { yyLOCAL = BooleanModeOpt } yyVAL.union = yyLOCAL - case 1420: + case 1421: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7012 +//line sql.y:7014 { yyLOCAL = NaturalLanguageModeOpt } yyVAL.union = yyLOCAL - case 1421: + case 1422: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7016 +//line sql.y:7018 { yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt } yyVAL.union = yyLOCAL - case 1422: + case 1423: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7020 +//line sql.y:7022 { yyLOCAL = QueryExpansionOpt } yyVAL.union = yyLOCAL - case 1423: + case 1424: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7026 +//line sql.y:7028 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 1424: + case 1425: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7030 +//line sql.y:7032 { yyVAL.str = string(yyDollar[1].str) } - case 1425: + case 1426: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7034 +//line sql.y:7036 { yyVAL.str = string(yyDollar[1].str) } - case 1426: + case 1427: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7040 +//line sql.y:7042 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1427: + case 1428: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7044 +//line sql.y:7046 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1428: + case 1429: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7048 +//line sql.y:7050 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1429: + case 1430: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7054 +//line sql.y:7056 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1430: + case 1431: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7058 +//line sql.y:7060 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } yyVAL.union = yyLOCAL - case 1431: + case 1432: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7062 +//line sql.y:7064 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1432: + case 1433: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7066 +//line sql.y:7068 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1433: + case 1434: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7070 +//line sql.y:7072 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale } yyVAL.union = yyLOCAL - case 1434: + case 1435: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7076 +//line sql.y:7078 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1435: + case 1436: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7080 +//line sql.y:7082 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1436: + case 1437: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7084 +//line sql.y:7086 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1437: + case 1438: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7088 +//line sql.y:7090 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1438: + case 1439: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7092 +//line sql.y:7094 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1439: + case 1440: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7096 +//line sql.y:7098 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1440: + case 1441: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7100 +//line sql.y:7102 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1441: + case 1442: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7104 +//line sql.y:7106 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1442: + case 1443: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7108 +//line sql.y:7110 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1443: + case 1444: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7112 +//line sql.y:7114 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1444: + case 1445: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7118 +//line sql.y:7120 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1445: + case 1446: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7122 +//line sql.y:7124 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1446: + case 1447: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7127 +//line sql.y:7129 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1447: + case 1448: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7131 +//line sql.y:7133 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1448: + case 1449: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7136 +//line sql.y:7138 { yyVAL.str = string("") } - case 1449: + case 1450: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7140 +//line sql.y:7142 { yyVAL.str = encodeSQLString(yyDollar[2].str) } - case 1450: + case 1451: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*When -//line sql.y:7146 +//line sql.y:7148 { yyLOCAL = []*When{yyDollar[1].whenUnion()} } yyVAL.union = yyLOCAL - case 1451: + case 1452: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7150 +//line sql.y:7152 { yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) } - case 1452: + case 1453: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *When -//line sql.y:7156 +//line sql.y:7158 { yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1453: + case 1454: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7161 +//line sql.y:7163 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1454: + case 1455: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7165 +//line sql.y:7167 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1455: + case 1456: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7171 +//line sql.y:7173 { yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1456: + case 1457: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7175 +//line sql.y:7177 { yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 1457: + case 1458: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColName -//line sql.y:7179 +//line sql.y:7181 { yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1458: + case 1459: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColName -//line sql.y:7183 +//line sql.y:7185 { yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 1459: + case 1460: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7189 +//line sql.y:7191 { yyLOCAL = yyDollar[1].colNameUnion() } yyVAL.union = yyLOCAL - case 1460: + case 1461: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7193 +//line sql.y:7195 { yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1461: + case 1462: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7199 +//line sql.y:7201 { // TODO(sougou): Deprecate this construct. if yyDollar[1].identifierCI.Lowered() != "value" { @@ -20964,426 +21007,426 @@ yydefault: yyLOCAL = NewIntLiteral("1") } yyVAL.union = yyLOCAL - case 1462: + case 1463: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7208 +//line sql.y:7210 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1463: + case 1464: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7212 +//line sql.y:7214 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1464: + case 1465: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:7217 +//line sql.y:7219 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1465: + case 1466: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:7221 +//line sql.y:7223 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1466: + case 1467: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7226 +//line sql.y:7228 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1467: + case 1468: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7230 +//line sql.y:7232 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1468: + case 1469: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *NamedWindow -//line sql.y:7236 +//line sql.y:7238 { yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 1469: + case 1470: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7242 +//line sql.y:7244 { yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()} } yyVAL.union = yyLOCAL - case 1470: + case 1471: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7246 +//line sql.y:7248 { yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion()) } - case 1471: + case 1472: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7251 +//line sql.y:7253 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1472: + case 1473: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7255 +//line sql.y:7257 { yyLOCAL = yyDollar[1].namedWindowsUnion() } yyVAL.union = yyLOCAL - case 1473: + case 1474: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7260 +//line sql.y:7262 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1474: + case 1475: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7264 +//line sql.y:7266 { yyLOCAL = yyDollar[1].orderByUnion() } yyVAL.union = yyLOCAL - case 1475: + case 1476: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7270 +//line sql.y:7272 { yyLOCAL = yyDollar[3].orderByUnion() } yyVAL.union = yyLOCAL - case 1476: + case 1477: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7276 +//line sql.y:7278 { yyLOCAL = OrderBy{yyDollar[1].orderUnion()} } yyVAL.union = yyLOCAL - case 1477: + case 1478: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7280 +//line sql.y:7282 { yySLICE := (*OrderBy)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].orderUnion()) } - case 1478: + case 1479: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Order -//line sql.y:7286 +//line sql.y:7288 { yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 1479: + case 1480: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7291 +//line sql.y:7293 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1480: + case 1481: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7295 +//line sql.y:7297 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1481: + case 1482: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7299 +//line sql.y:7301 { yyLOCAL = DescOrder } yyVAL.union = yyLOCAL - case 1482: + case 1483: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Limit -//line sql.y:7304 +//line sql.y:7306 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1483: + case 1484: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Limit -//line sql.y:7308 +//line sql.y:7310 { yyLOCAL = yyDollar[1].limitUnion() } yyVAL.union = yyLOCAL - case 1484: + case 1485: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Limit -//line sql.y:7314 +//line sql.y:7316 { yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1485: + case 1486: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7318 +//line sql.y:7320 { yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1486: + case 1487: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7322 +//line sql.y:7324 { yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1487: + case 1488: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7327 +//line sql.y:7329 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1488: + case 1489: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7331 +//line sql.y:7333 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1489: + case 1490: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7335 +//line sql.y:7337 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1490: + case 1491: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7339 +//line sql.y:7341 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1491: + case 1492: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7343 +//line sql.y:7345 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1492: + case 1493: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7350 +//line sql.y:7352 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 1493: + case 1494: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7354 +//line sql.y:7356 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 1494: + case 1495: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7358 +//line sql.y:7360 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 1495: + case 1496: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7362 +//line sql.y:7364 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 1496: + case 1497: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7368 +//line sql.y:7370 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1497: + case 1498: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7372 +//line sql.y:7374 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1498: + case 1499: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7376 +//line sql.y:7378 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1499: + case 1500: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7380 +//line sql.y:7382 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1500: + case 1501: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7385 +//line sql.y:7387 { yyVAL.str = "" } - case 1501: + case 1502: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7389 +//line sql.y:7391 { yyVAL.str = string(yyDollar[3].str) } - case 1502: + case 1503: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7393 +//line sql.y:7395 { yyVAL.str = string(yyDollar[3].str) } - case 1503: + case 1504: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7397 +//line sql.y:7399 { yyVAL.str = string(yyDollar[3].str) } - case 1504: + case 1505: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7402 +//line sql.y:7404 { yyVAL.str = "" } - case 1505: + case 1506: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7406 +//line sql.y:7408 { yyVAL.str = yyDollar[3].str } - case 1506: + case 1507: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7412 +//line sql.y:7414 { yyVAL.str = string(yyDollar[1].str) } - case 1507: + case 1508: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7416 +//line sql.y:7418 { yyVAL.str = string(yyDollar[1].str) } - case 1508: + case 1509: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7421 +//line sql.y:7423 { yyVAL.str = "" } - case 1509: + case 1510: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7425 +//line sql.y:7427 { yyVAL.str = yyDollar[2].str } - case 1510: + case 1511: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7430 +//line sql.y:7432 { yyVAL.str = "cascaded" } - case 1511: + case 1512: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7434 +//line sql.y:7436 { yyVAL.str = string(yyDollar[1].str) } - case 1512: + case 1513: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7438 +//line sql.y:7440 { yyVAL.str = string(yyDollar[1].str) } - case 1513: + case 1514: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Definer -//line sql.y:7443 +//line sql.y:7445 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1514: + case 1515: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7447 +//line sql.y:7449 { yyLOCAL = yyDollar[3].definerUnion() } yyVAL.union = yyLOCAL - case 1515: + case 1516: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Definer -//line sql.y:7453 +//line sql.y:7455 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1516: + case 1517: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7459 +//line sql.y:7461 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1517: + case 1518: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Definer -//line sql.y:7465 +//line sql.y:7467 { yyLOCAL = &Definer{ Name: yyDollar[1].str, @@ -21391,369 +21434,369 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1518: + case 1519: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7474 +//line sql.y:7476 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 1519: + case 1520: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7478 +//line sql.y:7480 { yyVAL.str = formatIdentifier(yyDollar[1].str) } - case 1520: + case 1521: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7483 +//line sql.y:7485 { yyVAL.str = "" } - case 1521: + case 1522: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7487 +//line sql.y:7489 { yyVAL.str = formatAddress(yyDollar[1].str) } - case 1522: + case 1523: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:7493 +//line sql.y:7495 { yyLOCAL = ForUpdateLock } yyVAL.union = yyLOCAL - case 1523: + case 1524: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7497 +//line sql.y:7499 { yyLOCAL = ShareModeLock } yyVAL.union = yyLOCAL - case 1524: + case 1525: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7503 +//line sql.y:7505 { yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } yyVAL.union = yyLOCAL - case 1525: + case 1526: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7507 +//line sql.y:7509 { yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1526: + case 1527: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7511 +//line sql.y:7513 { yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1527: + case 1528: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7516 +//line sql.y:7518 { yyVAL.str = "" } - case 1528: + case 1529: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7520 +//line sql.y:7522 { yyVAL.str = " format csv" + yyDollar[3].str } - case 1529: + case 1530: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7524 +//line sql.y:7526 { yyVAL.str = " format text" + yyDollar[3].str } - case 1530: + case 1531: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7529 +//line sql.y:7531 { yyVAL.str = "" } - case 1531: + case 1532: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7533 +//line sql.y:7535 { yyVAL.str = " header" } - case 1532: + case 1533: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7538 +//line sql.y:7540 { yyVAL.str = "" } - case 1533: + case 1534: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7542 +//line sql.y:7544 { yyVAL.str = " manifest on" } - case 1534: + case 1535: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7546 +//line sql.y:7548 { yyVAL.str = " manifest off" } - case 1535: + case 1536: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7551 +//line sql.y:7553 { yyVAL.str = "" } - case 1536: + case 1537: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7555 +//line sql.y:7557 { yyVAL.str = " overwrite on" } - case 1537: + case 1538: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7559 +//line sql.y:7561 { yyVAL.str = " overwrite off" } - case 1538: + case 1539: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7565 +//line sql.y:7567 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1539: + case 1540: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7570 +//line sql.y:7572 { yyVAL.str = "" } - case 1540: + case 1541: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7574 +//line sql.y:7576 { yyVAL.str = " lines" + yyDollar[2].str } - case 1541: + case 1542: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7580 +//line sql.y:7582 { yyVAL.str = yyDollar[1].str } - case 1542: + case 1543: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7584 +//line sql.y:7586 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1543: + case 1544: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7590 +//line sql.y:7592 { yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) } - case 1544: + case 1545: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7594 +//line sql.y:7596 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1545: + case 1546: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7599 +//line sql.y:7601 { yyVAL.str = "" } - case 1546: + case 1547: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7603 +//line sql.y:7605 { yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str } - case 1547: + case 1548: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7609 +//line sql.y:7611 { yyVAL.str = yyDollar[1].str } - case 1548: + case 1549: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7613 +//line sql.y:7615 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1549: + case 1550: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7619 +//line sql.y:7621 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1550: + case 1551: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7623 +//line sql.y:7625 { yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) } - case 1551: + case 1552: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7627 +//line sql.y:7629 { yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) } - case 1552: + case 1553: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7632 +//line sql.y:7634 { yyVAL.str = "" } - case 1553: + case 1554: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7636 +//line sql.y:7638 { yyVAL.str = " optionally" } - case 1554: + case 1555: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Insert -//line sql.y:7649 +//line sql.y:7651 { yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion()} } yyVAL.union = yyLOCAL - case 1555: + case 1556: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Insert -//line sql.y:7653 +//line sql.y:7655 { yyLOCAL = &Insert{Rows: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1556: + case 1557: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *Insert -//line sql.y:7657 +//line sql.y:7659 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion()} } yyVAL.union = yyLOCAL - case 1557: + case 1558: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7661 +//line sql.y:7663 { yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion()} } yyVAL.union = yyLOCAL - case 1558: + case 1559: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7665 +//line sql.y:7667 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1559: + case 1560: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:7671 +//line sql.y:7673 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1560: + case 1561: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:7675 +//line sql.y:7677 { yyLOCAL = Columns{yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1561: + case 1562: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7679 +//line sql.y:7681 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1562: + case 1563: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:7683 +//line sql.y:7685 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[5].identifierCI) } - case 1563: + case 1564: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7688 +//line sql.y:7690 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1564: + case 1565: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7692 +//line sql.y:7694 { yyLOCAL = yyDollar[5].updateExprsUnion() } yyVAL.union = yyLOCAL - case 1565: + case 1566: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:7698 +//line sql.y:7700 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL - case 1566: + case 1567: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7702 +//line sql.y:7704 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } - case 1567: + case 1568: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7708 +//line sql.y:7710 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1568: + case 1569: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7712 +//line sql.y:7714 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL - case 1569: + case 1570: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7718 +//line sql.y:7720 { yyLOCAL = ValTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL - case 1570: + case 1571: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7722 +//line sql.y:7724 { yyLOCAL = ValTuple(yyDollar[3].exprsUnion()) } yyVAL.union = yyLOCAL - case 1571: + case 1572: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7727 +//line sql.y:7729 { if len(yyDollar[1].valTupleUnion()) == 1 { yyLOCAL = yyDollar[1].valTupleUnion()[0] @@ -21762,131 +21805,125 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1572: + case 1573: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7737 +//line sql.y:7739 { yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()} } yyVAL.union = yyLOCAL - case 1573: + case 1574: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7741 +//line sql.y:7743 { yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion()) } - case 1574: + case 1575: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *UpdateExpr -//line sql.y:7747 +//line sql.y:7749 { yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1576: + case 1577: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7754 +//line sql.y:7756 { yyVAL.str = "charset" } - case 1579: + case 1580: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7764 +//line sql.y:7766 { yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) } yyVAL.union = yyLOCAL - case 1580: + case 1581: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7768 +//line sql.y:7770 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1581: + case 1582: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7772 +//line sql.y:7774 { yyLOCAL = &Default{} } yyVAL.union = yyLOCAL - case 1584: + case 1585: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7781 +//line sql.y:7783 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1585: + case 1586: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7783 +//line sql.y:7785 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1586: + case 1587: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7786 +//line sql.y:7788 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1587: + case 1588: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:7788 +//line sql.y:7790 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1588: + case 1589: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7791 +//line sql.y:7793 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1589: + case 1590: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL bool -//line sql.y:7793 +//line sql.y:7795 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1590: + case 1591: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Ignore -//line sql.y:7796 +//line sql.y:7798 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1591: + case 1592: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Ignore -//line sql.y:7798 +//line sql.y:7800 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1592: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7801 - { - yyVAL.empty = struct{}{} - } case 1593: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:7803 { yyVAL.empty = struct{}{} @@ -21898,132 +21935,170 @@ yydefault: yyVAL.empty = struct{}{} } case 1595: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7807 + { + yyVAL.empty = struct{}{} + } + case 1596: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:7809 +//line sql.y:7811 { yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1596: + case 1597: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:7814 +//line sql.y:7816 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1597: + case 1598: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:7818 +//line sql.y:7820 { yyLOCAL = yyDollar[1].exprsUnion() } yyVAL.union = yyLOCAL - case 1598: + case 1599: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7823 +//line sql.y:7825 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1599: + case 1600: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7825 +//line sql.y:7827 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 1600: + case 1601: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:7829 +//line sql.y:7831 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())} } yyVAL.union = yyLOCAL - case 1601: + case 1602: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7835 +//line sql.y:7837 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1602: + case 1603: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7839 +//line sql.y:7841 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1604: + case 1605: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7846 +//line sql.y:7848 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1605: + case 1606: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7852 +//line sql.y:7854 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1606: + case 1607: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7856 +//line sql.y:7858 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1607: + case 1608: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7862 +//line sql.y:7864 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1608: + case 1609: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7866 +//line sql.y:7868 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1610: + case 1611: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7873 +//line sql.y:7875 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 2224: + case 1612: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:7881 + { + yyLOCAL = &Kill{Type: yyDollar[2].killTypeUnion(), ProcesslistID: convertStringToUInt64(yyDollar[3].str)} + } + yyVAL.union = yyLOCAL + case 1613: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL KillType +//line sql.y:7887 + { + yyLOCAL = ConnectionType + } + yyVAL.union = yyLOCAL + case 1614: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL KillType +//line sql.y:7891 + { + yyLOCAL = ConnectionType + } + yyVAL.union = yyLOCAL + case 1615: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL KillType +//line sql.y:7895 + { + yyLOCAL = QueryType + } + yyVAL.union = yyLOCAL + case 2230: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8513 +//line sql.y:8538 { } - case 2225: + case 2231: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8518 +//line sql.y:8543 { } - case 2226: + case 2232: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8522 +//line sql.y:8547 { skipToEnd(yylex) } - case 2227: + case 2233: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8527 +//line sql.y:8552 { skipToEnd(yylex) } - case 2228: + case 2234: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8531 +//line sql.y:8556 { skipToEnd(yylex) } - case 2229: + case 2235: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8535 +//line sql.y:8560 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index e11e1557d10..a9b38ae03d6 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -178,6 +178,7 @@ func markBindVariable(yylex yyLexer, bvar string) { referenceDefinition *ReferenceDefinition txAccessModes []TxAccessMode txAccessMode TxAccessMode + killType KillType columnStorage ColumnStorage columnFormat ColumnFormat @@ -247,6 +248,7 @@ func markBindVariable(yylex yyLexer, bvar string) { %token DISCARD IMPORT ENABLE DISABLE TABLESPACE %token VIRTUAL STORED %token BOTH LEADING TRAILING +%token KILL %left EMPTY_FROM_CLAUSE %right INTO @@ -398,14 +400,12 @@ func markBindVariable(yylex yyLexer, bvar string) { %type range_or_list %type partitions_opt algorithm_opt subpartitions_opt partition_max_rows partition_min_rows -%type command -%type query_expression_parens query_expression query_expression_body select_statement query_primary select_stmt_with_into -%type explain_statement explainable_statement -%type prepare_statement -%type vexplain_statement -%type execute_statement deallocate_statement +%type command kill_statement +%type explain_statement explainable_statement vexplain_statement +%type prepare_statement execute_statement deallocate_statement %type stream_statement vstream_statement insert_statement update_statement delete_statement set_statement set_transaction_statement %type create_statement alter_statement rename_statement drop_statement truncate_statement flush_statement do_statement +%type select_statement select_stmt_with_into query_expression_parens query_expression query_expression_body query_primary %type with_clause_opt with_clause %type common_table_expr %type with_list @@ -589,6 +589,7 @@ func markBindVariable(yylex yyLexer, bvar string) { %type ratio_opt %type tx_chacteristics_opt tx_chars %type tx_char +%type kill_type_opt %start any_command %% @@ -650,6 +651,7 @@ command: | prepare_statement | execute_statement | deallocate_statement +| kill_statement | /*empty*/ { setParseTree(yylex, nil) @@ -7873,6 +7875,28 @@ reserved_table_id: { $$ = NewIdentifierCS(string($1)) } + +kill_statement: + KILL kill_type_opt INTEGRAL + { + $$ = &Kill{Type: $2, ProcesslistID: convertStringToUInt64($3)} + } + +kill_type_opt: + /* empty */ + { + $$ = ConnectionType + } +| CONNECTION + { + $$ = ConnectionType + } +| QUERY + { + $$ = QueryType + } + + /* These are not all necessarily reserved in MySQL, but some are. @@ -7951,6 +7975,7 @@ reserved_keyword: | JOIN | JSON_TABLE | KEY +| KILL | LAG | LAST_VALUE | LATERAL diff --git a/go/vt/vitessdriver/fakeserver_test.go b/go/vt/vitessdriver/fakeserver_test.go index 9b66b705e61..c420067f61f 100644 --- a/go/vt/vitessdriver/fakeserver_test.go +++ b/go/vt/vitessdriver/fakeserver_test.go @@ -50,7 +50,7 @@ func (q *queryExecute) Equal(q2 *queryExecute) bool { } // Execute is part of the VTGateService interface -func (f *fakeVTGateService) Execute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { +func (f *fakeVTGateService) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { execCase, ok := execMap[sql] if !ok { return session, nil, fmt.Errorf("no match for: %s", sql) @@ -100,7 +100,7 @@ func (f *fakeVTGateService) ExecuteBatch(ctx context.Context, session *vtgatepb. } // StreamExecute is part of the VTGateService interface -func (f *fakeVTGateService) StreamExecute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { +func (f *fakeVTGateService) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { execCase, ok := execMap[sql] if !ok { return session, fmt.Errorf("no match for: %s", sql) diff --git a/go/vt/vterrors/code.go b/go/vt/vterrors/code.go index 2aa9827c084..2afccb561e2 100644 --- a/go/vt/vterrors/code.go +++ b/go/vt/vterrors/code.go @@ -59,6 +59,8 @@ var ( VT06001 = errorWithState("VT06001", vtrpcpb.Code_ALREADY_EXISTS, DbCreateExists, "cannot create database '%s'; database exists", "The given database name already exists.") + VT07001 = errorWithState("VT07001", vtrpcpb.Code_PERMISSION_DENIED, KillDeniedError, "%s", "Kill statement is not allowed. More in docs about how to enable it and its limitations.") + VT09001 = errorWithState("VT09001", vtrpcpb.Code_FAILED_PRECONDITION, RequiresPrimaryKey, PrimaryVindexNotSet, "the table does not have a primary vindex, the operation is impossible.") VT09002 = errorWithState("VT09002", vtrpcpb.Code_FAILED_PRECONDITION, InnodbReadOnly, "%s statement with a replica target", "This type of DML statement is not allowed on a replica target.") VT09003 = errorWithoutState("VT09003", vtrpcpb.Code_FAILED_PRECONDITION, "INSERT query does not have primary vindex column '%v' in the column list", "A vindex column is mandatory for the insert, please provide one.") @@ -123,6 +125,7 @@ var ( VT05006, VT05007, VT06001, + VT07001, VT09001, VT09002, VT09003, diff --git a/go/vt/vterrors/state.go b/go/vt/vterrors/state.go index 609ab6fbd1b..22ac5c06b8c 100644 --- a/go/vt/vterrors/state.go +++ b/go/vt/vterrors/state.go @@ -81,6 +81,7 @@ const ( // permission denied AccessDeniedError + KillDeniedError // server not available ServerNotAvailable diff --git a/go/vt/vtexplain/vtexplain_vtgate.go b/go/vt/vtexplain/vtexplain_vtgate.go index 676e9757266..682919e5569 100644 --- a/go/vt/vtexplain/vtexplain_vtgate.go +++ b/go/vt/vtexplain/vtexplain_vtgate.go @@ -213,7 +213,7 @@ func (vte *VTExplain) vtgateExecute(sql string) ([]*engine.Plan, map[string]*Tab // clear afterwards for the next run planCache := vte.vtgateExecutor.Plans() - _, err := vte.vtgateExecutor.Execute(context.Background(), "VtexplainExecute", vtgate.NewSafeSession(vte.vtgateSession), sql, nil) + _, err := vte.vtgateExecutor.Execute(context.Background(), nil, "VtexplainExecute", vtgate.NewSafeSession(vte.vtgateSession), sql, nil) if err != nil { for _, tc := range vte.explainTopo.TabletConns { tc.tabletQueries = nil diff --git a/go/vt/vtgate/autocommit_test.go b/go/vt/vtgate/autocommit_test.go index 7e07639a755..06a0ef46619 100644 --- a/go/vt/vtgate/autocommit_test.go +++ b/go/vt/vtgate/autocommit_test.go @@ -382,7 +382,7 @@ func TestAutocommitTransactionStarted(t *testing.T) { // single shard query - no savepoint needed sql := "update `user` set a = 2 where id = 1" - _, err := executor.Execute(context.Background(), "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) require.NoError(t, err) require.Len(t, sbc1.Queries, 1) require.Equal(t, sql, sbc1.Queries[0].Sql) @@ -393,7 +393,7 @@ func TestAutocommitTransactionStarted(t *testing.T) { // multi shard query - savepoint needed sql = "update `user` set a = 2 where id in (1, 4)" - _, err = executor.Execute(context.Background(), "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) require.NoError(t, err) require.Len(t, sbc1.Queries, 2) require.Contains(t, sbc1.Queries[0].Sql, "savepoint") @@ -412,7 +412,7 @@ func TestAutocommitDirectTarget(t *testing.T) { } sql := "insert into `simple`(val) values ('val')" - _, err := executor.Execute(context.Background(), "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) require.NoError(t, err) assertQueries(t, sbclookup, []*querypb.BoundQuery{{ @@ -433,7 +433,7 @@ func TestAutocommitDirectRangeTarget(t *testing.T) { } sql := "delete from sharded_user_msgs limit 1000" - _, err := executor.Execute(context.Background(), "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) require.NoError(t, err) assertQueries(t, sbc1, []*querypb.BoundQuery{{ @@ -450,5 +450,5 @@ func autocommitExec(executor *Executor, sql string) (*sqltypes.Result, error) { TransactionMode: vtgatepb.TransactionMode_MULTI, } - return executor.Execute(context.Background(), "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) + return executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) } diff --git a/go/vt/vtgate/bench_test.go b/go/vt/vtgate/bench_test.go index d33f8a9abe1..42f96735252 100644 --- a/go/vt/vtgate/bench_test.go +++ b/go/vt/vtgate/bench_test.go @@ -18,11 +18,10 @@ package vtgate import ( "bytes" + "context" "fmt" "testing" - "context" - topodatapb "vitess.io/vitess/go/vt/proto/topodata" vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" ) @@ -71,6 +70,7 @@ func BenchmarkWithNormalizer(b *testing.B) { for i := 0; i < b.N; i++ { _, _, err := rpcVTGate.Execute( context.Background(), + nil, &vtgatepb.Session{ TargetString: "@primary", Options: executeOptions, @@ -95,6 +95,7 @@ func BenchmarkWithoutNormalizer(b *testing.B) { for i := 0; i < b.N; i++ { _, _, err := rpcVTGate.Execute( context.Background(), + nil, &vtgatepb.Session{ TargetString: "@primary", Options: executeOptions, diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index a59aa49c525..c474188eb4b 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -42,6 +42,11 @@ import ( "vitess.io/vitess/go/vt/callerid" "vitess.io/vitess/go/vt/key" "vitess.io/vitess/go/vt/log" + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" + vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/srvtopo" @@ -55,12 +60,7 @@ import ( "vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext" "vitess.io/vitess/go/vt/vtgate/vindexes" "vitess.io/vitess/go/vt/vtgate/vschemaacl" - - binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" - querypb "vitess.io/vitess/go/vt/proto/query" - topodatapb "vitess.io/vitess/go/vt/proto/topodata" - vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" - vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/vtgate/vtgateservice" ) var ( @@ -191,14 +191,14 @@ func NewExecutor( } // Execute executes a non-streaming query. -func (e *Executor) Execute(ctx context.Context, method string, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable) (result *sqltypes.Result, err error) { +func (e *Executor) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, method string, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable) (result *sqltypes.Result, err error) { span, ctx := trace.NewSpan(ctx, "executor.Execute") span.Annotate("method", method) trace.AnnotateSQL(span, sqlparser.Preview(sql)) defer span.Finish() logStats := logstats.NewLogStats(ctx, method, sql, safeSession.GetSessionUUID(), bindVars) - stmtType, result, err := e.execute(ctx, safeSession, sql, bindVars, logStats) + stmtType, result, err := e.execute(ctx, mysqlCtx, safeSession, sql, bindVars, logStats) logStats.Error = err if result == nil { saveSessionStats(safeSession, stmtType, 0, 0, 0, err) @@ -244,6 +244,7 @@ func (s *streaminResultReceiver) storeResultStats(typ sqlparser.StatementType, q // StreamExecute executes a streaming query. func (e *Executor) StreamExecute( ctx context.Context, + mysqlCtx vtgateservice.MySQLConnection, method string, safeSession *SafeSession, sql string, @@ -334,7 +335,7 @@ func (e *Executor) StreamExecute( return err } - err = e.newExecute(ctx, safeSession, sql, bindVars, logStats, resultHandler, srr.storeResultStats) + err = e.newExecute(ctx, mysqlCtx, safeSession, sql, bindVars, logStats, resultHandler, srr.storeResultStats) logStats.Error = err saveSessionStats(safeSession, srr.stmtType, srr.rowsAffected, srr.insertID, srr.rowsReturned, err) @@ -381,11 +382,11 @@ func saveSessionStats(safeSession *SafeSession, stmtType sqlparser.StatementType } } -func (e *Executor) execute(ctx context.Context, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) (sqlparser.StatementType, *sqltypes.Result, error) { +func (e *Executor) execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) (sqlparser.StatementType, *sqltypes.Result, error) { var err error var qr *sqltypes.Result var stmtType sqlparser.StatementType - err = e.newExecute(ctx, safeSession, sql, bindVars, logStats, func(ctx context.Context, plan *engine.Plan, vc *vcursorImpl, bindVars map[string]*querypb.BindVariable, time time.Time) error { + err = e.newExecute(ctx, mysqlCtx, safeSession, sql, bindVars, logStats, func(ctx context.Context, plan *engine.Plan, vc *vcursorImpl, bindVars map[string]*querypb.BindVariable, time time.Time) error { stmtType = plan.Type qr, err = e.executePlan(ctx, safeSession, plan, vc, bindVars, logStats, time) return err @@ -627,6 +628,36 @@ func (e *Executor) executeSPInAllSessions(ctx context.Context, safeSession *Safe return qr, nil } +// handleKill executed the kill statement. +func (e *Executor) handleKill(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, stmt sqlparser.Statement, logStats *logstats.LogStats) (result *sqltypes.Result, err error) { + execStart := time.Now() + logStats.PlanTime = execStart.Sub(logStats.StartTime) + e.updateQueryCounts("Kill", "", "", 0) + defer func() { + logStats.ExecuteTime = time.Since(execStart) + }() + + if !allowKillStmt { + return nil, vterrors.VT07001("kill statement execution not permitted.") + } + + if mysqlCtx == nil { + return nil, vterrors.VT12001("kill statement works with access through mysql protocol") + } + + killStmt := stmt.(*sqlparser.Kill) + switch killStmt.Type { + case sqlparser.QueryType: + err = mysqlCtx.KillQuery(uint32(killStmt.ProcesslistID)) + default: + err = mysqlCtx.KillConnection(ctx, uint32(killStmt.ProcesslistID)) + } + if err != nil { + return nil, err + } + return &sqltypes.Result{}, nil +} + // CloseSession releases the current connection, which rollbacks open transactions and closes reserved connections. // It is called then the MySQL servers closes the connection to its client. func (e *Executor) CloseSession(ctx context.Context, safeSession *SafeSession) error { @@ -1269,7 +1300,7 @@ func (e *Executor) prepare(ctx context.Context, safeSession *SafeSession, sql st case sqlparser.StmtSelect, sqlparser.StmtShow: return e.handlePrepare(ctx, safeSession, sql, bindVars, logStats) case sqlparser.StmtDDL, sqlparser.StmtBegin, sqlparser.StmtCommit, sqlparser.StmtRollback, sqlparser.StmtSet, sqlparser.StmtInsert, sqlparser.StmtReplace, sqlparser.StmtUpdate, sqlparser.StmtDelete, - sqlparser.StmtUse, sqlparser.StmtOther, sqlparser.StmtComment, sqlparser.StmtExplain, sqlparser.StmtFlush: + sqlparser.StmtUse, sqlparser.StmtOther, sqlparser.StmtComment, sqlparser.StmtExplain, sqlparser.StmtFlush, sqlparser.StmtKill: return nil, nil } return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] unrecognized prepare statement: %s", sql) diff --git a/go/vt/vtgate/executor_ddl_test.go b/go/vt/vtgate/executor_ddl_test.go index 951e25f2896..7948f1b6208 100644 --- a/go/vt/vtgate/executor_ddl_test.go +++ b/go/vt/vtgate/executor_ddl_test.go @@ -59,7 +59,7 @@ func TestDDLFlags(t *testing.T) { t.Run(fmt.Sprintf("%s-%v-%v", testcase.sql, testcase.enableDirectDDL, testcase.enableOnlineDDL), func(t *testing.T) { enableDirectDDL = testcase.enableDirectDDL enableOnlineDDL = testcase.enableOnlineDDL - _, err := executor.Execute(ctx, "TestDDLFlags", session, testcase.sql, nil) + _, err := executor.Execute(ctx, nil, "TestDDLFlags", session, testcase.sql, nil) if testcase.wantErr { require.EqualError(t, err, testcase.err) } else { diff --git a/go/vt/vtgate/executor_dml_test.go b/go/vt/vtgate/executor_dml_test.go index 4ccca009dcf..d61b419d063 100644 --- a/go/vt/vtgate/executor_dml_test.go +++ b/go/vt/vtgate/executor_dml_test.go @@ -1888,6 +1888,7 @@ func TestInsertPartialFail1(t *testing.T) { _, err := executor.Execute( context.Background(), + nil, "TestExecute", NewSafeSession(&vtgatepb.Session{InTransaction: true}), "insert into user(id, v, name) values (1, 2, 'myname')", @@ -1908,6 +1909,7 @@ func TestInsertPartialFail2(t *testing.T) { safeSession := NewSafeSession(&vtgatepb.Session{InTransaction: true}) _, err := executor.Execute( context.Background(), + nil, "TestExecute", safeSession, "insert into user(id, v, name) values (1, 2, 'myname')", @@ -2456,7 +2458,7 @@ func TestReservedConnDML(t *testing.T) { ctx := context.Background() session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true}) - _, err := executor.Execute(ctx, "TestReservedConnDML", session, "use "+KsTestUnsharded, nil) + _, err := executor.Execute(ctx, nil, "TestReservedConnDML", session, "use "+KsTestUnsharded, nil) require.NoError(t, err) wantQueries := []*querypb.BoundQuery{ @@ -2465,24 +2467,24 @@ func TestReservedConnDML(t *testing.T) { sbc.SetResults([]*sqltypes.Result{ sqltypes.MakeTestResult(sqltypes.MakeTestFields("id", "int64"), "1"), }) - _, err = executor.Execute(ctx, "TestReservedConnDML", session, "set default_week_format = 1", nil) + _, err = executor.Execute(ctx, nil, "TestReservedConnDML", session, "set default_week_format = 1", nil) require.NoError(t, err) assertQueries(t, sbc, wantQueries) - _, err = executor.Execute(ctx, "TestReservedConnDML", session, "begin", nil) + _, err = executor.Execute(ctx, nil, "TestReservedConnDML", session, "begin", nil) require.NoError(t, err) wantQueries = append(wantQueries, &querypb.BoundQuery{Sql: "set default_week_format = 1", BindVariables: map[string]*querypb.BindVariable{}}, &querypb.BoundQuery{Sql: "insert into `simple`() values ()", BindVariables: map[string]*querypb.BindVariable{}}) - _, err = executor.Execute(ctx, "TestReservedConnDML", session, "insert into `simple`() values ()", nil) + _, err = executor.Execute(ctx, nil, "TestReservedConnDML", session, "insert into `simple`() values ()", nil) require.NoError(t, err) assertQueries(t, sbc, wantQueries) - _, err = executor.Execute(ctx, "TestReservedConnDML", session, "commit", nil) + _, err = executor.Execute(ctx, nil, "TestReservedConnDML", session, "commit", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestReservedConnDML", session, "begin", nil) + _, err = executor.Execute(ctx, nil, "TestReservedConnDML", session, "begin", nil) require.NoError(t, err) sbc.EphemeralShardErr = mysql.NewSQLError(mysql.CRServerGone, mysql.SSNetError, "connection gone") @@ -2490,11 +2492,11 @@ func TestReservedConnDML(t *testing.T) { wantQueries = append(wantQueries, &querypb.BoundQuery{Sql: "set default_week_format = 1", BindVariables: map[string]*querypb.BindVariable{}}, &querypb.BoundQuery{Sql: "insert into `simple`() values ()", BindVariables: map[string]*querypb.BindVariable{}}) - _, err = executor.Execute(ctx, "TestReservedConnDML", session, "insert into `simple`() values ()", nil) + _, err = executor.Execute(ctx, nil, "TestReservedConnDML", session, "insert into `simple`() values ()", nil) require.NoError(t, err) assertQueries(t, sbc, wantQueries) - _, err = executor.Execute(ctx, "TestReservedConnDML", session, "commit", nil) + _, err = executor.Execute(ctx, nil, "TestReservedConnDML", session, "commit", nil) require.NoError(t, err) } @@ -2567,7 +2569,7 @@ func TestStreamingDML(t *testing.T) { for _, tcase := range tcases { sbc.Queries = nil sbc.SetResults([]*sqltypes.Result{tcase.result}) - err := executor.StreamExecute(ctx, method, session, tcase.query, nil, func(result *sqltypes.Result) error { + err := executor.StreamExecute(ctx, nil, method, session, tcase.query, nil, func(result *sqltypes.Result) error { qr = result return nil }) @@ -2761,10 +2763,10 @@ func TestInsertSelectFromDual(t *testing.T) { sbc2.Queries = nil sbclookup.Queries = nil wQuery := fmt.Sprintf("set @@workload = %s", workload) - _, err := executor.Execute(context.Background(), "TestInsertSelect", session, wQuery, nil) + _, err := executor.Execute(context.Background(), nil, "TestInsertSelect", session, wQuery, nil) require.NoError(t, err) - _, err = executor.Execute(context.Background(), "TestInsertSelect", session, query, nil) + _, err = executor.Execute(context.Background(), nil, "TestInsertSelect", session, query, nil) require.NoError(t, err) assertQueries(t, sbc1, wantQueries) @@ -2822,10 +2824,10 @@ func TestInsertSelectFromTable(t *testing.T) { sbc2.Queries = nil sbclookup.Queries = nil wQuery := fmt.Sprintf("set @@workload = %s", workload) - _, err := executor.Execute(context.Background(), "TestInsertSelect", session, wQuery, nil) + _, err := executor.Execute(context.Background(), nil, "TestInsertSelect", session, wQuery, nil) require.NoError(t, err) - _, err = executor.Execute(context.Background(), "TestInsertSelect", session, query, nil) + _, err = executor.Execute(context.Background(), nil, "TestInsertSelect", session, query, nil) require.NoError(t, err) assertQueries(t, sbc1, wantQueries) diff --git a/go/vt/vtgate/executor_framework_test.go b/go/vt/vtgate/executor_framework_test.go index dc9f7412375..7f4c2dcfe97 100644 --- a/go/vt/vtgate/executor_framework_test.go +++ b/go/vt/vtgate/executor_framework_test.go @@ -238,6 +238,7 @@ func createCustomExecutorSetValues(vschema string, values []*sqltypes.Result) (e func executorExecSession(executor *Executor, sql string, bv map[string]*querypb.BindVariable, session *vtgatepb.Session) (*sqltypes.Result, error) { return executor.Execute( context.Background(), + nil, "TestExecute", NewSafeSession(session), sql, @@ -261,6 +262,7 @@ func executorStream(executor *Executor, sql string) (qr *sqltypes.Result, err er results := make(chan *sqltypes.Result, 100) err = executor.StreamExecute( context.Background(), + nil, "TestExecuteStream", NewSafeSession(nil), sql, diff --git a/go/vt/vtgate/executor_scatter_stats_test.go b/go/vt/vtgate/executor_scatter_stats_test.go index 920429ef673..59eba522bb8 100644 --- a/go/vt/vtgate/executor_scatter_stats_test.go +++ b/go/vt/vtgate/executor_scatter_stats_test.go @@ -30,7 +30,7 @@ func TestScatterStatsWithNoScatterQuery(t *testing.T) { executor, _, _, _ := createExecutorEnv() session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"}) - _, err := executor.Execute(context.Background(), "TestExecutorResultsExceeded", session, "select * from main1", nil) + _, err := executor.Execute(context.Background(), nil, "TestExecutorResultsExceeded", session, "select * from main1", nil) require.NoError(t, err) result, err := executor.gatherScatterStats() @@ -42,7 +42,7 @@ func TestScatterStatsWithSingleScatterQuery(t *testing.T) { executor, _, _, _ := createExecutorEnv() session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"}) - _, err := executor.Execute(context.Background(), "TestExecutorResultsExceeded", session, "select * from user", nil) + _, err := executor.Execute(context.Background(), nil, "TestExecutorResultsExceeded", session, "select * from user", nil) require.NoError(t, err) result, err := executor.gatherScatterStats() @@ -54,17 +54,17 @@ func TestScatterStatsHttpWriting(t *testing.T) { executor, _, _, _ := createExecutorEnv() session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"}) - _, err := executor.Execute(context.Background(), "TestExecutorResultsExceeded", session, "select * from user", nil) + _, err := executor.Execute(context.Background(), nil, "TestExecutorResultsExceeded", session, "select * from user", nil) require.NoError(t, err) - _, err = executor.Execute(context.Background(), "TestExecutorResultsExceeded", session, "select * from user where Id = 15", nil) + _, err = executor.Execute(context.Background(), nil, "TestExecutorResultsExceeded", session, "select * from user where Id = 15", nil) require.NoError(t, err) - _, err = executor.Execute(context.Background(), "TestExecutorResultsExceeded", session, "select * from user where Id > 15", nil) + _, err = executor.Execute(context.Background(), nil, "TestExecutorResultsExceeded", session, "select * from user where Id > 15", nil) require.NoError(t, err) query4 := "select * from user as u1 join user as u2 on u1.Id = u2.Id" - _, err = executor.Execute(context.Background(), "TestExecutorResultsExceeded", session, query4, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecutorResultsExceeded", session, query4, nil) require.NoError(t, err) executor.plans.Wait() diff --git a/go/vt/vtgate/executor_select_test.go b/go/vt/vtgate/executor_select_test.go index ed5e72fd04c..d5136711510 100644 --- a/go/vt/vtgate/executor_select_test.go +++ b/go/vt/vtgate/executor_select_test.go @@ -61,7 +61,7 @@ func TestSelectNext(t *testing.T) { // Autocommit session := NewAutocommitSession(&vtgatepb.Session{}) - _, err := executor.Execute(context.Background(), "TestSelectNext", session, query, bv) + _, err := executor.Execute(context.Background(), nil, "TestSelectNext", session, query, bv) require.NoError(t, err) utils.MustMatch(t, wantQueries, sbclookup.Queries) @@ -72,7 +72,7 @@ func TestSelectNext(t *testing.T) { // Txn session = NewAutocommitSession(&vtgatepb.Session{}) session.Session.InTransaction = true - _, err = executor.Execute(context.Background(), "TestSelectNext", session, query, bv) + _, err = executor.Execute(context.Background(), nil, "TestSelectNext", session, query, bv) require.NoError(t, err) utils.MustMatch(t, wantQueries, sbclookup.Queries) @@ -83,7 +83,7 @@ func TestSelectNext(t *testing.T) { // Reserve session = NewAutocommitSession(&vtgatepb.Session{}) session.Session.InReservedConn = true - _, err = executor.Execute(context.Background(), "TestSelectNext", session, query, bv) + _, err = executor.Execute(context.Background(), nil, "TestSelectNext", session, query, bv) require.NoError(t, err) utils.MustMatch(t, wantQueries, sbclookup.Queries) @@ -95,7 +95,7 @@ func TestSelectNext(t *testing.T) { session = NewAutocommitSession(&vtgatepb.Session{}) session.Session.InReservedConn = true session.Session.InTransaction = true - _, err = executor.Execute(context.Background(), "TestSelectNext", session, query, bv) + _, err = executor.Execute(context.Background(), nil, "TestSelectNext", session, query, bv) require.NoError(t, err) utils.MustMatch(t, wantQueries, sbclookup.Queries) @@ -107,7 +107,7 @@ func TestSelectDBA(t *testing.T) { executor, sbc1, _, _ := createExecutorEnv() query := "select * from INFORMATION_SCHEMA.foo" - _, err := executor.Execute(context.Background(), "TestSelectDBA", + _, err := executor.Execute(context.Background(), nil, "TestSelectDBA", NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{}, ) @@ -117,7 +117,7 @@ func TestSelectDBA(t *testing.T) { sbc1.Queries = nil query = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES ist WHERE ist.table_schema = 'performance_schema' AND ist.table_name = 'foo'" - _, err = executor.Execute(context.Background(), "TestSelectDBA", + _, err = executor.Execute(context.Background(), nil, "TestSelectDBA", NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{}, ) @@ -131,7 +131,7 @@ func TestSelectDBA(t *testing.T) { sbc1.Queries = nil query = "select 1 from information_schema.table_constraints where constraint_schema = 'vt_ks' and table_name = 'user'" - _, err = executor.Execute(context.Background(), "TestSelectDBA", + _, err = executor.Execute(context.Background(), nil, "TestSelectDBA", NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{}, ) @@ -145,7 +145,7 @@ func TestSelectDBA(t *testing.T) { sbc1.Queries = nil query = "select 1 from information_schema.table_constraints where constraint_schema = 'vt_ks'" - _, err = executor.Execute(context.Background(), "TestSelectDBA", + _, err = executor.Execute(context.Background(), nil, "TestSelectDBA", NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{}, ) @@ -177,10 +177,10 @@ func TestSystemVariablesMySQLBelow80(t *testing.T) { }}, }}) - _, err := executor.Execute(context.Background(), "TestSetStmt", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestSetStmt", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) require.NoError(t, err) - _, err = executor.Execute(context.Background(), "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.True(t, session.InReservedConn()) @@ -215,10 +215,10 @@ func TestSystemVariablesWithSetVarDisabled(t *testing.T) { }}, }}) - _, err := executor.Execute(context.Background(), "TestSetStmt", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestSetStmt", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) require.NoError(t, err) - _, err = executor.Execute(context.Background(), "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.True(t, session.InReservedConn()) @@ -239,10 +239,10 @@ func TestSetSystemVariablesTx(t *testing.T) { session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: "TestExecutor"}) - _, err := executor.Execute(context.Background(), "TestBegin", session, "begin", map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestBegin", session, "begin", map[string]*querypb.BindVariable{}) require.NoError(t, err) - _, err = executor.Execute(context.Background(), "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.NotZero(t, session.ShardSessions) @@ -257,14 +257,14 @@ func TestSetSystemVariablesTx(t *testing.T) { }}, }}) - _, err = executor.Execute(context.Background(), "TestSetStmt", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSetStmt", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.False(t, session.InReservedConn()) - _, err = executor.Execute(context.Background(), "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) require.NoError(t, err) - _, err = executor.Execute(context.Background(), "TestCommit", session, "commit", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestCommit", session, "commit", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.False(t, session.InReservedConn()) @@ -299,10 +299,10 @@ func TestSetSystemVariables(t *testing.T) { sqltypes.NewVarChar("only_full_group_by"), }}, }}) - _, err := executor.Execute(context.Background(), "TestSetStmt", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestSetStmt", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) require.NoError(t, err) - _, err = executor.Execute(context.Background(), "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.False(t, session.InReservedConn()) wantQueries := []*querypb.BoundQuery{ @@ -314,7 +314,7 @@ func TestSetSystemVariables(t *testing.T) { // Execute a select with a comment that needs a query hint - _, err = executor.Execute(context.Background(), "TestSelect", session, "select /* comment */ 1 from information_schema.table", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSelect", session, "select /* comment */ 1 from information_schema.table", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.False(t, session.InReservedConn()) wantQueries = []*querypb.BoundQuery{ @@ -331,7 +331,7 @@ func TestSetSystemVariables(t *testing.T) { sqltypes.NewVarChar("0"), }}, }}) - _, err = executor.Execute(context.Background(), "TestSetStmt", session, "set @@sql_safe_updates = 0", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSetStmt", session, "set @@sql_safe_updates = 0", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.False(t, session.InReservedConn()) wantQueries = []*querypb.BoundQuery{ @@ -340,7 +340,7 @@ func TestSetSystemVariables(t *testing.T) { utils.MustMatch(t, wantQueries, lookup.Queries) lookup.Queries = nil - _, err = executor.Execute(context.Background(), "TestSetStmt", session, "set @var = @@sql_mode", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSetStmt", session, "set @var = @@sql_mode", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.False(t, session.InReservedConn()) require.Nil(t, lookup.Queries) @@ -354,7 +354,7 @@ func TestSetSystemVariables(t *testing.T) { sqltypes.NewVarChar("4"), }}, }}) - _, err = executor.Execute(context.Background(), "TestSetStmt", session, "set @x = @@sql_mode, @y = @@max_tmp_tables", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSetStmt", session, "set @x = @@sql_mode, @y = @@max_tmp_tables", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.False(t, session.InReservedConn()) wantQueries = []*querypb.BoundQuery{ @@ -377,11 +377,11 @@ func TestSetSystemVariables(t *testing.T) { sqltypes.NewVarChar("1"), }}, }}) - _, err = executor.Execute(context.Background(), "TestSetStmt", session, "set @@max_tmp_tables = 1", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSetStmt", session, "set @@max_tmp_tables = 1", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.True(t, session.InReservedConn()) - _, err = executor.Execute(context.Background(), "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSelect", session, "select 1 from information_schema.table", map[string]*querypb.BindVariable{}) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{ @@ -408,10 +408,10 @@ func TestSetSystemVariablesWithReservedConnection(t *testing.T) { sqltypes.NewVarChar(""), }}, }}) - _, err := executor.Execute(context.Background(), "TestSetStmt", session, "set @@sql_mode = ''", map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestSetStmt", session, "set @@sql_mode = ''", map[string]*querypb.BindVariable{}) require.NoError(t, err) - _, err = executor.Execute(context.Background(), "TestSelect", session, "select age, city from user group by age", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSelect", session, "select age, city from user group by age", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.True(t, session.InReservedConn()) wantQueries := []*querypb.BoundQuery{ @@ -421,7 +421,7 @@ func TestSetSystemVariablesWithReservedConnection(t *testing.T) { } utils.MustMatch(t, wantQueries, sbc1.Queries) - _, err = executor.Execute(context.Background(), "TestSelect", session, "select age, city+1 from user group by age", map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSelect", session, "select age, city+1 from user group by age", map[string]*querypb.BindVariable{}) require.NoError(t, err) require.True(t, session.InReservedConn()) wantQueries = []*querypb.BoundQuery{ @@ -442,7 +442,7 @@ func TestCreateTableValidTimestamp(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor", SystemVariables: map[string]string{"sql_mode": "ALLOW_INVALID_DATES"}}) query := "create table aa(t timestamp default 0)" - _, err := executor.Execute(context.Background(), "TestSelect", session, query, map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestSelect", session, query, map[string]*querypb.BindVariable{}) require.NoError(t, err) require.True(t, session.InReservedConn()) @@ -460,7 +460,7 @@ func TestGen4SelectDBA(t *testing.T) { executor.pv = querypb.ExecuteOptions_Gen4 query := "select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS" - _, err := executor.Execute(context.Background(), "TestSelectDBA", + _, err := executor.Execute(context.Background(), nil, "TestSelectDBA", NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{}, ) @@ -471,7 +471,7 @@ func TestGen4SelectDBA(t *testing.T) { sbc1.Queries = nil query = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES ist WHERE ist.table_schema = 'performance_schema' AND ist.table_name = 'foo'" - _, err = executor.Execute(context.Background(), "TestSelectDBA", + _, err = executor.Execute(context.Background(), nil, "TestSelectDBA", NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{}, ) @@ -487,7 +487,7 @@ func TestGen4SelectDBA(t *testing.T) { sbc1.Queries = nil query = "select 1 from information_schema.table_constraints where constraint_schema = 'vt_ks' and table_name = 'user'" - _, err = executor.Execute(context.Background(), "TestSelectDBA", + _, err = executor.Execute(context.Background(), nil, "TestSelectDBA", NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{}, ) @@ -504,10 +504,7 @@ func TestGen4SelectDBA(t *testing.T) { sbc1.Queries = nil query = "select 1 from information_schema.table_constraints where constraint_schema = 'vt_ks'" - _, err = executor.Execute(context.Background(), "TestSelectDBA", - NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), - query, map[string]*querypb.BindVariable{}, - ) + _, err = executor.Execute(context.Background(), nil, "TestSelectDBA", NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{}) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{{Sql: "select :vtg1 /* INT64 */ from information_schema.table_constraints where constraint_schema = :__vtschemaname /* VARCHAR */", BindVariables: map[string]*querypb.BindVariable{ @@ -519,7 +516,7 @@ func TestGen4SelectDBA(t *testing.T) { sbc1.Queries = nil query = "select t.table_schema,t.table_name,c.column_name,c.column_type from tables t join columns c on c.table_schema = t.table_schema and c.table_name = t.table_name where t.table_schema = 'TestExecutor' and c.table_schema = 'TestExecutor' order by t.table_schema,t.table_name,c.column_name" - _, err = executor.Execute(context.Background(), "TestSelectDBA", + _, err = executor.Execute(context.Background(), nil, "TestSelectDBA", NewSafeSession(&vtgatepb.Session{TargetString: "information_schema"}), query, map[string]*querypb.BindVariable{}, ) @@ -623,6 +620,7 @@ func TestStreamBuffering(t *testing.T) { var results []*sqltypes.Result err := executor.StreamExecute( context.Background(), + nil, "TestStreamBuffering", NewSafeSession(primarySession), "select id from music_user_map where id = 1", @@ -690,6 +688,7 @@ func TestStreamLimitOffset(t *testing.T) { results := make(chan *sqltypes.Result, 10) err := executor.StreamExecute( context.Background(), + nil, "TestStreamLimitOffset", NewSafeSession(primarySession), "select id, textcol from user order by id limit 2 offset 2", @@ -1029,6 +1028,7 @@ func TestSelectDatabase(t *testing.T) { session.TargetString = "TestExecutor@primary" result, err := executor.Execute( context.Background(), + nil, "TestExecute", session, sql, @@ -3100,7 +3100,7 @@ func TestGen4SelectStraightJoin(t *testing.T) { executor.pv = querypb.ExecuteOptions_Gen4 session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) query := "select u.id from user u straight_join user2 u2 on u.id = u2.id" - _, err := executor.Execute(context.Background(), + _, err := executor.Execute(context.Background(), nil, "TestGen4SelectStraightJoin", session, query, map[string]*querypb.BindVariable{}, @@ -3129,11 +3129,7 @@ func TestGen4MultiColumnVindexEqual(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) query := "select * from user_region where cola = 1 and colb = 2" - _, err := executor.Execute(context.Background(), - "TestGen4MultiColumnVindex", - session, - query, map[string]*querypb.BindVariable{}, - ) + _, err := executor.Execute(context.Background(), nil, "TestGen4MultiColumnVindex", session, query, map[string]*querypb.BindVariable{}) require.NoError(t, err) wantQueries := []*querypb.BoundQuery{ { @@ -3150,11 +3146,7 @@ func TestGen4MultiColumnVindexEqual(t *testing.T) { sbc1.Queries = nil query = "select * from user_region where cola = 17984 and colb = 1" - _, err = executor.Execute(context.Background(), - "TestGen4MultiColumnVindex", - session, - query, map[string]*querypb.BindVariable{}, - ) + _, err = executor.Execute(context.Background(), nil, "TestGen4MultiColumnVindex", session, query, map[string]*querypb.BindVariable{}) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{ { @@ -3176,11 +3168,7 @@ func TestGen4MultiColumnVindexIn(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) query := "select * from user_region where cola IN (1,17984) and colb IN (2,3,4)" - _, err := executor.Execute(context.Background(), - "TestGen4MultiColumnVindex", - session, - query, map[string]*querypb.BindVariable{}, - ) + _, err := executor.Execute(context.Background(), nil, "TestGen4MultiColumnVindex", session, query, map[string]*querypb.BindVariable{}) require.NoError(t, err) bv1, _ := sqltypes.BuildBindVariable([]int64{1}) bv2, _ := sqltypes.BuildBindVariable([]int64{17984}) @@ -3219,11 +3207,7 @@ func TestGen4MultiColMixedColComparision(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) query := "select * from user_region where colb = 2 and cola IN (1,17984)" - _, err := executor.Execute(context.Background(), - "TestGen4MultiColMixedColComparision", - session, - query, map[string]*querypb.BindVariable{}, - ) + _, err := executor.Execute(context.Background(), nil, "TestGen4MultiColMixedColComparision", session, query, map[string]*querypb.BindVariable{}) require.NoError(t, err) bvtg1 := sqltypes.Int64BindVariable(2) bvtg2, _ := sqltypes.BuildBindVariable([]int64{1, 17984}) @@ -3260,11 +3244,7 @@ func TestGen4MultiColBestVindexSel(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) query := "select * from user_region where colb = 2 and cola IN (1,17984) and cola = 1" - _, err := executor.Execute(context.Background(), - "TestGen4MultiColBestVindexSel", - session, - query, map[string]*querypb.BindVariable{}, - ) + _, err := executor.Execute(context.Background(), nil, "TestGen4MultiColBestVindexSel", session, query, map[string]*querypb.BindVariable{}) require.NoError(t, err) bvtg2, _ := sqltypes.BuildBindVariable([]int64{1, 17984}) wantQueries := []*querypb.BoundQuery{ @@ -3284,11 +3264,7 @@ func TestGen4MultiColBestVindexSel(t *testing.T) { sbc1.Queries = nil query = "select * from user_region where colb in (10,20) and cola IN (1,17984) and cola = 1 and colb = 2" - _, err = executor.Execute(context.Background(), - "TestGen4MultiColBestVindexSel", - session, - query, map[string]*querypb.BindVariable{}, - ) + _, err = executor.Execute(context.Background(), nil, "TestGen4MultiColBestVindexSel", session, query, map[string]*querypb.BindVariable{}) require.NoError(t, err) bvtg1, _ := sqltypes.BuildBindVariable([]int64{10, 20}) @@ -3314,11 +3290,7 @@ func TestGen4MultiColMultiEqual(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) query := "select * from user_region where (cola,colb) in ((17984,2),(17984,3))" - _, err := executor.Execute(context.Background(), - "TestGen4MultiColMultiEqual", - session, - query, map[string]*querypb.BindVariable{}, - ) + _, err := executor.Execute(context.Background(), nil, "TestGen4MultiColMultiEqual", session, query, map[string]*querypb.BindVariable{}) require.NoError(t, err) wantQueries := []*querypb.BoundQuery{ { @@ -3476,12 +3448,7 @@ func TestRegionRange(t *testing.T) { for _, tcase := range tcases { t.Run(strconv.Itoa(tcase.regionID), func(t *testing.T) { sql := fmt.Sprintf("select * from user_region where cola = %d", tcase.regionID) - _, err := executor.Execute( - context.Background(), - "TestRegionRange", - NewAutocommitSession(&vtgatepb.Session{}), - sql, - nil) + _, err := executor.Execute(context.Background(), nil, "TestRegionRange", NewAutocommitSession(&vtgatepb.Session{}), sql, nil) require.NoError(t, err) count := 0 for _, sbc := range conns { @@ -3532,7 +3499,7 @@ func TestMultiCol(t *testing.T) { for _, tcase := range tcases { t.Run(fmt.Sprintf("%d_%d_%d", tcase.cola, tcase.colb, tcase.colc), func(t *testing.T) { sql := fmt.Sprintf("select * from multicoltbl where cola = %d and colb = %d and colc = '%d'", tcase.cola, tcase.colb, tcase.colc) - _, err := executor.Execute(ctx, "TestMultiCol", session, sql, nil) + _, err := executor.Execute(ctx, nil, "TestMultiCol", session, sql, nil) require.NoError(t, err) var shards []string for _, sbc := range conns { @@ -3620,7 +3587,7 @@ func TestMultiColPartial(t *testing.T) { for _, tcase := range tcases { t.Run(tcase.where, func(t *testing.T) { sql := fmt.Sprintf("select * from multicoltbl where %s", tcase.where) - _, err := executor.Execute(ctx, "TestMultiCol", session, sql, nil) + _, err := executor.Execute(ctx, nil, "TestMultiCol", session, sql, nil) require.NoError(t, err) var shards []string for _, sbc := range conns { @@ -3886,8 +3853,7 @@ func TestSelectAggregationRandom(t *testing.T) { executor.pv = querypb.ExecuteOptions_Gen4 session := NewAutocommitSession(&vtgatepb.Session{}) - rs, err := executor.Execute(context.Background(), "TestSelectCFC", session, - "select /*vt+ PLANNER=gen4 */ A.a, A.b, (A.a / A.b) as c from (select sum(a) as a, sum(b) as b from user) A", nil) + rs, err := executor.Execute(context.Background(), nil, "TestSelectCFC", session, "select /*vt+ PLANNER=gen4 */ A.a, A.b, (A.a / A.b) as c from (select sum(a) as a, sum(b) as b from user) A", nil) require.NoError(t, err) assert.Equal(t, `[[DECIMAL(10) DECIMAL(1) DECIMAL(10.0000)]]`, fmt.Sprintf("%v", rs.Rows)) } @@ -3897,13 +3863,11 @@ func TestSelectHexAndBit(t *testing.T) { executor.normalize = true session := NewAutocommitSession(&vtgatepb.Session{}) - qr, err := executor.Execute(context.Background(), "TestSelectHexAndBit", session, - "select 0b1001, b'1001', 0x9, x'09'", nil) + qr, err := executor.Execute(context.Background(), nil, "TestSelectHexAndBit", session, "select 0b1001, b'1001', 0x9, x'09'", nil) require.NoError(t, err) require.Equal(t, `[[VARBINARY("\t") VARBINARY("\t") VARBINARY("\t") VARBINARY("\t")]]`, fmt.Sprintf("%v", qr.Rows)) - qr, err = executor.Execute(context.Background(), "TestSelectHexAndBit", session, - "select 1 + 0b1001, 1 + b'1001', 1 + 0x9, 1 + x'09'", nil) + qr, err = executor.Execute(context.Background(), nil, "TestSelectHexAndBit", session, "select 1 + 0b1001, 1 + b'1001', 1 + 0x9, 1 + x'09'", nil) require.NoError(t, err) require.Equal(t, `[[UINT64(10) UINT64(10) UINT64(10) UINT64(10)]]`, fmt.Sprintf("%v", qr.Rows)) } @@ -3915,8 +3879,7 @@ func TestSelectCFC(t *testing.T) { executor.normalize = true session := NewAutocommitSession(&vtgatepb.Session{}) - _, err := executor.Execute(context.Background(), "TestSelectCFC", session, - "select /*vt+ PLANNER=gen4 */ c2 from tbl_cfc where c1 like 'A%'", nil) + _, err := executor.Execute(context.Background(), nil, "TestSelectCFC", session, "select /*vt+ PLANNER=gen4 */ c2 from tbl_cfc where c1 like 'A%'", nil) require.NoError(t, err) timeout := time.After(10 * time.Second) @@ -3945,8 +3908,7 @@ func TestSelectView(t *testing.T) { executor.normalize = true session := NewAutocommitSession(&vtgatepb.Session{}) - _, err = executor.Execute(context.Background(), "TestSelectView", session, - "select * from user_details_view", nil) + _, err = executor.Execute(context.Background(), nil, "TestSelectView", session, "select * from user_details_view", nil) require.NoError(t, err) wantQueries := []*querypb.BoundQuery{{ Sql: "select * from (select `user`.id, user_extra.col from `user` join user_extra on `user`.id = user_extra.user_id) as user_details_view", @@ -3955,8 +3917,7 @@ func TestSelectView(t *testing.T) { utils.MustMatch(t, wantQueries, sbc.Queries) sbc.Queries = nil - _, err = executor.Execute(context.Background(), "TestSelectView", session, - "select * from user_details_view where id = 2", nil) + _, err = executor.Execute(context.Background(), nil, "TestSelectView", session, "select * from user_details_view where id = 2", nil) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{{ Sql: "select * from (select `user`.id, user_extra.col from `user` join user_extra on `user`.id = user_extra.user_id) as user_details_view where id = :id /* INT64 */", @@ -3967,8 +3928,7 @@ func TestSelectView(t *testing.T) { utils.MustMatch(t, wantQueries, sbc.Queries) sbc.Queries = nil - _, err = executor.Execute(context.Background(), "TestSelectView", session, - "select * from user_details_view where id in (1,2,3,4,5)", nil) + _, err = executor.Execute(context.Background(), nil, "TestSelectView", session, "select * from user_details_view where id in (1,2,3,4,5)", nil) require.NoError(t, err) bvtg1, _ := sqltypes.BuildBindVariable([]int64{1, 2, 3, 4, 5}) bvals, _ := sqltypes.BuildBindVariable([]int64{1, 2}) diff --git a/go/vt/vtgate/executor_set_test.go b/go/vt/vtgate/executor_set_test.go index ecdcf50c1bc..8e297aa98d8 100644 --- a/go/vt/vtgate/executor_set_test.go +++ b/go/vt/vtgate/executor_set_test.go @@ -270,7 +270,7 @@ func TestExecutorSet(t *testing.T) { for i, tcase := range testcases { t.Run(fmt.Sprintf("%d-%s", i, tcase.in), func(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{Autocommit: true}) - _, err := executorEnv.Execute(context.Background(), "TestExecute", session, tcase.in, nil) + _, err := executorEnv.Execute(context.Background(), nil, "TestExecute", session, tcase.in, nil) if tcase.err == "" { require.NoError(t, err) utils.MustMatch(t, tcase.out, session.Session, "new executor") @@ -370,12 +370,7 @@ func TestExecutorSetOp(t *testing.T) { session.TargetString = KsTestUnsharded session.EnableSystemSettings = !tcase.disallowResConn sbclookup.SetResults([]*sqltypes.Result{tcase.result}) - _, err := executor.Execute( - context.Background(), - "TestExecute", - session, - tcase.in, - nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", session, tcase.in, nil) require.NoError(t, err) utils.MustMatch(t, tcase.warning, session.Warnings, "") utils.MustMatch(t, tcase.sysVars, session.SystemVariables, "") @@ -388,7 +383,7 @@ func TestExecutorSetMetadata(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true}) set := "set @@vitess_metadata.app_keyspace_v1= '1'" - _, err := executor.Execute(context.Background(), "TestExecute", session, set, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", session, set, nil) assert.Equalf(t, vtrpcpb.Code_PERMISSION_DENIED, vterrors.Code(err), "expected error %v, got error: %v", vtrpcpb.Code_PERMISSION_DENIED, err) vschemaacl.AuthorizedDDLUsers = "%" @@ -400,11 +395,11 @@ func TestExecutorSetMetadata(t *testing.T) { session = NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true}) set = "set @@vitess_metadata.app_keyspace_v1= '1'" - _, err = executor.Execute(context.Background(), "TestExecute", session, set, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, set, nil) assert.NoError(t, err, "%s error: %v", set, err) show := `show vitess_metadata variables like 'app\\_keyspace\\_v_'` - result, err := executor.Execute(context.Background(), "TestExecute", session, show, nil) + result, err := executor.Execute(context.Background(), nil, "TestExecute", session, show, nil) assert.NoError(t, err) want := "1" @@ -413,11 +408,11 @@ func TestExecutorSetMetadata(t *testing.T) { // Update metadata set = "set @@vitess_metadata.app_keyspace_v2='2'" - _, err = executor.Execute(context.Background(), "TestExecute", session, set, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, set, nil) assert.NoError(t, err, "%s error: %v", set, err) show = `show vitess_metadata variables like 'app\\_keyspace\\_v%'` - gotqr, err := executor.Execute(context.Background(), "TestExecute", session, show, nil) + gotqr, err := executor.Execute(context.Background(), nil, "TestExecute", session, show, nil) assert.NoError(t, err) wantqr := &sqltypes.Result{ @@ -433,7 +428,7 @@ func TestExecutorSetMetadata(t *testing.T) { assert.ElementsMatch(t, wantqr.Rows, gotqr.Rows) show = "show vitess_metadata variables" - gotqr, err = executor.Execute(context.Background(), "TestExecute", session, show, nil) + gotqr, err = executor.Execute(context.Background(), nil, "TestExecute", session, show, nil) require.NoError(t, err) assert.Equal(t, wantqr.Fields, gotqr.Fields) @@ -460,7 +455,7 @@ func TestPlanExecutorSetUDV(t *testing.T) { for _, tcase := range testcases { t.Run(tcase.in, func(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{Autocommit: true}) - _, err := executor.Execute(context.Background(), "TestExecute", session, tcase.in, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", session, tcase.in, nil) if err != nil { require.EqualError(t, err, tcase.err) } else { @@ -519,7 +514,7 @@ func TestSetVar(t *testing.T) { sqltypes.MakeTestFields("orig|new", "varchar|varchar"), "|only_full_group_by")}) - _, err := executor.Execute(context.Background(), "TestSetVar", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestSetVar", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) require.NoError(t, err) tcases := []struct { @@ -541,7 +536,7 @@ func TestSetVar(t *testing.T) { // reset reserved conn need. session.SetReservedConn(false) - _, err = executor.Execute(context.Background(), "TestSetVar", session, tc.sql, map[string]*querypb.BindVariable{}) + _, err = executor.Execute(context.Background(), nil, "TestSetVar", session, tc.sql, map[string]*querypb.BindVariable{}) require.NoError(t, err) assert.Equal(t, tc.rc, session.InReservedConn()) }) @@ -567,11 +562,11 @@ func TestSetVarShowVariables(t *testing.T) { sqltypes.MakeTestResult(sqltypes.MakeTestFields("Variable_name|Value", "varchar|varchar"), "sql_mode|ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE")}) - _, err := executor.Execute(context.Background(), "TestSetVar", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) + _, err := executor.Execute(context.Background(), nil, "TestSetVar", session, "set @@sql_mode = only_full_group_by", map[string]*querypb.BindVariable{}) require.NoError(t, err) // this should return the updated value of sql_mode. - qr, err := executor.Execute(context.Background(), "TestSetVar", session, "show variables like 'sql_mode'", map[string]*querypb.BindVariable{}) + qr, err := executor.Execute(context.Background(), nil, "TestSetVar", session, "show variables like 'sql_mode'", map[string]*querypb.BindVariable{}) require.NoError(t, err) assert.False(t, session.InReservedConn(), "reserved connection should not be used") assert.Equal(t, `[[VARCHAR("sql_mode") VARCHAR("only_full_group_by")]]`, fmt.Sprintf("%v", qr.Rows)) @@ -614,7 +609,7 @@ func TestExecutorSetAndSelect(t *testing.T) { sqltypes.MakeTestResult(nil)}) // third one for new set query setQ := fmt.Sprintf("set %s = '%s'", tcase.sysVar, tcase.val) - _, err := e.Execute(context.Background(), "TestExecutorSetAndSelect", session, setQ, nil) + _, err := e.Execute(context.Background(), nil, "TestExecutorSetAndSelect", session, setQ, nil) require.NoError(t, err) } @@ -622,7 +617,7 @@ func TestExecutorSetAndSelect(t *testing.T) { // if the query reaches the shard, it will return REPEATABLE-READ isolation level. sbc.SetResults([]*sqltypes.Result{sqltypes.MakeTestResult(sqltypes.MakeTestFields(tcase.sysVar, "varchar"), "REPEATABLE-READ")}) - qr, err := e.Execute(context.Background(), "TestExecutorSetAndSelect", session, selectQ, nil) + qr, err := e.Execute(context.Background(), nil, "TestExecutorSetAndSelect", session, selectQ, nil) require.NoError(t, err) assert.Equal(t, tcase.exp, fmt.Sprintf("%v", qr.Rows)) }) diff --git a/go/vt/vtgate/executor_stream_test.go b/go/vt/vtgate/executor_stream_test.go index 8fea4ed985f..0581830992a 100644 --- a/go/vt/vtgate/executor_stream_test.go +++ b/go/vt/vtgate/executor_stream_test.go @@ -17,6 +17,7 @@ limitations under the License. package vtgate import ( + "context" "testing" "time" @@ -26,8 +27,6 @@ import ( "vitess.io/vitess/go/vt/discovery" topodatapb "vitess.io/vitess/go/vt/proto/topodata" - "context" - "github.com/stretchr/testify/require" "vitess.io/vitess/go/sqltypes" @@ -90,6 +89,7 @@ func executorStreamMessages(executor *Executor, sql string) (qr *sqltypes.Result defer cancel() err = executor.StreamExecute( ctx, + nil, "TestExecuteStream", NewSafeSession(primarySession), sql, diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index 0987a42df55..b874d2a7107 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -20,6 +20,7 @@ import ( "bytes" "context" "encoding/json" + "errors" "fmt" "net/http" "net/http/httptest" @@ -28,35 +29,29 @@ import ( "strings" "testing" + "github.com/google/go-cmp/cmp" "github.com/google/safehtml/template" - - "vitess.io/vitess/go/vt/vtgate/logstats" - + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "google.golang.org/protobuf/proto" "vitess.io/vitess/go/cache" - "vitess.io/vitess/go/test/utils" - "vitess.io/vitess/go/vt/vtgate/engine" - - "vitess.io/vitess/go/vt/topo" - - "github.com/google/go-cmp/cmp" - "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/test/utils" "vitess.io/vitess/go/vt/callerid" - "vitess.io/vitess/go/vt/sqlparser" - "vitess.io/vitess/go/vt/vtgate/vindexes" - "vitess.io/vitess/go/vt/vtgate/vschemaacl" - querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" vschemapb "vitess.io/vitess/go/vt/proto/vschema" vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/vtgate/engine" + "vitess.io/vitess/go/vt/vtgate/logstats" + "vitess.io/vitess/go/vt/vtgate/vindexes" + "vitess.io/vitess/go/vt/vtgate/vschemaacl" + "vitess.io/vitess/go/vt/vtgate/vtgateservice" ) func TestExecutorResultsExceeded(t *testing.T) { @@ -73,11 +68,11 @@ func TestExecutorResultsExceeded(t *testing.T) { result2 := sqltypes.MakeTestResult(sqltypes.MakeTestFields("col", "int64"), "1", "2", "3", "4") sbclookup.SetResults([]*sqltypes.Result{result1, result2}) - _, err := executor.Execute(ctx, "TestExecutorResultsExceeded", session, "select * from main1", nil) + _, err := executor.Execute(ctx, nil, "TestExecutorResultsExceeded", session, "select * from main1", nil) require.NoError(t, err) assert.Equal(t, initial, warnings.Counts()["ResultsExceeded"], "warnings count") - _, err = executor.Execute(ctx, "TestExecutorResultsExceeded", session, "select * from main1", nil) + _, err = executor.Execute(ctx, nil, "TestExecutorResultsExceeded", session, "select * from main1", nil) require.NoError(t, err) assert.Equal(t, initial+1, warnings.Counts()["ResultsExceeded"], "warnings count") } @@ -106,7 +101,7 @@ func TestExecutorMaxMemoryRowsExceeded(t *testing.T) { stmt, err := sqlparser.Parse(test.query) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecutorMaxMemoryRowsExceeded", session, test.query, nil) + _, err = executor.Execute(ctx, nil, "TestExecutorMaxMemoryRowsExceeded", session, test.query, nil) if sqlparser.IgnoreMaxMaxMemoryRowsDirective(stmt) { require.NoError(t, err, "no error when DirectiveIgnoreMaxMemoryRows is provided") } else { @@ -114,7 +109,7 @@ func TestExecutorMaxMemoryRowsExceeded(t *testing.T) { } sbclookup.SetResults([]*sqltypes.Result{result}) - err = executor.StreamExecute(ctx, "TestExecutorMaxMemoryRowsExceeded", session, test.query, nil, fn) + err = executor.StreamExecute(ctx, nil, "TestExecutorMaxMemoryRowsExceeded", session, test.query, nil, fn) require.NoError(t, err, "maxMemoryRows limit does not apply to StreamExecute") } } @@ -127,7 +122,7 @@ func TestExecutorTransactionsNoAutoCommit(t *testing.T) { defer QueryLogger.Unsubscribe(logChan) // begin. - _, err := executor.Execute(ctx, "TestExecute", session, "begin", nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, "begin", nil) require.NoError(t, err) wantSession := &vtgatepb.Session{InTransaction: true, TargetString: "@primary", SessionUUID: "suuid"} utils.MustMatch(t, wantSession, session.Session, "session") @@ -137,13 +132,13 @@ func TestExecutorTransactionsNoAutoCommit(t *testing.T) { assert.EqualValues(t, "suuid", logStats.SessionUUID, "logstats: expected non-empty SessionUUID") // commit. - _, err = executor.Execute(ctx, "TestExecute", session, "select id from main1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "select id from main1", nil) require.NoError(t, err) logStats = testQueryLog(t, logChan, "TestExecute", "SELECT", "select id from main1", 1) assert.EqualValues(t, 0, logStats.CommitTime, "logstats: expected zero CommitTime") assert.EqualValues(t, "suuid", logStats.SessionUUID, "logstats: expected non-empty SessionUUID") - _, err = executor.Execute(context.Background(), "TestExecute", session, "commit", nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, "commit", nil) if err != nil { t.Fatal(err) } @@ -161,11 +156,11 @@ func TestExecutorTransactionsNoAutoCommit(t *testing.T) { assert.EqualValues(t, "suuid", logStats.SessionUUID, "logstats: expected non-empty SessionUUID") // rollback. - _, err = executor.Execute(ctx, "TestExecute", session, "begin", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "begin", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "select id from main1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "select id from main1", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "rollback", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "rollback", nil) require.NoError(t, err) wantSession = &vtgatepb.Session{TargetString: "@primary", SessionUUID: "suuid"} utils.MustMatch(t, wantSession, session.Session, "session") @@ -188,7 +183,7 @@ func TestExecutorTransactionsNoAutoCommit(t *testing.T) { // Prevent use of non-primary if in_transaction is on. session = NewSafeSession(&vtgatepb.Session{TargetString: "@primary", InTransaction: true}) - _, err = executor.Execute(ctx, "TestExecute", session, "use @replica", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "use @replica", nil) require.EqualError(t, err, `can't execute the given command because you have an active transaction`) } @@ -203,7 +198,7 @@ func TestDirectTargetRewrites(t *testing.T) { } sql := "select database()" - _, err := executor.Execute(ctx, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) + _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{}) require.NoError(t, err) assertQueries(t, sbclookup, []*querypb.BoundQuery{{ Sql: "select :__vtdbname as `database()` from dual", @@ -219,7 +214,7 @@ func TestExecutorTransactionsAutoCommit(t *testing.T) { defer QueryLogger.Unsubscribe(logChan) // begin. - _, err := executor.Execute(ctx, "TestExecute", session, "begin", nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, "begin", nil) require.NoError(t, err) wantSession := &vtgatepb.Session{InTransaction: true, TargetString: "@primary", Autocommit: true, SessionUUID: "suuid"} utils.MustMatch(t, wantSession, session.Session, "session") @@ -230,9 +225,9 @@ func TestExecutorTransactionsAutoCommit(t *testing.T) { assert.EqualValues(t, "suuid", logStats.SessionUUID, "logstats: expected non-empty SessionUUID") // commit. - _, err = executor.Execute(ctx, "TestExecute", session, "select id from main1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "select id from main1", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "commit", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "commit", nil) require.NoError(t, err) wantSession = &vtgatepb.Session{TargetString: "@primary", Autocommit: true, SessionUUID: "suuid"} utils.MustMatch(t, wantSession, session.Session, "session") @@ -246,11 +241,11 @@ func TestExecutorTransactionsAutoCommit(t *testing.T) { assert.EqualValues(t, "suuid", logStats.SessionUUID, "logstats: expected non-empty SessionUUID") // rollback. - _, err = executor.Execute(ctx, "TestExecute", session, "begin", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "begin", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "select id from main1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "select id from main1", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "rollback", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "rollback", nil) require.NoError(t, err) wantSession = &vtgatepb.Session{TargetString: "@primary", Autocommit: true, SessionUUID: "suuid"} utils.MustMatch(t, wantSession, session.Session, "session") @@ -279,7 +274,7 @@ func TestExecutorTransactionsAutoCommitStreaming(t *testing.T) { var results []*sqltypes.Result // begin. - err := executor.StreamExecute(ctx, "TestExecute", session, "begin", nil, func(result *sqltypes.Result) error { + err := executor.StreamExecute(ctx, nil, "TestExecute", session, "begin", nil, func(result *sqltypes.Result) error { results = append(results, result) return nil }) @@ -301,9 +296,9 @@ func TestExecutorTransactionsAutoCommitStreaming(t *testing.T) { assert.EqualValues(t, "suuid", logStats.SessionUUID, "logstats: expected non-empty SessionUUID") // commit. - _, err = executor.Execute(ctx, "TestExecute", session, "select id from main1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "select id from main1", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "commit", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "commit", nil) require.NoError(t, err) wantSession = &vtgatepb.Session{TargetString: "@primary", Autocommit: true, Options: oltpOptions, SessionUUID: "suuid"} utils.MustMatch(t, wantSession, session.Session, "session") @@ -317,11 +312,11 @@ func TestExecutorTransactionsAutoCommitStreaming(t *testing.T) { assert.EqualValues(t, "suuid", logStats.SessionUUID, "logstats: expected non-empty SessionUUID") // rollback. - _, err = executor.Execute(ctx, "TestExecute", session, "begin", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "begin", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "select id from main1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "select id from main1", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "rollback", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "rollback", nil) require.NoError(t, err) wantSession = &vtgatepb.Session{TargetString: "@primary", Autocommit: true, Options: oltpOptions, SessionUUID: "suuid"} utils.MustMatch(t, wantSession, session.Session, "session") @@ -338,25 +333,25 @@ func TestExecutorDeleteMetadata(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true}) set := "set @@vitess_metadata.app_v1= '1'" - _, err := executor.Execute(ctx, "TestExecute", session, set, nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, set, nil) assert.NoError(t, err, "%s error: %v", set, err) show := `show vitess_metadata variables like 'app\\_%'` - result, _ := executor.Execute(ctx, "TestExecute", session, show, nil) + result, _ := executor.Execute(ctx, nil, "TestExecute", session, show, nil) assert.Len(t, result.Rows, 1) // Fails if deleting key that doesn't exist delQuery := "set @@vitess_metadata.doesn't_exist=''" - _, err = executor.Execute(ctx, "TestExecute", session, delQuery, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, delQuery, nil) assert.True(t, topo.IsErrType(err, topo.NoNode)) // Delete existing key, show should fail given the node doesn't exist delQuery = "set @@vitess_metadata.app_v1=''" - _, err = executor.Execute(ctx, "TestExecute", session, delQuery, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, delQuery, nil) assert.NoError(t, err) show = `show vitess_metadata variables like 'app\\_%'` - _, err = executor.Execute(ctx, "TestExecute", session, show, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, show, nil) assert.True(t, topo.IsErrType(err, topo.NoNode)) } @@ -369,7 +364,7 @@ func TestExecutorAutocommit(t *testing.T) { // autocommit = 0 startCount := sbclookup.CommitCount.Load() - _, err := executor.Execute(ctx, "TestExecute", session, "select id from main1", nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, "select id from main1", nil) require.NoError(t, err) wantSession := &vtgatepb.Session{TargetString: "@primary", InTransaction: true, FoundRows: 1, RowCount: -1} testSession := proto.Clone(session.Session).(*vtgatepb.Session) @@ -385,7 +380,7 @@ func TestExecutorAutocommit(t *testing.T) { } // autocommit = 1 - _, err = executor.Execute(ctx, "TestExecute", session, "set autocommit=1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "set autocommit=1", nil) require.NoError(t, err) _ = testQueryLog(t, logChan, "TestExecute", "SET", "set @@autocommit = 1", 0) @@ -394,7 +389,7 @@ func TestExecutorAutocommit(t *testing.T) { t.Errorf("Commit count: %d, want %d", got, want) } - _, err = executor.Execute(ctx, "TestExecute", session, "update main1 set id=1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "update main1 set id=1", nil) require.NoError(t, err) wantSession = &vtgatepb.Session{Autocommit: true, TargetString: "@primary", FoundRows: 0, RowCount: 1} utils.MustMatch(t, wantSession, session.Session, "session does not match for autocommit=1") @@ -406,11 +401,11 @@ func TestExecutorAutocommit(t *testing.T) { // autocommit = 1, "begin" session.ResetTx() startCount = sbclookup.CommitCount.Load() - _, err = executor.Execute(ctx, "TestExecute", session, "begin", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "begin", nil) require.NoError(t, err) _ = testQueryLog(t, logChan, "TestExecute", "BEGIN", "begin", 0) - _, err = executor.Execute(ctx, "TestExecute", session, "update main1 set id=1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "update main1 set id=1", nil) require.NoError(t, err) wantSession = &vtgatepb.Session{InTransaction: true, Autocommit: true, TargetString: "@primary", FoundRows: 0, RowCount: 1} testSession = proto.Clone(session.Session).(*vtgatepb.Session) @@ -428,7 +423,7 @@ func TestExecutorAutocommit(t *testing.T) { t.Errorf("logstats: expected non-zero RowsAffected") } - _, err = executor.Execute(ctx, "TestExecute", session, "commit", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "commit", nil) require.NoError(t, err) wantSession = &vtgatepb.Session{Autocommit: true, TargetString: "@primary"} if !proto.Equal(session.Session, wantSession) { @@ -442,14 +437,14 @@ func TestExecutorAutocommit(t *testing.T) { // transition autocommit from 0 to 1 in the middle of a transaction. startCount = sbclookup.CommitCount.Load() session = NewSafeSession(&vtgatepb.Session{TargetString: "@primary"}) - _, err = executor.Execute(ctx, "TestExecute", session, "begin", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "begin", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "update main1 set id=1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "update main1 set id=1", nil) require.NoError(t, err) if got, want := sbclookup.CommitCount.Load(), startCount; got != want { t.Errorf("Commit count: %d, want %d", got, want) } - _, err = executor.Execute(ctx, "TestExecute", session, "set autocommit=1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "set autocommit=1", nil) require.NoError(t, err) wantSession = &vtgatepb.Session{Autocommit: true, TargetString: "@primary"} if !proto.Equal(session.Session, wantSession) { @@ -472,7 +467,7 @@ func TestExecutorShowColumns(t *testing.T) { } for _, query := range queries { t.Run(query, func(t *testing.T) { - _, err := executor.Execute(ctx, "TestExecute", session, query, nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantQueries := []*querypb.BoundQuery{{ @@ -516,28 +511,28 @@ func TestExecutorShow(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) for _, query := range []string{"show vitess_keyspaces", "show keyspaces"} { - qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err := executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) assertMatchesNoOrder(t, `[[VARCHAR("TestUnsharded")] [VARCHAR("TestMultiCol")] [VARCHAR("TestXBadVSchema")] [VARCHAR("TestXBadSharding")] [VARCHAR("TestExecutor")]]`, fmt.Sprintf("%v", qr.Rows)) } for _, query := range []string{"show databases", "show DATABASES", "show schemas", "show SCHEMAS"} { - qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err := executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) // Showing default tables (5+4[default]) assertMatchesNoOrder(t, `[[VARCHAR("TestUnsharded")] [VARCHAR("TestMultiCol")] [VARCHAR("TestXBadVSchema")] [VARCHAR("TestXBadSharding")] [VARCHAR("TestExecutor")]] [VARCHAR("information_schema")] [VARCHAR("mysql")] [VARCHAR("sys")] [VARCHAR("performance_schema")]`, fmt.Sprintf("%v", qr.Rows)) } - _, err := executor.Execute(ctx, "TestExecute", session, "show variables", nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, "show variables", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "show collation", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "show collation", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "show collation where `Charset` = 'utf8' and `Collation` = 'utf8_bin'", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "show collation where `Charset` = 'utf8' and `Collation` = 'utf8_bin'", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "use @primary", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "use @primary", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "show tables", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "show tables", nil) assert.EqualError(t, err, errNoKeyspace.Error(), "'show tables' should fail without a keyspace") assert.Empty(t, sbclookup.Queries, "sbclookup unexpectedly has queries already") @@ -554,7 +549,7 @@ func TestExecutorShow(t *testing.T) { sbclookup.SetResults([]*sqltypes.Result{showResults}) query := fmt.Sprintf("show tables from %v", KsTestUnsharded) - qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err := executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) assert.Equal(t, 1, len(sbclookup.Queries), "Tablet should have received one 'show' query. Instead received: %v", sbclookup.Queries) @@ -566,88 +561,88 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, fmt.Sprintf("unexpected results running query: %s", query)) wantErrNoTable := "table unknown_table not found" - _, err = executor.Execute(ctx, "TestExecute", session, "show create table unknown_table", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "show create table unknown_table", nil) assert.EqualErrorf(t, err, wantErrNoTable, "Got: %v. Want: %v", wantErrNoTable) // SHOW CREATE table using vschema to find keyspace. - _, err = executor.Execute(ctx, "TestExecute", session, "show create table user_seq", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "show create table user_seq", nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery := "show create table user_seq" assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // SHOW CREATE table with query-provided keyspace - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show create table %v.unknown", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show create table %v.unknown", KsTestUnsharded), nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show create table unknown" assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // SHOW KEYS with two different syntax - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show keys from %v.unknown", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show keys from %v.unknown", KsTestUnsharded), nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show indexes from unknown" assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show keys from unknown from %v", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show keys from unknown from %v", KsTestUnsharded), nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // SHOW INDEX with two different syntax - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show index from %v.unknown", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show index from %v.unknown", KsTestUnsharded), nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show index from unknown from %v", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show index from unknown from %v", KsTestUnsharded), nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // SHOW INDEXES with two different syntax - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show indexes from %v.unknown", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show indexes from %v.unknown", KsTestUnsharded), nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show indexes from unknown from %v", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show indexes from unknown from %v", KsTestUnsharded), nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // SHOW EXTENDED {INDEX | INDEXES | KEYS} - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show extended index from unknown from %v", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show extended index from unknown from %v", KsTestUnsharded), nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show extended indexes from unknown from %v", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show extended indexes from unknown from %v", KsTestUnsharded), nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show extended keys from unknown from %v", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show extended keys from unknown from %v", KsTestUnsharded), nil) require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // Set desitation keyspace in session session.TargetString = KsTestUnsharded - _, err = executor.Execute(ctx, "TestExecute", session, "show create table unknown", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "show create table unknown", nil) require.NoError(t, err) - _, err = executor.Execute(ctx, "TestExecute", session, "show full columns from table1", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, "show full columns from table1", nil) require.NoError(t, err) // Reset target string so other tests dont fail. session.TargetString = "@primary" - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show full columns from unknown from %v", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show full columns from unknown from %v", KsTestUnsharded), nil) require.NoError(t, err) for _, query := range []string{"show charset", "show character set"} { - qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err := executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr := &sqltypes.Result{ Fields: append(buildVarCharFields("Charset", "Description", "Default collation"), &querypb.Field{Name: "Maxlen", Type: sqltypes.Int32}), @@ -668,7 +663,7 @@ func TestExecutorShow(t *testing.T) { } for _, query := range []string{"show charset like '%foo'", "show character set like 'foo%'", "show charset like 'foo%'", "show character set where foo like 'utf8'", "show character set where charset like '%foo'", "show charset where charset = '%foo'"} { - qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err := executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr := &sqltypes.Result{ Fields: append(buildVarCharFields("Charset", "Description", "Default collation"), &querypb.Field{Name: "Maxlen", Type: sqltypes.Int32}), @@ -680,7 +675,7 @@ func TestExecutorShow(t *testing.T) { } for _, query := range []string{"show charset like 'utf8'", "show character set like 'utf8'", "show charset where charset = 'utf8'", "show character set where charset = 'utf8'"} { - qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err := executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr := &sqltypes.Result{ Fields: append(buildVarCharFields("Charset", "Description", "Default collation"), &querypb.Field{Name: "Maxlen", Type: sqltypes.Int32}), @@ -696,7 +691,7 @@ func TestExecutorShow(t *testing.T) { } for _, query := range []string{"show charset like 'utf8mb4'", "show character set like 'utf8mb4'", "show charset where charset = 'utf8mb4'", "show character set where charset = 'utf8mb4'"} { - qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err := executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr := &sqltypes.Result{ Fields: append(buildVarCharFields("Charset", "Description", "Default collation"), &querypb.Field{Name: "Maxlen", Type: sqltypes.Int32}), @@ -712,7 +707,7 @@ func TestExecutorShow(t *testing.T) { } query = "show engines" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Engine", "Support", "Comment", "Transactions", "XA", "Savepoints"), @@ -729,7 +724,7 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) query = "show plugins" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Name", "Status", "Type", "Library", "License"), @@ -745,7 +740,7 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) for _, sql := range []string{"show session status", "show session status like 'Ssl_cipher'"} { - qr, err = executor.Execute(ctx, "TestExecute", session, sql, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, sql, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: []*querypb.Field{ @@ -761,11 +756,11 @@ func TestExecutorShow(t *testing.T) { } // Test SHOW FULL COLUMNS FROM where query has a qualifier - _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show full columns from %v.table1", KsTestUnsharded), nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, fmt.Sprintf("show full columns from %v.table1", KsTestUnsharded), nil) require.NoError(t, err) query = "show vitess_shards" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) // Just test for first & last. @@ -780,7 +775,7 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) query = "show vitess_shards like 'TestExecutor/%'" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) // Just test for first & last. @@ -795,7 +790,7 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) query = "show vitess_shards like 'TestExec%/%'" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) // Just test for first & last. @@ -810,7 +805,7 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) query = "show vitess_replication_status" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) qr.Rows = [][]sqltypes.Value{} wantqr = &sqltypes.Result{ @@ -819,7 +814,7 @@ func TestExecutorShow(t *testing.T) { } utils.MustMatch(t, wantqr, qr, query) query = "show vitess_replication_status like 'x'" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) qr.Rows = [][]sqltypes.Value{} wantqr = &sqltypes.Result{ @@ -829,7 +824,7 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) query = "show vitess_tablets" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) // Just test for first & last. qr.Rows = [][]sqltypes.Value{qr.Rows[0], qr.Rows[len(qr.Rows)-1]} @@ -843,7 +838,7 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) query = "show vitess_tablets like 'x'" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Cell", "Keyspace", "Shard", "TabletType", "State", "Alias", "Hostname", "PrimaryTermStartTime"), @@ -852,7 +847,7 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, fmt.Sprintf("%q should be empty", query)) query = "show vitess_tablets like '-20%'" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Cell", "Keyspace", "Shard", "TabletType", "State", "Alias", "Hostname", "PrimaryTermStartTime"), @@ -863,7 +858,7 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) query = "show vschema vindexes" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Keyspace", "Name", "Type", "Params", "Owner"), @@ -893,7 +888,7 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) query = "show vschema vindexes on TestExecutor.user" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -905,18 +900,18 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) query = "show vschema vindexes on user" - _, err = executor.Execute(ctx, "TestExecute", session, query, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) wantErr := errNoKeyspace.Error() assert.EqualError(t, err, wantErr, query) query = "show vschema vindexes on TestExecutor.garbage" - _, err = executor.Execute(ctx, "TestExecute", session, query, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) wantErr = "VT05005: table 'garbage' does not exist in keyspace 'TestExecutor'" assert.EqualError(t, err, wantErr, query) query = "show vschema vindexes on user" session.TargetString = "TestExecutor" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -929,7 +924,7 @@ func TestExecutorShow(t *testing.T) { query = "show vschema vindexes on user2" session.TargetString = "TestExecutor" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -941,12 +936,12 @@ func TestExecutorShow(t *testing.T) { utils.MustMatch(t, wantqr, qr, query) query = "show vschema vindexes on garbage" - _, err = executor.Execute(ctx, "TestExecute", session, query, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) wantErr = "VT05005: table 'garbage' does not exist in keyspace 'TestExecutor'" assert.EqualError(t, err, wantErr, query) query = "show warnings" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: []*querypb.Field{ @@ -960,7 +955,7 @@ func TestExecutorShow(t *testing.T) { query = "show warnings" session.Warnings = []*querypb.QueryWarning{} - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: []*querypb.Field{ @@ -977,7 +972,7 @@ func TestExecutorShow(t *testing.T) { {Code: uint32(mysql.ERBadTable), Message: "bad table"}, {Code: uint32(mysql.EROutOfResources), Message: "ks/-40: query timed out"}, } - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: []*querypb.Field{ @@ -996,7 +991,7 @@ func TestExecutorShow(t *testing.T) { // Make sure it still works when one of the keyspaces is in a bad state getSandbox("TestExecutor").SrvKeyspaceMustFail++ query = "show vitess_shards" - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) // Just test for first & last. qr.Rows = [][]sqltypes.Value{qr.Rows[0], qr.Rows[len(qr.Rows)-1]} @@ -1011,7 +1006,7 @@ func TestExecutorShow(t *testing.T) { query = "show vschema tables" session = NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}) - qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Tables"), @@ -1037,28 +1032,28 @@ func TestExecutorShow(t *testing.T) { query = "show vschema tables" session = NewSafeSession(&vtgatepb.Session{}) - _, err = executor.Execute(ctx, "TestExecute", session, query, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) want = errNoKeyspace.Error() assert.EqualError(t, err, want, query) query = "show 10" - _, err = executor.Execute(ctx, "TestExecute", session, query, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) want = "syntax error at position 8 near '10'" assert.EqualError(t, err, want, query) query = "show vschema tables" session = NewSafeSession(&vtgatepb.Session{TargetString: "no_such_keyspace"}) - _, err = executor.Execute(ctx, "TestExecute", session, query, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) want = "VT05003: unknown database 'no_such_keyspace' in vschema" assert.EqualError(t, err, want, query) query = "show vitess_migrations" - _, err = executor.Execute(ctx, "TestExecute", session, query, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) want = "VT05003: unknown database 'no_such_keyspace' in vschema" assert.EqualError(t, err, want, query) query = "show vitess_migrations from ks like '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90'" - _, err = executor.Execute(ctx, "TestExecute", session, query, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil) want = "VT05003: unknown database 'ks' in vschema" assert.EqualError(t, err, want, query) } @@ -1081,7 +1076,7 @@ func TestExecutorShowTargeted(t *testing.T) { } for _, sql := range queries { - _, err := executor.Execute(ctx, "TestExecutorShowTargeted", session, sql, nil) + _, err := executor.Execute(ctx, nil, "TestExecutorShowTargeted", session, sql, nil) require.NoError(t, err) assert.NotZero(t, len(sbc2.Queries), "Tablet should have received 'show' query") lastQuery := sbc2.Queries[len(sbc2.Queries)-1].Sql @@ -1102,7 +1097,7 @@ func TestExecutorUse(t *testing.T) { "TestExecutor:-80@primary", } for i, stmt := range stmts { - _, err := executor.Execute(ctx, "TestExecute", session, stmt, nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil) if err != nil { t.Error(err) } @@ -1110,13 +1105,13 @@ func TestExecutorUse(t *testing.T) { utils.MustMatch(t, wantSession, session.Session, "session does not match") } - _, err := executor.Execute(ctx, "TestExecute", NewSafeSession(&vtgatepb.Session{}), "use 1", nil) + _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{}), "use 1", nil) wantErr := "syntax error at position 6 near '1'" if err == nil || err.Error() != wantErr { t.Errorf("got: %v, want %v", err, wantErr) } - _, err = executor.Execute(ctx, "TestExecute", NewSafeSession(&vtgatepb.Session{}), "use UnexistentKeyspace", nil) + _, err = executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{}), "use UnexistentKeyspace", nil) require.EqualError(t, err, "VT05003: unknown database 'UnexistentKeyspace' in vschema") } @@ -1130,7 +1125,7 @@ func TestExecutorComment(t *testing.T) { wantResult := &sqltypes.Result{} for _, stmt := range stmts { - gotResult, err := executor.Execute(ctx, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), stmt, nil) + gotResult, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), stmt, nil) if err != nil { t.Error(err) } @@ -1213,7 +1208,7 @@ func TestExecutorOther(t *testing.T) { sbc2.ExecCount.Store(0) sbclookup.ExecCount.Store(0) - _, err := executor.Execute(ctx, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil) + _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil) if tc.hasNoKeyspaceErr { assert.Error(t, err, errNoKeyspace) } else if tc.hasDestinationShardErr { @@ -1307,7 +1302,7 @@ func TestExecutorDDL(t *testing.T) { sbc2.ExecCount.Store(0) sbclookup.ExecCount.Store(0) stmtType := "DDL" - _, err := executor.Execute(ctx, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil) + _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil) if tc.hasNoKeyspaceErr { require.EqualError(t, err, errNoKeyspace.Error(), "expect query to fail: %q", stmt) stmtType = "" // For error case, plan is not generated to query log will not contain any stmtType. @@ -1345,7 +1340,7 @@ func TestExecutorDDL(t *testing.T) { sbc1.ExecCount.Store(0) sbc2.ExecCount.Store(0) sbclookup.ExecCount.Store(0) - _, err := executor.Execute(ctx, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: ""}), stmt.input, nil) + _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: ""}), stmt.input, nil) if stmt.hasErr { require.EqualError(t, err, errNoKeyspace.Error(), "expect query to fail") testQueryLog(t, logChan, "TestExecute", "", stmt.input, 0) @@ -1370,7 +1365,7 @@ func TestExecutorDDLFk(t *testing.T) { t.Run(stmt+fkMode, func(t *testing.T) { sbc.ExecCount.Store(0) foreignKeyMode = fkMode - _, err := executor.Execute(ctx, mName, NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), stmt, nil) + _, err := executor.Execute(ctx, nil, mName, NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), stmt, nil) if fkMode == "allow" { require.NoError(t, err) require.EqualValues(t, 1, sbc.ExecCount.Load()) @@ -1404,7 +1399,7 @@ func TestExecutorAlterVSchemaKeyspace(t *testing.T) { } stmt := "alter vschema create vindex TestExecutor.test_vindex using hash" - _, err := executor.Execute(ctx, "TestExecute", session, stmt, nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _, vindex := waitForVindex(t, "TestExecutor", "test_vindex", vschemaUpdates, executor) @@ -1433,7 +1428,7 @@ func TestExecutorCreateVindexDDL(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: ks}) stmt := "alter vschema create vindex test_vindex using hash" - _, err := executor.Execute(ctx, "TestExecute", session, stmt, nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _, vindex := waitForVindex(t, ks, "test_vindex", vschemaUpdates, executor) @@ -1441,7 +1436,7 @@ func TestExecutorCreateVindexDDL(t *testing.T) { t.Errorf("updated vschema did not contain test_vindex") } - _, err = executor.Execute(ctx, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, stmt, nil) wantErr := "vindex test_vindex already exists in keyspace TestExecutor" if err == nil || err.Error() != wantErr { t.Errorf("create duplicate vindex: %v, want %s", err, wantErr) @@ -1457,7 +1452,7 @@ func TestExecutorCreateVindexDDL(t *testing.T) { // ksNew := "test_new_keyspace" session = NewSafeSession(&vtgatepb.Session{TargetString: ks}) stmt = "alter vschema create vindex test_vindex2 using hash" - _, err = executor.Execute(ctx, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) } @@ -1508,19 +1503,19 @@ func TestExecutorAddDropVschemaTableDDL(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: ks}) stmt := "alter vschema add table test_table" - _, err := executor.Execute(ctx, "TestExecute", session, stmt, nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _ = waitForVschemaTables(t, ks, append([]string{"test_table"}, vschemaTables...), executor) stmt = "alter vschema add table test_table2" - _, err = executor.Execute(ctx, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _ = waitForVschemaTables(t, ks, append([]string{"test_table", "test_table2"}, vschemaTables...), executor) // Should fail adding a table on a sharded keyspace session = NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) stmt = "alter vschema add table test_table" - _, err = executor.Execute(ctx, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctx, nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, "add vschema table: unsupported on sharded keyspace TestExecutor") // No queries should have gone to any tablets @@ -1543,21 +1538,21 @@ func TestExecutorVindexDDLACL(t *testing.T) { // test that by default no users can perform the operation stmt := "alter vschema create vindex test_hash using hash" - _, err := executor.Execute(ctxRedUser, "TestExecute", session, stmt, nil) + _, err := executor.Execute(ctxRedUser, nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, `User 'redUser' is not authorized to perform vschema operations`) - _, err = executor.Execute(ctxBlueUser, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctxBlueUser, nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, `User 'blueUser' is not authorized to perform vschema operations`) // test when all users are enabled vschemaacl.AuthorizedDDLUsers = "%" vschemaacl.Init() - _, err = executor.Execute(ctxRedUser, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctxRedUser, nil, "TestExecute", session, stmt, nil) if err != nil { t.Errorf("unexpected error '%v'", err) } stmt = "alter vschema create vindex test_hash2 using hash" - _, err = executor.Execute(ctxBlueUser, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctxBlueUser, nil, "TestExecute", session, stmt, nil) if err != nil { t.Errorf("unexpected error '%v'", err) } @@ -1565,11 +1560,11 @@ func TestExecutorVindexDDLACL(t *testing.T) { // test when only one user is enabled vschemaacl.AuthorizedDDLUsers = "orangeUser, blueUser, greenUser" vschemaacl.Init() - _, err = executor.Execute(ctxRedUser, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctxRedUser, nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, `User 'redUser' is not authorized to perform vschema operations`) stmt = "alter vschema create vindex test_hash3 using hash" - _, err = executor.Execute(ctxBlueUser, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctxBlueUser, nil, "TestExecute", session, stmt, nil) if err != nil { t.Errorf("unexpected error '%v'", err) } @@ -1580,7 +1575,7 @@ func TestExecutorVindexDDLACL(t *testing.T) { func TestExecutorUnrecognized(t *testing.T) { executor, _, _, _ := createExecutorEnv() - _, err := executor.Execute(ctx, "TestExecute", NewSafeSession(&vtgatepb.Session{}), "invalid statement", nil) + _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{}), "invalid statement", nil) require.Error(t, err, "unrecognized statement: invalid statement'") } @@ -2015,7 +2010,7 @@ func TestExecutorMaxPayloadSizeExceeded(t *testing.T) { "delete from main1 where id=1", } for _, query := range testMaxPayloadSizeExceeded { - _, err := executor.Execute(context.Background(), "TestExecutorMaxPayloadSizeExceeded", session, query, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecutorMaxPayloadSizeExceeded", session, query, nil) require.NotNil(t, err) assert.EqualError(t, err, "query payload size above threshold") } @@ -2028,14 +2023,14 @@ func TestExecutorMaxPayloadSizeExceeded(t *testing.T) { "delete /*vt+ IGNORE_MAX_PAYLOAD_SIZE=1 */ from main1 where id=1", } for _, query := range testMaxPayloadSizeOverride { - _, err := executor.Execute(context.Background(), "TestExecutorMaxPayloadSizeWithOverride", session, query, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecutorMaxPayloadSizeWithOverride", session, query, nil) assert.Equal(t, nil, err, "err should be nil") } assert.Equal(t, warningCount, warnings.Counts()["WarnPayloadSizeExceeded"], "warnings count") maxPayloadSize = 1000 for _, query := range testMaxPayloadSizeExceeded { - _, err := executor.Execute(context.Background(), "TestExecutorMaxPayloadSizeExceeded", session, query, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecutorMaxPayloadSizeExceeded", session, query, nil) assert.Equal(t, nil, err, "err should be nil") } assert.Equal(t, warningCount+4, warnings.Counts()["WarnPayloadSizeExceeded"], "warnings count") @@ -2053,7 +2048,7 @@ func TestOlapSelectDatabase(t *testing.T) { cbInvoked = true return nil } - err := executor.StreamExecute(context.Background(), "TestExecute", NewSafeSession(session), sql, nil, cb) + err := executor.StreamExecute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, nil, cb) assert.NoError(t, err) assert.True(t, cbInvoked) } @@ -2063,7 +2058,7 @@ func TestExecutorClearsWarnings(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{ Warnings: []*querypb.QueryWarning{{Code: 234, Message: "oh noes"}}, }) - _, err := executor.Execute(context.Background(), "TestExecute", session, "select 42", nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", session, "select 42", nil) require.NoError(t, err) require.Empty(t, session.Warnings) } @@ -2124,7 +2119,7 @@ func TestExecutorOtherRead(t *testing.T) { sbc2.ExecCount.Store(0) sbclookup.ExecCount.Store(0) - _, err := executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil) if tc.hasNoKeyspaceErr { assert.EqualError(t, err, errNoKeyspace.Error()) } else if tc.hasDestinationShardErr { @@ -2216,7 +2211,7 @@ func TestExecutorOtherAdmin(t *testing.T) { sbc2.ExecCount.Store(0) sbclookup.ExecCount.Store(0) - _, err := executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil) if tc.hasNoKeyspaceErr { assert.Error(t, err, errNoKeyspace) } else if tc.hasDestinationShardErr { @@ -2475,7 +2470,7 @@ func TestExecutorCallProc(t *testing.T) { sbc2.ExecCount.Store(0) sbcUnsharded.ExecCount.Store(0) - _, err := executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), "CALL proc()", nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), "CALL proc()", nil) if tc.hasNoKeyspaceErr { assert.EqualError(t, err, errNoKeyspace.Error()) } else if tc.unshardedOnlyErr { @@ -2499,14 +2494,14 @@ func TestExecutorTempTable(t *testing.T) { creatQuery := "create temporary table temp_t(id bigint primary key)" session := NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}) ctx := context.Background() - _, err := executor.Execute(ctx, "TestExecutorTempTable", session, creatQuery, nil) + _, err := executor.Execute(ctx, nil, "TestExecutorTempTable", session, creatQuery, nil) require.NoError(t, err) assert.EqualValues(t, 1, sbcUnsharded.ExecCount.Load()) assert.NotEmpty(t, session.Warnings) before := executor.plans.Len() - _, err = executor.Execute(ctx, "TestExecutorTempTable", session, "select * from temp_t", nil) + _, err = executor.Execute(ctx, nil, "TestExecutorTempTable", session, "select * from temp_t", nil) require.NoError(t, err) assert.Equal(t, before, executor.plans.Len()) @@ -2517,7 +2512,7 @@ func TestExecutorShowVitessMigrations(t *testing.T) { showQuery := "show vitess_migrations" session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) ctx := context.Background() - _, err := executor.Execute(ctx, "", session, showQuery, nil) + _, err := executor.Execute(ctx, nil, "", session, showQuery, nil) require.NoError(t, err) assert.Contains(t, sbc1.StringQueries(), "SELECT * FROM _vt.schema_migrations") assert.Contains(t, sbc2.StringQueries(), "SELECT * FROM _vt.schema_migrations") @@ -2528,7 +2523,7 @@ func TestExecutorDescHash(t *testing.T) { showQuery := "desc hash_index" session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) ctx := context.Background() - _, err := executor.Execute(ctx, "", session, showQuery, nil) + _, err := executor.Execute(ctx, nil, "", session, showQuery, nil) require.NoError(t, err) } @@ -2539,7 +2534,7 @@ func TestExecutorVExplainQueries(t *testing.T) { sbclookup.SetResults([]*sqltypes.Result{ sqltypes.MakeTestResult(sqltypes.MakeTestFields("name|user_id", "varchar|int64"), "apa|1", "apa|2"), }) - qr, err := executor.Execute(ctx, "TestExecutorVExplainQueries", session, "vexplain queries select * from user where name = 'apa'", nil) + qr, err := executor.Execute(ctx, nil, "TestExecutorVExplainQueries", session, "vexplain queries select * from user where name = 'apa'", nil) require.NoError(t, err) txt := fmt.Sprintf("%v\n", qr.Rows) lookupQuery := "select `name`, user_id from name_user_map where `name` in" @@ -2548,7 +2543,7 @@ func TestExecutorVExplainQueries(t *testing.T) { // Test the streaming side as well var results []sqltypes.Row session = NewAutocommitSession(&vtgatepb.Session{}) - err = executor.StreamExecute(ctx, "TestExecutorVExplainQueries", session, "vexplain queries select * from user where name = 'apa'", nil, func(result *sqltypes.Result) error { + err = executor.StreamExecute(ctx, nil, "TestExecutorVExplainQueries", session, "vexplain queries select * from user where name = 'apa'", nil, func(result *sqltypes.Result) error { results = append(results, result.Rows...) return nil }) @@ -2590,12 +2585,12 @@ func TestExecutorStartTxnStmt(t *testing.T) { for _, tcase := range tcases { t.Run(tcase.beginSQL, func(t *testing.T) { - _, err := executor.Execute(ctx, "TestExecutorStartTxnStmt", session, tcase.beginSQL, nil) + _, err := executor.Execute(ctx, nil, "TestExecutorStartTxnStmt", session, tcase.beginSQL, nil) require.NoError(t, err) assert.Equal(t, tcase.expTxAccessMode, session.GetOrCreateOptions().TransactionAccessMode) - _, err = executor.Execute(ctx, "TestExecutorStartTxnStmt", session, "rollback", nil) + _, err = executor.Execute(ctx, nil, "TestExecutorStartTxnStmt", session, "rollback", nil) require.NoError(t, err) }) @@ -2608,11 +2603,7 @@ func TestExecutorPrepareExecute(t *testing.T) { session := NewAutocommitSession(&vtgatepb.Session{}) // prepare statement. - _, err := executor.Execute(context.Background(), - "TestExecutorPrepareExecute", - session, - "prepare prep_user from 'select * from user where id = ?'", - nil) + _, err := executor.Execute(context.Background(), nil, "TestExecutorPrepareExecute", session, "prepare prep_user from 'select * from user where id = ?'", nil) require.NoError(t, err) prepData := session.PrepareStatement["prep_user"] require.NotNil(t, prepData) @@ -2620,18 +2611,10 @@ func TestExecutorPrepareExecute(t *testing.T) { require.EqualValues(t, 1, prepData.ParamsCount) // prepare statement using user defined variable - _, err = executor.Execute(context.Background(), - "TestExecutorPrepareExecute", - session, - "set @udv_query = 'select * from user where id in (?,?,?)'", - nil) + _, err = executor.Execute(context.Background(), nil, "TestExecutorPrepareExecute", session, "set @udv_query = 'select * from user where id in (?,?,?)'", nil) require.NoError(t, err) - _, err = executor.Execute(context.Background(), - "TestExecutorPrepareExecute", - session, - "prepare prep_user2 from @udv_query", - nil) + _, err = executor.Execute(context.Background(), nil, "TestExecutorPrepareExecute", session, "prepare prep_user2 from @udv_query", nil) require.NoError(t, err) prepData = session.PrepareStatement["prep_user2"] require.NotNil(t, prepData) @@ -2639,29 +2622,17 @@ func TestExecutorPrepareExecute(t *testing.T) { require.EqualValues(t, 3, prepData.ParamsCount) // syntax error on prepared query - _, err = executor.Execute(context.Background(), - "TestExecutorPrepareExecute", - session, - "prepare prep_user2 from 'select'", - nil) + _, err = executor.Execute(context.Background(), nil, "TestExecutorPrepareExecute", session, "prepare prep_user2 from 'select'", nil) require.Error(t, err) require.Nil(t, session.PrepareStatement["prep_user2"]) // prepared statement is cleared from the session. // user defined variable does not exists on prepared query - _, err = executor.Execute(context.Background(), - "TestExecutorPrepareExecute", - session, - "prepare prep_user from @foo", - nil) + _, err = executor.Execute(context.Background(), nil, "TestExecutorPrepareExecute", session, "prepare prep_user from @foo", nil) require.Error(t, err) require.Nil(t, session.PrepareStatement["prep_user"]) // prepared statement is cleared from the session. // empty prepared query - _, err = executor.Execute(context.Background(), - "TestExecutorPrepareExecute", - session, - "prepare prep_user from ''", - nil) + _, err = executor.Execute(context.Background(), nil, "TestExecutorPrepareExecute", session, "prepare prep_user from ''", nil) require.Error(t, err) } @@ -2676,10 +2647,10 @@ func TestExecutorTruncateErrors(t *testing.T) { return nil } - _, err := executor.Execute(ctx, "TestExecute", session, "invalid statement", nil) + _, err := executor.Execute(ctx, nil, "TestExecute", session, "invalid statement", nil) assert.EqualError(t, err, "syntax error at posi [TRUNCATED]") - err = executor.StreamExecute(ctx, "TestExecute", session, "invalid statement", nil, fn) + err = executor.StreamExecute(ctx, nil, "TestExecute", session, "invalid statement", nil, fn) assert.EqualError(t, err, "syntax error at posi [TRUNCATED]") _, err = executor.Prepare(context.Background(), "TestExecute", session, "invalid statement", nil) @@ -2731,7 +2702,7 @@ func TestExecutorFlushStmt(t *testing.T) { for _, tc := range tcs { t.Run(tc.query+tc.targetStr, func(t *testing.T) { - _, err := executor.Execute(context.Background(), "TestExecutorFlushStmt", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), tc.query, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecutorFlushStmt", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), tc.query, nil) if tc.expectedErr == "" { require.NoError(t, err) } else { @@ -2742,8 +2713,90 @@ func TestExecutorFlushStmt(t *testing.T) { } } +// TestExecutorKillStmt tests the kill statements on executor. +func TestExecutorKillStmt(t *testing.T) { + executor, _, _, _ := createExecutorEnv() + + tcs := []struct { + errStr string + query string + disallow bool + + expectedLog string + }{{ + query: "kill 42", + expectedLog: "kill connection: 42", + }, { + query: "kill query 42", + expectedLog: "kill query: 42", + }, { + query: "kill 42", + errStr: "connection does not exists: 42", + }, { + query: "kill query 24", + errStr: "connection does not exists: 24", + }, { + query: "kill connection 1", + disallow: true, + errStr: "VT07001: kill statement execution not permitted.", + }, { + query: "kill query 1", + disallow: true, + errStr: "VT07001: kill statement execution not permitted.", + }} + + for _, tc := range tcs { + allowKillStmt = !tc.disallow + t.Run("execute:"+tc.query+tc.errStr, func(t *testing.T) { + mysqlCtx := &fakeMysqlConnection{ErrMsg: tc.errStr} + _, err := executor.Execute(context.Background(), mysqlCtx, "TestExecutorKillStmt", NewAutocommitSession(&vtgatepb.Session{}), tc.query, nil) + if tc.errStr != "" { + require.ErrorContains(t, err, tc.errStr) + } else { + require.NoError(t, err) + require.Equal(t, mysqlCtx.Log[0], tc.expectedLog) + } + }) + t.Run("stream:"+tc.query+tc.errStr, func(t *testing.T) { + mysqlCtx := &fakeMysqlConnection{ErrMsg: tc.errStr} + err := executor.StreamExecute(context.Background(), mysqlCtx, "TestExecutorKillStmt", NewAutocommitSession(&vtgatepb.Session{}), tc.query, nil, func(result *sqltypes.Result) error { + return nil + }) + if tc.errStr != "" { + require.ErrorContains(t, err, tc.errStr) + } else { + require.NoError(t, err) + require.Contains(t, mysqlCtx.Log[0], tc.expectedLog) + } + }) + } +} + +type fakeMysqlConnection struct { + ErrMsg string + Log []string +} + +func (f *fakeMysqlConnection) KillQuery(connID uint32) error { + if f.ErrMsg != "" { + return errors.New(f.ErrMsg) + } + f.Log = append(f.Log, fmt.Sprintf("kill query: %d", connID)) + return nil +} + +func (f *fakeMysqlConnection) KillConnection(ctx context.Context, connID uint32) error { + if f.ErrMsg != "" { + return errors.New(f.ErrMsg) + } + f.Log = append(f.Log, fmt.Sprintf("kill connection: %d", connID)) + return nil +} + +var _ vtgateservice.MySQLConnection = (*fakeMysqlConnection)(nil) + func exec(executor *Executor, session *SafeSession, sql string) (*sqltypes.Result, error) { - return executor.Execute(context.Background(), "TestExecute", session, sql, nil) + return executor.Execute(context.Background(), nil, "TestExecute", session, sql, nil) } func makeComments(text string) sqlparser.MarginComments { diff --git a/go/vt/vtgate/executor_vschema_ddl_test.go b/go/vt/vtgate/executor_vschema_ddl_test.go index 1383792051d..3e3d445f21a 100644 --- a/go/vt/vtgate/executor_vschema_ddl_test.go +++ b/go/vt/vtgate/executor_vschema_ddl_test.go @@ -152,7 +152,7 @@ func TestPlanExecutorAlterVSchemaKeyspace(t *testing.T) { } stmt := "alter vschema create vindex TestExecutor.test_vindex using hash" - _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _, vindex := waitForVindex(t, "TestExecutor", "test_vindex", vschemaUpdates, executor) @@ -181,7 +181,7 @@ func TestPlanExecutorCreateVindexDDL(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: ks}) stmt := "alter vschema create vindex test_vindex using hash" - _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _, vindex := waitForVindex(t, ks, "test_vindex", vschemaUpdates, executor) @@ -189,7 +189,7 @@ func TestPlanExecutorCreateVindexDDL(t *testing.T) { t.Errorf("updated vschema did not contain test_vindex") } - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) wantErr := "vindex test_vindex already exists in keyspace TestExecutor" if err == nil || err.Error() != wantErr { t.Errorf("create duplicate vindex: %v, want %s", err, wantErr) @@ -223,14 +223,14 @@ func TestPlanExecutorDropVindexDDL(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: ks}) stmt := "alter vschema drop vindex test_vindex" - _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) wantErr := "vindex test_vindex does not exists in keyspace TestExecutor" if err == nil || err.Error() != wantErr { t.Errorf("want error %v got %v", wantErr, err) } stmt = "alter vschema drop vindex TestExecutor.test_vindex" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) wantErr = "vindex test_vindex does not exists in keyspace TestExecutor" if err == nil || err.Error() != wantErr { t.Errorf("want error %v got %v", wantErr, err) @@ -238,7 +238,7 @@ func TestPlanExecutorDropVindexDDL(t *testing.T) { // add one vindex that has never been used by the tables stmt = "alter vschema create vindex test_vindex using hash" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _, vindex := waitForVindex(t, ks, "test_vindex", vschemaUpdates, executor) @@ -248,7 +248,7 @@ func TestPlanExecutorDropVindexDDL(t *testing.T) { // drop an existing vindex that has never been used by the tables stmt = "alter vschema drop vindex TestExecutor.test_vindex" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) vschema = <-vschemaUpdates _, ok = vschema.Keyspaces[ks].Vindexes["test_vindex"] @@ -258,7 +258,7 @@ func TestPlanExecutorDropVindexDDL(t *testing.T) { // drop an existing vindex that is used by at least one table stmt = "alter vschema drop vindex TestExecutor.keyspace_id" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) wantErr = "can not drop vindex cause keyspace_id still defined on table ksid_table" if err == nil || err.Error() != wantErr { t.Errorf("drop vindex still defined: %v, want %s", err, wantErr) @@ -297,19 +297,19 @@ func TestPlanExecutorAddDropVschemaTableDDL(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: ks}) stmt := "alter vschema add table test_table" - _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _ = waitForVschemaTables(t, ks, append([]string{"test_table"}, vschemaTables...), executor) stmt = "alter vschema add table test_table2" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _ = waitForVschemaTables(t, ks, append([]string{"test_table", "test_table2"}, vschemaTables...), executor) // Should fail adding a table on a sharded keyspace session = NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) stmt = "alter vschema add table test_table" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) wantErr := "add vschema table: unsupported on sharded keyspace TestExecutor" if err == nil || err.Error() != wantErr { t.Errorf("want error %v got %v", wantErr, err) @@ -344,7 +344,7 @@ func TestExecutorAddSequenceDDL(t *testing.T) { session := NewSafeSession(&vtgatepb.Session{TargetString: ks}) stmt := "alter vschema add sequence test_seq" - _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _ = waitForVschemaTables(t, ks, append(vschemaTables, []string{"test_seq"}...), executor) vschema = executor.vm.GetCurrentSrvVschema() @@ -359,7 +359,7 @@ func TestExecutorAddSequenceDDL(t *testing.T) { session = NewSafeSession(&vtgatepb.Session{TargetString: ksSharded}) stmt = "alter vschema add sequence sequence_table" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) wantErr := "add sequence table: unsupported on sharded keyspace TestExecutor" if err == nil || err.Error() != wantErr { @@ -368,13 +368,13 @@ func TestExecutorAddSequenceDDL(t *testing.T) { // Should be able to add autoincrement to table in sharded keyspace stmt = "alter vschema on test_table add vindex hash_index (id)" - if _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil); err != nil { + if _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil); err != nil { t.Error(err) } time.Sleep(10 * time.Millisecond) stmt = "alter vschema on test_table add auto_increment id using `db-name`.`test_seq`" - if _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil); err != nil { + if _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil); err != nil { t.Error(err) } time.Sleep(10 * time.Millisecond) @@ -407,14 +407,14 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { // Create a new vindex implicitly with the statement stmt := "alter vschema on test add vindex test_hash (id) using hash " - _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err := executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _, vindex := waitForVindex(t, ks, "test_hash", vschemaUpdates, executor) require.Equal(t, "hash", vindex.Type) _ = waitForColVindexes(t, ks, "test", []string{"test_hash"}, executor) - qr, err := executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) + qr, err := executor.Execute(context.Background(), nil, "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) require.NoError(t, err) wantqr := &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -426,17 +426,17 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { // Drop it stmt = "alter vschema on test drop vindex test_hash" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _, _ = waitForVindex(t, ks, "test_hash", vschemaUpdates, executor) _ = waitForColVindexes(t, ks, "test", []string{}, executor) - _, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) require.EqualError(t, err, "VT05005: table 'test' does not exist in keyspace 'TestExecutor'") // add it again using the same syntax stmt = "alter vschema on test add vindex test_hash (id) using hash " - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _, vindex = waitForVindex(t, ks, "test_hash", vschemaUpdates, executor) @@ -444,7 +444,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { _ = waitForColVindexes(t, ks, "test", []string{"test_hash"}, executor) - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) + qr, err = executor.Execute(context.Background(), nil, "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -457,7 +457,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { // add another stmt = "alter vschema on test add vindex test_lookup (c1,c2) using lookup with owner=`test`, from=`c1,c2`, table=test_lookup, to=keyspace_id" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) vschema, vindex = waitForVindex(t, ks, "test_lookup", vschemaUpdates, executor) @@ -474,7 +474,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { t.Fatalf("table test not defined in vschema") } - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) + qr, err = executor.Execute(context.Background(), nil, "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -486,7 +486,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { utils.MustMatch(t, wantqr, qr) stmt = "alter vschema on test add vindex test_hash_id2 (id2) using hash" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) vschema, vindex = waitForVindex(t, ks, "test_hash_id2", vschemaUpdates, executor) @@ -503,7 +503,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { t.Fatalf("table test not defined in vschema") } - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) + qr, err = executor.Execute(context.Background(), nil, "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -517,13 +517,13 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { // drop one stmt = "alter vschema on test drop vindex test_lookup" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) // wait for up to 50ms for it to disappear deadline := time.Now().Add(50 * time.Millisecond) for { - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) + qr, err = executor.Execute(context.Background(), nil, "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -544,7 +544,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { // use the newly created vindex on a new table stmt = "alter vschema on test2 add vindex test_hash (id)" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) vschema, vindex = waitForVindex(t, ks, "test_hash", vschemaUpdates, executor) @@ -557,7 +557,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { // create an identical vindex definition on a different table stmt = "alter vschema on test2 add vindex test_lookup (c1,c2) using lookup with owner=`test`, from=`c1,c2`, table=test_lookup, to=keyspace_id" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) vschema, vindex = waitForVindex(t, ks, "test_lookup", vschemaUpdates, executor) @@ -568,7 +568,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { require.Len(t, table.ColumnVindexes, 2) require.Equal(t, "test_lookup", table.ColumnVindexes[1].Name) - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test2", nil) + qr, err = executor.Execute(context.Background(), nil, "TestExecute", session, "show vschema vindexes on TestExecutor.test2", nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -581,7 +581,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { // now make sure we can create another vindex that references a table with dashes (i.e. escaping is necessary) stmt = "alter vschema on test2 add vindex test_lookup_fqn(c1,c2) using consistent_lookup_unique with owner=`test`, from=`c1,c2`, table=`test-keyspace`.`lookup-fqn`, to=`keyspace_id`" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.NoError(t, err) _, vindex = waitForVindex(t, ks, "test_lookup_fqn", vschemaUpdates, executor) @@ -592,35 +592,35 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { require.Equal(t, "keyspace_id", vindex.Params["to"]) stmt = "alter vschema on test2 add vindex nonexistent (c1,c2)" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, "vindex nonexistent does not exist in keyspace TestExecutor") stmt = "alter vschema on test2 add vindex test_hash (c1,c2) using lookup" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, "vindex test_hash defined with type hash not lookup") stmt = "alter vschema on test2 add vindex test_lookup (c1,c2) using lookup with owner=xyz" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, "vindex test_lookup defined with owner test not xyz") stmt = "alter vschema on test2 add vindex test_lookup (c1,c2) using lookup with owner=`test`, foo=bar" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, "vindex test_lookup defined with different parameters") stmt = "alter vschema on nonexistent drop vindex test_lookup" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, "table TestExecutor.nonexistent not defined in vschema") stmt = "alter vschema on nonexistent drop vindex test_lookup" - _, err = executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: "InvalidKeyspace"}), stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: "InvalidKeyspace"}), stmt, nil) require.EqualError(t, err, "VT05003: unknown database 'InvalidKeyspace' in vschema") stmt = "alter vschema on nowhere.nohow drop vindex test_lookup" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, "VT05003: unknown database 'nowhere' in vschema") stmt = "alter vschema on test drop vindex test_lookup" - _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + _, err = executor.Execute(context.Background(), nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, "vindex test_lookup not defined in table TestExecutor.test") // no queries should have gone to any tablets @@ -644,21 +644,21 @@ func TestPlanExecutorVindexDDLACL(t *testing.T) { // test that by default no users can perform the operation stmt := "alter vschema create vindex test_hash using hash" - _, err := executor.Execute(ctxRedUser, "TestExecute", session, stmt, nil) + _, err := executor.Execute(ctxRedUser, nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, `User 'redUser' is not authorized to perform vschema operations`) - _, err = executor.Execute(ctxBlueUser, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctxBlueUser, nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, `User 'blueUser' is not authorized to perform vschema operations`) // test when all users are enabled vschemaacl.AuthorizedDDLUsers = "%" vschemaacl.Init() - _, err = executor.Execute(ctxRedUser, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctxRedUser, nil, "TestExecute", session, stmt, nil) if err != nil { t.Errorf("unexpected error '%v'", err) } stmt = "alter vschema create vindex test_hash2 using hash" - _, err = executor.Execute(ctxBlueUser, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctxBlueUser, nil, "TestExecute", session, stmt, nil) if err != nil { t.Errorf("unexpected error '%v'", err) } @@ -666,11 +666,11 @@ func TestPlanExecutorVindexDDLACL(t *testing.T) { // test when only one user is enabled vschemaacl.AuthorizedDDLUsers = "orangeUser, blueUser, greenUser" vschemaacl.Init() - _, err = executor.Execute(ctxRedUser, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctxRedUser, nil, "TestExecute", session, stmt, nil) require.EqualError(t, err, `User 'redUser' is not authorized to perform vschema operations`) stmt = "alter vschema create vindex test_hash3 using hash" - _, err = executor.Execute(ctxBlueUser, "TestExecute", session, stmt, nil) + _, err = executor.Execute(ctxBlueUser, nil, "TestExecute", session, stmt, nil) if err != nil { t.Errorf("unexpected error '%v'", err) } diff --git a/go/vt/vtgate/executor_vstream_test.go b/go/vt/vtgate/executor_vstream_test.go index 828cdea2d40..21cec7dd583 100644 --- a/go/vt/vtgate/executor_vstream_test.go +++ b/go/vt/vtgate/executor_vstream_test.go @@ -80,17 +80,10 @@ func TestVStreamSQLUnsharded(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() go func() { - err := executor.StreamExecute( - ctx, - "TestExecuteStream", - NewAutocommitSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), - sql, - nil, - func(qr *sqltypes.Result) error { - results <- qr - return nil - }, - ) + err := executor.StreamExecute(ctx, nil, "TestExecuteStream", NewAutocommitSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), sql, nil, func(qr *sqltypes.Result) error { + results <- qr + return nil + }) require.NoError(t, err) }() timer := time.NewTimer(5 * time.Second) diff --git a/go/vt/vtgate/grpcvtgateconn/suite_test.go b/go/vt/vtgate/grpcvtgateconn/suite_test.go index b679a4b3ba5..e5cd5c3ac81 100644 --- a/go/vt/vtgate/grpcvtgateconn/suite_test.go +++ b/go/vt/vtgate/grpcvtgateconn/suite_test.go @@ -22,30 +22,27 @@ package grpcvtgateconn // moved back to its own package for reusability. import ( + "context" "errors" "fmt" "io" "strings" "testing" - "google.golang.org/protobuf/proto" - - "context" - "github.com/stretchr/testify/require" + "google.golang.org/protobuf/proto" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/tb" "vitess.io/vitess/go/vt/callerid" - "vitess.io/vitess/go/vt/vterrors" - "vitess.io/vitess/go/vt/vtgate/vtgateconn" - "vitess.io/vitess/go/vt/vtgate/vtgateservice" - binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/vterrors" + "vitess.io/vitess/go/vt/vtgate/vtgateconn" + "vitess.io/vitess/go/vt/vtgate/vtgateservice" ) // fakeVTGateService has the server side of this fake @@ -95,7 +92,7 @@ func (q *queryExecute) equal(q2 *queryExecute) bool { } // Execute is part of the VTGateService interface -func (f *fakeVTGateService) Execute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { +func (f *fakeVTGateService) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) { if f.hasError { return session, nil, errTestVtGateError } @@ -156,7 +153,7 @@ func (f *fakeVTGateService) ExecuteBatch(ctx context.Context, session *vtgatepb. } // StreamExecute is part of the VTGateService interface -func (f *fakeVTGateService) StreamExecute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { +func (f *fakeVTGateService) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { if f.panics { panic(fmt.Errorf("test forced panic")) } @@ -504,9 +501,9 @@ func testPrepare(t *testing.T, session *vtgateconn.VTGateSession) { execCase := execMap["request1"] _, err := session.Prepare(ctx, execCase.execQuery.SQL, execCase.execQuery.BindVariables) require.NoError(t, err) - //if !qr.Equal(execCase.result) { + // if !qr.Equal(execCase.result) { // t.Errorf("Unexpected result from Execute: got\n%#v want\n%#v", qr, execCase.result) - //} + // } _, err = session.Prepare(ctx, "none", nil) require.EqualError(t, err, "no match for: none") diff --git a/go/vt/vtgate/grpcvtgateservice/server.go b/go/vt/vtgate/grpcvtgateservice/server.go index 7b87b6ed708..7baff6cefe8 100644 --- a/go/vt/vtgate/grpcvtgateservice/server.go +++ b/go/vt/vtgate/grpcvtgateservice/server.go @@ -142,7 +142,7 @@ func (vtg *VTGate) Execute(ctx context.Context, request *vtgatepb.ExecuteRequest if session == nil { session = &vtgatepb.Session{Autocommit: true} } - session, result, err := vtg.server.Execute(ctx, session, request.Query.Sql, request.Query.BindVariables) + session, result, err := vtg.server.Execute(ctx, nil, session, request.Query.Sql, request.Query.BindVariables) return &vtgatepb.ExecuteResponse{ Result: sqltypes.ResultToProto3(result), Session: session, @@ -184,7 +184,7 @@ func (vtg *VTGate) StreamExecute(request *vtgatepb.StreamExecuteRequest, stream session = &vtgatepb.Session{Autocommit: true} } - session, vtgErr := vtg.server.StreamExecute(ctx, session, request.Query.Sql, request.Query.BindVariables, func(value *sqltypes.Result) error { + session, vtgErr := vtg.server.StreamExecute(ctx, nil, session, request.Query.Sql, request.Query.BindVariables, func(value *sqltypes.Result) error { // Send is not safe to call concurrently, but vtgate // guarantees that it's not. return stream.Send(&vtgatepb.StreamExecuteResponse{ diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go index 53f994aa449..182e20d1980 100644 --- a/go/vt/vtgate/plan_execute.go +++ b/go/vt/vtgate/plan_execute.go @@ -18,16 +18,17 @@ package vtgate import ( "context" + "strings" "time" - "vitess.io/vitess/go/vt/vtgate/logstats" - "vitess.io/vitess/go/sqltypes" querypb "vitess.io/vitess/go/vt/proto/query" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate/engine" + "vitess.io/vitess/go/vt/vtgate/logstats" + "vitess.io/vitess/go/vt/vtgate/vtgateservice" ) type planExec func(ctx context.Context, plan *engine.Plan, vc *vcursorImpl, bindVars map[string]*querypb.BindVariable, startTime time.Time) error @@ -35,6 +36,7 @@ type txResult func(sqlparser.StatementType, *sqltypes.Result) error func (e *Executor) newExecute( ctx context.Context, + mysqlCtx vtgateservice.MySQLConnection, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable, @@ -84,7 +86,7 @@ func (e *Executor) newExecute( safeSession.RecordWarning(warning) } - result, err := e.handleTransactions(ctx, safeSession, plan, logStats, vcursor, stmt) + result, err := e.handleTransactions(ctx, mysqlCtx, safeSession, plan, logStats, vcursor, stmt) if err != nil { return err } @@ -112,6 +114,7 @@ func (e *Executor) newExecute( // handleTransactions deals with transactional queries: begin, commit, rollback and savepoint management func (e *Executor) handleTransactions( ctx context.Context, + mysqlCtx vtgateservice.MySQLConnection, safeSession *SafeSession, plan *engine.Plan, logStats *logstats.LogStats, @@ -148,6 +151,8 @@ func (e *Executor) handleTransactions( return nil, vterrors.NewErrorf(vtrpcpb.Code_NOT_FOUND, vterrors.SPDoesNotExist, "SAVEPOINT does not exist: %s", query) }, vcursor.ignoreMaxMemoryRows) return qr, err + case sqlparser.StmtKill: + return e.handleKill(ctx, mysqlCtx, stmt, logStats) } return nil, nil } @@ -240,25 +245,37 @@ func (e *Executor) rollbackExecIfNeeded(ctx context.Context, safeSession *SafeSe // If it fails to rollback to the previous savepoint then, the transaction is forced to be rolled back. func (e *Executor) rollbackPartialExec(ctx context.Context, safeSession *SafeSession, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) error { var err error + var errMsg strings.Builder + + // If the context got cancelled we still have to revert the partial DML execution. + // We cannot use the parent context here anymore. + if ctx.Err() != nil { + errMsg.WriteString("context canceled: ") + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + } // needs to rollback only once. rQuery := safeSession.rollbackOnPartialExec if rQuery != txRollback { safeSession.SavepointRollback() - _, _, err := e.execute(ctx, safeSession, rQuery, bindVars, logStats) + _, _, err = e.execute(ctx, nil, safeSession, rQuery, bindVars, logStats) + // If no error, the revert is successful with the savepoint. Notify the reason as error to the client. if err == nil { - return vterrors.New(vtrpcpb.Code_ABORTED, "reverted partial DML execution failure") + errMsg.WriteString("reverted partial DML execution failure") + return vterrors.New(vtrpcpb.Code_ABORTED, errMsg.String()) } // not able to rollback changes of the failed query, so have to abort the complete transaction. } // abort the transaction. _ = e.txConn.Rollback(ctx, safeSession) - var errMsg = "transaction rolled back to reverse changes of partial DML execution" + errMsg.WriteString("transaction rolled back to reverse changes of partial DML execution") if err != nil { - return vterrors.Wrap(err, errMsg) + return vterrors.Wrap(err, errMsg.String()) } - return vterrors.New(vtrpcpb.Code_ABORTED, errMsg) + return vterrors.New(vtrpcpb.Code_ABORTED, errMsg.String()) } func (e *Executor) setLogStats(logStats *logstats.LogStats, plan *engine.Plan, vcursor *vcursorImpl, execStart time.Time, err error, qr *sqltypes.Result) { diff --git a/go/vt/vtgate/planbuilder/builder.go b/go/vt/vtgate/planbuilder/builder.go index 3ebe7bd95d7..cad0b70b0ae 100644 --- a/go/vt/vtgate/planbuilder/builder.go +++ b/go/vt/vtgate/planbuilder/builder.go @@ -272,7 +272,9 @@ func createInstructionFor(ctx context.Context, query string, stmt sqlparser.Stat return buildLoadPlan(query, vschema) case sqlparser.DBDDLStatement: return buildRoutePlan(stmt, reservedVars, vschema, buildDBDDLPlan) - case *sqlparser.Begin, *sqlparser.Commit, *sqlparser.Rollback, *sqlparser.Savepoint, *sqlparser.SRollback, *sqlparser.Release: + case *sqlparser.Begin, *sqlparser.Commit, *sqlparser.Rollback, + *sqlparser.Savepoint, *sqlparser.SRollback, *sqlparser.Release, + *sqlparser.Kill: // Empty by design. Not executed by a plan return nil, nil case *sqlparser.Show: diff --git a/go/vt/vtgate/plugin_mysql_server.go b/go/vt/vtgate/plugin_mysql_server.go index c7d4c53785c..1775709bbc0 100644 --- a/go/vt/vtgate/plugin_mysql_server.go +++ b/go/vt/vtgate/plugin_mysql_server.go @@ -104,20 +104,20 @@ type vtgateHandler struct { mu sync.Mutex vtg *VTGate - connections map[*mysql.Conn]bool + connections map[uint32]*mysql.Conn } func newVtgateHandler(vtg *VTGate) *vtgateHandler { return &vtgateHandler{ vtg: vtg, - connections: make(map[*mysql.Conn]bool), + connections: make(map[uint32]*mysql.Conn), } } func (vh *vtgateHandler) NewConnection(c *mysql.Conn) { vh.mu.Lock() defer vh.mu.Unlock() - vh.connections[c] = true + vh.connections[c.ConnectionID] = c } func (vh *vtgateHandler) numConnections() int { @@ -142,8 +142,8 @@ func (vh *vtgateHandler) ConnectionClosed(c *mysql.Conn) { // Rollback if there is an ongoing transaction. Ignore error. defer func() { vh.mu.Lock() - defer vh.mu.Unlock() - delete(vh.connections, c) + delete(vh.connections, c.ConnectionID) + vh.mu.Unlock() }() var ctx context.Context @@ -196,8 +196,9 @@ func startSpan(ctx context.Context, query, label string) (trace.Span, context.Co } func (vh *vtgateHandler) ComQuery(c *mysql.Conn, query string, callback func(*sqltypes.Result) error) error { - ctx := context.Background() - var cancel context.CancelFunc + ctx, cancel := context.WithCancel(context.Background()) + c.UpdateCancelCtx(cancel) + if mysqlQueryTimeout != 0 { ctx, cancel = context.WithTimeout(ctx, mysqlQueryTimeout) defer cancel() @@ -234,14 +235,14 @@ func (vh *vtgateHandler) ComQuery(c *mysql.Conn, query string, callback func(*sq }() if session.Options.Workload == querypb.ExecuteOptions_OLAP { - session, err := vh.vtg.StreamExecute(ctx, session, query, make(map[string]*querypb.BindVariable), callback) + session, err := vh.vtg.StreamExecute(ctx, vh, session, query, make(map[string]*querypb.BindVariable), callback) if err != nil { return mysql.NewSQLErrorFromError(err) } fillInTxStatusFlags(c, session) return nil } - session, result, err := vh.vtg.Execute(ctx, session, query, make(map[string]*querypb.BindVariable)) + session, result, err := vh.vtg.Execute(ctx, vh, session, query, make(map[string]*querypb.BindVariable)) if err := mysql.NewSQLErrorFromError(err); err != nil { return err @@ -307,13 +308,12 @@ func (vh *vtgateHandler) ComPrepare(c *mysql.Conn, query string, bindVars map[st } func (vh *vtgateHandler) ComStmtExecute(c *mysql.Conn, prepare *mysql.PrepareData, callback func(*sqltypes.Result) error) error { - var ctx context.Context - var cancel context.CancelFunc + ctx, cancel := context.WithCancel(context.Background()) + c.UpdateCancelCtx(cancel) + if mysqlQueryTimeout != 0 { - ctx, cancel = context.WithTimeout(context.Background(), mysqlQueryTimeout) + ctx, cancel = context.WithTimeout(ctx, mysqlQueryTimeout) defer cancel() - } else { - ctx = context.Background() } ctx = callinfo.MysqlCallInfo(ctx, c) @@ -341,14 +341,14 @@ func (vh *vtgateHandler) ComStmtExecute(c *mysql.Conn, prepare *mysql.PrepareDat }() if session.Options.Workload == querypb.ExecuteOptions_OLAP { - _, err := vh.vtg.StreamExecute(ctx, session, prepare.PrepareStmt, prepare.BindVars, callback) + _, err := vh.vtg.StreamExecute(ctx, vh, session, prepare.PrepareStmt, prepare.BindVars, callback) if err != nil { return mysql.NewSQLErrorFromError(err) } fillInTxStatusFlags(c, session) return nil } - _, qr, err := vh.vtg.Execute(ctx, session, prepare.PrepareStmt, prepare.BindVars) + _, qr, err := vh.vtg.Execute(ctx, vh, session, prepare.PrepareStmt, prepare.BindVars) if err != nil { return mysql.NewSQLErrorFromError(err) } @@ -376,6 +376,37 @@ func (vh *vtgateHandler) ComBinlogDumpGTID(c *mysql.Conn, logFile string, logPos return vterrors.VT12001("ComBinlogDumpGTID for the VTGate handler") } +// KillConnection closes an open connection by connection ID. +func (vh *vtgateHandler) KillConnection(ctx context.Context, connectionID uint32) error { + vh.mu.Lock() + defer vh.mu.Unlock() + + c, exists := vh.connections[connectionID] + if !exists { + return mysql.NewSQLError(mysql.ERNoSuchThread, mysql.SSUnknownSQLState, "Unknown thread id: %d", connectionID) + } + + // First, we mark the connection for close, so that even when the context is cancelled, while returning the response back to client, + // the connection can get closed, + // Closing the connection will trigger ConnectionClosed method which rollback any open transaction. + c.MarkForClose() + c.CancelCtx() + + return nil +} + +// KillQuery cancels any execution query on the provided connection ID. +func (vh *vtgateHandler) KillQuery(connectionID uint32) error { + vh.mu.Lock() + defer vh.mu.Unlock() + c, exists := vh.connections[connectionID] + if !exists { + return mysql.NewSQLError(mysql.ERNoSuchThread, mysql.SSUnknownSQLState, "Unknown thread id: %d", connectionID) + } + c.CancelCtx() + return nil +} + func (vh *vtgateHandler) session(c *mysql.Conn) *vtgatepb.Session { session, _ := c.ClientData.(*vtgatepb.Session) if session == nil { @@ -580,7 +611,7 @@ func shutdownMysqlProtocolAndDrain() { log.Infof("Waiting for all client connections to be idle (%d active)...", atomic.LoadInt32(&busyConnections)) start := time.Now() reported := start - for atomic.LoadInt32(&busyConnections) != 0 { + for atomic.LoadInt32(&busyConnections) > 0 { if time.Since(reported) > 2*time.Second { log.Infof("Still waiting for client connections to be idle (%d active)...", atomic.LoadInt32(&busyConnections)) reported = time.Now() @@ -604,9 +635,9 @@ func rollbackAtShutdown() { if vtgateHandle != nil { vtgateHandle.mu.Lock() defer vtgateHandle.mu.Unlock() - for c := range vtgateHandle.connections { + for id, c := range vtgateHandle.connections { if c != nil { - log.Infof("Rolling back transactions associated with connection ID: %v", c.ConnectionID) + log.Infof("Rolling back transactions associated with connection ID: %v", id) c.Close() } } diff --git a/go/vt/vtgate/plugin_mysql_server_test.go b/go/vt/vtgate/plugin_mysql_server_test.go index ceccadf706a..dc57bc7763a 100644 --- a/go/vt/vtgate/plugin_mysql_server_test.go +++ b/go/vt/vtgate/plugin_mysql_server_test.go @@ -28,11 +28,11 @@ import ( "time" "github.com/stretchr/testify/assert" - - "vitess.io/vitess/go/trace" + "github.com/stretchr/testify/require" "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/trace" querypb "vitess.io/vitess/go/vt/proto/query" "vitess.io/vitess/go/vt/tlstest" ) @@ -296,3 +296,42 @@ func testInitTLSConfig(t *testing.T, serverCA bool) { t.Fatalf("init tls config should have been recreated after SIGHUP") } } + +// TestKillMethods test the mysql plugin for kill method calls. +func TestKillMethods(t *testing.T) { + executor, _, _, _ := createExecutorEnv() + vh := newVtgateHandler(&VTGate{executor: executor}) + + // connection does not exist + err := vh.KillQuery(12345) + assert.ErrorContains(t, err, "Unknown thread id: 12345 (errno 1094) (sqlstate HY000)") + + err = vh.KillConnection(context.Background(), 12345) + assert.ErrorContains(t, err, "Unknown thread id: 12345 (errno 1094) (sqlstate HY000)") + + // add a connection + mysqlConn := mysql.GetTestConn() + mysqlConn.ConnectionID = 1 + vh.connections[1] = mysqlConn + + // connection exists + + // updating context. + ctx, cancel := context.WithCancel(context.Background()) + mysqlConn.UpdateCancelCtx(cancel) + + // kill query + err = vh.KillQuery(1) + assert.NoError(t, err) + require.EqualError(t, ctx.Err(), "context canceled") + + // updating context. + ctx, cancel = context.WithCancel(context.Background()) + mysqlConn.UpdateCancelCtx(cancel) + + // kill connection + err = vh.KillConnection(context.Background(), 1) + assert.NoError(t, err) + require.EqualError(t, ctx.Err(), "context canceled") + require.True(t, mysqlConn.IsMarkedForClose()) +} diff --git a/go/vt/vtgate/vcursor_impl.go b/go/vt/vtgate/vcursor_impl.go index 2cd2bdd7331..d758d250243 100644 --- a/go/vt/vtgate/vcursor_impl.go +++ b/go/vt/vtgate/vcursor_impl.go @@ -25,10 +25,6 @@ import ( "sync/atomic" "time" - "vitess.io/vitess/go/vt/vtgate/logstats" - - "vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext" - "github.com/google/uuid" "vitess.io/vitess/go/mysql" @@ -51,9 +47,12 @@ import ( "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate/buffer" "vitess.io/vitess/go/vt/vtgate/engine" + "vitess.io/vitess/go/vt/vtgate/logstats" + "vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext" "vitess.io/vitess/go/vt/vtgate/semantics" "vitess.io/vitess/go/vt/vtgate/vindexes" "vitess.io/vitess/go/vt/vtgate/vschemaacl" + "vitess.io/vitess/go/vt/vtgate/vtgateservice" ) var _ engine.VCursor = (*vcursorImpl)(nil) @@ -63,7 +62,7 @@ var _ vindexes.VCursor = (*vcursorImpl)(nil) // vcursor_impl needs these facilities to be able to be able to execute queries for vindexes type iExecute interface { - Execute(ctx context.Context, method string, session *SafeSession, s string, vars map[string]*querypb.BindVariable) (*sqltypes.Result, error) + Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, method string, session *SafeSession, s string, vars map[string]*querypb.BindVariable) (*sqltypes.Result, error) ExecuteMultiShard(ctx context.Context, primitive engine.Primitive, rss []*srvtopo.ResolvedShard, queries []*querypb.BoundQuery, session *SafeSession, autocommit bool, ignoreMaxMemoryRows bool) (qr *sqltypes.Result, errs []error) StreamExecuteMulti(ctx context.Context, primitive engine.Primitive, query string, rss []*srvtopo.ResolvedShard, vars []map[string]*querypb.BindVariable, session *SafeSession, autocommit bool, callback func(reply *sqltypes.Result) error) []error ExecuteLock(ctx context.Context, rs *srvtopo.ResolvedShard, query *querypb.BoundQuery, session *SafeSession, lockFuncType sqlparser.LockingFuncType) (*sqltypes.Result, error) @@ -498,7 +497,7 @@ func (vc *vcursorImpl) Execute(ctx context.Context, method string, query string, return nil, err } - qr, err := vc.executor.Execute(ctx, method, session, vc.marginComments.Leading+query+vc.marginComments.Trailing, bindVars) + qr, err := vc.executor.Execute(ctx, nil, method, session, vc.marginComments.Leading+query+vc.marginComments.Trailing, bindVars) vc.setRollbackOnPartialExecIfRequired(err != nil, rollbackOnError) return qr, err @@ -513,7 +512,7 @@ func (vc *vcursorImpl) markSavepoint(ctx context.Context, needsRollbackOnParialE } uID := fmt.Sprintf("_vt%s", strings.ReplaceAll(uuid.NewString(), "-", "_")) spQuery := fmt.Sprintf("%ssavepoint %s%s", vc.marginComments.Leading, uID, vc.marginComments.Trailing) - _, err := vc.executor.Execute(ctx, "MarkSavepoint", vc.safeSession, spQuery, bindVars) + _, err := vc.executor.Execute(ctx, nil, "MarkSavepoint", vc.safeSession, spQuery, bindVars) if err != nil { return err } diff --git a/go/vt/vtgate/vtgate.go b/go/vt/vtgate/vtgate.go index 8f716385ff5..5703d7f98ae 100644 --- a/go/vt/vtgate/vtgate.go +++ b/go/vt/vtgate/vtgate.go @@ -39,6 +39,11 @@ import ( "vitess.io/vitess/go/vt/key" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/logutil" + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" + vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/sidecardb" @@ -47,14 +52,8 @@ import ( "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext" - "vitess.io/vitess/go/vt/vtgate/vtgateservice" - - binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" - querypb "vitess.io/vitess/go/vt/proto/query" - topodatapb "vitess.io/vitess/go/vt/proto/topodata" - vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" - vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" vtschema "vitess.io/vitess/go/vt/vtgate/schema" + "vitess.io/vitess/go/vt/vtgate/vtgateservice" ) var ( @@ -112,6 +111,9 @@ var ( queryLogBufferSize = 10 messageStreamGracePeriod = 30 * time.Second + + // allowKillStmt to allow execution of kill statement. + allowKillStmt bool ) func registerFlags(fs *pflag.FlagSet) { @@ -147,6 +149,7 @@ func registerFlags(fs *pflag.FlagSet) { fs.IntVar(&queryLogBufferSize, "querylog-buffer-size", queryLogBufferSize, "Maximum number of buffered query logs before throttling log output") fs.DurationVar(&messageStreamGracePeriod, "message_stream_grace_period", messageStreamGracePeriod, "the amount of time to give for a vttablet to resume if it ends a message stream, usually because of a reparent.") fs.BoolVar(&enableViews, "enable-views", enableViews, "Enable views support in vtgate.") + fs.BoolVar(&allowKillStmt, "allow-kill-statement", allowKillStmt, "Allows the execution of kill statement") } func init() { servenv.OnParseFor("vtgate", registerFlags) @@ -445,7 +448,7 @@ func (vtg *VTGate) Gateway() *TabletGateway { } // Execute executes a non-streaming query. This is a V3 function. -func (vtg *VTGate) Execute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (newSession *vtgatepb.Session, qr *sqltypes.Result, err error) { +func (vtg *VTGate) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (newSession *vtgatepb.Session, qr *sqltypes.Result, err error) { // In this context, we don't care if we can't fully parse destination destKeyspace, destTabletType, _, _ := vtg.executor.ParseDestinationTarget(session.TargetString) statsKey := []string{"Execute", destKeyspace, topoproto.TabletTypeLString(destTabletType)} @@ -455,7 +458,7 @@ func (vtg *VTGate) Execute(ctx context.Context, session *vtgatepb.Session, sql s err = vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "%v", bvErr) } else { safeSession := NewSafeSession(session) - qr, err = vtg.executor.Execute(ctx, "Execute", safeSession, sql, bindVariables) + qr, err = vtg.executor.Execute(ctx, mysqlCtx, "Execute", safeSession, sql, bindVariables) safeSession.RemoveInternalSavepoint() } if err == nil { @@ -492,7 +495,7 @@ func (vtg *VTGate) ExecuteBatch(ctx context.Context, session *vtgatepb.Session, if len(bindVariablesList) != 0 { bv = bindVariablesList[i] } - session, qrl[i].QueryResult, qrl[i].QueryError = vtg.Execute(ctx, session, sql, bv) + session, qrl[i].QueryResult, qrl[i].QueryError = vtg.Execute(ctx, nil, session, sql, bv) if qr := qrl[i].QueryResult; qr != nil { vtg.rowsReturned.Add(statsKey, int64(len(qr.Rows))) vtg.rowsAffected.Add(statsKey, int64(qr.RowsAffected)) @@ -504,7 +507,7 @@ func (vtg *VTGate) ExecuteBatch(ctx context.Context, session *vtgatepb.Session, // StreamExecute executes a streaming query. This is a V3 function. // Note we guarantee the callback will not be called concurrently // by multiple go routines. -func (vtg *VTGate) StreamExecute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { +func (vtg *VTGate) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) { // In this context, we don't care if we can't fully parse destination destKeyspace, destTabletType, _, _ := vtg.executor.ParseDestinationTarget(session.TargetString) statsKey := []string{"StreamExecute", destKeyspace, topoproto.TabletTypeLString(destTabletType)} @@ -518,6 +521,7 @@ func (vtg *VTGate) StreamExecute(ctx context.Context, session *vtgatepb.Session, } else { err = vtg.executor.StreamExecute( ctx, + mysqlCtx, "StreamExecute", safeSession, sql, diff --git a/go/vt/vtgate/vtgate_test.go b/go/vt/vtgate/vtgate_test.go index 94451706117..cb52ac31af9 100644 --- a/go/vt/vtgate/vtgate_test.go +++ b/go/vt/vtgate/vtgate_test.go @@ -88,6 +88,7 @@ func TestVTGateExecute(t *testing.T) { sbc := hcVTGateTest.AddTestTablet("aa", "1.1.1.1", 1001, KsTestUnsharded, "0", topodatapb.TabletType_PRIMARY, true, 1, nil) _, qr, err := rpcVTGate.Execute( context.Background(), + nil, &vtgatepb.Session{ Autocommit: true, TargetString: "@primary", @@ -128,6 +129,7 @@ func TestVTGateExecuteError(t *testing.T) { hcVTGateTest.AddTestTablet("aa", "1.1.1.1", 1001, KsTestUnsharded, "0", topodatapb.TabletType_PRIMARY, true, 1, nil) _, qr, err := rpcVTGate.Execute( context.Background(), + nil, &vtgatepb.Session{ Autocommit: true, TargetString: "@primary", @@ -227,6 +229,7 @@ func TestVTGateExecuteWithKeyspaceShard(t *testing.T) { // Valid keyspace. _, qr, err := rpcVTGate.Execute( context.Background(), + nil, &vtgatepb.Session{ TargetString: KsTestUnsharded, }, @@ -243,6 +246,7 @@ func TestVTGateExecuteWithKeyspaceShard(t *testing.T) { // Invalid keyspace. _, _, err = rpcVTGate.Execute( context.Background(), + nil, &vtgatepb.Session{ TargetString: "invalid_keyspace", }, @@ -255,6 +259,7 @@ func TestVTGateExecuteWithKeyspaceShard(t *testing.T) { // Valid keyspace/shard. _, qr, err = rpcVTGate.Execute( context.Background(), + nil, &vtgatepb.Session{ TargetString: KsTestUnsharded + ":0@primary", }, @@ -269,6 +274,7 @@ func TestVTGateExecuteWithKeyspaceShard(t *testing.T) { // Invalid keyspace/shard. _, _, err = rpcVTGate.Execute( context.Background(), + nil, &vtgatepb.Session{ TargetString: KsTestUnsharded + ":noshard@primary", }, @@ -288,6 +294,7 @@ func TestVTGateStreamExecute(t *testing.T) { var qrs []*sqltypes.Result _, err := rpcVTGate.StreamExecute( context.Background(), + nil, &vtgatepb.Session{ TargetString: "@primary", Options: executeOptions, @@ -331,7 +338,7 @@ func TestVTGateBindVarError(t *testing.T) { }{{ name: "Execute", f: func() error { - _, _, err := rpcVTGate.Execute(ctx, session, "", bindVars) + _, _, err := rpcVTGate.Execute(ctx, nil, session, "", bindVars) return err }, }, { @@ -343,7 +350,7 @@ func TestVTGateBindVarError(t *testing.T) { }, { name: "StreamExecute", f: func() error { - _, err := rpcVTGate.StreamExecute(ctx, session, "", bindVars, func(_ *sqltypes.Result) error { return nil }) + _, err := rpcVTGate.StreamExecute(ctx, nil, session, "", bindVars, func(_ *sqltypes.Result) error { return nil }) return err }, }} @@ -362,6 +369,7 @@ func testErrorPropagation(t *testing.T, sbcs []*sandboxconn.SandboxConn, before } _, _, err := rpcVTGate.Execute( context.Background(), + nil, primarySession, "select id from t1", nil, @@ -384,6 +392,7 @@ func testErrorPropagation(t *testing.T, sbcs []*sandboxconn.SandboxConn, before } _, err = rpcVTGate.StreamExecute( context.Background(), + nil, primarySession, "select id from t1", nil, @@ -506,21 +515,11 @@ func TestErrorIssuesRollback(t *testing.T) { // Start a transaction, send one statement. // Simulate an error that should trigger a rollback: // vtrpcpb.Code_ABORTED case. - session, _, err := rpcVTGate.Execute( - context.Background(), - &vtgatepb.Session{}, - "begin", - nil, - ) + session, _, err := rpcVTGate.Execute(context.Background(), nil, &vtgatepb.Session{}, "begin", nil) if err != nil { t.Fatalf("cannot start a transaction: %v", err) } - session, _, err = rpcVTGate.Execute( - context.Background(), - session, - "select id from t1", - nil, - ) + session, _, err = rpcVTGate.Execute(context.Background(), nil, session, "select id from t1", nil) if err != nil { t.Fatalf("want nil, got %v", err) } @@ -528,12 +527,7 @@ func TestErrorIssuesRollback(t *testing.T) { t.Errorf("want 0, got %d", sbc.RollbackCount.Load()) } sbc.MustFailCodes[vtrpcpb.Code_ABORTED] = 20 - _, _, err = rpcVTGate.Execute( - context.Background(), - session, - "select id from t1", - nil, - ) + _, _, err = rpcVTGate.Execute(context.Background(), nil, session, "select id from t1", nil) if err == nil { t.Fatalf("want error but got nil") } @@ -546,21 +540,11 @@ func TestErrorIssuesRollback(t *testing.T) { // Start a transaction, send one statement. // Simulate an error that should trigger a rollback: // vtrpcpb.ErrorCode_RESOURCE_EXHAUSTED case. - session, _, err = rpcVTGate.Execute( - context.Background(), - &vtgatepb.Session{}, - "begin", - nil, - ) + session, _, err = rpcVTGate.Execute(context.Background(), nil, &vtgatepb.Session{}, "begin", nil) if err != nil { t.Fatalf("cannot start a transaction: %v", err) } - session, _, err = rpcVTGate.Execute( - context.Background(), - session, - "select id from t1", - nil, - ) + session, _, err = rpcVTGate.Execute(context.Background(), nil, session, "select id from t1", nil) if err != nil { t.Fatalf("want nil, got %v", err) } @@ -568,12 +552,7 @@ func TestErrorIssuesRollback(t *testing.T) { t.Errorf("want 0, got %d", sbc.RollbackCount.Load()) } sbc.MustFailCodes[vtrpcpb.Code_RESOURCE_EXHAUSTED] = 20 - _, _, err = rpcVTGate.Execute( - context.Background(), - session, - "select id from t1", - nil, - ) + _, _, err = rpcVTGate.Execute(context.Background(), nil, session, "select id from t1", nil) if err == nil { t.Fatalf("want error but got nil") } @@ -586,21 +565,11 @@ func TestErrorIssuesRollback(t *testing.T) { // Start a transaction, send one statement. // Simulate an error that should *not* trigger a rollback: // vtrpcpb.Code_ALREADY_EXISTS case. - session, _, err = rpcVTGate.Execute( - context.Background(), - &vtgatepb.Session{}, - "begin", - nil, - ) + session, _, err = rpcVTGate.Execute(context.Background(), nil, &vtgatepb.Session{}, "begin", nil) if err != nil { t.Fatalf("cannot start a transaction: %v", err) } - session, _, err = rpcVTGate.Execute( - context.Background(), - session, - "select id from t1", - nil, - ) + session, _, err = rpcVTGate.Execute(context.Background(), nil, session, "select id from t1", nil) if err != nil { t.Fatalf("want nil, got %v", err) } @@ -608,12 +577,7 @@ func TestErrorIssuesRollback(t *testing.T) { t.Errorf("want 0, got %d", sbc.RollbackCount.Load()) } sbc.MustFailCodes[vtrpcpb.Code_ALREADY_EXISTS] = 20 - _, _, err = rpcVTGate.Execute( - context.Background(), - session, - "select id from t1", - nil, - ) + _, _, err = rpcVTGate.Execute(context.Background(), nil, session, "select id from t1", nil) if err == nil { t.Fatalf("want error but got nil") } @@ -695,13 +659,13 @@ func TestMultiInternalSavepointVtGate(t *testing.T) { require.False(t, session.InTransaction) var err error - session, _, err = rpcVTGate.Execute(context.Background(), session, "begin", nil) + session, _, err = rpcVTGate.Execute(context.Background(), nil, session, "begin", nil) require.NoError(t, err) require.True(t, session.GetAutocommit()) require.True(t, session.InTransaction) // this query goes to multiple shards so internal savepoint will be created. - session, _, err = rpcVTGate.Execute(context.Background(), session, "insert into sp_tbl(user_id) values (1), (3)", nil) + session, _, err = rpcVTGate.Execute(context.Background(), nil, session, "insert into sp_tbl(user_id) values (1), (3)", nil) require.NoError(t, err) require.True(t, session.GetAutocommit()) require.True(t, session.InTransaction) @@ -728,7 +692,7 @@ func TestMultiInternalSavepointVtGate(t *testing.T) { sbc2.Queries = nil // multi shard so new savepoint will be created. - session, _, err = rpcVTGate.Execute(context.Background(), session, "insert into sp_tbl(user_id) values (2), (4)", nil) + session, _, err = rpcVTGate.Execute(context.Background(), nil, session, "insert into sp_tbl(user_id) values (2), (4)", nil) require.NoError(t, err) wantQ = []*querypb.BoundQuery{{ Sql: "savepoint x", @@ -749,7 +713,7 @@ func TestMultiInternalSavepointVtGate(t *testing.T) { sbc3.Queries = nil // single shard so no savepoint will be created and neither any old savepoint will be executed - _, _, err = rpcVTGate.Execute(context.Background(), session, "insert into sp_tbl(user_id) values (5)", nil) + _, _, err = rpcVTGate.Execute(context.Background(), nil, session, "insert into sp_tbl(user_id) values (5)", nil) require.NoError(t, err) wantQ = []*querypb.BoundQuery{{ Sql: "insert into sp_tbl(user_id) values (:_user_id_0)", diff --git a/go/vt/vtgate/vtgateservice/interface.go b/go/vt/vtgate/vtgateservice/interface.go index f38e25a4726..bbfb2b2657e 100644 --- a/go/vt/vtgate/vtgateservice/interface.go +++ b/go/vt/vtgate/vtgateservice/interface.go @@ -22,7 +22,6 @@ import ( "context" "vitess.io/vitess/go/sqltypes" - binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" @@ -32,10 +31,9 @@ import ( // VTGateService is the interface implemented by the VTGate service, // that RPC server implementations will call. type VTGateService interface { - // V3 API - Execute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) + Execute(ctx context.Context, mysqlCtx MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, *sqltypes.Result, error) ExecuteBatch(ctx context.Context, session *vtgatepb.Session, sqlList []string, bindVariablesList []map[string]*querypb.BindVariable) (*vtgatepb.Session, []sqltypes.QueryResponse, error) - StreamExecute(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) + StreamExecute(ctx context.Context, mysqlCtx MySQLConnection, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error) // Prepare statement support Prepare(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (*vtgatepb.Session, []*querypb.Field, error) @@ -54,3 +52,12 @@ type VTGateService interface { // RPC implementation method, before calling any of the previous methods HandlePanic(err *error) } + +// MySQLConnection is an interface that allows to execute operations on the provided connection id. +// This is used by vtgate executor to execute kill queries. +type MySQLConnection interface { + // KillQuery stops the an executing query on the connection. + KillQuery(uint32) error + // KillConnection closes the connection and also stops any executing query on it. + KillConnection(context.Context, uint32) error +} diff --git a/test/config.json b/test/config.json index a58891d537f..7cfc4a2db9e 100644 --- a/test/config.json +++ b/test/config.json @@ -639,6 +639,15 @@ "RetryMax": 1, "Tags": [] }, + "vtgate_kill": { + "File": "unused.go", + "Args": ["vitess.io/vitess/go/test/endtoend/vtgate/queries/kill"], + "Command": [], + "Manual": false, + "Shard": "vtgate_queries", + "RetryMax": 1, + "Tags": [] + }, "vtgate_concurrentdml": { "File": "unused.go", "Args": ["vitess.io/vitess/go/test/endtoend/vtgate/concurrentdml"],