From b7ac8fbd3692b9e84899e21ca211f32639c41254 Mon Sep 17 00:00:00 2001 From: Yiliang Qiu <68439848+qqIsAProgrammer@users.noreply.github.com> Date: Mon, 31 Oct 2022 23:40:10 +0800 Subject: [PATCH] Implement the low cardinality index (#5382) This PR is for Summer-2022 Implement the Low Cardinality HashMap project, and the project ID is 22fa00152. This PR is implementing a low cardinality index, and will use it to optimize JOIN and GROUP BY. The design documentation has been uploaded to https://github.com/matrixorigin/docs/blob/main/design/low_cardinality_design_doc.md Co-authored-by: bRong Njam <longran1989@gmail.com> --- pkg/common/hashmap/joinmap.go | 9 +- pkg/common/hashmap/types.go | 2 + pkg/container/batch/batch.go | 16 + pkg/container/index/dict/dict.go | 254 + pkg/container/index/dict/dict_test.go | 271 + pkg/container/index/dict/reverse_index.go | 163 + pkg/container/index/low_cardinality_index.go | 151 + .../index/low_cardinality_index_test.go | 90 + pkg/container/vector/vector.go | 15 + pkg/pb/plan/plan.pb.go | 710 +- pkg/sql/colexec/group/group.go | 58 +- pkg/sql/colexec/group/group_bench_test.go | 172 + pkg/sql/colexec/group/group_test.go | 72 + pkg/sql/colexec/group/types.go | 3 + pkg/sql/colexec/hashbuild/build.go | 35 +- pkg/sql/colexec/hashbuild/build_test.go | 43 + pkg/sql/colexec/hashbuild/types.go | 3 + pkg/sql/colexec/join/join.go | 137 +- pkg/sql/colexec/join/join_bench_test.go | 226 + pkg/sql/colexec/join/join_test.go | 102 +- pkg/sql/parsers/dialect/mysql/keywords.go | 1 + pkg/sql/parsers/dialect/mysql/mysql_sql.go | 6912 +++++++++-------- pkg/sql/parsers/dialect/mysql/mysql_sql.y | 9 +- .../parsers/dialect/mysql/mysql_sql_test.go | 4 + pkg/sql/parsers/tree/create.go | 12 + pkg/testutil/util_make.go | 30 + proto/plan.proto | 1 + 27 files changed, 5713 insertions(+), 3788 deletions(-) create mode 100644 pkg/container/index/dict/dict.go create mode 100644 pkg/container/index/dict/dict_test.go create mode 100644 pkg/container/index/dict/reverse_index.go create mode 100644 pkg/container/index/low_cardinality_index.go create mode 100644 pkg/container/index/low_cardinality_index_test.go create mode 100644 pkg/sql/colexec/group/group_bench_test.go create mode 100644 pkg/sql/colexec/join/join_bench_test.go diff --git a/pkg/common/hashmap/joinmap.go b/pkg/common/hashmap/joinmap.go index 1997e0b0e..af4e935bc 100644 --- a/pkg/common/hashmap/joinmap.go +++ b/pkg/common/hashmap/joinmap.go @@ -17,16 +17,18 @@ package hashmap import ( "sync/atomic" + "github.com/matrixorigin/matrixone/pkg/container/index" "github.com/matrixorigin/matrixone/pkg/pb/plan" ) -func NewJoinMap(sels [][]int64, expr *plan.Expr, mp *StrHashMap, hasNull bool) *JoinMap { +func NewJoinMap(sels [][]int64, expr *plan.Expr, mp *StrHashMap, hasNull bool, idx *index.LowCardinalityIndex) *JoinMap { return &JoinMap{ cnt: 1, mp: mp, expr: expr, sels: sels, hasNull: hasNull, + idx: idx, } } @@ -46,6 +48,10 @@ func (jm *JoinMap) HasNull() bool { return jm.hasNull } +func (jm *JoinMap) Index() *index.LowCardinalityIndex { + return jm.idx +} + func (jm *JoinMap) Dup() *JoinMap { m0 := &StrHashMap{ m: jm.mp.m, @@ -64,6 +70,7 @@ func (jm *JoinMap) Dup() *JoinMap { sels: jm.sels, hasNull: jm.hasNull, cnt: atomic.LoadInt64(&jm.cnt), + idx: jm.idx, } } diff --git a/pkg/common/hashmap/types.go b/pkg/common/hashmap/types.go index 098d9469f..4db863666 100644 --- a/pkg/common/hashmap/types.go +++ b/pkg/common/hashmap/types.go @@ -17,6 +17,7 @@ package hashmap import ( "github.com/matrixorigin/matrixone/pkg/common/mpool" "github.com/matrixorigin/matrixone/pkg/container/hashtable" + "github.com/matrixorigin/matrixone/pkg/container/index" "github.com/matrixorigin/matrixone/pkg/container/vector" "github.com/matrixorigin/matrixone/pkg/pb/plan" ) @@ -67,6 +68,7 @@ type JoinMap struct { expr *plan.Expr mp *StrHashMap hasNull bool + idx *index.LowCardinalityIndex } // StrHashMap key is []byte, value is an uint64 value (starting from 1) diff --git a/pkg/container/batch/batch.go b/pkg/container/batch/batch.go index 69e5cc54a..9fd8c53bb 100644 --- a/pkg/container/batch/batch.go +++ b/pkg/container/batch/batch.go @@ -23,6 +23,7 @@ import ( "github.com/matrixorigin/matrixone/pkg/common/moerr" "github.com/matrixorigin/matrixone/pkg/common/mpool" + "github.com/matrixorigin/matrixone/pkg/container/index" "github.com/matrixorigin/matrixone/pkg/container/types" "github.com/matrixorigin/matrixone/pkg/container/vector" "github.com/matrixorigin/matrixone/pkg/util/fault" @@ -240,6 +241,9 @@ func (bat *Batch) Clean(m *mpool.MPool) { for _, vec := range bat.Vecs { if vec != nil { vec.Free(m) + if vec.IsLowCardinality() { + vec.Index().(*index.LowCardinalityIndex).Free() + } } } for _, agg := range bat.Aggs { @@ -289,6 +293,18 @@ func (bat *Batch) Append(mh *mpool.MPool, b *Batch) (*Batch, error) { if err := vector.UnionBatch(bat.Vecs[i], b.Vecs[i], 0, vector.Length(b.Vecs[i]), flags[:vector.Length(b.Vecs[i])], mh); err != nil { return bat, err } + if b.Vecs[i].IsLowCardinality() { + idx := b.Vecs[i].Index().(*index.LowCardinalityIndex) + if bat.Vecs[i].Index() == nil { + bat.Vecs[i].SetIndex(idx.Dup()) + } else { + appendIdx := bat.Vecs[i].Index().(*index.LowCardinalityIndex) + dst, src := appendIdx.GetPoses(), idx.GetPoses() + if err := vector.UnionBatch(dst, src, 0, vector.Length(src), flags[:vector.Length(src)], mh); err != nil { + return bat, err + } + } + } } bat.Zs = append(bat.Zs, b.Zs...) return bat, nil diff --git a/pkg/container/index/dict/dict.go b/pkg/container/index/dict/dict.go new file mode 100644 index 000000000..148a0587a --- /dev/null +++ b/pkg/container/index/dict/dict.go @@ -0,0 +1,254 @@ +// Copyright 2021 Matrix Origin +// +// 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 dict + +import ( + "github.com/matrixorigin/matrixone/pkg/common/mpool" + "github.com/matrixorigin/matrixone/pkg/container/types" + "github.com/matrixorigin/matrixone/pkg/container/vector" +) + +type Dict struct { + typ types.Type + + m *mpool.MPool + idx reverseIndex + unique *vector.Vector + + ref int +} + +func New(typ types.Type, m *mpool.MPool) (*Dict, error) { + d := &Dict{ + typ: typ, + m: m, + } + + var idx reverseIndex + var err error + + if d.fixed() { // check whether the type of data is fixed-length or variable-length + if idx, err = newFixedReverseIndex(m); err != nil { + return nil, err + } + d.unique = vector.New(types.T_uint64.ToType()) + } else { + if idx, err = newVarReverseIndex(m); err != nil { + return nil, err + } + d.unique = vector.New(types.T_varchar.ToType()) + } + + d.idx = idx + d.ref = 1 + return d, nil +} + +func (d *Dict) GetUnique() *vector.Vector { + return d.unique +} + +func (d *Dict) Cardinality() uint64 { + return uint64(d.unique.Length()) +} + +func (d *Dict) Dup() *Dict { + d.ref++ + return d +} + +func (d *Dict) InsertBatch(data *vector.Vector) ([]uint16, error) { + var ks any + if d.fixed() { + ks = d.encodeFixedData(data) + } else { + ks = d.encodeVarData(data) + } + + values, err := d.idx.insert(ks) + if err != nil { + return nil, err + } + ips /* insertion points */ := make([]uint16, len(values)) + for i, v := range values { + if int(v) > d.unique.Length() { + if d.fixed() { + err = d.unique.Append(ks.([]uint64)[i], false, d.m) + } else { + err = d.unique.Append(ks.([][]byte)[i], false, d.m) + } + if err != nil { + return nil, err + } + } + ips[i] = uint16(v) + } + return ips, nil +} + +func (d *Dict) FindBatch(data *vector.Vector) []uint16 { + var ks any + if d.fixed() { + ks = d.encodeFixedData(data) + } else { + ks = d.encodeVarData(data) + } + values := d.idx.find(ks) + + poses := make([]uint16, len(values)) + for i, v := range values { + poses[i] = uint16(v) + } + return poses +} + +func (d *Dict) FindData(pos uint16) *vector.Vector { + if d.fixed() { + return d.findFixedData(int(pos)) + } else { + return d.findVarData(int(pos)) + } +} + +func (d *Dict) Free() { + if d.ref == 0 { + return + } + d.ref-- + if d.ref > 0 { + return + } + + if d.unique != nil { + d.unique.Free(d.m) + } + if d.idx != nil { + d.idx.free() + } +} + +func (d *Dict) fixed() bool { return !d.typ.IsString() } + +func (d *Dict) encodeFixedData(data *vector.Vector) []uint64 { + us := make([]uint64, data.Length()) + switch d.typ.Oid { + case types.T_bool: + col := vector.MustTCols[bool](data) + for i, v := range col { + if v { + us[i] = 1 + } + } + case types.T_int32: + col := vector.MustTCols[int32](data) + for i, v := range col { + us[i] = uint64(v) + } + case types.T_int64: + col := vector.MustTCols[int64](data) + for i, v := range col { + us[i] = uint64(v) + } + case types.T_uint32: + col := vector.MustTCols[uint32](data) + for i, v := range col { + us[i] = uint64(v) + } + case types.T_uint64: + copy(us, vector.MustTCols[uint64](data)) + case types.T_float32: + col := vector.MustTCols[float32](data) + for i, v := range col { + us[i] = uint64(v) + } + case types.T_float64: + col := vector.MustTCols[float64](data) + for i, v := range col { + us[i] = uint64(v) + } + case types.T_decimal64: + col := vector.MustTCols[types.Decimal64](data) + for i, v := range col { + us[i] = types.DecodeUint64(types.EncodeDecimal64(&v)) + } + case types.T_date: + col := vector.MustTCols[types.Date](data) + for i, v := range col { + us[i] = uint64(v) + } + case types.T_datetime: + col := vector.MustTCols[types.Datetime](data) + for i, v := range col { + us[i] = uint64(v) + } + case types.T_timestamp: + col := vector.MustTCols[types.Timestamp](data) + for i, v := range col { + us[i] = uint64(v) + } + } + return us +} + +func (d *Dict) encodeVarData(data *vector.Vector) [][]byte { + return vector.GetBytesVectorValues(data) +} + +func (d *Dict) findFixedData(pos int) *vector.Vector { + v := vector.NewConst(d.typ, 1) + data := d.getFixedData(pos) + switch d.typ.Oid { + case types.T_bool: + val := false + if data == 1 { + val = true + } + vector.MustTCols[bool](v)[0] = val + case types.T_int32: + vector.MustTCols[int32](v)[0] = int32(data) + case types.T_int64: + vector.MustTCols[int64](v)[0] = int64(data) + case types.T_uint32: + vector.MustTCols[uint32](v)[0] = uint32(data) + case types.T_uint64: + vector.MustTCols[uint64](v)[0] = uint64(data) + case types.T_float32: + vector.MustTCols[float32](v)[0] = float32(data) + case types.T_float64: + vector.MustTCols[float64](v)[0] = float64(data) + case types.T_decimal64: + val := types.DecodeDecimal64(types.EncodeUint64(&data)) + vector.MustTCols[types.Decimal64](v)[0] = val + case types.T_date: + vector.MustTCols[types.Date](v)[0] = types.Date(data) + case types.T_datetime: + vector.MustTCols[types.Datetime](v)[0] = types.Datetime(data) + case types.T_timestamp: + vector.MustTCols[types.Timestamp](v)[0] = types.Timestamp(data) + } + return v +} + +func (d *Dict) findVarData(pos int) *vector.Vector { + return vector.NewConstBytes(d.typ, 1, d.getVarData(pos), d.m) +} + +func (d *Dict) getFixedData(n int) uint64 { + return vector.MustTCols[uint64](d.unique)[n-1] +} + +func (d *Dict) getVarData(n int) []byte { + return d.unique.GetBytes(int64(n - 1)) +} diff --git a/pkg/container/index/dict/dict_test.go b/pkg/container/index/dict/dict_test.go new file mode 100644 index 000000000..cff0d4156 --- /dev/null +++ b/pkg/container/index/dict/dict_test.go @@ -0,0 +1,271 @@ +// Copyright 2021 Matrix Origin +// +// 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 dict + +import ( + "testing" + + "github.com/matrixorigin/matrixone/pkg/common/mpool" + "github.com/matrixorigin/matrixone/pkg/container/types" + "github.com/matrixorigin/matrixone/pkg/container/vector" + "github.com/stretchr/testify/require" +) + +func TestCardinality(t *testing.T) { + dict, err := newTestDict(types.Type{Oid: types.T_int64}) + require.NoError(t, err) + defer dict.Free() + + dict.unique.Col = []int64{5, 2, 3, 7} + require.Equal(t, uint64(4), dict.Cardinality()) +} + +func TestInsertBatchFixedLen(t *testing.T) { + dict, err := newTestDict(types.Type{Oid: types.T_int64}) + require.NoError(t, err) + defer dict.Free() + + v0 := vector.New(types.Type{Oid: types.T_int64}) + v0.Col = []int64{5, 2, 3, 7, 3, 2} + + ips, err := dict.InsertBatch(v0) + require.NoError(t, err) + require.Equal(t, uint16(1), ips[0]) + require.Equal(t, uint16(2), ips[1]) + require.Equal(t, uint16(3), ips[2]) + require.Equal(t, uint16(4), ips[3]) + require.Equal(t, uint16(3), ips[4]) + require.Equal(t, uint16(2), ips[5]) + + v1 := vector.New(types.Type{Oid: types.T_int64}) + v1.Col = []int64{4, 2, 1, 5} + + ips, err = dict.InsertBatch(v1) + require.NoError(t, err) + require.Equal(t, uint16(5), ips[0]) + require.Equal(t, uint16(2), ips[1]) + require.Equal(t, uint16(6), ips[2]) + require.Equal(t, uint16(1), ips[3]) +} + +func TestFindBatchFixedLen(t *testing.T) { + dict, err := newTestDict(types.Type{Oid: types.T_int32}) + require.NoError(t, err) + defer dict.Free() + + v0 := vector.New(types.Type{Oid: types.T_int32}) + v0.Col = []int32{5, 2, 3, 7, 1, 4} + + ips, err := dict.InsertBatch(v0) + require.NoError(t, err) + require.Equal(t, uint16(1), ips[0]) + require.Equal(t, uint16(2), ips[1]) + require.Equal(t, uint16(3), ips[2]) + require.Equal(t, uint16(4), ips[3]) + require.Equal(t, uint16(5), ips[4]) + require.Equal(t, uint16(6), ips[5]) + + v1 := vector.New(types.Type{Oid: types.T_int32}) + v1.Col = []int32{7, 3, 8, 4, 6, 3} + + poses := dict.FindBatch(v1) + require.Equal(t, uint16(4), poses[0]) + require.Equal(t, uint16(3), poses[1]) + require.Equal(t, uint16(0), poses[2]) + require.Equal(t, uint16(6), poses[3]) + require.Equal(t, uint16(0), poses[4]) + require.Equal(t, uint16(3), poses[5]) +} + +func TestFindDataFixedLen(t *testing.T) { + dict, err := newTestDict(types.Type{Oid: types.T_int32}) + require.NoError(t, err) + defer dict.Free() + + v0 := vector.New(types.Type{Oid: types.T_int32}) + v0.Col = []int32{5, 3, 1, 7, 1, 3} + + ips, err := dict.InsertBatch(v0) + require.NoError(t, err) + require.Equal(t, uint16(1), ips[0]) + require.Equal(t, uint16(2), ips[1]) + require.Equal(t, uint16(3), ips[2]) + require.Equal(t, uint16(4), ips[3]) + require.Equal(t, uint16(3), ips[4]) + require.Equal(t, uint16(2), ips[5]) + + data := dict.FindData(1) + require.Equal(t, int32(5), vector.MustTCols[int32](data)[0]) + + data = dict.FindData(2) + require.Equal(t, int32(3), vector.MustTCols[int32](data)[0]) + + data = dict.FindData(3) + require.Equal(t, int32(1), vector.MustTCols[int32](data)[0]) + + data = dict.FindData(4) + require.Equal(t, int32(7), vector.MustTCols[int32](data)[0]) +} + +func TestInsertLargeDataFixedLen(t *testing.T) { + dict, err := newTestDict(types.Type{Oid: types.T_int32}) + require.NoError(t, err) + defer dict.Free() + + v0 := vector.New(types.Type{Oid: types.T_int32}) + v0.Col = make([]int32, 100000) + + i := 0 + for j := 1; j <= 10000; j++ { + for cnt := 0; cnt < 10; cnt++ { + vector.MustTCols[int32](v0)[i] = int32(j) + i++ + } + } + + ips, err := dict.InsertBatch(v0) + require.NoError(t, err) + + i = 0 + for j := 1; j <= 10000; j++ { + for cnt := 0; cnt < 10; cnt++ { + require.Equal(t, uint16(j), ips[i]) + i++ + } + } +} + +func TestInsertBatchVarLen(t *testing.T) { + dict, err := newTestDict(types.Type{Oid: types.T_varchar}) + require.NoError(t, err) + defer dict.Free() + + v0 := vector.New(types.Type{Oid: types.T_varchar}) + require.NoError(t, vector.AppendBytes(v0, [][]byte{ + []byte("hello"), + []byte("My"), + []byte("name"), + []byte("is"), + []byte("Tom"), + }, dict.m)) + + ips, err := dict.InsertBatch(v0) + require.NoError(t, err) + require.Equal(t, uint16(1), ips[0]) + require.Equal(t, uint16(2), ips[1]) + require.Equal(t, uint16(3), ips[2]) + require.Equal(t, uint16(4), ips[3]) + require.Equal(t, uint16(5), ips[4]) + + v1 := vector.New(types.Type{Oid: types.T_varchar}) + require.NoError(t, vector.AppendBytes(v1, [][]byte{ + []byte("Tom"), + []byte("is"), + []byte("My"), + []byte("friend"), + }, dict.m)) + + ips, err = dict.InsertBatch(v1) + require.NoError(t, err) + require.Equal(t, uint16(5), ips[0]) + require.Equal(t, uint16(4), ips[1]) + require.Equal(t, uint16(2), ips[2]) + require.Equal(t, uint16(6), ips[3]) +} + +func TestFindBatchVarLen(t *testing.T) { + dict, err := newTestDict(types.Type{Oid: types.T_varchar}) + require.NoError(t, err) + defer dict.Free() + + v0 := vector.New(types.Type{Oid: types.T_varchar}) + require.NoError(t, vector.AppendBytes(v0, [][]byte{ + []byte("hello"), + []byte("My"), + []byte("name"), + []byte("is"), + []byte("Tom"), + }, dict.m)) + + ips, err := dict.InsertBatch(v0) + require.NoError(t, err) + require.Equal(t, uint16(1), ips[0]) + require.Equal(t, uint16(2), ips[1]) + require.Equal(t, uint16(3), ips[2]) + require.Equal(t, uint16(4), ips[3]) + require.Equal(t, uint16(5), ips[4]) + + v1 := vector.New(types.Type{Oid: types.T_varchar}) + require.NoError(t, vector.AppendBytes(v1, [][]byte{ + []byte("Jack"), + []byte("is"), + []byte("My"), + []byte("friend"), + []byte("name"), + }, dict.m)) + + poses := dict.FindBatch(v1) + require.Equal(t, uint16(0), poses[0]) + require.Equal(t, uint16(4), poses[1]) + require.Equal(t, uint16(2), poses[2]) + require.Equal(t, uint16(0), poses[3]) + require.Equal(t, uint16(3), poses[4]) +} + +func TestFindDataVarLen(t *testing.T) { + dict, err := newTestDict(types.Type{Oid: types.T_varchar}) + require.NoError(t, err) + defer dict.Free() + + v0 := vector.New(types.Type{Oid: types.T_varchar}) + require.NoError(t, vector.AppendBytes(v0, [][]byte{ + []byte("thisisalonglonglonglongstring"), + []byte("My"), + []byte("name"), + []byte("is"), + []byte("Tom"), + []byte("is"), + []byte("Tom"), + }, dict.m)) + + ips, err := dict.InsertBatch(v0) + require.NoError(t, err) + require.Equal(t, uint16(1), ips[0]) + require.Equal(t, uint16(2), ips[1]) + require.Equal(t, uint16(3), ips[2]) + require.Equal(t, uint16(4), ips[3]) + require.Equal(t, uint16(5), ips[4]) + require.Equal(t, uint16(4), ips[5]) + require.Equal(t, uint16(5), ips[6]) + + data := dict.FindData(1) + require.Equal(t, []byte("thisisalonglonglonglongstring"), data.GetBytes(0)) + + data = dict.FindData(2) + require.Equal(t, []byte("My"), data.GetBytes(0)) + + data = dict.FindData(3) + require.Equal(t, []byte("name"), data.GetBytes(0)) + + data = dict.FindData(4) + require.Equal(t, []byte("is"), data.GetBytes(0)) + + data = dict.FindData(5) + require.Equal(t, []byte("Tom"), data.GetBytes(0)) +} + +func newTestDict(typ types.Type) (*Dict, error) { + return New(typ, mpool.MustNewZero()) +} diff --git a/pkg/container/index/dict/reverse_index.go b/pkg/container/index/dict/reverse_index.go new file mode 100644 index 000000000..1b68b22d3 --- /dev/null +++ b/pkg/container/index/dict/reverse_index.go @@ -0,0 +1,163 @@ +// Copyright 2021 Matrix Origin +// +// 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 dict + +import ( + "unsafe" + + "github.com/matrixorigin/matrixone/pkg/common/mpool" + "github.com/matrixorigin/matrixone/pkg/container/hashtable" +) + +const ( + unitLimit = 256 +) + +var ( + zeroUint64 []uint64 +) + +func init() { + zeroUint64 = make([]uint64, unitLimit) +} + +type reverseIndex interface { + insert(keys any) ([]uint64, error) + find(keys any) []uint64 + free() +} + +type fixedReverseIndex struct { + m *mpool.MPool + ht *hashtable.Int64HashMap +} + +func newFixedReverseIndex(m *mpool.MPool) (*fixedReverseIndex, error) { + ht := &hashtable.Int64HashMap{} + if err := ht.Init(m); err != nil { + ht.Free(m) + return nil, err + } + return &fixedReverseIndex{ + m: m, + ht: ht, + }, nil +} + +func (idx *fixedReverseIndex) insert(keys any) ([]uint64, error) { + ks := keys.([]uint64) + count := len(ks) + hashes := make([]uint64, unitLimit) + values := make([]uint64, count) + for i := 0; i < count; i += unitLimit { + n := count - i + if n > unitLimit { + n = unitLimit + } + copy(hashes[:n], zeroUint64[:n]) + if err := idx.ht.InsertBatch(n, hashes[:n], unsafe.Pointer(&ks[i]), values[i:i+n], idx.m); err != nil { + return nil, err + } + } + return values, nil +} + +func (idx *fixedReverseIndex) find(keys any) []uint64 { + ks := keys.([]uint64) + count := len(ks) + hashes := make([]uint64, unitLimit) + values := make([]uint64, count) + for i := 0; i < count; i += unitLimit { + n := count - i + if n > unitLimit { + n = unitLimit + } + copy(hashes[:n], zeroUint64[:n]) + idx.ht.FindBatch(n, hashes[:n], unsafe.Pointer(&ks[i]), values[i:i+n]) + } + return values +} + +func (idx *fixedReverseIndex) free() { + idx.ht.Free(idx.m) +} + +type varReverseIndex struct { + m *mpool.MPool + ht *hashtable.StringHashMap + hashStates [][3]uint64 +} + +func newVarReverseIndex(m *mpool.MPool) (*varReverseIndex, error) { + ht := &hashtable.StringHashMap{} + if err := ht.Init(m); err != nil { + ht.Free(m) + return nil, err + } + return &varReverseIndex{ + m: m, + ht: ht, + hashStates: make([][3]uint64, unitLimit), + }, nil +} + +func (idx *varReverseIndex) insert(keys any) ([]uint64, error) { + ks := checkPadding(keys.([][]byte)) + count := len(ks) + values := make([]uint64, count) + for i := 0; i < count; i += unitLimit { + n := count - i + if n > unitLimit { + n = unitLimit + } + if err := idx.ht.InsertStringBatch(idx.hashStates, ks[i:i+n], values[i:i+n], idx.m); err != nil { + return nil, err + } + } + return values, nil +} + +func (idx *varReverseIndex) find(keys any) []uint64 { + ks := checkPadding(keys.([][]byte)) + count := len(ks) + values := make([]uint64, count) + for i := 0; i < count; i += unitLimit { + n := count - i + if n > unitLimit { + n = unitLimit + } + idx.ht.FindStringBatch(idx.hashStates, ks[i:i+n], values[i:i+n]) + } + return values +} + +func (idx *varReverseIndex) free() { + idx.ht.Free(idx.m) +} + +// checkPadding checks if the length of each key is less than 16. +func checkPadding(keys [][]byte) [][]byte { + ks := make([][]byte, len(keys)) + for i := range ks { + if len(keys[i]) < 16 { + dst := make([]byte, 16) + copy(dst, keys[i]) + ks[i] = dst + } else { + ks[i] = keys[i] + } + } + return ks +} diff --git a/pkg/container/index/low_cardinality_index.go b/pkg/container/index/low_cardinality_index.go new file mode 100644 index 000000000..eb2fccd88 --- /dev/null +++ b/pkg/container/index/low_cardinality_index.go @@ -0,0 +1,151 @@ +// Copyright 2021 Matrix Origin +// +// 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 index + +import ( + "math" + + "github.com/matrixorigin/matrixone/pkg/common/moerr" + "github.com/matrixorigin/matrixone/pkg/common/mpool" + "github.com/matrixorigin/matrixone/pkg/container/index/dict" + "github.com/matrixorigin/matrixone/pkg/container/nulls" + "github.com/matrixorigin/matrixone/pkg/container/types" + "github.com/matrixorigin/matrixone/pkg/container/vector" +) + +const ( + MaxLowCardinality = math.MaxUint16 + 1 +) + +var ( + ErrNotSupported = moerr.NewNotSupported("the type is not supported for low cardinality index") +) + +type LowCardinalityIndex struct { + typ types.Type + + m *mpool.MPool + dict *dict.Dict + // poses is the positions of original data in the dictionary. + // Currently, the type of poses[i] is `T_uint16` which means + // the max cardinality of LowCardinalityIndex is 65536. + // The position of `null` value is 0. + poses *vector.Vector + + ref int +} + +func New(typ types.Type, m *mpool.MPool) (*LowCardinalityIndex, error) { + if typ.Oid == types.T_decimal128 || typ.Oid == types.T_json { + return nil, ErrNotSupported + } + + d, err := dict.New(typ, m) + if err != nil { + return nil, err + } + return &LowCardinalityIndex{ + typ: typ, + m: m, + dict: d, + poses: vector.New(types.T_uint16.ToType()), + ref: 1, + }, nil +} + +func (idx *LowCardinalityIndex) GetPoses() *vector.Vector { + return idx.poses +} + +func (idx *LowCardinalityIndex) GetDict() *dict.Dict { + return idx.dict +} + +func (idx *LowCardinalityIndex) Dup() *LowCardinalityIndex { + idx.ref++ + return idx +} + +func (idx *LowCardinalityIndex) DupEmpty() *LowCardinalityIndex { + return &LowCardinalityIndex{ + typ: idx.typ, + m: idx.m, + dict: idx.dict.Dup(), + poses: vector.New(types.T_uint16.ToType()), + ref: 1, + } +} + +func (idx *LowCardinalityIndex) InsertBatch(data *vector.Vector) error { + originalLen := data.Length() + var sels []int64 + if nulls.Any(data.Nsp) { + sels = make([]int64, 0, originalLen) + for i := 0; i < originalLen; i++ { + if !nulls.Contains(data.Nsp, uint64(i)) { + sels = append(sels, int64(i)) + } + } + } + + var ips []uint16 + var err error + if sels != nil { + if err = vector.Shuffle(data, sels, idx.m); err != nil { + return err + } + + values, err := idx.dict.InsertBatch(data) + if err != nil { + return err + } + + i := 0 + ips = make([]uint16, originalLen) + for j := 0; j < originalLen; j++ { + if i < len(sels) && int64(j) == sels[i] { + ips[j] = values[i] + i++ + } else { + ips[j] = 0 + } + } + } else { + if ips, err = idx.dict.InsertBatch(data); err != nil { + return err + } + } + + return vector.AppendFixed(idx.poses, ips, idx.m) +} + +// Encode uses the dictionary of the current index to encode the original data. +func (idx *LowCardinalityIndex) Encode(dst, src *vector.Vector) error { + poses := idx.dict.FindBatch(src) + return vector.AppendFixed(dst, poses, idx.m) +} + +func (idx *LowCardinalityIndex) Free() { + if idx.ref == 0 { + return + } + idx.ref-- + if idx.ref > 0 { + return + } + + idx.poses.Free(idx.m) + idx.dict.Free() +} diff --git a/pkg/container/index/low_cardinality_index_test.go b/pkg/container/index/low_cardinality_index_test.go new file mode 100644 index 000000000..6d18dc2dc --- /dev/null +++ b/pkg/container/index/low_cardinality_index_test.go @@ -0,0 +1,90 @@ +// Copyright 2021 Matrix Origin +// +// 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 index + +import ( + "testing" + + "github.com/matrixorigin/matrixone/pkg/common/mpool" + "github.com/matrixorigin/matrixone/pkg/container/types" + "github.com/matrixorigin/matrixone/pkg/container/vector" + "github.com/stretchr/testify/require" +) + +func TestInsertWithNulls(t *testing.T) { + idx, err := newTestIndex(types.T_varchar.ToType()) + require.NoError(t, err) + + // test data = ["a", "b", NULL, "a", "c", NULL, "c", "b", "a", NULL] + v := vector.New(types.T_varchar.ToType()) + require.NoError(t, v.Append([]byte("a"), false, idx.m)) + require.NoError(t, v.Append([]byte("b"), false, idx.m)) + require.NoError(t, v.Append([]byte(""), true, idx.m)) + require.NoError(t, v.Append([]byte("a"), false, idx.m)) + require.NoError(t, v.Append([]byte("c"), false, idx.m)) + require.NoError(t, v.Append([]byte(""), true, idx.m)) + require.NoError(t, v.Append([]byte("c"), false, idx.m)) + require.NoError(t, v.Append([]byte("b"), false, idx.m)) + require.NoError(t, v.Append([]byte("a"), false, idx.m)) + require.NoError(t, v.Append([]byte(""), true, idx.m)) + + // dict = ["a"->1, "b"->2, "c"->3] + require.NoError(t, idx.InsertBatch(v)) + + require.Equal(t, []string{"a", "b", "c"}, vector.GetStrVectorValues(idx.dict.GetUnique())) + require.Equal(t, []uint16{1, 2, 0, 1, 3, 0, 3, 2, 1, 0}, vector.MustTCols[uint16](idx.poses)) +} + +func TestEncode(t *testing.T) { + idx, err := newTestIndex(types.T_varchar.ToType()) + require.NoError(t, err) + + v0 := vector.New(types.T_varchar.ToType()) + require.NoError(t, vector.AppendBytes(v0, [][]byte{ + []byte("hello"), + []byte("My"), + []byte("name"), + []byte("is"), + []byte("Tom"), + }, idx.m)) + + err = idx.InsertBatch(v0) + require.NoError(t, err) + + v1 := vector.New(types.T_varchar.ToType()) + require.NoError(t, vector.AppendBytes(v1, [][]byte{ + []byte("Jack"), + []byte("is"), + []byte("My"), + []byte("friend"), + []byte("name"), + []byte("Tom"), + }, idx.m)) + + enc := vector.New(types.T_uint16.ToType()) + err = idx.Encode(enc, v1) + require.NoError(t, err) + col := vector.MustTCols[uint16](enc) + require.Equal(t, uint16(0), col[0]) + require.Equal(t, uint16(4), col[1]) + require.Equal(t, uint16(2), col[2]) + require.Equal(t, uint16(0), col[3]) + require.Equal(t, uint16(3), col[4]) + require.Equal(t, uint16(5), col[5]) +} + +func newTestIndex(typ types.Type) (*LowCardinalityIndex, error) { + return New(typ, mpool.MustNewZero()) +} diff --git a/pkg/container/vector/vector.go b/pkg/container/vector/vector.go index e6f2fbc25..0a3bdeb83 100644 --- a/pkg/container/vector/vector.go +++ b/pkg/container/vector/vector.go @@ -58,6 +58,9 @@ type Vector struct { // TODO: check whether isBin should be changed into array/bitmap // now we assumpt that it can only be true in the case of only one data in vector isBin bool + + // idx for low cardinality scenario. + idx any } func (v *Vector) SetIsBin(isBin bool) { @@ -94,6 +97,18 @@ func (v *Vector) SetOriginal(status bool) { v.original = status } +func (v *Vector) IsLowCardinality() bool { + return v.idx != nil +} + +func (v *Vector) Index() any { + return v.idx +} + +func (v *Vector) SetIndex(idx any) { + v.idx = idx +} + func DecodeFixedCol[T types.FixedSizeT](v *Vector, sz int) []T { return types.DecodeSlice[T](v.data) } diff --git a/pkg/pb/plan/plan.pb.go b/pkg/pb/plan/plan.pb.go index a8f3da167..ea05a972b 100644 --- a/pkg/pb/plan/plan.pb.go +++ b/pkg/pb/plan/plan.pb.go @@ -2008,6 +2008,7 @@ type ColDef struct { Comment string `protobuf:"bytes,7,opt,name=comment,proto3" json:"comment,omitempty"` IsCPkey bool `protobuf:"varint,8,opt,name=is_cPkey,json=isCPkey,proto3" json:"is_cPkey,omitempty"` OnUpdate *OnUpdate `protobuf:"bytes,9,opt,name=on_update,json=onUpdate,proto3" json:"on_update,omitempty"` + LowCardinality bool `protobuf:"varint,10,opt,name=low_cardinality,json=lowCardinality,proto3" json:"low_cardinality,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -2109,6 +2110,13 @@ func (m *ColDef) GetOnUpdate() *OnUpdate { return nil } +func (m *ColDef) GetLowCardinality() bool { + if m != nil { + return m.LowCardinality + } + return false +} + type Default struct { NullAbility bool `protobuf:"varint,1,opt,name=null_ability,json=nullAbility,proto3" json:"null_ability,omitempty"` Expr *Expr `protobuf:"bytes,2,opt,name=expr,proto3" json:"expr,omitempty"` @@ -6014,339 +6022,340 @@ func init() { func init() { proto.RegisterFile("plan.proto", fileDescriptor_2d655ab2f7683c23) } var fileDescriptor_2d655ab2f7683c23 = []byte{ - // 5297 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x7b, 0x4d, 0x6c, 0x1b, 0x49, - 0x76, 0xb0, 0x9a, 0xbf, 0xcd, 0x47, 0x52, 0x6a, 0x97, 0x3d, 0x36, 0xed, 0xf5, 0x7a, 0xe4, 0xb6, - 0xc7, 0xab, 0xf5, 0xec, 0x78, 0x66, 0x64, 0xaf, 0x77, 0x66, 0x31, 0xdf, 0xee, 0x52, 0x54, 0x5b, - 0xe2, 0x9a, 0x6a, 0x6a, 0x8b, 0x94, 0x3c, 0xf3, 0x2d, 0x02, 0xa2, 0xc9, 0x6e, 0x52, 0x6d, 0x37, - 0xbb, 0x39, 0xdd, 0x4d, 0x4b, 0x1a, 0x20, 0xc0, 0x1c, 0x82, 0x00, 0x41, 0x82, 0xe4, 0x90, 0x63, - 0x2e, 0x9b, 0x1c, 0x83, 0x5c, 0x72, 0xce, 0x31, 0x97, 0x00, 0xb9, 0x04, 0xd9, 0x53, 0x90, 0x4b, - 0xb0, 0x39, 0x05, 0xc9, 0x25, 0xc8, 0x21, 0x97, 0x1c, 0x82, 0xf7, 0xaa, 0xba, 0xd9, 0x14, 0xe5, - 0xf5, 0x60, 0x90, 0x8b, 0x50, 0xef, 0xb7, 0x5e, 0x55, 0xbd, 0x7a, 0x3f, 0xc5, 0x16, 0xc0, 0xcc, - 0xb3, 0xfc, 0x47, 0xb3, 0x30, 0x88, 0x03, 0x56, 0xc0, 0xf1, 0xad, 0x0f, 0x26, 0x6e, 0x7c, 0x32, - 0x1f, 0x3e, 0x1a, 0x05, 0xd3, 0x0f, 0x27, 0xc1, 0x24, 0xf8, 0x90, 0x88, 0xc3, 0xf9, 0x98, 0x20, - 0x02, 0x68, 0x24, 0x84, 0xf4, 0xbf, 0x55, 0xa0, 0xd0, 0x3f, 0x9f, 0x39, 0x6c, 0x1d, 0x72, 0xae, - 0xdd, 0x50, 0x36, 0x95, 0xad, 0x22, 0xcf, 0xb9, 0x36, 0xbb, 0x05, 0xaa, 0x3f, 0xf7, 0x3c, 0x6b, - 0xe8, 0x39, 0x8d, 0xdc, 0xa6, 0xb2, 0xa5, 0xf2, 0x14, 0x66, 0xdf, 0x81, 0x8a, 0x35, 0x8f, 0x83, - 0x81, 0xeb, 0x8f, 0xc2, 0x46, 0x5e, 0x10, 0x11, 0xd1, 0xf6, 0x47, 0x21, 0xbb, 0x06, 0xc5, 0x53, - 0xd7, 0x8e, 0x4f, 0x1a, 0x05, 0xd2, 0x25, 0x00, 0x76, 0x1b, 0x2a, 0xb3, 0xd0, 0x19, 0xb9, 0x91, - 0x1b, 0xf8, 0x8d, 0x22, 0x51, 0x16, 0x08, 0xc6, 0xa0, 0x10, 0xb9, 0x5f, 0x39, 0x8d, 0x12, 0x11, - 0x68, 0x8c, 0x7a, 0xa2, 0x91, 0xe5, 0x39, 0x8d, 0xb2, 0xd0, 0x43, 0x00, 0x62, 0x63, 0xb2, 0x49, - 0xdd, 0x54, 0xb6, 0x2a, 0x5c, 0x00, 0xfa, 0x9f, 0x16, 0xa0, 0xd8, 0x0a, 0xfc, 0x28, 0x66, 0xd7, - 0xa1, 0xe4, 0x46, 0x68, 0x28, 0x2d, 0x45, 0xe5, 0x12, 0x62, 0xd7, 0xa0, 0xe0, 0xbe, 0xb6, 0x3c, - 0x5a, 0x4a, 0x7e, 0x7f, 0x8d, 0x13, 0x84, 0x58, 0x1b, 0xb1, 0xb8, 0x06, 0x05, 0xb1, 0xb6, 0xc4, - 0x46, 0x88, 0xc5, 0x05, 0x54, 0x10, 0x1b, 0x49, 0xec, 0x10, 0xb1, 0x68, 0xbc, 0x8a, 0xd8, 0xa1, - 0xc4, 0xce, 0x11, 0x8b, 0x96, 0x17, 0x10, 0x3b, 0x97, 0xd8, 0x31, 0x62, 0xd1, 0xf4, 0x1c, 0x62, - 0x11, 0x62, 0xb7, 0xa0, 0x6c, 0x5b, 0xb1, 0x83, 0x04, 0xb4, 0xbe, 0xb8, 0xbf, 0xc6, 0x13, 0x04, - 0xd2, 0x62, 0x77, 0x4a, 0xb4, 0x8a, 0x34, 0x31, 0x41, 0x30, 0x1d, 0xaa, 0xc8, 0x96, 0xd0, 0x41, - 0xd2, 0xb3, 0x48, 0xf6, 0x43, 0xa8, 0xd9, 0xce, 0xc8, 0x9d, 0x5a, 0xde, 0xd3, 0x27, 0xc8, 0x54, - 0xdd, 0x54, 0xb6, 0xaa, 0xdb, 0x1b, 0x8f, 0xc8, 0x3f, 0x52, 0xca, 0xfe, 0x1a, 0x5f, 0x62, 0x63, - 0x9f, 0x40, 0x5d, 0xc2, 0x1f, 0x6f, 0x7f, 0x82, 0x72, 0x35, 0x92, 0xd3, 0x96, 0xe4, 0x3e, 0xde, - 0xfe, 0x64, 0x7f, 0x8d, 0x2f, 0x33, 0xb2, 0xfb, 0x50, 0xc3, 0xb9, 0xa3, 0xd8, 0x9a, 0xce, 0x50, - 0xb0, 0x2e, 0xad, 0x5a, 0xc2, 0xe2, 0xb2, 0x5e, 0x46, 0x81, 0x8f, 0x0c, 0xeb, 0x72, 0x37, 0x13, - 0x04, 0xdb, 0x04, 0xb0, 0x9d, 0xb1, 0x35, 0xf7, 0x62, 0x24, 0x6f, 0xc8, 0x6d, 0xcd, 0xe0, 0xd8, - 0x1d, 0xa8, 0xcc, 0x67, 0xb8, 0xca, 0x63, 0xcb, 0x6b, 0x68, 0x92, 0x61, 0x81, 0x42, 0x67, 0x70, - 0xa3, 0x1d, 0xd7, 0x6f, 0x5c, 0xa1, 0xb3, 0x16, 0xc0, 0x4e, 0x19, 0x8a, 0xaf, 0x2d, 0x6f, 0xee, - 0xe8, 0xb7, 0x41, 0x3d, 0xb4, 0x42, 0x6b, 0xca, 0x9d, 0x31, 0xd3, 0x20, 0x3f, 0x0b, 0x22, 0xe9, - 0xdf, 0x38, 0xd4, 0x3b, 0x50, 0x3a, 0xb6, 0x42, 0xa4, 0x31, 0x28, 0xf8, 0xd6, 0xd4, 0x21, 0x62, - 0x85, 0xd3, 0x18, 0xfd, 0x28, 0x3a, 0x8f, 0x62, 0x67, 0x2a, 0x9d, 0x5f, 0x42, 0x88, 0x9f, 0x78, - 0xc1, 0x50, 0xfa, 0x8c, 0xca, 0x25, 0xa4, 0x9b, 0x50, 0x6a, 0x05, 0x1e, 0x6a, 0xbb, 0x01, 0xe5, - 0xd0, 0xf1, 0x06, 0x8b, 0xd9, 0x4a, 0xa1, 0xe3, 0x1d, 0x06, 0x11, 0x12, 0x46, 0x81, 0x20, 0xe4, - 0x04, 0x61, 0x14, 0x10, 0x21, 0x99, 0x3f, 0xbf, 0x98, 0x5f, 0xef, 0x03, 0xb4, 0x82, 0x30, 0xfc, - 0xd6, 0x3a, 0xaf, 0x41, 0xd1, 0x76, 0x66, 0xf1, 0x09, 0x29, 0x2d, 0x72, 0x01, 0xe8, 0x0f, 0x41, - 0x35, 0xce, 0x66, 0x61, 0xc7, 0x8d, 0x62, 0x76, 0x07, 0x0a, 0x9e, 0x1b, 0xc5, 0x0d, 0x65, 0x33, - 0xbf, 0x55, 0xdd, 0x06, 0x71, 0xe2, 0x48, 0xe5, 0x84, 0xd7, 0x37, 0x41, 0x3d, 0xb0, 0xce, 0x8e, - 0x71, 0x27, 0x51, 0x1b, 0x6d, 0xa9, 0xdc, 0x22, 0xb9, 0xbf, 0x0f, 0x01, 0xfa, 0x56, 0x38, 0x71, - 0x62, 0x0a, 0x20, 0xb7, 0x21, 0x1f, 0x9f, 0xcf, 0x88, 0x23, 0x55, 0x87, 0x04, 0x8e, 0x68, 0xfd, - 0xbf, 0x14, 0xa8, 0xf6, 0xe6, 0xc3, 0x2f, 0xe7, 0x4e, 0x78, 0x8e, 0x2b, 0xda, 0x5a, 0x70, 0xaf, - 0x6f, 0x5f, 0x17, 0xdc, 0x19, 0xfa, 0x42, 0x12, 0x97, 0xe8, 0x07, 0xb6, 0x33, 0x70, 0xed, 0x64, - 0x89, 0x08, 0xb6, 0x6d, 0x8c, 0x58, 0xc1, 0x4c, 0x6e, 0x5a, 0x2e, 0x98, 0xb1, 0x4d, 0x28, 0x8e, - 0x4e, 0x5c, 0xcf, 0xa6, 0x7b, 0xbb, 0xbc, 0x22, 0x41, 0x60, 0x37, 0x41, 0x0d, 0x83, 0xd3, 0x01, - 0x85, 0x1a, 0x11, 0x83, 0xca, 0x61, 0x70, 0xda, 0x73, 0xbf, 0xc2, 0xfd, 0x16, 0x61, 0x10, 0xa0, - 0xd4, 0x6b, 0x35, 0x3b, 0x4d, 0xae, 0xad, 0xe1, 0xd8, 0xf8, 0xbc, 0xdd, 0xeb, 0xf7, 0x34, 0x85, - 0xad, 0x03, 0x98, 0xdd, 0xfe, 0x40, 0xc2, 0x39, 0x56, 0x82, 0x5c, 0xdb, 0xd4, 0xf2, 0xc8, 0x83, - 0xf8, 0xb6, 0xa9, 0x15, 0x58, 0x19, 0xf2, 0x4d, 0xf3, 0x0b, 0xad, 0x48, 0x83, 0x4e, 0x47, 0x2b, - 0xe9, 0xbf, 0x56, 0xa0, 0xd2, 0x1d, 0xbe, 0x74, 0x46, 0x31, 0xae, 0x19, 0x7d, 0xca, 0x09, 0x5f, - 0x3b, 0x21, 0x2d, 0x3b, 0xcf, 0x25, 0x84, 0x0b, 0xb1, 0x87, 0x22, 0x32, 0xf1, 0x9c, 0x3d, 0x24, - 0xbe, 0xd1, 0x89, 0x33, 0xb5, 0x68, 0x71, 0xc8, 0x47, 0x10, 0xfa, 0x70, 0x30, 0x7c, 0x49, 0xcb, - 0xcb, 0x73, 0x1c, 0xb2, 0x77, 0xa1, 0x2a, 0x74, 0x0c, 0xc8, 0x81, 0x8a, 0xb4, 0x17, 0x20, 0x50, - 0x26, 0xba, 0xf1, 0x0d, 0x28, 0xdb, 0x43, 0x41, 0x2c, 0x11, 0xb1, 0x64, 0x0f, 0x89, 0x80, 0x92, - 0xa4, 0x55, 0x10, 0xcb, 0x52, 0x92, 0x50, 0xc4, 0x70, 0x13, 0xd4, 0x60, 0xf8, 0x52, 0x50, 0x45, - 0xac, 0x2d, 0x07, 0xc3, 0x97, 0x48, 0xc2, 0xb3, 0x54, 0x9f, 0xcd, 0xfd, 0x51, 0x8c, 0xa1, 0xfb, - 0x1e, 0x14, 0xc6, 0x73, 0x7f, 0x24, 0xcf, 0x5d, 0x06, 0x9c, 0x74, 0xcd, 0x9c, 0x88, 0xe8, 0x6b, - 0x56, 0x38, 0x41, 0x1f, 0x5d, 0xf1, 0x35, 0xc4, 0xeb, 0x7f, 0x2e, 0x35, 0x3e, 0xf3, 0xac, 0x09, - 0x53, 0xa1, 0x60, 0x76, 0x4d, 0x43, 0x5b, 0x63, 0x35, 0x50, 0xdb, 0x66, 0xdf, 0xe0, 0x66, 0xb3, - 0xa3, 0x29, 0x74, 0x34, 0xfd, 0xe6, 0x4e, 0xc7, 0xd0, 0x72, 0x48, 0x39, 0xee, 0x76, 0x9a, 0xfd, - 0x76, 0xc7, 0xd0, 0x0a, 0x82, 0xc2, 0xdb, 0xad, 0xbe, 0xa6, 0x32, 0x0d, 0x6a, 0x87, 0xbc, 0xbb, - 0x7b, 0xd4, 0x32, 0x06, 0xe6, 0x51, 0xa7, 0xa3, 0x69, 0xec, 0x2a, 0x6c, 0xa4, 0x98, 0xae, 0x40, - 0x6e, 0xa2, 0xc8, 0x71, 0x93, 0x37, 0xf9, 0x9e, 0xf6, 0x33, 0xa6, 0x42, 0xbe, 0xb9, 0xb7, 0xa7, - 0x7d, 0xad, 0xe0, 0xe8, 0x45, 0xdb, 0xd4, 0xbe, 0xce, 0x31, 0x0d, 0xaa, 0x07, 0x5d, 0xb3, 0xdb, - 0xef, 0x9a, 0xed, 0x56, 0xb3, 0xa3, 0x7d, 0x5d, 0xd0, 0x7f, 0x2f, 0x0f, 0x05, 0x34, 0xf9, 0xb7, - 0x3b, 0x3a, 0xfb, 0x0e, 0x28, 0x23, 0x3a, 0xcb, 0xea, 0x76, 0x55, 0xd0, 0x28, 0x31, 0xed, 0xaf, - 0x71, 0x05, 0xf7, 0x41, 0x11, 0x1e, 0x5b, 0xdd, 0x5e, 0x17, 0xc4, 0x24, 0x40, 0x21, 0x7d, 0xc6, - 0x6e, 0x83, 0xf2, 0x5a, 0xba, 0x6f, 0x4d, 0xd0, 0x45, 0x88, 0x42, 0xea, 0x6b, 0xb6, 0x09, 0xf9, - 0x51, 0x20, 0x12, 0x50, 0x4a, 0x17, 0x01, 0x62, 0x7f, 0x8d, 0x23, 0x09, 0xf5, 0x8f, 0xe9, 0xa0, - 0x53, 0xfd, 0xc9, 0x39, 0xa1, 0x86, 0x31, 0x7b, 0x0f, 0xf2, 0xd1, 0x7c, 0x48, 0xa7, 0x5d, 0xdd, - 0xbe, 0xb2, 0x72, 0xeb, 0x50, 0x4d, 0x34, 0x1f, 0xb2, 0x07, 0x50, 0x18, 0x05, 0x61, 0x48, 0xe7, - 0x9e, 0x26, 0x83, 0x45, 0x38, 0xc2, 0x84, 0x86, 0x74, 0xb6, 0x09, 0x4a, 0x4c, 0xe9, 0x2a, 0x65, - 0x5a, 0xc4, 0x03, 0x9c, 0x30, 0x66, 0xf7, 0x65, 0x90, 0x81, 0xac, 0x4d, 0x49, 0x08, 0x42, 0x3d, - 0x48, 0x65, 0x3a, 0xe4, 0xa7, 0xd6, 0x99, 0xcc, 0x59, 0x92, 0x29, 0x89, 0x3d, 0x68, 0xd3, 0xd4, - 0x3a, 0xdb, 0x29, 0x41, 0xc1, 0x39, 0x9b, 0x85, 0xfa, 0x4d, 0xa8, 0xa4, 0x19, 0x8c, 0xd5, 0x40, - 0xb1, 0xe4, 0x65, 0x52, 0x2c, 0x7d, 0x0b, 0x13, 0x4a, 0x92, 0xa3, 0x96, 0x69, 0x08, 0x25, 0x57, - 0x4c, 0x19, 0xea, 0x7f, 0x96, 0xa3, 0x70, 0xbd, 0xfb, 0x86, 0xe0, 0x7f, 0x1f, 0xf2, 0x96, 0x37, - 0x21, 0xf6, 0xf5, 0x6d, 0x96, 0x2c, 0x7f, 0x3a, 0x0b, 0x9d, 0x28, 0x12, 0x27, 0x6d, 0x79, 0x93, - 0xc4, 0x0f, 0xf2, 0x97, 0xfb, 0xc1, 0xf7, 0xa0, 0x2c, 0x33, 0x99, 0x3c, 0xd0, 0xba, 0xe0, 0xd8, - 0x15, 0x48, 0x9e, 0x50, 0x59, 0x03, 0xca, 0xb3, 0xd0, 0x9d, 0x5a, 0xe1, 0xb9, 0x28, 0x2d, 0x78, - 0x02, 0x62, 0xd4, 0x9d, 0xbd, 0x72, 0xed, 0x33, 0x59, 0x16, 0x09, 0x00, 0xf9, 0x47, 0xc1, 0x74, - 0xea, 0xf8, 0xb1, 0xbc, 0xb5, 0x09, 0x88, 0x57, 0xd6, 0x8d, 0x06, 0xa3, 0xc3, 0x57, 0xce, 0x39, - 0x1d, 0x9d, 0xca, 0xcb, 0x6e, 0xd4, 0x42, 0x90, 0xbd, 0x0f, 0x95, 0xc0, 0x1f, 0x88, 0xcc, 0x29, - 0x4f, 0x4c, 0xee, 0x73, 0xd7, 0x3f, 0x22, 0x2c, 0x57, 0x03, 0x39, 0xd2, 0xbf, 0x84, 0xb2, 0xb4, - 0x92, 0xdd, 0x85, 0x1a, 0x96, 0x4f, 0x03, 0x6b, 0xe8, 0x7a, 0x6e, 0x7c, 0x2e, 0x8b, 0xaa, 0x2a, - 0xe2, 0x9a, 0x02, 0x85, 0x77, 0x1b, 0x0f, 0x46, 0xfa, 0xfc, 0xd2, 0xdd, 0x46, 0x3c, 0xbb, 0x07, - 0xf5, 0x20, 0x74, 0x27, 0xae, 0x3f, 0x88, 0xe2, 0xd0, 0xf5, 0x27, 0x32, 0x62, 0xd7, 0x04, 0xb2, - 0x47, 0x38, 0xbd, 0x0b, 0x6a, 0x62, 0x48, 0xaa, 0x50, 0xf9, 0xa6, 0x0a, 0x73, 0x97, 0x28, 0x7c, - 0x0f, 0xea, 0x87, 0x62, 0x1b, 0x9f, 0x3b, 0xe7, 0x78, 0xce, 0xd7, 0xa0, 0x88, 0x67, 0x1b, 0x51, - 0xbe, 0xab, 0x70, 0x01, 0xe8, 0xdb, 0xa0, 0x1e, 0x86, 0xc1, 0xcc, 0x09, 0xe3, 0x73, 0x0c, 0xaf, - 0xb8, 0x73, 0xc2, 0x11, 0x70, 0xb8, 0x48, 0x7b, 0xb9, 0x6c, 0xda, 0xfb, 0x29, 0xaa, 0x26, 0x19, - 0xd7, 0x89, 0x50, 0xf5, 0x23, 0x80, 0x59, 0x8a, 0x90, 0xf9, 0x34, 0xb9, 0xde, 0x52, 0x39, 0xcf, - 0x70, 0xe8, 0x7f, 0x95, 0x87, 0xfa, 0xa1, 0x15, 0xc6, 0x2e, 0x5e, 0xcc, 0xb6, 0x3f, 0x0e, 0xd8, - 0xf7, 0xa0, 0x10, 0x9f, 0xcf, 0x1c, 0x99, 0x0e, 0xaf, 0xa6, 0xa1, 0x41, 0xb0, 0x90, 0x53, 0x11, - 0x03, 0xee, 0x8d, 0xf1, 0x86, 0xcd, 0xa6, 0xd8, 0xf4, 0x19, 0x5c, 0x9d, 0x25, 0x62, 0x88, 0x70, - 0x22, 0x2a, 0xb8, 0xf3, 0x2b, 0xec, 0x97, 0xb1, 0xb1, 0xfb, 0x50, 0x6e, 0x05, 0xde, 0x7c, 0xea, - 0x47, 0x8d, 0xc2, 0x4a, 0xa4, 0x4e, 0x48, 0xec, 0x21, 0x68, 0xa9, 0x70, 0xc2, 0x5e, 0xa4, 0x4d, - 0x5d, 0xc1, 0x33, 0x1d, 0x6a, 0x29, 0xce, 0x9c, 0x4f, 0x45, 0x99, 0xcc, 0x97, 0x70, 0xec, 0x31, - 0x40, 0x0a, 0x47, 0x8d, 0x32, 0x4d, 0x7c, 0x71, 0x0b, 0xda, 0xb1, 0x33, 0xe5, 0x19, 0x36, 0xec, - 0x27, 0x2c, 0x6f, 0x12, 0x84, 0x6e, 0x7c, 0x32, 0x25, 0x67, 0xcf, 0xf3, 0x05, 0x82, 0x3d, 0x80, - 0x75, 0x37, 0xea, 0xcd, 0x87, 0xa9, 0x3c, 0xf9, 0xbc, 0xca, 0x2f, 0x60, 0xd1, 0x95, 0x52, 0x9d, - 0x83, 0x69, 0x34, 0xa1, 0x38, 0x55, 0xc9, 0xd8, 0x77, 0x10, 0x4d, 0xf4, 0x7f, 0x57, 0xb2, 0xc7, - 0x85, 0x45, 0xe0, 0xfd, 0x8c, 0x98, 0xb9, 0x08, 0x1e, 0xcb, 0x48, 0xb6, 0x05, 0x1b, 0x41, 0x68, - 0xbb, 0xbe, 0x85, 0x05, 0x99, 0xb0, 0x02, 0x8f, 0xad, 0xce, 0x2f, 0xa2, 0xd9, 0x26, 0x54, 0x6d, - 0x27, 0x1a, 0x85, 0xee, 0x2c, 0x4e, 0x4e, 0xab, 0xc2, 0xb3, 0xa8, 0xec, 0xa5, 0x2f, 0x2c, 0x5f, - 0xfa, 0x07, 0xa0, 0x7a, 0x18, 0x96, 0x4e, 0x2c, 0x9f, 0x4e, 0x61, 0xf9, 0xd0, 0x52, 0x1a, 0xf2, - 0xb9, 0x3e, 0x45, 0xd4, 0xa8, 0x51, 0x5a, 0xe5, 0x4b, 0x68, 0xfa, 0x77, 0xa1, 0x7c, 0xec, 0x3a, - 0xa7, 0x32, 0x34, 0xbe, 0x76, 0x9d, 0xd3, 0x24, 0x34, 0xe2, 0x58, 0xff, 0x43, 0x05, 0xd4, 0xb6, - 0x6f, 0x3b, 0x67, 0xc8, 0xf0, 0x2e, 0x54, 0x5d, 0x1c, 0x0f, 0xb2, 0x37, 0x0b, 0x08, 0x85, 0x3b, - 0x10, 0x21, 0x03, 0x35, 0x68, 0x92, 0x21, 0x27, 0x18, 0x08, 0x25, 0x18, 0x1a, 0x50, 0x9e, 0xfb, - 0xee, 0x97, 0x68, 0x54, 0x7e, 0x33, 0x8f, 0x11, 0x4b, 0x82, 0xec, 0x1e, 0x94, 0xc6, 0xae, 0xe3, - 0xd9, 0x89, 0x2b, 0xca, 0x64, 0xfa, 0x0c, 0x71, 0x5c, 0x92, 0xf4, 0xfb, 0x50, 0x24, 0x04, 0x76, - 0xa4, 0x58, 0x07, 0x67, 0xed, 0x50, 0x47, 0x81, 0x47, 0x93, 0xe8, 0x7f, 0xa4, 0x40, 0x85, 0x6c, - 0xa6, 0xbb, 0xf6, 0x5d, 0x80, 0x85, 0x4d, 0x72, 0x6d, 0x95, 0xd4, 0xa4, 0x65, 0x4d, 0xb9, 0x65, - 0x4d, 0x6c, 0x13, 0x13, 0xa3, 0x27, 0x6c, 0xcd, 0xa6, 0xe0, 0x5d, 0xac, 0x74, 0x90, 0xc2, 0xee, - 0x42, 0x91, 0x6c, 0x93, 0x41, 0x7f, 0xc9, 0x6a, 0x41, 0xd1, 0xff, 0xa6, 0x08, 0x6a, 0x1f, 0xe7, - 0x7b, 0x53, 0xfa, 0x49, 0x66, 0xc9, 0xbd, 0x71, 0x96, 0x87, 0x50, 0xb0, 0x9d, 0x71, 0x62, 0xc7, - 0xf5, 0x24, 0xf7, 0x0a, 0x9d, 0x98, 0x62, 0x44, 0xc8, 0x40, 0x9e, 0xc5, 0x7a, 0x29, 0xc2, 0x14, - 0x32, 0xeb, 0x95, 0x65, 0x7b, 0x65, 0x14, 0x3a, 0x56, 0xec, 0x44, 0x5f, 0x7a, 0xb2, 0x80, 0x5c, - 0x20, 0xd8, 0x3e, 0xac, 0xa3, 0x49, 0xdb, 0xb8, 0x25, 0x74, 0xae, 0xd2, 0x77, 0xee, 0x5e, 0x98, - 0xd2, 0x94, 0x4c, 0xb4, 0xcd, 0x86, 0x1f, 0x87, 0xe7, 0xbc, 0xee, 0x67, 0x71, 0xec, 0x31, 0xac, - 0x8f, 0x82, 0xe9, 0x0c, 0x5d, 0xde, 0x19, 0xcc, 0x30, 0xd0, 0x96, 0x2f, 0xd4, 0x31, 0xb8, 0xbc, - 0x7a, 0xca, 0x43, 0x69, 0xeb, 0x11, 0xa8, 0xf1, 0xd0, 0x1b, 0x50, 0x81, 0x29, 0x8a, 0x91, 0xab, - 0x99, 0x89, 0x93, 0xda, 0x86, 0x97, 0xe3, 0xa1, 0x87, 0x00, 0xfb, 0x28, 0x71, 0x48, 0xd7, 0x1f, - 0x07, 0x51, 0xa3, 0x42, 0xb6, 0xca, 0x9a, 0x34, 0xf5, 0x00, 0xe9, 0xa1, 0x38, 0x8c, 0x6e, 0xfd, - 0x87, 0x42, 0xc9, 0x8e, 0xb6, 0xe2, 0x3d, 0xc8, 0xcd, 0x5e, 0xc9, 0xb4, 0x93, 0x04, 0xa0, 0x6c, - 0x0e, 0xd9, 0x5f, 0xe3, 0xb9, 0xd9, 0x2b, 0xac, 0x56, 0x30, 0x29, 0xe7, 0xb2, 0x59, 0x34, 0xb9, - 0x12, 0x58, 0xad, 0x60, 0x92, 0xfe, 0xe1, 0x52, 0x4a, 0xc8, 0x2f, 0xab, 0xcc, 0xe4, 0x0e, 0x6c, - 0x78, 0x17, 0x8c, 0x58, 0x4c, 0xd3, 0x8d, 0x5b, 0xaa, 0x18, 0xe4, 0x75, 0xc4, 0x6a, 0x09, 0x89, - 0xec, 0x31, 0x54, 0xd2, 0x40, 0x23, 0x8b, 0xc1, 0x95, 0x70, 0xe9, 0x8f, 0x03, 0x6c, 0x95, 0x53, - 0xbe, 0x9d, 0x22, 0xe4, 0x6d, 0x67, 0x7c, 0xeb, 0x67, 0xc0, 0x56, 0x8f, 0xea, 0x6d, 0x99, 0xaf, - 0x28, 0x33, 0xdf, 0x8f, 0x73, 0x9f, 0x28, 0xfa, 0xa7, 0x50, 0x5f, 0xda, 0xfc, 0x4b, 0x3d, 0x18, - 0x2b, 0x17, 0x2c, 0x6c, 0x49, 0xbc, 0xc6, 0x05, 0xa0, 0x87, 0x50, 0x68, 0x05, 0x51, 0x8c, 0x12, - 0x23, 0x2b, 0x14, 0x8f, 0x4d, 0x0a, 0xa7, 0x31, 0x06, 0x82, 0x30, 0x38, 0xa5, 0xce, 0x2c, 0x47, - 0xe8, 0x04, 0x44, 0xe3, 0x7c, 0xfb, 0xb5, 0x78, 0xa2, 0xe1, 0x38, 0xa4, 0x97, 0xa1, 0xd8, 0x0a, - 0x45, 0x28, 0x54, 0xb8, 0x00, 0xe8, 0x65, 0x28, 0x88, 0xe5, 0x03, 0x8d, 0xc2, 0x05, 0xa0, 0xff, - 0xb5, 0x42, 0x39, 0x6d, 0xd7, 0x8a, 0x2d, 0xbc, 0xda, 0xd8, 0xfe, 0x8d, 0x82, 0xb9, 0x1f, 0xcb, - 0x3e, 0x1a, 0xfb, 0xc1, 0x16, 0xc2, 0x78, 0x4d, 0xa8, 0xd2, 0x11, 0x54, 0xb1, 0xec, 0x0a, 0x62, - 0x04, 0x19, 0xcb, 0x87, 0xb9, 0xe7, 0x25, 0x61, 0x4a, 0x00, 0x68, 0x9b, 0xfb, 0x78, 0x9b, 0x22, - 0x54, 0x91, 0xe3, 0x90, 0x30, 0x4f, 0x9f, 0x50, 0x24, 0xce, 0x73, 0x1c, 0x22, 0x66, 0xfc, 0x78, - 0x9b, 0xee, 0x4d, 0x8e, 0xe3, 0x90, 0x30, 0x4f, 0x9f, 0x50, 0xa6, 0x53, 0x38, 0x0e, 0xb1, 0x3a, - 0x8d, 0x1a, 0x2a, 0x05, 0x1b, 0x25, 0xd2, 0x5f, 0x00, 0xf0, 0xe0, 0x34, 0x72, 0x62, 0xb2, 0xfa, - 0x41, 0xda, 0x0d, 0x2a, 0x59, 0x8f, 0x4b, 0xae, 0x5e, 0xda, 0x1d, 0xde, 0x5d, 0x8a, 0x1a, 0xf5, - 0xc5, 0xb5, 0xb2, 0x62, 0x4b, 0x84, 0x0d, 0xfd, 0x9f, 0x15, 0xa8, 0x76, 0x43, 0xdb, 0x09, 0x77, - 0xce, 0x7b, 0x33, 0x67, 0xf4, 0xd6, 0x4a, 0xeb, 0x36, 0xc5, 0x42, 0xcf, 0x4a, 0x73, 0x17, 0xc6, - 0x86, 0x04, 0xc1, 0x3e, 0x86, 0xc2, 0xd8, 0xb3, 0x44, 0x3d, 0xb7, 0xbe, 0xfd, 0x5d, 0x59, 0x4e, - 0x2e, 0xd4, 0x27, 0x63, 0x6c, 0xea, 0x38, 0xb1, 0xea, 0xbf, 0x4c, 0xe7, 0xa7, 0x4e, 0x2f, 0xdb, - 0xdf, 0xad, 0x51, 0xd7, 0xdc, 0x6b, 0x69, 0xd8, 0x85, 0x15, 0x76, 0x8d, 0x5e, 0x4b, 0xcb, 0xb1, - 0x0d, 0xa8, 0x62, 0xbf, 0xd6, 0x1b, 0x3c, 0x6b, 0xf3, 0x5e, 0x5f, 0x2b, 0x50, 0x1b, 0x4e, 0x88, - 0x4e, 0xb3, 0x87, 0xdd, 0x1e, 0x40, 0xe9, 0xc8, 0x6c, 0xff, 0xe2, 0xc8, 0xd0, 0x34, 0xfd, 0x4f, - 0x14, 0x80, 0x17, 0xae, 0x6f, 0x07, 0xa7, 0xb4, 0xb8, 0x0f, 0x32, 0xa5, 0xc7, 0x60, 0x78, 0x7e, - 0xc9, 0x3b, 0x47, 0x75, 0x71, 0x3d, 0xce, 0xd9, 0x0f, 0x40, 0x0d, 0xd0, 0x34, 0x64, 0x15, 0x5b, - 0x78, 0x65, 0x65, 0x45, 0xbc, 0x1c, 0x08, 0x00, 0x5d, 0xd8, 0x73, 0x2c, 0x5b, 0xbe, 0xae, 0xd0, - 0x18, 0x8f, 0x15, 0xb7, 0x43, 0x3c, 0x7b, 0xe2, 0x50, 0xff, 0x9f, 0x1c, 0x54, 0x44, 0x51, 0xdb, - 0x8a, 0xcf, 0xb2, 0xbd, 0xb8, 0xb2, 0xd4, 0x8b, 0xdf, 0x14, 0x51, 0x8e, 0x28, 0x62, 0x97, 0x31, - 0xa0, 0x25, 0xfd, 0xfb, 0x2c, 0x74, 0x07, 0x78, 0x3b, 0x45, 0x55, 0x50, 0x9a, 0x85, 0xee, 0x73, - 0x07, 0xab, 0xee, 0xaa, 0x24, 0x0c, 0x30, 0x18, 0x15, 0x92, 0x17, 0x55, 0x24, 0xb6, 0xed, 0x33, - 0xd4, 0x79, 0xe2, 0xda, 0x0e, 0x49, 0x8a, 0xa8, 0x5e, 0x46, 0x18, 0x45, 0x37, 0xa1, 0x96, 0x90, - 0x06, 0x8b, 0xee, 0x02, 0x24, 0x19, 0x85, 0x3f, 0x80, 0xaa, 0x68, 0x15, 0x06, 0xe4, 0x51, 0xe5, - 0x4b, 0xf2, 0x10, 0x08, 0x86, 0x16, 0x66, 0xa3, 0x77, 0xa1, 0x1a, 0xc4, 0x27, 0x4e, 0x38, 0xb0, - 0xe2, 0x38, 0x4c, 0xfc, 0x18, 0x08, 0xd5, 0x44, 0x0c, 0x31, 0xd0, 0xde, 0x0a, 0x86, 0x8a, 0x64, - 0x40, 0x94, 0x60, 0x58, 0x4d, 0x0e, 0xf0, 0xf6, 0xe4, 0x90, 0x56, 0x1f, 0x42, 0x6b, 0x35, 0x53, - 0x7d, 0x90, 0x56, 0xfd, 0xd7, 0x0a, 0x54, 0x9b, 0xbe, 0xe5, 0x9d, 0x7f, 0xe5, 0x24, 0x99, 0xdf, - 0xf5, 0x67, 0xf3, 0x78, 0x80, 0xa1, 0x45, 0xb6, 0x86, 0x15, 0xc2, 0xe0, 0x75, 0x23, 0x2b, 0xe7, - 0x71, 0x4a, 0x17, 0xcd, 0x22, 0x08, 0x14, 0x31, 0xa4, 0xf2, 0x14, 0xa6, 0xf2, 0x19, 0xf9, 0x1e, - 0x06, 0xaa, 0x85, 0x3c, 0xd1, 0x0b, 0x59, 0x79, 0x62, 0xb8, 0x07, 0xf5, 0xd8, 0x9d, 0xe2, 0xa6, - 0xfa, 0xd1, 0x7c, 0xea, 0xd8, 0x74, 0x30, 0x79, 0xf1, 0x62, 0xda, 0x92, 0x38, 0xd4, 0x32, 0x75, - 0xa6, 0x41, 0x78, 0x3e, 0x48, 0x5f, 0xc4, 0xf3, 0x1c, 0x04, 0x8a, 0x5e, 0xaa, 0xfe, 0xb8, 0x0e, - 0x05, 0x33, 0xb0, 0x1d, 0xf6, 0x11, 0x54, 0xe8, 0x61, 0x6c, 0xb5, 0x73, 0x40, 0x32, 0xfd, 0xa1, - 0x32, 0x40, 0xf5, 0xe5, 0xe8, 0xcd, 0x4f, 0x69, 0x77, 0x30, 0x76, 0x44, 0xf1, 0x72, 0x9f, 0x80, - 0xb1, 0x9a, 0x13, 0x9e, 0xee, 0x52, 0x18, 0xbc, 0x74, 0x46, 0xf1, 0x80, 0xda, 0xf9, 0xc2, 0x25, - 0x77, 0x49, 0xd0, 0xe9, 0x69, 0xf1, 0x16, 0xa8, 0xf4, 0xe0, 0x16, 0x3a, 0xa2, 0x26, 0x2d, 0xf2, - 0x14, 0x46, 0xab, 0x5f, 0x06, 0xae, 0x2f, 0xac, 0x2e, 0xad, 0x58, 0xfd, 0xf3, 0xc0, 0xf5, 0x29, - 0x60, 0xa8, 0xc8, 0x45, 0x56, 0xdf, 0x83, 0x72, 0xe0, 0x8b, 0x79, 0xcb, 0x2b, 0xf3, 0x96, 0x02, - 0x9f, 0xa6, 0x7c, 0x1f, 0xaa, 0x63, 0xd7, 0x8b, 0x9d, 0x50, 0x30, 0xaa, 0x2b, 0x8c, 0x20, 0xc8, - 0xc4, 0xfc, 0x1e, 0xa8, 0x93, 0x30, 0x98, 0xcf, 0xf0, 0xae, 0x57, 0x56, 0x1b, 0x1d, 0xa2, 0xed, - 0x9c, 0xe3, 0xaa, 0x69, 0xe8, 0xfa, 0x93, 0x41, 0xe4, 0xc4, 0x0d, 0x58, 0x5d, 0x75, 0x42, 0xef, - 0x39, 0xa4, 0xd5, 0x9a, 0x4c, 0xc4, 0xfc, 0xd5, 0x55, 0xad, 0xd6, 0x64, 0x42, 0x93, 0x67, 0x03, - 0x4d, 0xed, 0xad, 0x81, 0xe6, 0xa3, 0xc5, 0x55, 0x8c, 0xcf, 0xa2, 0x46, 0x3d, 0x5b, 0xd1, 0xa4, - 0xa1, 0x25, 0xbd, 0x8d, 0xf1, 0x59, 0xc4, 0xde, 0x07, 0xf5, 0x14, 0x7b, 0xe3, 0x99, 0x33, 0xa2, - 0x37, 0xf7, 0xf4, 0x6d, 0x66, 0x11, 0x1b, 0x79, 0xf9, 0xd4, 0xf5, 0x29, 0x48, 0x6e, 0x42, 0xd1, - 0x73, 0xa7, 0x6e, 0x4c, 0xcf, 0xef, 0x17, 0xde, 0x4c, 0x89, 0xc0, 0x74, 0x28, 0x05, 0xe3, 0x31, - 0x2e, 0x5f, 0x5b, 0x61, 0x91, 0x14, 0xf6, 0x3e, 0x88, 0x82, 0x72, 0x60, 0x3b, 0x63, 0x7a, 0x8b, - 0x5f, 0xcd, 0x52, 0x6a, 0x9c, 0x54, 0xbc, 0xdb, 0x50, 0x4f, 0x99, 0x07, 0xaf, 0x9d, 0x51, 0x83, - 0x65, 0x1b, 0xe6, 0x54, 0xa0, 0x9a, 0x08, 0x1c, 0x3b, 0x23, 0xb6, 0x05, 0xe5, 0x60, 0xf8, 0x72, - 0x10, 0x3a, 0xe3, 0xc6, 0xd5, 0xcb, 0xdf, 0x19, 0x4b, 0xc1, 0xf0, 0x25, 0x77, 0xc6, 0xec, 0x63, - 0xa8, 0x86, 0x94, 0x3b, 0x07, 0xb6, 0x15, 0x5b, 0x8d, 0x6b, 0xd9, 0x0d, 0x58, 0x24, 0x55, 0x0e, - 0xe1, 0x22, 0xc1, 0xde, 0x83, 0xba, 0x73, 0x16, 0x87, 0xd6, 0x20, 0x98, 0x89, 0x16, 0xf4, 0x1d, - 0xd1, 0x04, 0x12, 0xb2, 0x2b, 0x70, 0xec, 0x27, 0xb0, 0x61, 0x3b, 0x9e, 0x13, 0x3b, 0x64, 0x60, - 0xd4, 0x8a, 0xcf, 0x1a, 0xd7, 0xc9, 0xee, 0x6b, 0xc9, 0xb3, 0x4e, 0x4a, 0xc4, 0x03, 0xb9, 0xc8, - 0xcc, 0xee, 0x42, 0x6d, 0xe8, 0xfa, 0x36, 0xba, 0x52, 0x6c, 0x4d, 0xa2, 0xc6, 0x0d, 0xba, 0x16, - 0x55, 0x89, 0xeb, 0x5b, 0x93, 0x88, 0x3d, 0x81, 0x9a, 0x25, 0xa2, 0x15, 0x95, 0xaf, 0x8d, 0x46, - 0xf6, 0x95, 0x2e, 0x13, 0xc7, 0x78, 0xd5, 0x5a, 0x00, 0xfa, 0xbf, 0xe5, 0x41, 0x4d, 0xae, 0x3a, - 0xab, 0x42, 0xf9, 0xc8, 0x7c, 0x6e, 0x76, 0x5f, 0x98, 0xda, 0x1a, 0xe6, 0xca, 0xe3, 0x66, 0xe7, - 0xc8, 0x18, 0xf4, 0x5a, 0x4d, 0x53, 0x3c, 0x61, 0xd3, 0xf3, 0xa9, 0x80, 0x73, 0xec, 0x0a, 0xd4, - 0x9f, 0x1d, 0x99, 0xad, 0x7e, 0xbb, 0x6b, 0x0a, 0x54, 0x1e, 0x51, 0xc6, 0xe7, 0x22, 0x21, 0x0b, - 0x54, 0x01, 0x51, 0x07, 0xcd, 0xbe, 0xc1, 0xdb, 0x09, 0xaa, 0x88, 0xb3, 0x1c, 0xf2, 0xee, 0xcf, - 0x8d, 0x56, 0x5f, 0x03, 0xf6, 0x0e, 0x5c, 0x49, 0x45, 0x12, 0x75, 0x5a, 0x15, 0x53, 0x7b, 0x22, - 0xa6, 0x5d, 0x43, 0x25, 0xdc, 0x68, 0x1d, 0xf1, 0x5e, 0xfb, 0xd8, 0x18, 0xb4, 0xfa, 0x86, 0xf6, - 0x0e, 0x26, 0xf9, 0x5e, 0xdb, 0x7c, 0xae, 0x5d, 0x67, 0x75, 0xa8, 0xe0, 0x48, 0x68, 0xbf, 0x41, - 0x65, 0xc0, 0xde, 0x9e, 0x76, 0x07, 0x55, 0xec, 0xb6, 0x7b, 0xfd, 0xb6, 0xd9, 0xea, 0x6b, 0xef, - 0x62, 0xa6, 0x7f, 0xd6, 0xee, 0xf4, 0x0d, 0xae, 0x6d, 0xa2, 0xec, 0xcf, 0xbb, 0x6d, 0x53, 0xbb, - 0x4b, 0x2f, 0xbf, 0xcd, 0x83, 0xc3, 0x8e, 0xa1, 0xe9, 0xa4, 0xb1, 0xcb, 0xfb, 0xda, 0x3d, 0x56, - 0x81, 0xe2, 0x91, 0x89, 0x76, 0xdc, 0x47, 0xe5, 0x34, 0x1c, 0x34, 0x3b, 0x1d, 0xed, 0xbd, 0x4c, - 0xbd, 0xf0, 0x00, 0xc7, 0x2f, 0xda, 0xe6, 0x6e, 0xf7, 0x85, 0xf6, 0x3d, 0x64, 0xdb, 0xe1, 0xdd, - 0xe6, 0x6e, 0x0b, 0xcb, 0x8a, 0x2d, 0x54, 0xd0, 0x3b, 0xec, 0xb4, 0xfb, 0xda, 0xf7, 0x91, 0x6b, - 0xaf, 0xd9, 0xdf, 0x37, 0xb8, 0xf6, 0x10, 0xc7, 0xcd, 0x5e, 0xcf, 0xe0, 0x7d, 0x6d, 0x1b, 0xc7, - 0x6d, 0x93, 0xc6, 0x8f, 0x49, 0xeb, 0xe1, 0x6e, 0xb3, 0x6f, 0x68, 0x4f, 0x70, 0xbc, 0x6b, 0x74, - 0x8c, 0xbe, 0xa1, 0xfd, 0x10, 0xb5, 0x52, 0x7d, 0xd3, 0xc3, 0xad, 0x7a, 0x8a, 0xbb, 0x90, 0x82, - 0x64, 0xcf, 0x8f, 0x70, 0xa2, 0x83, 0xb6, 0x79, 0xd4, 0xd3, 0x3e, 0x41, 0x66, 0x1a, 0x12, 0xe5, - 0x53, 0xc6, 0x60, 0x5d, 0x9c, 0x56, 0xba, 0xa9, 0x3f, 0xd6, 0x5f, 0x82, 0x9a, 0xc4, 0x47, 0x94, - 0x6c, 0x9b, 0xa6, 0xc1, 0xb5, 0x35, 0x5c, 0x78, 0xc7, 0x78, 0xd6, 0xd7, 0x14, 0x44, 0xf2, 0xf6, - 0xde, 0x7e, 0x5f, 0xcb, 0xe1, 0xb0, 0x7b, 0x84, 0xdb, 0x95, 0xa7, 0x8d, 0x31, 0x0e, 0xda, 0x5a, - 0x01, 0x47, 0x4d, 0xb3, 0xdf, 0xd6, 0x8a, 0xb4, 0x71, 0x6d, 0x73, 0xaf, 0x63, 0x68, 0x25, 0xc4, - 0x1e, 0x34, 0xf9, 0x73, 0xad, 0x8c, 0x42, 0xcd, 0xc3, 0xc3, 0xce, 0x17, 0x9a, 0xaa, 0x6f, 0x41, - 0xb9, 0x39, 0x99, 0x1c, 0x60, 0xa2, 0x51, 0xa1, 0xf0, 0xec, 0xa8, 0xd3, 0x11, 0xbf, 0x88, 0xec, - 0x74, 0xfb, 0xfd, 0xee, 0x81, 0xa6, 0xe0, 0x39, 0xf5, 0xbb, 0x87, 0x5a, 0x4e, 0xff, 0x6f, 0x05, - 0xd6, 0x97, 0xdd, 0x9f, 0x5d, 0x07, 0x59, 0xdb, 0x5c, 0xa8, 0x74, 0x1a, 0x90, 0x54, 0x36, 0x17, - 0x0b, 0x1d, 0x1d, 0x6a, 0xf3, 0xc8, 0x11, 0x6a, 0x9e, 0xa7, 0xd5, 0xce, 0x12, 0x8e, 0x6d, 0x42, - 0x75, 0x64, 0xf9, 0xfd, 0x70, 0xee, 0x8f, 0xac, 0x58, 0x24, 0x58, 0x95, 0x67, 0x51, 0x94, 0x78, - 0x64, 0x67, 0x23, 0x7f, 0xe0, 0x49, 0xe1, 0x8b, 0xbd, 0x61, 0xe9, 0xad, 0xbd, 0xe1, 0xc5, 0x02, - 0xa3, 0xbc, 0x52, 0x60, 0xfc, 0x65, 0x0e, 0x8a, 0xbf, 0x98, 0x3b, 0xe1, 0x39, 0x7b, 0x0a, 0x95, - 0x28, 0x9e, 0xc6, 0xd9, 0x5c, 0x7c, 0x53, 0xa8, 0x26, 0xfa, 0xa3, 0x5e, 0x6c, 0xc5, 0xce, 0xd4, - 0xf1, 0x63, 0x91, 0x91, 0x91, 0x97, 0x2e, 0x2c, 0xb5, 0x32, 0xce, 0x4c, 0x54, 0xed, 0x45, 0x2e, - 0x00, 0x8c, 0xca, 0x98, 0x98, 0x93, 0xfe, 0x1e, 0x16, 0xf9, 0x91, 0x0b, 0x02, 0x46, 0x65, 0xea, - 0xa9, 0x2e, 0x7b, 0xa8, 0x93, 0x14, 0xdc, 0x8c, 0x13, 0xc7, 0xc2, 0xf0, 0x92, 0xbc, 0xcf, 0xa5, - 0x30, 0x1e, 0x84, 0x17, 0x58, 0x76, 0xdf, 0x9a, 0x50, 0x0e, 0x56, 0x79, 0x02, 0xea, 0x2f, 0xa0, - 0xbe, 0x64, 0xec, 0x72, 0x4c, 0x41, 0xb7, 0x31, 0x3a, 0xe8, 0xce, 0x4a, 0xe6, 0x06, 0xe4, 0x32, - 0x5e, 0x9f, 0xcf, 0xdc, 0x86, 0x02, 0xf9, 0xb7, 0xc1, 0xf7, 0x0c, 0xad, 0xa8, 0xff, 0x45, 0x0e, - 0xae, 0xf4, 0x43, 0xcb, 0x8f, 0x2c, 0xf1, 0x40, 0xe8, 0xc7, 0x61, 0xe0, 0xb1, 0x1f, 0x83, 0x1a, - 0x8f, 0xbc, 0xec, 0xbe, 0xbd, 0x2b, 0x13, 0xc1, 0x45, 0xd6, 0x47, 0xfd, 0x91, 0x47, 0xbb, 0x57, - 0x8e, 0xc5, 0x80, 0x7d, 0x00, 0xc5, 0xa1, 0x33, 0x71, 0x7d, 0xd9, 0x8a, 0xbf, 0x73, 0x51, 0x70, - 0x07, 0x89, 0xfb, 0x6b, 0x5c, 0x70, 0xb1, 0x8f, 0xa0, 0x34, 0x0a, 0xa6, 0x98, 0xec, 0x44, 0x99, - 0x73, 0x7d, 0x75, 0x22, 0xa4, 0xee, 0xaf, 0x71, 0xc9, 0xc7, 0x9e, 0x82, 0x1a, 0x06, 0x9e, 0x37, - 0xb4, 0x46, 0xaf, 0x64, 0x4b, 0xde, 0xb8, 0x28, 0xc3, 0x25, 0x7d, 0x7f, 0x8d, 0xa7, 0xbc, 0xfa, - 0x23, 0x28, 0x4b, 0x63, 0x71, 0x03, 0x76, 0x8c, 0xbd, 0xb6, 0xdc, 0xbb, 0x56, 0xf7, 0xe0, 0xa0, - 0x8d, 0x7b, 0x57, 0x03, 0x95, 0x77, 0x3b, 0x9d, 0x9d, 0x66, 0xeb, 0xb9, 0x96, 0xdb, 0x51, 0xa1, - 0x64, 0x51, 0x33, 0xad, 0xff, 0xbe, 0x02, 0x1b, 0x17, 0x16, 0xc0, 0x3e, 0x81, 0xc2, 0x34, 0xb0, - 0x93, 0xed, 0xb9, 0x7f, 0xe9, 0x2a, 0x33, 0x30, 0x5e, 0x59, 0x4e, 0x12, 0xfa, 0xa7, 0xb0, 0xbe, - 0x8c, 0xcf, 0xfc, 0xb6, 0x56, 0x87, 0x0a, 0x37, 0x9a, 0xbb, 0x83, 0xae, 0xd9, 0xf9, 0x42, 0x24, - 0x07, 0x02, 0x5f, 0xf0, 0x76, 0xdf, 0xd0, 0x72, 0xfa, 0x2f, 0x41, 0xbb, 0xb8, 0x31, 0x6c, 0x0f, - 0x36, 0xb0, 0x02, 0xf7, 0x1c, 0x6a, 0xa9, 0x32, 0x47, 0x76, 0xe7, 0x92, 0x9d, 0x94, 0x6c, 0x74, - 0x62, 0xeb, 0xa3, 0x25, 0x58, 0xff, 0x1d, 0x60, 0xab, 0x3b, 0xf8, 0x7f, 0xa7, 0xfe, 0x9f, 0x14, - 0x28, 0x1c, 0x7a, 0x96, 0xcf, 0xee, 0x41, 0x91, 0x7e, 0xda, 0x92, 0x0d, 0x6e, 0x35, 0x73, 0x23, - 0xd1, 0x2d, 0x88, 0xc6, 0xde, 0x87, 0x7c, 0x3c, 0xf2, 0xa4, 0x0f, 0xdd, 0x78, 0x83, 0xf3, 0xed, - 0xaf, 0x71, 0xe4, 0x62, 0x5b, 0x90, 0xb7, 0x6d, 0x4f, 0x3a, 0x50, 0x92, 0xfa, 0xad, 0xd8, 0xda, - 0x75, 0xc6, 0xae, 0xef, 0xca, 0x1f, 0xda, 0x90, 0x85, 0xbd, 0x07, 0x79, 0x7b, 0xe4, 0x49, 0xb7, - 0xb9, 0xb2, 0xe0, 0xcc, 0x28, 0xb4, 0x47, 0x1e, 0x7b, 0x00, 0x79, 0x97, 0xde, 0xcf, 0x91, 0x8d, - 0x25, 0xd1, 0x28, 0x72, 0xc2, 0x58, 0xbc, 0xc7, 0xd2, 0x83, 0x92, 0x1f, 0xed, 0x94, 0x80, 0x3e, - 0xef, 0xd1, 0xff, 0x31, 0x07, 0xb5, 0x2c, 0xfd, 0x5b, 0x75, 0x95, 0x1f, 0x63, 0xc5, 0x33, 0xf3, - 0xdc, 0x91, 0x1b, 0x0f, 0xde, 0xf8, 0x9e, 0x59, 0x4b, 0x58, 0xa8, 0xc7, 0x7b, 0x1f, 0x44, 0x43, - 0x27, 0xf8, 0x0b, 0x97, 0xf0, 0x57, 0x88, 0x9e, 0x36, 0x84, 0x99, 0x7e, 0xaf, 0xb8, 0xd2, 0xef, - 0x3d, 0xa0, 0xcf, 0x16, 0xe8, 0x97, 0x83, 0x52, 0x56, 0x95, 0x40, 0xf2, 0x84, 0xf8, 0xed, 0x1e, - 0x0d, 0x2f, 0x04, 0x7a, 0xf5, 0xad, 0x81, 0x5e, 0xff, 0x01, 0x46, 0x06, 0x9c, 0x11, 0xe3, 0xaa, - 0x18, 0x5d, 0xf2, 0x5c, 0x20, 0x29, 0xd8, 0xd5, 0x57, 0x33, 0x27, 0xc9, 0x9e, 0x80, 0x6a, 0x2f, - 0x87, 0xb0, 0x9b, 0x2b, 0xc7, 0xfd, 0x68, 0x37, 0x09, 0x5e, 0xb6, 0x0c, 0x0c, 0x9f, 0x42, 0x1d, - 0xab, 0xd4, 0xd7, 0x56, 0xe8, 0x52, 0x91, 0x28, 0x1d, 0x50, 0xba, 0x40, 0xcf, 0x89, 0x8f, 0x13, - 0xca, 0xfe, 0x1a, 0xaf, 0x45, 0x19, 0x98, 0x7d, 0x1f, 0xca, 0xb3, 0xd0, 0x99, 0x59, 0xa1, 0x23, - 0x1d, 0xb1, 0x9e, 0xbc, 0x2c, 0x12, 0x72, 0x7f, 0x8d, 0x27, 0x74, 0x64, 0x75, 0xce, 0x9c, 0xd1, - 0x5c, 0xa6, 0xcb, 0x94, 0xd5, 0x10, 0x48, 0x64, 0x95, 0x74, 0xb6, 0x0d, 0x60, 0x3b, 0x96, 0xe7, - 0x05, 0x94, 0x5c, 0x8b, 0xd9, 0xc2, 0x79, 0x37, 0xc5, 0x8b, 0x0f, 0x74, 0x12, 0x48, 0x9f, 0x40, - 0x59, 0x2e, 0x0c, 0x8b, 0x9b, 0x9e, 0xd1, 0x1f, 0x1c, 0x37, 0x79, 0x1b, 0xcb, 0x96, 0x9e, 0xb6, - 0x86, 0xb1, 0x6f, 0x8f, 0x37, 0x4d, 0x99, 0x2b, 0xb8, 0x71, 0xdc, 0x7d, 0x6e, 0x68, 0x39, 0xf1, - 0xbc, 0x63, 0x7e, 0xa1, 0xe5, 0x45, 0x21, 0x69, 0x1c, 0x36, 0x39, 0xa6, 0x8a, 0x2a, 0x94, 0x8d, - 0xcf, 0x8d, 0xd6, 0x51, 0xdf, 0xd0, 0x8a, 0x18, 0x8e, 0x76, 0x8d, 0x66, 0xa7, 0xd3, 0x6d, 0x61, - 0x1e, 0x29, 0xed, 0x54, 0xd0, 0x61, 0x68, 0x27, 0xf5, 0xff, 0xac, 0xc0, 0xfa, 0xf2, 0x95, 0x63, - 0x3f, 0x02, 0xd5, 0xb6, 0x97, 0x4e, 0xe0, 0xf6, 0x65, 0x57, 0xf3, 0xd1, 0xae, 0x9d, 0x1c, 0x82, - 0x18, 0xb0, 0xbb, 0x49, 0x80, 0xc8, 0xad, 0x04, 0x88, 0x24, 0x3c, 0xfc, 0x14, 0x36, 0xc4, 0x73, - 0x38, 0x35, 0x14, 0x43, 0x2b, 0x72, 0x96, 0x6f, 0x7f, 0x8b, 0x88, 0xbb, 0x92, 0xb6, 0xbf, 0xc6, - 0xd7, 0x47, 0x4b, 0x18, 0xf6, 0x19, 0xac, 0x5b, 0xd4, 0x98, 0xa6, 0xf2, 0x85, 0xec, 0x9b, 0x6d, - 0x13, 0x69, 0x19, 0xf1, 0xba, 0x95, 0x45, 0xa0, 0x9b, 0xd8, 0x61, 0x30, 0x5b, 0x08, 0x2f, 0x45, - 0x8a, 0xdd, 0x30, 0x98, 0x65, 0x64, 0x6b, 0x76, 0x06, 0x66, 0x4f, 0xa1, 0x26, 0x2d, 0x17, 0x5f, - 0xcc, 0x95, 0xb2, 0xa1, 0x48, 0x98, 0x4d, 0x05, 0xdb, 0xfe, 0x1a, 0xaf, 0x8e, 0x16, 0x20, 0x7b, - 0x0c, 0x55, 0x61, 0xb0, 0x10, 0x2b, 0x67, 0x3d, 0x81, 0xac, 0x4d, 0xa4, 0xc0, 0x4a, 0x21, 0xf6, - 0x11, 0x00, 0xd9, 0xb9, 0xf8, 0x38, 0x2f, 0xbd, 0x73, 0x68, 0x64, 0x22, 0x52, 0xb1, 0x13, 0x20, - 0x63, 0x9e, 0xf8, 0x61, 0xa1, 0xb2, 0x6a, 0x1e, 0xdd, 0xd6, 0x85, 0x79, 0xc9, 0x0f, 0x09, 0xd2, - 0x3c, 0x21, 0x06, 0x2b, 0xe6, 0x25, 0x52, 0xc2, 0xbc, 0xa4, 0xf8, 0x13, 0xe6, 0x09, 0x99, 0xea, - 0x45, 0xf3, 0x12, 0x11, 0x32, 0x4f, 0x48, 0x7c, 0x06, 0xeb, 0xb1, 0x2c, 0x2b, 0xe5, 0xa2, 0x6a, - 0x4b, 0x3f, 0x40, 0x48, 0x5a, 0xb2, 0xb0, 0x7a, 0x9c, 0x45, 0xa0, 0x74, 0x74, 0x12, 0x9c, 0x66, - 0xae, 0x77, 0x3d, 0x2b, 0xdd, 0x3b, 0x09, 0x4e, 0xb3, 0xf7, 0xbb, 0x1e, 0x65, 0x11, 0xfa, 0xd7, - 0x05, 0x28, 0x4b, 0x5f, 0x65, 0x57, 0x61, 0xa3, 0xc5, 0x8d, 0x66, 0xdf, 0x18, 0xec, 0x36, 0xfb, - 0xcd, 0x9d, 0x66, 0x0f, 0x93, 0x37, 0x83, 0xf5, 0x26, 0xf6, 0x42, 0x0b, 0x9c, 0x82, 0x17, 0x70, - 0x97, 0x77, 0x0f, 0x17, 0xa8, 0x1c, 0xd3, 0xa0, 0x26, 0x65, 0xc5, 0x77, 0x33, 0x79, 0xb6, 0x01, - 0x55, 0x21, 0x28, 0x10, 0xf4, 0xa0, 0x4a, 0x52, 0x02, 0x2e, 0x66, 0x44, 0xda, 0xe6, 0xae, 0xf1, - 0xb9, 0x56, 0x5a, 0x88, 0x08, 0x44, 0x39, 0x15, 0x11, 0xb0, 0x4a, 0x9d, 0x0a, 0x3f, 0x32, 0x5b, - 0x8b, 0x79, 0x2a, 0x28, 0x24, 0xd5, 0x1c, 0xb7, 0x8d, 0x17, 0x1a, 0xa0, 0x90, 0xd0, 0x42, 0x70, - 0x15, 0xcb, 0x0f, 0x52, 0x42, 0x60, 0x8d, 0xdd, 0x80, 0xab, 0xbd, 0xfd, 0xee, 0x8b, 0x81, 0x10, - 0x4a, 0x97, 0x50, 0x67, 0xd7, 0x40, 0xcb, 0x10, 0x84, 0xfa, 0x75, 0x9c, 0x92, 0xb0, 0x09, 0x63, - 0x4f, 0xdb, 0xc0, 0x29, 0x09, 0xd7, 0x17, 0xe1, 0x47, 0xc3, 0xa5, 0x08, 0xd1, 0x6e, 0xe7, 0xe8, - 0xc0, 0xec, 0x69, 0x57, 0xd0, 0x08, 0xc2, 0x08, 0xcb, 0x59, 0xaa, 0x66, 0x11, 0xb4, 0xae, 0x52, - 0x1c, 0x43, 0xdc, 0x8b, 0x26, 0x37, 0xdb, 0xe6, 0x5e, 0x4f, 0xbb, 0x96, 0x6a, 0x36, 0x38, 0xef, - 0xf2, 0x9e, 0xf6, 0x4e, 0x8a, 0xe8, 0xf5, 0x9b, 0xfd, 0xa3, 0x9e, 0x76, 0x3d, 0xb5, 0xf2, 0x90, - 0x77, 0x5b, 0x46, 0xaf, 0xd7, 0x69, 0xf7, 0xfa, 0xda, 0x0d, 0x6c, 0x8d, 0x17, 0x16, 0x25, 0xcc, - 0x8d, 0x8c, 0xa1, 0x7c, 0xcf, 0xe8, 0x6b, 0x37, 0x53, 0x33, 0x5a, 0xdd, 0x4e, 0xa7, 0x49, 0xad, - 0xde, 0xad, 0x9d, 0x1a, 0x7d, 0x1c, 0x29, 0x03, 0x97, 0x7e, 0x08, 0xeb, 0xcb, 0x71, 0x86, 0xe9, - 0x50, 0x77, 0xc7, 0x03, 0x3f, 0x88, 0x07, 0xce, 0x99, 0x1b, 0xc5, 0x51, 0xf2, 0x65, 0x86, 0x3b, - 0x36, 0x83, 0xd8, 0x20, 0x14, 0x36, 0x00, 0x69, 0xd8, 0x10, 0x15, 0x40, 0x0a, 0xeb, 0xfb, 0x50, - 0x5f, 0x8a, 0x3c, 0xec, 0x3b, 0x50, 0x71, 0xc7, 0xcb, 0xca, 0x54, 0x77, 0xfc, 0x0d, 0x34, 0xed, - 0x41, 0x2d, 0x1b, 0x86, 0xbe, 0xbd, 0xa2, 0xbf, 0x57, 0xa0, 0x9a, 0x09, 0x4b, 0xdf, 0x68, 0x89, - 0xb7, 0xa1, 0x12, 0x3b, 0xd3, 0x59, 0x10, 0x5a, 0x32, 0x88, 0xab, 0x7c, 0x81, 0x58, 0x9a, 0x2d, - 0xbf, 0x3c, 0xdb, 0xf2, 0x9b, 0x55, 0xe1, 0x2d, 0x6f, 0x56, 0x1f, 0x43, 0x4d, 0x94, 0x14, 0xb1, - 0xb8, 0xcc, 0xc5, 0xcb, 0x9f, 0xac, 0x88, 0x47, 0xbc, 0xf9, 0xe8, 0x5d, 0x80, 0x45, 0xb0, 0x5c, - 0x7c, 0xb6, 0xac, 0x64, 0x3e, 0x5b, 0x5e, 0xb6, 0x21, 0xf7, 0xdb, 0x6d, 0xc0, 0xd6, 0xa0, 0x92, - 0x86, 0xd2, 0x6f, 0xbd, 0xcb, 0x0b, 0x4b, 0xf2, 0x59, 0x4b, 0x1e, 0xc2, 0x95, 0xcc, 0x02, 0xe5, - 0xaf, 0xdf, 0x05, 0xaa, 0xdb, 0x36, 0x16, 0xab, 0x12, 0x3f, 0xa7, 0xef, 0x25, 0xc7, 0x24, 0x02, - 0xe5, 0x37, 0x39, 0xa6, 0x6b, 0x50, 0x14, 0x91, 0x57, 0x7e, 0x48, 0x43, 0x80, 0xae, 0xcb, 0x2d, - 0x12, 0x7a, 0x52, 0x1e, 0x25, 0xcb, 0xf3, 0x13, 0xb1, 0x68, 0xc1, 0xf2, 0x5b, 0x17, 0x7d, 0xf9, - 0x1c, 0x4d, 0xa8, 0x2f, 0x85, 0xea, 0xa5, 0xbd, 0x51, 0xde, 0xb4, 0x37, 0xb9, 0xec, 0xc7, 0xe5, - 0x6d, 0xa8, 0x2f, 0xc5, 0xeb, 0xcc, 0x37, 0xc0, 0x4a, 0xf6, 0x1b, 0x60, 0x6c, 0xdb, 0x4f, 0x4f, - 0x9c, 0xd0, 0xb9, 0xe4, 0x33, 0x47, 0x41, 0xd0, 0x3f, 0x83, 0x5a, 0xb6, 0xb2, 0x63, 0x3f, 0x80, - 0xa2, 0x1b, 0x3b, 0xd3, 0xe4, 0xa3, 0xa1, 0xeb, 0xab, 0xc5, 0x1f, 0x7d, 0xf8, 0x22, 0x98, 0xf4, - 0x5f, 0x29, 0xa0, 0x5d, 0xa4, 0x65, 0x3e, 0x54, 0x56, 0xde, 0xf0, 0xa1, 0x72, 0x6e, 0xc9, 0xc8, - 0x4b, 0x3e, 0x36, 0x46, 0xc3, 0xc5, 0xaf, 0xbd, 0x97, 0x7c, 0x39, 0x4b, 0x04, 0xf6, 0x00, 0xd4, - 0xd0, 0xa1, 0xef, 0x4a, 0x6d, 0x59, 0x81, 0x2c, 0x7d, 0x3d, 0x92, 0xd0, 0xf4, 0x3f, 0x50, 0xa0, - 0x2c, 0xcb, 0xd0, 0x4b, 0x7f, 0x18, 0xfe, 0x3e, 0x94, 0xc5, 0xcf, 0x95, 0xc9, 0xef, 0x94, 0x2b, - 0x0f, 0xb9, 0x09, 0x9d, 0xdd, 0x11, 0x1d, 0xcf, 0xf2, 0x6f, 0x12, 0xd8, 0xd6, 0x71, 0xc2, 0x63, - 0x93, 0x41, 0x0f, 0x1d, 0x54, 0xf6, 0x45, 0xf2, 0x37, 0x58, 0x20, 0x14, 0x26, 0xce, 0x48, 0xff, - 0x7f, 0x50, 0x96, 0x65, 0xee, 0xa5, 0xa6, 0xbc, 0xed, 0x9b, 0xd4, 0x4d, 0x80, 0x45, 0xdd, 0x7b, - 0x99, 0x86, 0x87, 0x77, 0xa1, 0x96, 0xfd, 0x2a, 0x90, 0x9a, 0xeb, 0xc0, 0x77, 0xc4, 0x4f, 0x99, - 0x9d, 0xaf, 0x9e, 0x68, 0xca, 0xc3, 0xdf, 0xcd, 0x7c, 0x3a, 0x44, 0x3c, 0x65, 0xc8, 0x3f, 0x37, - 0xbe, 0x10, 0xaf, 0xb3, 0x9d, 0xb6, 0x69, 0x34, 0xf9, 0x00, 0x61, 0xfa, 0xd1, 0x73, 0xbf, 0xd9, - 0xdb, 0x17, 0x3f, 0x7a, 0x4a, 0x0a, 0x21, 0xf2, 0xf4, 0xaa, 0xd7, 0x34, 0xf7, 0x0c, 0xf1, 0x1a, - 0x4b, 0xc3, 0x34, 0xa9, 0x15, 0xe9, 0xf5, 0x0f, 0xf3, 0x4d, 0x09, 0x13, 0x1e, 0x8e, 0x52, 0x5a, - 0xf9, 0xe1, 0xcf, 0xa0, 0xf1, 0xa6, 0xae, 0x19, 0xb5, 0xb6, 0xf6, 0x9b, 0xf4, 0x32, 0x51, 0x03, - 0xd5, 0xec, 0x0e, 0x04, 0xa4, 0x60, 0x21, 0xce, 0x8d, 0x8e, 0x41, 0x25, 0xc4, 0xce, 0x4f, 0xff, - 0xee, 0x37, 0x77, 0x94, 0x7f, 0xf8, 0xcd, 0x1d, 0xe5, 0x5f, 0x7e, 0x73, 0x67, 0xed, 0x57, 0xff, - 0x7a, 0x47, 0xf9, 0xff, 0xd9, 0x7f, 0x30, 0x99, 0x5a, 0x71, 0xe8, 0x9e, 0x89, 0x0f, 0xef, 0x12, - 0xc0, 0x77, 0x3e, 0x9c, 0xbd, 0x9a, 0x7c, 0x38, 0x1b, 0x7e, 0x88, 0x3b, 0x3a, 0x2c, 0xd1, 0xff, - 0x99, 0x3c, 0xfe, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x6e, 0xf8, 0x08, 0xaa, 0x32, 0x00, - 0x00, + // 5318 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x7b, 0xcd, 0x6f, 0x1b, 0x49, + 0x76, 0xb8, 0x9a, 0x9f, 0xcd, 0x47, 0x52, 0x6a, 0x97, 0x3d, 0x36, 0xed, 0xf5, 0x7a, 0xe4, 0xb6, + 0xc7, 0xa3, 0xf5, 0xec, 0x78, 0x66, 0x64, 0xaf, 0x77, 0x66, 0x31, 0xbf, 0xdd, 0xa5, 0xa8, 0xb6, + 0xc4, 0x35, 0xd5, 0xd4, 0x16, 0x29, 0x79, 0xe6, 0xb7, 0x08, 0x88, 0x26, 0xbb, 0x49, 0xb5, 0xa7, + 0xd9, 0xcd, 0xe9, 0x6e, 0x5a, 0xd2, 0x00, 0x01, 0xe6, 0x10, 0x04, 0x08, 0x12, 0x24, 0x87, 0xfc, + 0x03, 0x9b, 0x1c, 0x83, 0x5c, 0x72, 0xce, 0x31, 0x39, 0x04, 0xc8, 0x25, 0xc8, 0x9e, 0x82, 0x5c, + 0x82, 0xcd, 0x29, 0x48, 0x2e, 0x41, 0x0e, 0xb9, 0xe4, 0x10, 0xbc, 0x57, 0xd5, 0xcd, 0xa6, 0x28, + 0x8f, 0x07, 0x83, 0x5c, 0x84, 0x7a, 0x9f, 0xf5, 0xaa, 0xea, 0xd5, 0xfb, 0x28, 0xb6, 0x00, 0x66, + 0x9e, 0xe5, 0x3f, 0x9a, 0x85, 0x41, 0x1c, 0xb0, 0x02, 0x8e, 0x6f, 0xbd, 0x3f, 0x71, 0xe3, 0x93, + 0xf9, 0xf0, 0xd1, 0x28, 0x98, 0x7e, 0x30, 0x09, 0x26, 0xc1, 0x07, 0x44, 0x1c, 0xce, 0xc7, 0x04, + 0x11, 0x40, 0x23, 0x21, 0xa4, 0xff, 0x8d, 0x02, 0x85, 0xfe, 0xf9, 0xcc, 0x61, 0xeb, 0x90, 0x73, + 0xed, 0x86, 0xb2, 0xa9, 0x6c, 0x15, 0x79, 0xce, 0xb5, 0xd9, 0x2d, 0x50, 0xfd, 0xb9, 0xe7, 0x59, + 0x43, 0xcf, 0x69, 0xe4, 0x36, 0x95, 0x2d, 0x95, 0xa7, 0x30, 0xfb, 0x1e, 0x54, 0xac, 0x79, 0x1c, + 0x0c, 0x5c, 0x7f, 0x14, 0x36, 0xf2, 0x82, 0x88, 0x88, 0xb6, 0x3f, 0x0a, 0xd9, 0x35, 0x28, 0x9e, + 0xba, 0x76, 0x7c, 0xd2, 0x28, 0x90, 0x2e, 0x01, 0xb0, 0xdb, 0x50, 0x99, 0x85, 0xce, 0xc8, 0x8d, + 0xdc, 0xc0, 0x6f, 0x14, 0x89, 0xb2, 0x40, 0x30, 0x06, 0x85, 0xc8, 0xfd, 0xca, 0x69, 0x94, 0x88, + 0x40, 0x63, 0xd4, 0x13, 0x8d, 0x2c, 0xcf, 0x69, 0x94, 0x85, 0x1e, 0x02, 0x10, 0x1b, 0x93, 0x4d, + 0xea, 0xa6, 0xb2, 0x55, 0xe1, 0x02, 0xd0, 0xff, 0xb4, 0x00, 0xc5, 0x56, 0xe0, 0x47, 0x31, 0xbb, + 0x0e, 0x25, 0x37, 0x42, 0x43, 0x69, 0x29, 0x2a, 0x97, 0x10, 0xbb, 0x06, 0x05, 0xf7, 0x95, 0xe5, + 0xd1, 0x52, 0xf2, 0xfb, 0x6b, 0x9c, 0x20, 0xc4, 0xda, 0x88, 0xc5, 0x35, 0x28, 0x88, 0xb5, 0x25, + 0x36, 0x42, 0x2c, 0x2e, 0xa0, 0x82, 0xd8, 0x48, 0x62, 0x87, 0x88, 0x45, 0xe3, 0x55, 0xc4, 0x0e, + 0x25, 0x76, 0x8e, 0x58, 0xb4, 0xbc, 0x80, 0xd8, 0xb9, 0xc4, 0x8e, 0x11, 0x8b, 0xa6, 0xe7, 0x10, + 0x8b, 0x10, 0xbb, 0x05, 0x65, 0xdb, 0x8a, 0x1d, 0x24, 0xa0, 0xf5, 0xc5, 0xfd, 0x35, 0x9e, 0x20, + 0x90, 0x16, 0xbb, 0x53, 0xa2, 0x55, 0xa4, 0x89, 0x09, 0x82, 0xe9, 0x50, 0x45, 0xb6, 0x84, 0x0e, + 0x92, 0x9e, 0x45, 0xb2, 0x1f, 0x41, 0xcd, 0x76, 0x46, 0xee, 0xd4, 0xf2, 0x9e, 0x3e, 0x41, 0xa6, + 0xea, 0xa6, 0xb2, 0x55, 0xdd, 0xde, 0x78, 0x44, 0xfe, 0x91, 0x52, 0xf6, 0xd7, 0xf8, 0x12, 0x1b, + 0xfb, 0x18, 0xea, 0x12, 0xfe, 0x68, 0xfb, 0x63, 0x94, 0xab, 0x91, 0x9c, 0xb6, 0x24, 0xf7, 0xd1, + 0xf6, 0xc7, 0xfb, 0x6b, 0x7c, 0x99, 0x91, 0xdd, 0x87, 0x1a, 0xce, 0x1d, 0xc5, 0xd6, 0x74, 0x86, + 0x82, 0x75, 0x69, 0xd5, 0x12, 0x16, 0x97, 0xf5, 0x32, 0x0a, 0x7c, 0x64, 0x58, 0x97, 0xbb, 0x99, + 0x20, 0xd8, 0x26, 0x80, 0xed, 0x8c, 0xad, 0xb9, 0x17, 0x23, 0x79, 0x43, 0x6e, 0x6b, 0x06, 0xc7, + 0xee, 0x40, 0x65, 0x3e, 0xc3, 0x55, 0x1e, 0x5b, 0x5e, 0x43, 0x93, 0x0c, 0x0b, 0x14, 0x3a, 0x83, + 0x1b, 0xed, 0xb8, 0x7e, 0xe3, 0x0a, 0x9d, 0xb5, 0x00, 0x76, 0xca, 0x50, 0x7c, 0x65, 0x79, 0x73, + 0x47, 0xbf, 0x0d, 0xea, 0xa1, 0x15, 0x5a, 0x53, 0xee, 0x8c, 0x99, 0x06, 0xf9, 0x59, 0x10, 0x49, + 0xff, 0xc6, 0xa1, 0xde, 0x81, 0xd2, 0xb1, 0x15, 0x22, 0x8d, 0x41, 0xc1, 0xb7, 0xa6, 0x0e, 0x11, + 0x2b, 0x9c, 0xc6, 0xe8, 0x47, 0xd1, 0x79, 0x14, 0x3b, 0x53, 0xe9, 0xfc, 0x12, 0x42, 0xfc, 0xc4, + 0x0b, 0x86, 0xd2, 0x67, 0x54, 0x2e, 0x21, 0xdd, 0x84, 0x52, 0x2b, 0xf0, 0x50, 0xdb, 0x0d, 0x28, + 0x87, 0x8e, 0x37, 0x58, 0xcc, 0x56, 0x0a, 0x1d, 0xef, 0x30, 0x88, 0x90, 0x30, 0x0a, 0x04, 0x21, + 0x27, 0x08, 0xa3, 0x80, 0x08, 0xc9, 0xfc, 0xf9, 0xc5, 0xfc, 0x7a, 0x1f, 0xa0, 0x15, 0x84, 0xe1, + 0x77, 0xd6, 0x79, 0x0d, 0x8a, 0xb6, 0x33, 0x8b, 0x4f, 0x48, 0x69, 0x91, 0x0b, 0x40, 0x7f, 0x08, + 0xaa, 0x71, 0x36, 0x0b, 0x3b, 0x6e, 0x14, 0xb3, 0x3b, 0x50, 0xf0, 0xdc, 0x28, 0x6e, 0x28, 0x9b, + 0xf9, 0xad, 0xea, 0x36, 0x88, 0x13, 0x47, 0x2a, 0x27, 0xbc, 0xbe, 0x09, 0xea, 0x81, 0x75, 0x76, + 0x8c, 0x3b, 0x89, 0xda, 0x68, 0x4b, 0xe5, 0x16, 0xc9, 0xfd, 0x7d, 0x08, 0xd0, 0xb7, 0xc2, 0x89, + 0x13, 0x53, 0x00, 0xb9, 0x0d, 0xf9, 0xf8, 0x7c, 0x46, 0x1c, 0xa9, 0x3a, 0x24, 0x70, 0x44, 0xeb, + 0xff, 0xa5, 0x40, 0xb5, 0x37, 0x1f, 0x7e, 0x39, 0x77, 0xc2, 0x73, 0x5c, 0xd1, 0xd6, 0x82, 0x7b, + 0x7d, 0xfb, 0xba, 0xe0, 0xce, 0xd0, 0x17, 0x92, 0xb8, 0x44, 0x3f, 0xb0, 0x9d, 0x81, 0x6b, 0x27, + 0x4b, 0x44, 0xb0, 0x6d, 0x63, 0xc4, 0x0a, 0x66, 0x72, 0xd3, 0x72, 0xc1, 0x8c, 0x6d, 0x42, 0x71, + 0x74, 0xe2, 0x7a, 0x36, 0xdd, 0xdb, 0xe5, 0x15, 0x09, 0x02, 0xbb, 0x09, 0x6a, 0x18, 0x9c, 0x0e, + 0x28, 0xd4, 0x88, 0x18, 0x54, 0x0e, 0x83, 0xd3, 0x9e, 0xfb, 0x15, 0xee, 0xb7, 0x08, 0x83, 0x00, + 0xa5, 0x5e, 0xab, 0xd9, 0x69, 0x72, 0x6d, 0x0d, 0xc7, 0xc6, 0x67, 0xed, 0x5e, 0xbf, 0xa7, 0x29, + 0x6c, 0x1d, 0xc0, 0xec, 0xf6, 0x07, 0x12, 0xce, 0xb1, 0x12, 0xe4, 0xda, 0xa6, 0x96, 0x47, 0x1e, + 0xc4, 0xb7, 0x4d, 0xad, 0xc0, 0xca, 0x90, 0x6f, 0x9a, 0x9f, 0x6b, 0x45, 0x1a, 0x74, 0x3a, 0x5a, + 0x49, 0xff, 0x8d, 0x02, 0x95, 0xee, 0xf0, 0xa5, 0x33, 0x8a, 0x71, 0xcd, 0xe8, 0x53, 0x4e, 0xf8, + 0xca, 0x09, 0x69, 0xd9, 0x79, 0x2e, 0x21, 0x5c, 0x88, 0x3d, 0x14, 0x91, 0x89, 0xe7, 0xec, 0x21, + 0xf1, 0x8d, 0x4e, 0x9c, 0xa9, 0x45, 0x8b, 0x43, 0x3e, 0x82, 0xd0, 0x87, 0x83, 0xe1, 0x4b, 0x5a, + 0x5e, 0x9e, 0xe3, 0x90, 0xbd, 0x0d, 0x55, 0xa1, 0x63, 0x40, 0x0e, 0x54, 0xa4, 0xbd, 0x00, 0x81, + 0x32, 0xd1, 0x8d, 0x6f, 0x40, 0xd9, 0x1e, 0x0a, 0x62, 0x89, 0x88, 0x25, 0x7b, 0x48, 0x04, 0x94, + 0x24, 0xad, 0x82, 0x58, 0x96, 0x92, 0x84, 0x22, 0x86, 0x9b, 0xa0, 0x06, 0xc3, 0x97, 0x82, 0x2a, + 0x62, 0x6d, 0x39, 0x18, 0xbe, 0x44, 0x12, 0x9e, 0xa5, 0xfa, 0x6c, 0xee, 0x8f, 0x62, 0x0c, 0xdd, + 0xf7, 0xa0, 0x30, 0x9e, 0xfb, 0x23, 0x79, 0xee, 0x32, 0xe0, 0xa4, 0x6b, 0xe6, 0x44, 0x44, 0x5f, + 0xb3, 0xc2, 0x09, 0xfa, 0xe8, 0x8a, 0xaf, 0x21, 0x5e, 0xff, 0x33, 0xa9, 0xf1, 0x99, 0x67, 0x4d, + 0x98, 0x0a, 0x05, 0xb3, 0x6b, 0x1a, 0xda, 0x1a, 0xab, 0x81, 0xda, 0x36, 0xfb, 0x06, 0x37, 0x9b, + 0x1d, 0x4d, 0xa1, 0xa3, 0xe9, 0x37, 0x77, 0x3a, 0x86, 0x96, 0x43, 0xca, 0x71, 0xb7, 0xd3, 0xec, + 0xb7, 0x3b, 0x86, 0x56, 0x10, 0x14, 0xde, 0x6e, 0xf5, 0x35, 0x95, 0x69, 0x50, 0x3b, 0xe4, 0xdd, + 0xdd, 0xa3, 0x96, 0x31, 0x30, 0x8f, 0x3a, 0x1d, 0x4d, 0x63, 0x57, 0x61, 0x23, 0xc5, 0x74, 0x05, + 0x72, 0x13, 0x45, 0x8e, 0x9b, 0xbc, 0xc9, 0xf7, 0xb4, 0x9f, 0x33, 0x15, 0xf2, 0xcd, 0xbd, 0x3d, + 0xed, 0x6b, 0x05, 0x47, 0x2f, 0xda, 0xa6, 0xf6, 0x75, 0x8e, 0x69, 0x50, 0x3d, 0xe8, 0x9a, 0xdd, + 0x7e, 0xd7, 0x6c, 0xb7, 0x9a, 0x1d, 0xed, 0xeb, 0x82, 0xfe, 0x7b, 0x79, 0x28, 0xa0, 0xc9, 0xdf, + 0xec, 0xe8, 0xec, 0x7b, 0xa0, 0x8c, 0xe8, 0x2c, 0xab, 0xdb, 0x55, 0x41, 0xa3, 0xc4, 0xb4, 0xbf, + 0xc6, 0x15, 0xdc, 0x07, 0x45, 0x78, 0x6c, 0x75, 0x7b, 0x5d, 0x10, 0x93, 0x00, 0x85, 0xf4, 0x19, + 0xbb, 0x0d, 0xca, 0x2b, 0xe9, 0xbe, 0x35, 0x41, 0x17, 0x21, 0x0a, 0xa9, 0xaf, 0xd8, 0x26, 0xe4, + 0x47, 0x81, 0x48, 0x40, 0x29, 0x5d, 0x04, 0x88, 0xfd, 0x35, 0x8e, 0x24, 0xd4, 0x3f, 0xa6, 0x83, + 0x4e, 0xf5, 0x27, 0xe7, 0x84, 0x1a, 0xc6, 0xec, 0x1d, 0xc8, 0x47, 0xf3, 0x21, 0x9d, 0x76, 0x75, + 0xfb, 0xca, 0xca, 0xad, 0x43, 0x35, 0xd1, 0x7c, 0xc8, 0x1e, 0x40, 0x61, 0x14, 0x84, 0x21, 0x9d, + 0x7b, 0x9a, 0x0c, 0x16, 0xe1, 0x08, 0x13, 0x1a, 0xd2, 0xd9, 0x26, 0x28, 0x31, 0xa5, 0xab, 0x94, + 0x69, 0x11, 0x0f, 0x70, 0xc2, 0x98, 0xdd, 0x97, 0x41, 0x06, 0xb2, 0x36, 0x25, 0x21, 0x08, 0xf5, + 0x20, 0x95, 0xe9, 0x90, 0x9f, 0x5a, 0x67, 0x32, 0x67, 0x49, 0xa6, 0x24, 0xf6, 0xa0, 0x4d, 0x53, + 0xeb, 0x6c, 0xa7, 0x04, 0x05, 0xe7, 0x6c, 0x16, 0xea, 0x37, 0xa1, 0x92, 0x66, 0x30, 0x56, 0x03, + 0xc5, 0x92, 0x97, 0x49, 0xb1, 0xf4, 0x2d, 0x4c, 0x28, 0x49, 0x8e, 0x5a, 0xa6, 0x21, 0x94, 0x5c, + 0x31, 0x65, 0xa8, 0xff, 0x6d, 0x8e, 0xc2, 0xf5, 0xee, 0x6b, 0x82, 0xff, 0x7d, 0xc8, 0x5b, 0xde, + 0x84, 0xd8, 0xd7, 0xb7, 0x59, 0xb2, 0xfc, 0xe9, 0x2c, 0x74, 0xa2, 0x48, 0x9c, 0xb4, 0xe5, 0x4d, + 0x12, 0x3f, 0xc8, 0x5f, 0xee, 0x07, 0xef, 0x42, 0x59, 0x66, 0x32, 0x79, 0xa0, 0x75, 0xc1, 0xb1, + 0x2b, 0x90, 0x3c, 0xa1, 0xb2, 0x06, 0x94, 0x67, 0xa1, 0x3b, 0xb5, 0xc2, 0x73, 0x51, 0x5a, 0xf0, + 0x04, 0xc4, 0xa8, 0x3b, 0xfb, 0xc2, 0xb5, 0xcf, 0x64, 0x59, 0x24, 0x00, 0xe4, 0x1f, 0x05, 0xd3, + 0xa9, 0xe3, 0xc7, 0xf2, 0xd6, 0x26, 0x20, 0x5e, 0x59, 0x37, 0x1a, 0x8c, 0x0e, 0xbf, 0x70, 0xce, + 0xe9, 0xe8, 0x54, 0x5e, 0x76, 0xa3, 0x16, 0x82, 0xec, 0x3d, 0xa8, 0x04, 0xfe, 0x40, 0x64, 0x4e, + 0x79, 0x62, 0x72, 0x9f, 0xbb, 0xfe, 0x11, 0x61, 0xb9, 0x1a, 0xc8, 0x11, 0x7b, 0x17, 0x36, 0xbc, + 0xe0, 0x74, 0x30, 0xb2, 0x42, 0xdb, 0xf5, 0x2d, 0xcf, 0x8d, 0xcf, 0xe9, 0xfc, 0x54, 0xbe, 0xee, + 0x05, 0xa7, 0xad, 0x05, 0x56, 0xff, 0x12, 0xca, 0x72, 0x39, 0xec, 0x2e, 0xd4, 0xb0, 0xce, 0x1a, + 0x58, 0x43, 0x97, 0x04, 0x44, 0xf5, 0x55, 0x45, 0x5c, 0x53, 0xa0, 0x30, 0x08, 0xe0, 0x09, 0xca, + 0xcb, 0xb1, 0x14, 0x04, 0x10, 0xcf, 0xee, 0x41, 0x3d, 0x08, 0xdd, 0x89, 0xeb, 0x0f, 0xa2, 0x38, + 0x74, 0xfd, 0x89, 0x0c, 0xed, 0x35, 0x81, 0xec, 0x11, 0x4e, 0xef, 0x82, 0x9a, 0x58, 0x9c, 0x2a, + 0x54, 0xbe, 0xad, 0xc2, 0xdc, 0x25, 0x0a, 0xdf, 0x81, 0xfa, 0xa1, 0xd8, 0xef, 0xe7, 0xce, 0x39, + 0x3a, 0xc4, 0x35, 0x28, 0xa2, 0x13, 0x44, 0x94, 0x18, 0x2b, 0x5c, 0x00, 0xfa, 0x36, 0xa8, 0x87, + 0x61, 0x30, 0x73, 0xc2, 0xf8, 0x1c, 0xe3, 0x30, 0x6e, 0xb1, 0xf0, 0x18, 0x1c, 0x2e, 0xf2, 0x63, + 0x2e, 0x9b, 0x1f, 0x7f, 0x86, 0xaa, 0x49, 0xc6, 0x75, 0x22, 0x54, 0xfd, 0x08, 0x60, 0x96, 0x22, + 0x64, 0xe2, 0x4d, 0xe2, 0x80, 0x54, 0xce, 0x33, 0x1c, 0xfa, 0x5f, 0xe6, 0xa1, 0x7e, 0x68, 0x85, + 0xb1, 0x8b, 0x37, 0xb8, 0xed, 0x8f, 0x03, 0xf6, 0x2e, 0x14, 0xe2, 0xf3, 0x99, 0x23, 0xf3, 0xe6, + 0xd5, 0x34, 0x86, 0x08, 0x16, 0xf2, 0x3e, 0x62, 0xc0, 0xbd, 0x31, 0x5e, 0xb3, 0xd9, 0x14, 0xc4, + 0x3e, 0x85, 0xab, 0xb3, 0x44, 0x0c, 0x11, 0x4e, 0x44, 0x95, 0x79, 0x7e, 0x85, 0xfd, 0x32, 0x36, + 0x76, 0x1f, 0xca, 0xad, 0xc0, 0x9b, 0x4f, 0xfd, 0xa8, 0x51, 0x58, 0x09, 0xe9, 0x09, 0x89, 0x3d, + 0x04, 0x2d, 0x15, 0x4e, 0xd8, 0x8b, 0xb4, 0xa9, 0x2b, 0x78, 0xa6, 0x43, 0x2d, 0xc5, 0x99, 0xf3, + 0xa9, 0xa8, 0xa7, 0xf9, 0x12, 0x8e, 0x3d, 0x06, 0x48, 0xe1, 0xa8, 0x51, 0xa6, 0x89, 0x2f, 0x6e, + 0x41, 0x3b, 0x76, 0xa6, 0x3c, 0xc3, 0x86, 0x8d, 0x87, 0xe5, 0x4d, 0x82, 0xd0, 0x8d, 0x4f, 0xa6, + 0x74, 0x2b, 0xf2, 0x7c, 0x81, 0x60, 0x0f, 0x60, 0xdd, 0x8d, 0x7a, 0xf3, 0x61, 0x2a, 0x4f, 0x97, + 0x43, 0xe5, 0x17, 0xb0, 0xe8, 0x4a, 0xa9, 0xce, 0xc1, 0x34, 0x9a, 0xd0, 0x85, 0xa8, 0x64, 0xec, + 0x3b, 0x88, 0x26, 0xfa, 0xbf, 0x2b, 0xd9, 0xe3, 0xc2, 0x6a, 0xf1, 0x7e, 0x46, 0xcc, 0x5c, 0x44, + 0x99, 0x65, 0x24, 0xdb, 0x82, 0x8d, 0x40, 0x5c, 0xaa, 0xc3, 0x20, 0x12, 0x56, 0xe0, 0xb1, 0xd5, + 0xf9, 0x45, 0x34, 0xdb, 0x84, 0xaa, 0xed, 0x44, 0xa3, 0xd0, 0x9d, 0xc5, 0xc9, 0x69, 0x55, 0x78, + 0x16, 0x95, 0x8d, 0x0e, 0x85, 0xe5, 0xe8, 0xf0, 0x00, 0x54, 0x0f, 0xe3, 0xd7, 0x89, 0xe5, 0xd3, + 0x29, 0x2c, 0x1f, 0x5a, 0x4a, 0x43, 0x3e, 0xd7, 0xa7, 0xd0, 0x1b, 0x35, 0x4a, 0xab, 0x7c, 0x09, + 0x4d, 0xff, 0x3e, 0x94, 0x8f, 0x5d, 0xe7, 0x54, 0xc6, 0xd0, 0x57, 0xae, 0x73, 0x9a, 0xc4, 0x50, + 0x1c, 0xeb, 0x7f, 0xa8, 0x80, 0xda, 0xf6, 0x6d, 0xe7, 0x0c, 0x19, 0xde, 0x86, 0xaa, 0x8b, 0xe3, + 0x41, 0xf6, 0x66, 0x01, 0xa1, 0x70, 0x07, 0x22, 0x64, 0xa0, 0x4e, 0x4e, 0x32, 0xe4, 0x04, 0x03, + 0xa1, 0x04, 0x43, 0x03, 0xca, 0x73, 0xdf, 0xfd, 0x12, 0x8d, 0xca, 0x6f, 0xe6, 0x31, 0xb4, 0x49, + 0x90, 0xdd, 0x83, 0xd2, 0xd8, 0x75, 0x3c, 0x3b, 0x71, 0x45, 0x99, 0x75, 0x9f, 0x21, 0x8e, 0x4b, + 0x92, 0x7e, 0x1f, 0x8a, 0x84, 0xc0, 0xd6, 0x15, 0x0b, 0xe6, 0xac, 0x1d, 0xea, 0x28, 0xf0, 0x68, + 0x12, 0xfd, 0x8f, 0x14, 0xa8, 0x90, 0xcd, 0x74, 0xd7, 0xbe, 0x0f, 0xb0, 0xb0, 0x49, 0xae, 0xad, + 0x92, 0x9a, 0xb4, 0xac, 0x29, 0xb7, 0xac, 0x89, 0x6d, 0x62, 0x06, 0xf5, 0x84, 0xad, 0xd9, 0x5c, + 0xbd, 0x8b, 0x25, 0x11, 0x52, 0xd8, 0x5d, 0x28, 0x92, 0x6d, 0x32, 0x3b, 0x2c, 0x59, 0x2d, 0x28, + 0xfa, 0x5f, 0x17, 0x41, 0xed, 0xe3, 0x7c, 0xaf, 0xcb, 0x53, 0xc9, 0x2c, 0xb9, 0xd7, 0xce, 0xf2, + 0x10, 0x0a, 0xb6, 0x33, 0x4e, 0xec, 0xb8, 0x9e, 0x24, 0x69, 0xa1, 0x13, 0x73, 0x91, 0x08, 0x19, + 0xc8, 0xb3, 0x58, 0x2f, 0x45, 0x98, 0x42, 0x66, 0xbd, 0xb2, 0xbe, 0xaf, 0x8c, 0x42, 0xc7, 0x8a, + 0x9d, 0xe8, 0x4b, 0x4f, 0x56, 0x9a, 0x0b, 0x04, 0xdb, 0x87, 0x75, 0x34, 0x69, 0x1b, 0xb7, 0x84, + 0xce, 0x55, 0xfa, 0xce, 0xdd, 0x0b, 0x53, 0x9a, 0x92, 0x89, 0xb6, 0xd9, 0xf0, 0xe3, 0xf0, 0x9c, + 0xd7, 0xfd, 0x2c, 0x8e, 0x3d, 0x86, 0xf5, 0x51, 0x30, 0x9d, 0xa1, 0xcb, 0x3b, 0x83, 0x19, 0x06, + 0xda, 0xf2, 0x85, 0x82, 0x07, 0x97, 0x57, 0x4f, 0x79, 0x28, 0xbf, 0x3d, 0x02, 0x35, 0x1e, 0x7a, + 0x03, 0xaa, 0x44, 0x45, 0xd5, 0x72, 0x35, 0x33, 0x71, 0x52, 0x04, 0xf1, 0x72, 0x3c, 0xf4, 0x10, + 0x60, 0x1f, 0x26, 0x0e, 0xe9, 0xfa, 0xe3, 0x20, 0x6a, 0x54, 0xc8, 0x56, 0x59, 0xbc, 0xa6, 0x1e, + 0x20, 0x3d, 0x14, 0x87, 0xd1, 0xad, 0xff, 0x50, 0x28, 0xd9, 0xd1, 0x56, 0xbc, 0x03, 0xb9, 0xd9, + 0x17, 0x32, 0xed, 0x24, 0x01, 0x28, 0x9b, 0x43, 0xf6, 0xd7, 0x78, 0x6e, 0xf6, 0x05, 0x96, 0x35, + 0x98, 0xbd, 0x73, 0xd9, 0x74, 0x9b, 0x5c, 0x09, 0x2c, 0x6b, 0x30, 0x9b, 0xff, 0x68, 0x29, 0x25, + 0xe4, 0x97, 0x55, 0x66, 0x72, 0x07, 0x76, 0xc6, 0x0b, 0x46, 0xac, 0xba, 0xe9, 0xc6, 0x2d, 0x95, + 0x16, 0xf2, 0x3a, 0x62, 0x59, 0x85, 0x44, 0xf6, 0x18, 0x2a, 0x69, 0xa0, 0x91, 0x55, 0xe3, 0x4a, + 0xb8, 0xf4, 0xc7, 0x01, 0xf6, 0xd4, 0x29, 0xdf, 0x4e, 0x11, 0xf2, 0xb6, 0x33, 0xbe, 0xf5, 0x73, + 0x60, 0xab, 0x47, 0xf5, 0xa6, 0xcc, 0x57, 0x94, 0x99, 0xef, 0x27, 0xb9, 0x8f, 0x15, 0xfd, 0x13, + 0xa8, 0x2f, 0x6d, 0xfe, 0xa5, 0x1e, 0x8c, 0x25, 0x0e, 0x56, 0xc0, 0x24, 0x5e, 0xe3, 0x02, 0xd0, + 0x43, 0x28, 0xb4, 0x82, 0x28, 0x46, 0x09, 0x2c, 0x42, 0x48, 0x42, 0xe1, 0x34, 0xc6, 0x40, 0x10, + 0x06, 0xa7, 0xd4, 0xc2, 0xe5, 0x08, 0x9d, 0x80, 0x68, 0x9c, 0x6f, 0xbf, 0x12, 0x6f, 0x39, 0x1c, + 0x87, 0xf4, 0x84, 0x14, 0x5b, 0xa1, 0x08, 0x85, 0x0a, 0x17, 0x00, 0x3d, 0x21, 0x05, 0xb1, 0x7c, + 0xc9, 0x51, 0xb8, 0x00, 0xf4, 0xbf, 0x52, 0x28, 0xa7, 0xed, 0x5a, 0xb1, 0x85, 0x57, 0x1b, 0xfb, + 0xc4, 0x51, 0x30, 0xf7, 0x63, 0xd9, 0x70, 0x63, 0xe3, 0xd8, 0x42, 0x18, 0xaf, 0x09, 0x55, 0x3a, + 0x82, 0x2a, 0x96, 0x5d, 0x41, 0x8c, 0x20, 0x63, 0xf9, 0x30, 0xf7, 0xbc, 0x24, 0x4c, 0x09, 0x00, + 0x6d, 0x73, 0x1f, 0x6f, 0x53, 0x84, 0x2a, 0x72, 0x1c, 0x12, 0xe6, 0xe9, 0x13, 0x8a, 0xc4, 0x79, + 0x8e, 0x43, 0xc4, 0x8c, 0x1f, 0x6f, 0xd3, 0xbd, 0xc9, 0x71, 0x1c, 0x12, 0xe6, 0xe9, 0x13, 0xca, + 0x74, 0x0a, 0xc7, 0x21, 0x96, 0xb1, 0x51, 0x43, 0xa5, 0x60, 0xa3, 0x44, 0xfa, 0x0b, 0x00, 0x1e, + 0x9c, 0x46, 0x4e, 0x4c, 0x56, 0x3f, 0x48, 0xdb, 0x46, 0x25, 0xeb, 0x71, 0xc9, 0xd5, 0x4b, 0xdb, + 0xc8, 0xbb, 0x4b, 0x51, 0xa3, 0xbe, 0xb8, 0x56, 0x56, 0x6c, 0x89, 0xb0, 0xa1, 0xff, 0xb3, 0x02, + 0xd5, 0x6e, 0x68, 0x3b, 0xe1, 0xce, 0x79, 0x6f, 0xe6, 0x8c, 0xde, 0x58, 0x69, 0xdd, 0xa6, 0x58, + 0xe8, 0x59, 0x69, 0xee, 0xc2, 0xd8, 0x90, 0x20, 0xd8, 0x47, 0x50, 0x18, 0x7b, 0x96, 0xa8, 0xe7, + 0xd6, 0xb7, 0xbf, 0x2f, 0xeb, 0xce, 0x85, 0xfa, 0x64, 0x8c, 0xdd, 0x1f, 0x27, 0x56, 0xfd, 0x57, + 0xe9, 0xfc, 0xd4, 0x12, 0x66, 0x1b, 0xc1, 0x35, 0x6a, 0xaf, 0x7b, 0x2d, 0x0d, 0xdb, 0xb5, 0xc2, + 0xae, 0xd1, 0x6b, 0x69, 0x39, 0xb6, 0x01, 0x55, 0x6c, 0xec, 0x7a, 0x83, 0x67, 0x6d, 0xde, 0xeb, + 0x6b, 0x05, 0xea, 0xd7, 0x09, 0xd1, 0x69, 0xf6, 0xb0, 0x2d, 0x04, 0x28, 0x1d, 0x99, 0xed, 0x5f, + 0x1e, 0x19, 0x9a, 0xa6, 0xff, 0x89, 0x02, 0xf0, 0xc2, 0xf5, 0xed, 0xe0, 0x94, 0x16, 0xf7, 0x7e, + 0xa6, 0xf4, 0x18, 0x0c, 0xcf, 0x2f, 0x79, 0x10, 0xa9, 0x2e, 0xae, 0xc7, 0x39, 0xfb, 0x21, 0xa8, + 0x01, 0x9a, 0x86, 0xac, 0x62, 0x0b, 0xaf, 0xac, 0xac, 0x88, 0x97, 0x03, 0x01, 0xa0, 0x0b, 0x7b, + 0x8e, 0x65, 0xcb, 0x67, 0x18, 0x1a, 0xe3, 0xb1, 0xe2, 0x76, 0x88, 0xf7, 0x51, 0x1c, 0xea, 0xff, + 0x93, 0x83, 0x8a, 0x28, 0x6a, 0x5b, 0xf1, 0x59, 0xb6, 0x69, 0x57, 0x96, 0x9a, 0xf6, 0x9b, 0x22, + 0xca, 0x11, 0x45, 0xec, 0x32, 0x06, 0xb4, 0xa4, 0xd1, 0x9f, 0x85, 0xee, 0x00, 0x6f, 0xa7, 0xa8, + 0x0a, 0x4a, 0xb3, 0xd0, 0x7d, 0xee, 0x60, 0xd5, 0x5d, 0x95, 0x84, 0x01, 0x06, 0xa3, 0x42, 0xf2, + 0xf4, 0x8a, 0xc4, 0xb6, 0x7d, 0x86, 0x3a, 0x4f, 0x5c, 0xdb, 0x21, 0x49, 0x11, 0xd5, 0xcb, 0x08, + 0xa3, 0xe8, 0x26, 0xd4, 0x12, 0xd2, 0x60, 0xd1, 0x86, 0x80, 0x24, 0xa3, 0xf0, 0xfb, 0x50, 0x15, + 0x3d, 0xc5, 0x80, 0x3c, 0xaa, 0x7c, 0x49, 0x1e, 0x02, 0xc1, 0xd0, 0xc2, 0x6c, 0xf4, 0x36, 0x54, + 0x83, 0xf8, 0xc4, 0x09, 0x07, 0x56, 0x1c, 0x87, 0x89, 0x1f, 0x03, 0xa1, 0x9a, 0x88, 0x21, 0x06, + 0xda, 0x5b, 0xc1, 0x50, 0x91, 0x0c, 0x88, 0x12, 0x0c, 0xab, 0xc9, 0x01, 0xde, 0x9c, 0x1c, 0xd2, + 0xea, 0x43, 0x68, 0xad, 0x66, 0xaa, 0x0f, 0xd2, 0xaa, 0xff, 0x46, 0x81, 0x6a, 0xd3, 0xb7, 0xbc, + 0xf3, 0xaf, 0x9c, 0x24, 0xf3, 0xbb, 0xfe, 0x6c, 0x1e, 0x0f, 0x30, 0xb4, 0xc8, 0x1e, 0xb2, 0x42, + 0x18, 0xbc, 0x6e, 0x64, 0xe5, 0x3c, 0x4e, 0xe9, 0xa2, 0xab, 0x04, 0x81, 0x22, 0x86, 0x54, 0x9e, + 0xc2, 0x54, 0x3e, 0x23, 0xdf, 0xc3, 0x40, 0xb5, 0x90, 0x27, 0x7a, 0x21, 0x2b, 0x4f, 0x0c, 0xf7, + 0xa0, 0x1e, 0xbb, 0x53, 0xdc, 0x54, 0x3f, 0x9a, 0x4f, 0x1d, 0x9b, 0x0e, 0x26, 0x2f, 0x9e, 0x56, + 0x5b, 0x12, 0x87, 0x5a, 0xa6, 0xce, 0x34, 0x08, 0xcf, 0x07, 0xe9, 0xd3, 0x79, 0x9e, 0x83, 0x40, + 0xd1, 0x93, 0xd6, 0x1f, 0xd7, 0xa1, 0x60, 0x06, 0xb6, 0xc3, 0x3e, 0x84, 0x0a, 0xbd, 0xa0, 0xad, + 0x76, 0x0e, 0x48, 0xa6, 0x3f, 0x54, 0x06, 0xa8, 0xbe, 0x1c, 0xbd, 0xfe, 0xcd, 0xed, 0x0e, 0xc6, + 0x8e, 0x28, 0x5e, 0xee, 0x13, 0x30, 0x56, 0x73, 0xc2, 0xd3, 0x5d, 0x0a, 0x83, 0x97, 0xce, 0x28, + 0x1e, 0x50, 0xdf, 0x5f, 0xb8, 0xe4, 0x2e, 0x09, 0x3a, 0xbd, 0x41, 0xde, 0x02, 0x95, 0x5e, 0xe6, + 0x42, 0x47, 0xd4, 0xa4, 0x45, 0x9e, 0xc2, 0x68, 0xf5, 0xcb, 0xc0, 0xf5, 0x85, 0xd5, 0xa5, 0x15, + 0xab, 0x7f, 0x11, 0xb8, 0x3e, 0x05, 0x0c, 0x15, 0xb9, 0xc8, 0xea, 0x7b, 0x50, 0x0e, 0x7c, 0x31, + 0x6f, 0x79, 0x65, 0xde, 0x52, 0xe0, 0xd3, 0x94, 0xef, 0x41, 0x75, 0xec, 0x7a, 0xb1, 0x13, 0x0a, + 0x46, 0x75, 0x85, 0x11, 0x04, 0x99, 0x98, 0xdf, 0x01, 0x75, 0x12, 0x06, 0xf3, 0x19, 0xde, 0xf5, + 0xca, 0x6a, 0xa3, 0x43, 0xb4, 0x9d, 0x73, 0x5c, 0x35, 0x0d, 0x5d, 0x7f, 0x32, 0x88, 0x9c, 0xb8, + 0x01, 0xab, 0xab, 0x4e, 0xe8, 0x3d, 0x87, 0xb4, 0x5a, 0x93, 0x89, 0x98, 0xbf, 0xba, 0xaa, 0xd5, + 0x9a, 0x4c, 0x68, 0xf2, 0x6c, 0xa0, 0xa9, 0xbd, 0x31, 0xd0, 0x7c, 0xb8, 0xb8, 0x8a, 0xf1, 0x59, + 0xd4, 0xa8, 0x67, 0x2b, 0x9a, 0x34, 0xb4, 0xa4, 0xb7, 0x31, 0x3e, 0x8b, 0xd8, 0x7b, 0xa0, 0x9e, + 0x62, 0x6f, 0x3c, 0x73, 0x46, 0xf4, 0x38, 0x9f, 0x3e, 0xe2, 0x2c, 0x62, 0x23, 0x2f, 0x9f, 0xba, + 0x3e, 0x05, 0xc9, 0x4d, 0x28, 0x7a, 0xee, 0xd4, 0x8d, 0xe9, 0x9d, 0xfe, 0xc2, 0xe3, 0x2a, 0x11, + 0x98, 0x0e, 0xa5, 0x60, 0x3c, 0xc6, 0xe5, 0x6b, 0x2b, 0x2c, 0x92, 0xc2, 0xde, 0x03, 0x51, 0x50, + 0x0e, 0x6c, 0x67, 0x4c, 0x8f, 0xf6, 0xab, 0x59, 0x4a, 0x8d, 0x93, 0x8a, 0x77, 0x1b, 0xea, 0x29, + 0xf3, 0xe0, 0x95, 0x33, 0x6a, 0xb0, 0x6c, 0xc3, 0x9c, 0x0a, 0x54, 0x13, 0x81, 0x63, 0x67, 0xc4, + 0xb6, 0xa0, 0x1c, 0x0c, 0x5f, 0x0e, 0x42, 0x67, 0xdc, 0xb8, 0x7a, 0xf9, 0x83, 0x64, 0x29, 0x18, + 0xbe, 0xe4, 0xce, 0x98, 0x7d, 0x04, 0xd5, 0x90, 0x72, 0xe7, 0xc0, 0xb6, 0x62, 0xab, 0x71, 0x2d, + 0xbb, 0x01, 0x8b, 0xa4, 0xca, 0x21, 0x5c, 0x24, 0xd8, 0x7b, 0x50, 0x77, 0xce, 0xe2, 0xd0, 0x1a, + 0x04, 0x33, 0xd1, 0x82, 0xbe, 0x25, 0x9a, 0x40, 0x42, 0x76, 0x05, 0x8e, 0xfd, 0x14, 0x36, 0x6c, + 0xc7, 0x73, 0x62, 0x87, 0x0c, 0x8c, 0x5a, 0xf1, 0x59, 0xe3, 0x3a, 0xd9, 0x7d, 0x2d, 0x79, 0xff, + 0x49, 0x89, 0x78, 0x20, 0x17, 0x99, 0xd9, 0x5d, 0xa8, 0x0d, 0x5d, 0xdf, 0x46, 0x57, 0x8a, 0xad, + 0x49, 0xd4, 0xb8, 0x41, 0xd7, 0xa2, 0x2a, 0x71, 0x7d, 0x6b, 0x12, 0xb1, 0x27, 0x50, 0xb3, 0x44, + 0xb4, 0xa2, 0xf2, 0xb5, 0xd1, 0xc8, 0x3e, 0xe7, 0x65, 0xe2, 0x18, 0xaf, 0x5a, 0x0b, 0x40, 0xff, + 0xb7, 0x3c, 0xa8, 0xc9, 0x55, 0x67, 0x55, 0x28, 0x1f, 0x99, 0xcf, 0xcd, 0xee, 0x0b, 0x53, 0x5b, + 0xc3, 0x5c, 0x79, 0xdc, 0xec, 0x1c, 0x19, 0x83, 0x5e, 0xab, 0x69, 0x8a, 0xb7, 0x6e, 0x7a, 0x67, + 0x15, 0x70, 0x8e, 0x5d, 0x81, 0xfa, 0xb3, 0x23, 0xb3, 0xd5, 0x6f, 0x77, 0x4d, 0x81, 0xca, 0x23, + 0xca, 0xf8, 0x4c, 0x24, 0x64, 0x81, 0x2a, 0x20, 0xea, 0xa0, 0xd9, 0x37, 0x78, 0x3b, 0x41, 0x15, + 0x71, 0x96, 0x43, 0xde, 0xfd, 0x85, 0xd1, 0xea, 0x6b, 0xc0, 0xde, 0x82, 0x2b, 0xa9, 0x48, 0xa2, + 0x4e, 0xab, 0x62, 0x6a, 0x4f, 0xc4, 0xb4, 0x6b, 0xa8, 0x84, 0x1b, 0xad, 0x23, 0xde, 0x6b, 0x1f, + 0x1b, 0x83, 0x56, 0xdf, 0xd0, 0xde, 0xc2, 0x24, 0xdf, 0x6b, 0x9b, 0xcf, 0xb5, 0xeb, 0xac, 0x0e, + 0x15, 0x1c, 0x09, 0xed, 0x37, 0xa8, 0x0c, 0xd8, 0xdb, 0xd3, 0xee, 0xa0, 0x8a, 0xdd, 0x76, 0xaf, + 0xdf, 0x36, 0x5b, 0x7d, 0xed, 0x6d, 0xcc, 0xf4, 0xcf, 0xda, 0x9d, 0xbe, 0xc1, 0xb5, 0x4d, 0x94, + 0xfd, 0x45, 0xb7, 0x6d, 0x6a, 0x77, 0xe9, 0x89, 0xb8, 0x79, 0x70, 0xd8, 0x31, 0x34, 0x9d, 0x34, + 0x76, 0x79, 0x5f, 0xbb, 0xc7, 0x2a, 0x50, 0x3c, 0x32, 0xd1, 0x8e, 0xfb, 0xa8, 0x9c, 0x86, 0x83, + 0x66, 0xa7, 0xa3, 0xbd, 0x93, 0xa9, 0x17, 0x1e, 0xe0, 0xf8, 0x45, 0xdb, 0xdc, 0xed, 0xbe, 0xd0, + 0xde, 0x45, 0xb6, 0x1d, 0xde, 0x6d, 0xee, 0xb6, 0xb0, 0xac, 0xd8, 0x42, 0x05, 0xbd, 0xc3, 0x4e, + 0xbb, 0xaf, 0xfd, 0x00, 0xb9, 0xf6, 0x9a, 0xfd, 0x7d, 0x83, 0x6b, 0x0f, 0x71, 0xdc, 0xec, 0xf5, + 0x0c, 0xde, 0xd7, 0xb6, 0x71, 0xdc, 0x36, 0x69, 0xfc, 0x98, 0xb4, 0x1e, 0xee, 0x36, 0xfb, 0x86, + 0xf6, 0x04, 0xc7, 0xbb, 0x46, 0xc7, 0xe8, 0x1b, 0xda, 0x8f, 0x50, 0x2b, 0xd5, 0x37, 0x3d, 0xdc, + 0xaa, 0xa7, 0xb8, 0x0b, 0x29, 0x48, 0xf6, 0xfc, 0x18, 0x27, 0x3a, 0x68, 0x9b, 0x47, 0x3d, 0xed, + 0x63, 0x64, 0xa6, 0x21, 0x51, 0x3e, 0x61, 0x0c, 0xd6, 0xc5, 0x69, 0xa5, 0x9b, 0xfa, 0x13, 0xfd, + 0x25, 0xa8, 0x49, 0x7c, 0x44, 0xc9, 0xb6, 0x69, 0x1a, 0x5c, 0x5b, 0xc3, 0x85, 0x77, 0x8c, 0x67, + 0x7d, 0x4d, 0x41, 0x24, 0x6f, 0xef, 0xed, 0xf7, 0xb5, 0x1c, 0x0e, 0xbb, 0x47, 0xb8, 0x5d, 0x79, + 0xda, 0x18, 0xe3, 0xa0, 0xad, 0x15, 0x70, 0xd4, 0x34, 0xfb, 0x6d, 0xad, 0x48, 0x1b, 0xd7, 0x36, + 0xf7, 0x3a, 0x86, 0x56, 0x42, 0xec, 0x41, 0x93, 0x3f, 0xd7, 0xca, 0x28, 0xd4, 0x3c, 0x3c, 0xec, + 0x7c, 0xae, 0xa9, 0xfa, 0x16, 0x94, 0x9b, 0x93, 0xc9, 0x01, 0x26, 0x1a, 0x15, 0x0a, 0xcf, 0x8e, + 0x3a, 0x1d, 0xf1, 0xd3, 0xc9, 0x4e, 0xb7, 0xdf, 0xef, 0x1e, 0x68, 0x0a, 0x9e, 0x53, 0xbf, 0x7b, + 0xa8, 0xe5, 0xf4, 0xff, 0x56, 0x60, 0x7d, 0xd9, 0xfd, 0xd9, 0x75, 0x90, 0xb5, 0xcd, 0x85, 0x4a, + 0xa7, 0x01, 0x49, 0x65, 0x73, 0xb1, 0xd0, 0xd1, 0xa1, 0x36, 0x8f, 0x1c, 0xa1, 0xe6, 0x79, 0x5a, + 0xed, 0x2c, 0xe1, 0xd8, 0x26, 0x54, 0x47, 0x96, 0xdf, 0x0f, 0xe7, 0xfe, 0xc8, 0x8a, 0x45, 0x82, + 0x55, 0x79, 0x16, 0x45, 0x89, 0x47, 0x76, 0x36, 0xf2, 0x97, 0xa0, 0x14, 0xbe, 0xd8, 0x1b, 0x96, + 0xde, 0xd8, 0x1b, 0x5e, 0x2c, 0x30, 0xca, 0x2b, 0x05, 0xc6, 0x5f, 0xe4, 0xa0, 0xf8, 0xcb, 0xb9, + 0x13, 0x9e, 0xb3, 0xa7, 0x50, 0x89, 0xe2, 0x69, 0x9c, 0xcd, 0xc5, 0x37, 0x85, 0x6a, 0xa2, 0x3f, + 0xea, 0xc5, 0x56, 0xec, 0x4c, 0x1d, 0x3f, 0x16, 0x19, 0x19, 0x79, 0xe9, 0xc2, 0x52, 0x2b, 0xe3, + 0xcc, 0x44, 0xd5, 0x5e, 0xe4, 0x02, 0xc0, 0xa8, 0x8c, 0x89, 0x39, 0xe9, 0xef, 0x61, 0x91, 0x1f, + 0xb9, 0x20, 0x60, 0x54, 0xa6, 0x9e, 0xea, 0xb2, 0x87, 0x3a, 0x49, 0xc1, 0xcd, 0x38, 0x71, 0x2c, + 0x0c, 0x2f, 0xc9, 0xfb, 0x5c, 0x0a, 0xe3, 0x41, 0x78, 0x81, 0x65, 0xf7, 0xad, 0x09, 0xe5, 0x60, + 0x95, 0x27, 0xa0, 0xfe, 0x02, 0xea, 0x4b, 0xc6, 0x2e, 0xc7, 0x14, 0x74, 0x1b, 0xa3, 0x83, 0xee, + 0xac, 0x64, 0x6e, 0x40, 0x2e, 0xe3, 0xf5, 0xf9, 0xcc, 0x6d, 0x28, 0x90, 0x7f, 0x1b, 0x7c, 0xcf, + 0xd0, 0x8a, 0xfa, 0x9f, 0xe7, 0xe0, 0x4a, 0x3f, 0xb4, 0xfc, 0xc8, 0x12, 0x0f, 0x84, 0x7e, 0x1c, + 0x06, 0x1e, 0xfb, 0x09, 0xa8, 0xf1, 0xc8, 0xcb, 0xee, 0xdb, 0xdb, 0x32, 0x11, 0x5c, 0x64, 0x7d, + 0xd4, 0x1f, 0x79, 0xb4, 0x7b, 0xe5, 0x58, 0x0c, 0xd8, 0xfb, 0x50, 0x1c, 0x3a, 0x13, 0xd7, 0x97, + 0xad, 0xf8, 0x5b, 0x17, 0x05, 0x77, 0x90, 0xb8, 0xbf, 0xc6, 0x05, 0x17, 0xfb, 0x10, 0x4a, 0xa3, + 0x60, 0x8a, 0xc9, 0x4e, 0x94, 0x39, 0xd7, 0x57, 0x27, 0x42, 0xea, 0xfe, 0x1a, 0x97, 0x7c, 0xec, + 0x29, 0xa8, 0x61, 0xe0, 0x79, 0x43, 0x6b, 0xf4, 0x85, 0x6c, 0xc9, 0x1b, 0x17, 0x65, 0xb8, 0xa4, + 0xef, 0xaf, 0xf1, 0x94, 0x57, 0x7f, 0x04, 0x65, 0x69, 0x2c, 0x6e, 0xc0, 0x8e, 0xb1, 0xd7, 0x96, + 0x7b, 0xd7, 0xea, 0x1e, 0x1c, 0xb4, 0x71, 0xef, 0x6a, 0xa0, 0xf2, 0x6e, 0xa7, 0xb3, 0xd3, 0x6c, + 0x3d, 0xd7, 0x72, 0x3b, 0x2a, 0x94, 0x2c, 0x6a, 0xa6, 0xf5, 0xdf, 0x57, 0x60, 0xe3, 0xc2, 0x02, + 0xd8, 0xc7, 0x50, 0x98, 0x06, 0x76, 0xb2, 0x3d, 0xf7, 0x2f, 0x5d, 0x65, 0x06, 0xc6, 0x2b, 0xcb, + 0x49, 0x42, 0xff, 0x04, 0xd6, 0x97, 0xf1, 0x99, 0x1f, 0xe1, 0xea, 0x50, 0xe1, 0x46, 0x73, 0x77, + 0xd0, 0x35, 0x3b, 0x9f, 0x8b, 0xe4, 0x40, 0xe0, 0x0b, 0xde, 0xee, 0x1b, 0x5a, 0x4e, 0xff, 0x15, + 0x68, 0x17, 0x37, 0x86, 0xed, 0xc1, 0x06, 0x56, 0xe0, 0x9e, 0x43, 0x2d, 0x55, 0xe6, 0xc8, 0xee, + 0x5c, 0xb2, 0x93, 0x92, 0x8d, 0x4e, 0x6c, 0x7d, 0xb4, 0x04, 0xeb, 0xbf, 0x03, 0x6c, 0x75, 0x07, + 0xff, 0xef, 0xd4, 0xff, 0x93, 0x02, 0x85, 0x43, 0xcf, 0xf2, 0xd9, 0x3d, 0x28, 0xd2, 0x6f, 0x60, + 0xb2, 0xc1, 0xad, 0x66, 0x6e, 0x24, 0xba, 0x05, 0xd1, 0xd8, 0x7b, 0x90, 0x8f, 0x47, 0x9e, 0xf4, + 0xa1, 0x1b, 0xaf, 0x71, 0xbe, 0xfd, 0x35, 0x8e, 0x5c, 0x6c, 0x0b, 0xf2, 0xb6, 0xed, 0x49, 0x07, + 0x4a, 0x52, 0xbf, 0x15, 0x5b, 0xbb, 0xce, 0xd8, 0xf5, 0x5d, 0xf9, 0x8b, 0x1c, 0xb2, 0xb0, 0x77, + 0x20, 0x6f, 0x8f, 0x3c, 0xe9, 0x36, 0x57, 0x16, 0x9c, 0x19, 0x85, 0xf6, 0xc8, 0x63, 0x0f, 0x20, + 0xef, 0xd2, 0xfb, 0x39, 0xb2, 0xb1, 0x24, 0x1a, 0x45, 0x4e, 0x18, 0x8b, 0xf7, 0x58, 0x7a, 0x50, + 0xf2, 0xa3, 0x9d, 0x12, 0xd0, 0x77, 0x40, 0xfa, 0x3f, 0xe6, 0xa0, 0x96, 0xa5, 0x7f, 0xa7, 0xae, + 0xf2, 0x23, 0xac, 0x78, 0x66, 0x9e, 0x3b, 0x72, 0xe3, 0xc1, 0x6b, 0xdf, 0x33, 0x6b, 0x09, 0x0b, + 0xf5, 0x78, 0xef, 0x81, 0x68, 0xe8, 0x04, 0x7f, 0xe1, 0x12, 0xfe, 0x0a, 0xd1, 0xd3, 0x86, 0x30, + 0xd3, 0xef, 0x15, 0x57, 0xfa, 0xbd, 0x07, 0xf4, 0x7d, 0x03, 0xfd, 0x72, 0x50, 0xca, 0xaa, 0x12, + 0x48, 0x9e, 0x10, 0xbf, 0xdb, 0xa3, 0xe1, 0x85, 0x40, 0xaf, 0xbe, 0x31, 0xd0, 0xeb, 0x3f, 0xc4, + 0xc8, 0x80, 0x33, 0x62, 0x5c, 0x15, 0xa3, 0x4b, 0x9e, 0x0b, 0x24, 0x05, 0xbb, 0xfa, 0x6a, 0xe6, + 0x24, 0xd9, 0x13, 0x50, 0xed, 0xe5, 0x10, 0x76, 0x73, 0xe5, 0xb8, 0x1f, 0xed, 0x26, 0xc1, 0xcb, + 0x96, 0x81, 0xe1, 0x13, 0xa8, 0x63, 0x95, 0xfa, 0xca, 0x0a, 0x5d, 0x2a, 0x12, 0xa5, 0x03, 0x4a, + 0x17, 0xe8, 0x39, 0xf1, 0x71, 0x42, 0xd9, 0x5f, 0xe3, 0xb5, 0x28, 0x03, 0xb3, 0x1f, 0x40, 0x79, + 0x16, 0x3a, 0x33, 0x2b, 0x74, 0xa4, 0x23, 0xd6, 0x93, 0x97, 0x45, 0x42, 0xee, 0xaf, 0xf1, 0x84, + 0x8e, 0xac, 0xce, 0x99, 0x33, 0x9a, 0xcb, 0x74, 0x99, 0xb2, 0x1a, 0x02, 0x89, 0xac, 0x92, 0xce, + 0xb6, 0x01, 0x6c, 0xc7, 0xf2, 0xbc, 0x80, 0x92, 0x6b, 0x31, 0x5b, 0x38, 0xef, 0xa6, 0x78, 0xf1, + 0x25, 0x4f, 0x02, 0xe9, 0x13, 0x28, 0xcb, 0x85, 0x61, 0x71, 0xd3, 0x33, 0xfa, 0x83, 0xe3, 0x26, + 0x6f, 0x63, 0xd9, 0xd2, 0xd3, 0xd6, 0x30, 0xf6, 0xed, 0xf1, 0xa6, 0x29, 0x73, 0x05, 0x37, 0x8e, + 0xbb, 0xcf, 0x0d, 0x2d, 0x27, 0x9e, 0x77, 0xcc, 0xcf, 0xb5, 0xbc, 0x28, 0x24, 0x8d, 0xc3, 0x26, + 0xc7, 0x54, 0x51, 0x85, 0xb2, 0xf1, 0x99, 0xd1, 0x3a, 0xea, 0x1b, 0x5a, 0x11, 0xc3, 0xd1, 0xae, + 0xd1, 0xec, 0x74, 0xba, 0x2d, 0xcc, 0x23, 0xa5, 0x9d, 0x0a, 0x3a, 0x0c, 0xed, 0xa4, 0xfe, 0x9f, + 0x15, 0x58, 0x5f, 0xbe, 0x72, 0xec, 0xc7, 0xa0, 0xda, 0xf6, 0xd2, 0x09, 0xdc, 0xbe, 0xec, 0x6a, + 0x3e, 0xda, 0xb5, 0x93, 0x43, 0x10, 0x03, 0x76, 0x37, 0x09, 0x10, 0xb9, 0x95, 0x00, 0x91, 0x84, + 0x87, 0x9f, 0xc1, 0x86, 0x78, 0x0e, 0xa7, 0x86, 0x62, 0x68, 0x45, 0xce, 0xf2, 0xed, 0x6f, 0x11, + 0x71, 0x57, 0xd2, 0xf6, 0xd7, 0xf8, 0xfa, 0x68, 0x09, 0xc3, 0x3e, 0x85, 0x75, 0x8b, 0x1a, 0xd3, + 0x54, 0xbe, 0x90, 0x7d, 0xb3, 0x6d, 0x22, 0x2d, 0x23, 0x5e, 0xb7, 0xb2, 0x08, 0x74, 0x13, 0x3b, + 0x0c, 0x66, 0x0b, 0xe1, 0xa5, 0x48, 0xb1, 0x1b, 0x06, 0xb3, 0x8c, 0x6c, 0xcd, 0xce, 0xc0, 0xec, + 0x29, 0xd4, 0xa4, 0xe5, 0xe2, 0xd3, 0xba, 0x52, 0x36, 0x14, 0x09, 0xb3, 0xa9, 0x60, 0xdb, 0x5f, + 0xe3, 0xd5, 0xd1, 0x02, 0x64, 0x8f, 0xa1, 0x2a, 0x0c, 0x16, 0x62, 0xe5, 0xac, 0x27, 0x90, 0xb5, + 0x89, 0x14, 0x58, 0x29, 0xc4, 0x3e, 0x04, 0x20, 0x3b, 0x17, 0x5f, 0xf1, 0xa5, 0x77, 0x0e, 0x8d, + 0x4c, 0x44, 0x2a, 0x76, 0x02, 0x64, 0xcc, 0x13, 0x3f, 0x2c, 0x54, 0x56, 0xcd, 0xa3, 0xdb, 0xba, + 0x30, 0x2f, 0xf9, 0x21, 0x41, 0x9a, 0x27, 0xc4, 0x60, 0xc5, 0xbc, 0x44, 0x4a, 0x98, 0x97, 0x14, + 0x7f, 0xc2, 0x3c, 0x21, 0x53, 0xbd, 0x68, 0x5e, 0x22, 0x42, 0xe6, 0x09, 0x89, 0x4f, 0x61, 0x3d, + 0x96, 0x65, 0xa5, 0x5c, 0x54, 0x6d, 0xe9, 0x07, 0x08, 0x49, 0x4b, 0x16, 0x56, 0x8f, 0xb3, 0x08, + 0x94, 0x8e, 0x4e, 0x82, 0xd3, 0xcc, 0xf5, 0xae, 0x67, 0xa5, 0x7b, 0x27, 0xc1, 0x69, 0xf6, 0x7e, + 0xd7, 0xa3, 0x2c, 0x42, 0xff, 0xba, 0x00, 0x65, 0xe9, 0xab, 0xec, 0x2a, 0x6c, 0xb4, 0xb8, 0xd1, + 0xec, 0x1b, 0x83, 0xdd, 0x66, 0xbf, 0xb9, 0xd3, 0xec, 0x61, 0xf2, 0x66, 0xb0, 0xde, 0xc4, 0x5e, + 0x68, 0x81, 0x53, 0xf0, 0x02, 0xee, 0xf2, 0xee, 0xe1, 0x02, 0x95, 0x63, 0x1a, 0xd4, 0xa4, 0xac, + 0xf8, 0xc0, 0x26, 0xcf, 0x36, 0xa0, 0x2a, 0x04, 0x05, 0x82, 0x1e, 0x54, 0x49, 0x4a, 0xc0, 0xc5, + 0x8c, 0x48, 0xdb, 0xdc, 0x35, 0x3e, 0xd3, 0x4a, 0x0b, 0x11, 0x81, 0x28, 0xa7, 0x22, 0x02, 0x56, + 0xa9, 0x53, 0xe1, 0x47, 0x66, 0x6b, 0x31, 0x4f, 0x05, 0x85, 0xa4, 0x9a, 0xe3, 0xb6, 0xf1, 0x42, + 0x03, 0x14, 0x12, 0x5a, 0x08, 0xae, 0x62, 0xf9, 0x41, 0x4a, 0x08, 0xac, 0xb1, 0x1b, 0x70, 0xb5, + 0xb7, 0xdf, 0x7d, 0x31, 0x10, 0x42, 0xe9, 0x12, 0xea, 0xec, 0x1a, 0x68, 0x19, 0x82, 0x50, 0xbf, + 0x8e, 0x53, 0x12, 0x36, 0x61, 0xec, 0x69, 0x1b, 0x38, 0x25, 0xe1, 0xfa, 0x22, 0xfc, 0x68, 0xb8, + 0x14, 0x21, 0xda, 0xed, 0x1c, 0x1d, 0x98, 0x3d, 0xed, 0x0a, 0x1a, 0x41, 0x18, 0x61, 0x39, 0x4b, + 0xd5, 0x2c, 0x82, 0xd6, 0x55, 0x8a, 0x63, 0x88, 0x7b, 0xd1, 0xe4, 0x66, 0xdb, 0xdc, 0xeb, 0x69, + 0xd7, 0x52, 0xcd, 0x06, 0xe7, 0x5d, 0xde, 0xd3, 0xde, 0x4a, 0x11, 0xbd, 0x7e, 0xb3, 0x7f, 0xd4, + 0xd3, 0xae, 0xa7, 0x56, 0x1e, 0xf2, 0x6e, 0xcb, 0xe8, 0xf5, 0x3a, 0xed, 0x5e, 0x5f, 0xbb, 0x81, + 0xad, 0xf1, 0xc2, 0xa2, 0x84, 0xb9, 0x91, 0x31, 0x94, 0xef, 0x19, 0x7d, 0xed, 0x66, 0x6a, 0x46, + 0xab, 0xdb, 0xe9, 0x34, 0xa9, 0xd5, 0xbb, 0xb5, 0x53, 0xa3, 0xaf, 0x28, 0x65, 0xe0, 0xd2, 0x0f, + 0x61, 0x7d, 0x39, 0xce, 0x30, 0x1d, 0xea, 0xee, 0x78, 0xe0, 0x07, 0xf1, 0xc0, 0x39, 0x73, 0xa3, + 0x38, 0x4a, 0xbe, 0xcc, 0x70, 0xc7, 0x66, 0x10, 0x1b, 0x84, 0xc2, 0x06, 0x20, 0x0d, 0x1b, 0xa2, + 0x02, 0x48, 0x61, 0x7d, 0x1f, 0xea, 0x4b, 0x91, 0x87, 0x7d, 0x0f, 0x2a, 0xee, 0x78, 0x59, 0x99, + 0xea, 0x8e, 0xbf, 0x85, 0xa6, 0x3d, 0xa8, 0x65, 0xc3, 0xd0, 0x77, 0x57, 0xf4, 0xf7, 0x0a, 0x54, + 0x33, 0x61, 0xe9, 0x5b, 0x2d, 0xf1, 0x36, 0x54, 0x62, 0x67, 0x3a, 0x0b, 0x42, 0x4b, 0x06, 0x71, + 0x95, 0x2f, 0x10, 0x4b, 0xb3, 0xe5, 0x97, 0x67, 0x5b, 0x7e, 0xb3, 0x2a, 0xbc, 0xe1, 0xcd, 0xea, + 0x23, 0xa8, 0x89, 0x92, 0x22, 0x16, 0x97, 0xb9, 0x78, 0xf9, 0x93, 0x15, 0xf1, 0x88, 0x37, 0x1f, + 0xbd, 0x0b, 0xb0, 0x08, 0x96, 0x8b, 0xef, 0x9b, 0x95, 0xcc, 0xf7, 0xcd, 0xcb, 0x36, 0xe4, 0xbe, + 0xd9, 0x06, 0x6c, 0x0d, 0x2a, 0x69, 0x28, 0xfd, 0xce, 0xbb, 0xbc, 0xb0, 0x24, 0x9f, 0xb5, 0xe4, + 0x21, 0x5c, 0xc9, 0x2c, 0x50, 0xfe, 0xfa, 0x5d, 0xa0, 0xba, 0x6d, 0x63, 0xb1, 0x2a, 0xf1, 0x73, + 0xfa, 0x5e, 0x72, 0x4c, 0x22, 0x50, 0x7e, 0x9b, 0x63, 0xba, 0x06, 0x45, 0x11, 0x79, 0xe5, 0x87, + 0x34, 0x04, 0xe8, 0xba, 0xdc, 0x22, 0xa1, 0x27, 0xe5, 0x51, 0xb2, 0x3c, 0x3f, 0x15, 0x8b, 0x16, + 0x2c, 0xdf, 0xb8, 0xe8, 0xcb, 0xe7, 0x68, 0x42, 0x7d, 0x29, 0x54, 0x2f, 0xed, 0x8d, 0xf2, 0xba, + 0xbd, 0xc9, 0x65, 0xbf, 0x42, 0x6f, 0x43, 0x7d, 0x29, 0x5e, 0x67, 0x3e, 0x16, 0x56, 0xb2, 0x1f, + 0x0b, 0x63, 0xdb, 0x7e, 0x7a, 0xe2, 0x84, 0xce, 0x25, 0xdf, 0x43, 0x0a, 0x82, 0xfe, 0x29, 0xd4, + 0xb2, 0x95, 0x1d, 0xfb, 0x21, 0x14, 0xdd, 0xd8, 0x99, 0x26, 0x1f, 0x0d, 0x5d, 0x5f, 0x2d, 0xfe, + 0xe8, 0xc3, 0x17, 0xc1, 0xa4, 0xff, 0x5a, 0x01, 0xed, 0x22, 0x2d, 0xf3, 0x45, 0xb3, 0xf2, 0x9a, + 0x2f, 0x9a, 0x73, 0x4b, 0x46, 0x5e, 0xf2, 0x55, 0x32, 0x1a, 0x2e, 0x7e, 0xed, 0xbd, 0xe4, 0x13, + 0x5b, 0x22, 0xb0, 0x07, 0xa0, 0x86, 0x0e, 0x7d, 0x80, 0x6a, 0xcb, 0x0a, 0x64, 0xe9, 0xeb, 0x91, + 0x84, 0xa6, 0xff, 0x81, 0x02, 0x65, 0x59, 0x86, 0x5e, 0xfa, 0xc3, 0xf0, 0x0f, 0xa0, 0x2c, 0x7e, + 0xae, 0x4c, 0x7e, 0xa7, 0x5c, 0x79, 0xc8, 0x4d, 0xe8, 0xec, 0x8e, 0xe8, 0x78, 0x96, 0x7f, 0x93, + 0xc0, 0xb6, 0x8e, 0x13, 0x1e, 0x9b, 0x0c, 0x7a, 0xe8, 0xa0, 0xb2, 0x2f, 0x92, 0xbf, 0xc1, 0x02, + 0xa1, 0x30, 0x71, 0x46, 0xfa, 0xff, 0x83, 0xb2, 0x2c, 0x73, 0x2f, 0x35, 0xe5, 0x4d, 0x1f, 0xaf, + 0x6e, 0x02, 0x2c, 0xea, 0xde, 0xcb, 0x34, 0x3c, 0xbc, 0x0b, 0xb5, 0xec, 0xe7, 0x83, 0xd4, 0x5c, + 0x07, 0xbe, 0x23, 0x7e, 0xca, 0xec, 0x7c, 0xf5, 0x44, 0x53, 0x1e, 0xfe, 0x6e, 0xe6, 0xd3, 0x21, + 0xe2, 0x29, 0x43, 0xfe, 0xb9, 0xf1, 0xb9, 0x78, 0x9d, 0xed, 0xb4, 0x4d, 0xa3, 0xc9, 0x07, 0x08, + 0xd3, 0x8f, 0x9e, 0xfb, 0xcd, 0xde, 0xbe, 0xf8, 0xd1, 0x53, 0x52, 0x08, 0x91, 0xa7, 0x57, 0xbd, + 0xa6, 0xb9, 0x67, 0x88, 0xd7, 0x58, 0x1a, 0xa6, 0x49, 0xad, 0x48, 0xaf, 0x7f, 0x98, 0x6f, 0x4a, + 0x98, 0xf0, 0x70, 0x94, 0xd2, 0xca, 0x0f, 0x7f, 0x0e, 0x8d, 0xd7, 0x75, 0xcd, 0xa8, 0xb5, 0xb5, + 0xdf, 0xa4, 0x97, 0x89, 0x1a, 0xa8, 0x66, 0x77, 0x20, 0x20, 0x05, 0x0b, 0x71, 0x6e, 0x74, 0x0c, + 0x2a, 0x21, 0x76, 0x7e, 0xf6, 0x77, 0xbf, 0xbd, 0xa3, 0xfc, 0xc3, 0x6f, 0xef, 0x28, 0xff, 0xf2, + 0xdb, 0x3b, 0x6b, 0xbf, 0xfe, 0xd7, 0x3b, 0xca, 0xff, 0xcf, 0xfe, 0x27, 0xca, 0xd4, 0x8a, 0x43, + 0xf7, 0x4c, 0x7c, 0x78, 0x97, 0x00, 0xbe, 0xf3, 0xc1, 0xec, 0x8b, 0xc9, 0x07, 0xb3, 0xe1, 0x07, + 0xb8, 0xa3, 0xc3, 0x12, 0xfd, 0x43, 0xca, 0xe3, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x13, + 0xbd, 0xc9, 0xd3, 0x32, 0x00, 0x00, } func (m *Type) Marshal() (dAtA []byte, err error) { @@ -7533,6 +7542,16 @@ func (m *ColDef) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.LowCardinality { + i-- + if m.LowCardinality { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x50 + } if m.OnUpdate != nil { { size, err := m.OnUpdate.MarshalToSizedBuffer(dAtA[:i]) @@ -11968,6 +11987,9 @@ func (m *ColDef) ProtoSize() (n int) { l = m.OnUpdate.ProtoSize() n += 1 + l + sovPlan(uint64(l)) } + if m.LowCardinality { + n += 2 + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -16451,6 +16473,26 @@ func (m *ColDef) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LowCardinality", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LowCardinality = bool(v != 0) default: iNdEx = preIndex skippy, err := skipPlan(dAtA[iNdEx:]) @@ -25691,4 +25733,4 @@ var ( ErrInvalidLengthPlan = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowPlan = fmt.Errorf("proto: integer overflow") ErrUnexpectedEndOfGroupPlan = fmt.Errorf("proto: unexpected end of group") -) +) \ No newline at end of file diff --git a/pkg/sql/colexec/group/group.go b/pkg/sql/colexec/group/group.go index 08660bc84..98c67400d 100644 --- a/pkg/sql/colexec/group/group.go +++ b/pkg/sql/colexec/group/group.go @@ -20,6 +20,7 @@ import ( "github.com/matrixorigin/matrixone/pkg/common/hashmap" "github.com/matrixorigin/matrixone/pkg/container/batch" + "github.com/matrixorigin/matrixone/pkg/container/index" "github.com/matrixorigin/matrixone/pkg/container/vector" "github.com/matrixorigin/matrixone/pkg/sql/colexec" "github.com/matrixorigin/matrixone/pkg/sql/colexec/agg" @@ -210,6 +211,12 @@ func (ctr *container) processWithGroup(ap *Argument, proc *process.Process, anal } } }() + + if len(ctr.groupVecs) == 1 && !ctr.groupVecs[0].needFree { + if ctr.groupVecs[0].vec.IsLowCardinality() { + ctr.idx = ctr.groupVecs[0].vec.Index().(*index.LowCardinalityIndex).Dup() + } + } if ctr.bat == nil { size := 0 ctr.bat = batch.NewWithSize(len(ap.Exprs)) @@ -240,6 +247,8 @@ func (ctr *container) processWithGroup(ap *Argument, proc *process.Process, anal } } switch { + case ctr.idx != nil: + ctr.typ = HIndex case size <= 8: ctr.typ = H8 if ctr.intHashMap, err = hashmap.NewIntHashMap(true, ap.Ibucket, ap.Nbucket, proc.Mp()); err != nil { @@ -257,8 +266,10 @@ func (ctr *container) processWithGroup(ap *Argument, proc *process.Process, anal switch ctr.typ { case H8: err = ctr.processH8(bat, proc) - default: + case HStr: err = ctr.processHStr(bat, proc) + default: + err = ctr.processHIndex(bat, proc) } if err != nil { ctr.clean() @@ -318,6 +329,51 @@ func (ctr *container) processHStr(bat *batch.Batch, proc *process.Process) error return nil } +func (ctr *container) processHIndex(bat *batch.Batch, proc *process.Process) error { + mSels := make([][]int64, index.MaxLowCardinality+1) + poses := vector.MustTCols[uint16](ctr.idx.GetPoses()) + for k, v := range poses { + if len(mSels[v]) == 0 { + mSels[v] = make([]int64, 0, 64) + } + mSels[v] = append(mSels[v], int64(k)) + } + if len(mSels[0]) == 0 { // hasNotNull == true + mSels = mSels[1:] + } + + var groups []int64 + for i, sels := range mSels { + if len(sels) > 0 { + groups = append(groups, sels[0]) + ctr.bat.Zs = append(ctr.bat.Zs, 0) + for _, k := range sels { + ctr.bat.Zs[i] += bat.Zs[k] + } + } + } + + for _, ag := range ctr.bat.Aggs { + if err := ag.Grows(len(groups), proc.Mp()); err != nil { + return err + } + } + if err := vector.Union(ctr.bat.Vecs[0], ctr.vecs[0], groups, proc.Mp()); err != nil { + return err + } + for i, ag := range ctr.bat.Aggs { + aggVecs := []*vector.Vector{ctr.aggVecs[i].vec} + for j, sels := range mSels { + for _, sel := range sels { + if err := ag.Fill(int64(j), sel, 1, aggVecs); err != nil { + return err + } + } + } + } + return nil +} + func (ctr *container) batchFill(i int, n int, bat *batch.Batch, vals []uint64, hashRows uint64, proc *process.Process) error { cnt := 0 valCnt := 0 diff --git a/pkg/sql/colexec/group/group_bench_test.go b/pkg/sql/colexec/group/group_bench_test.go new file mode 100644 index 000000000..e32a79feb --- /dev/null +++ b/pkg/sql/colexec/group/group_bench_test.go @@ -0,0 +1,172 @@ +// Copyright 2021 Matrix Origin +// +// 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 group + +import ( + "encoding/json" + "testing" + "time" + + "github.com/matrixorigin/matrixone/pkg/common/mpool" + "github.com/matrixorigin/matrixone/pkg/container/index" + "github.com/matrixorigin/matrixone/pkg/container/types" + "github.com/matrixorigin/matrixone/pkg/container/vector" + "github.com/matrixorigin/matrixone/pkg/pb/plan" + "github.com/matrixorigin/matrixone/pkg/sql/colexec/agg" + "github.com/matrixorigin/matrixone/pkg/testutil" + "github.com/stretchr/testify/require" +) + +const ( + benchFlag = false + benchCardinality = 1024 + + benchTargetRows = 5_000 +) + +var ( + benchGroupData []string + benchGroupIndex *index.LowCardinalityIndex +) + +func init() { + if !benchFlag { + return + } + + benchGroupData = testutil.MakeRandomStrings(benchCardinality, benchTargetRows) + + var err error + if benchGroupIndex, err = initBenchIndex(benchGroupData); err != nil { + panic(err) + } +} + +func initBenchIndex(values []string) (*index.LowCardinalityIndex, error) { + var err error + m := mpool.MustNewZero() + v := testutil.NewVector(len(values), types.T_varchar.ToType(), m, false, values) + idx, err := index.New(v.Typ, m) + if err != nil { + return nil, err + } + if err = idx.InsertBatch(v); err != nil { + return nil, err + } + return idx, nil +} + +func TestGroupPerf(t *testing.T) { + if !benchFlag { + t.Log("benchmark flag is turned off...") + return + } + + const testCnt = 10 + + metricMp := map[string][]int64{ + "totalCost": make([]int64, testCnt), + "constructGroupDataCost": make([]int64, testCnt), + "groupbyCost": make([]int64, testCnt), + } + avgMp := map[string]int64{ + "totalCost": 0, + "constructGroupDataCost": 0, + "groupbyCost": 0, + } + + //---------------- + // common group by + //---------------- + { + t.Log("---------- test common group by performance ----------") + for i := 0; i < testCnt; i++ { + mockTimingCase(t, metricMp, i, nil) + } + + metric, err := json.Marshal(metricMp) + require.NoError(t, err) + t.Logf("common group by performance metric: \n%s\n", string(metric)) + + avg := calcAvg(t, testCnt, metricMp, avgMp) + t.Logf("common group by performance average: \n%s\n", avg) + } + + t.Logf("\n") + + //------------------------- + // low cardinality group by + //------------------------- + { + t.Log("---------- test low cardinality group by performance ----------") + for i := 0; i < testCnt; i++ { + mockTimingCase(t, metricMp, i, benchGroupIndex.Dup()) + } + + metric, err := json.Marshal(metricMp) + require.NoError(t, err) + t.Logf("low cardinality group by performance metric: \n%s\n", string(metric)) + + avg := calcAvg(t, testCnt, metricMp, avgMp) + t.Logf("low cardinality group by performance average: \n%s\n", avg) + } +} + +func mockTimingCase(t *testing.T, metricMp map[string][]int64, pos int, idx *index.LowCardinalityIndex) { + totalStart := time.Now().UnixNano() + // SELECT COUNT(*) FROM t GROUP BY t.col + tc := newTestCase([]bool{false}, []types.Type{{Oid: types.T_varchar}}, + []*plan.Expr{newExpression(0)}, []agg.Aggregate{{Op: 5, E: newExpression(0)}}) + + // construct group data part + constructGroupDataStart := time.Now().UnixNano() + v := testutil.NewVector(len(benchGroupData), types.T_varchar.ToType(), tc.proc.Mp(), false, benchGroupData) + if idx != nil { + v.SetIndex(idx) + } + constructGroupDataEnd := time.Now().UnixNano() + metricMp["constructGroupDataCost"][pos] = constructGroupDataEnd - constructGroupDataStart + + // group by part + groupbyStart := time.Now().UnixNano() + err := Prepare(tc.proc, tc.arg) + require.NoError(t, err) + tc.proc.Reg.InputBatch = testutil.NewBatchWithVectors([]*vector.Vector{v}, nil) + _, err = Call(0, tc.proc, tc.arg) + require.NoError(t, err) + groupbyEnd := time.Now().UnixNano() + metricMp["groupbyCost"][pos] = groupbyEnd - groupbyStart + + if tc.proc.Reg.InputBatch != nil { + tc.proc.Reg.InputBatch.Clean(tc.proc.Mp()) + } + + totalEnd := time.Now().UnixNano() + metricMp["totalCost"][pos] = totalEnd - totalStart +} + +func calcAvg(t *testing.T, cnt int64, perf map[string][]int64, avg map[string]int64) string { + for k, data := range perf { + sum := int64(0) + for _, v := range data { + sum += v + } + avg[k] = sum / cnt + } + + res, err := json.Marshal(avg) + require.NoError(t, err) + return string(res) +} diff --git a/pkg/sql/colexec/group/group_test.go b/pkg/sql/colexec/group/group_test.go index 6243a49fc..c184fa845 100644 --- a/pkg/sql/colexec/group/group_test.go +++ b/pkg/sql/colexec/group/group_test.go @@ -22,7 +22,9 @@ import ( "github.com/matrixorigin/matrixone/pkg/sql/colexec/agg" "github.com/matrixorigin/matrixone/pkg/container/batch" + "github.com/matrixorigin/matrixone/pkg/container/index" "github.com/matrixorigin/matrixone/pkg/container/types" + "github.com/matrixorigin/matrixone/pkg/container/vector" "github.com/matrixorigin/matrixone/pkg/pb/plan" "github.com/matrixorigin/matrixone/pkg/testutil" "github.com/matrixorigin/matrixone/pkg/vm/process" @@ -120,6 +122,66 @@ func TestGroup(t *testing.T) { } } +func TestLowCardinalityGroup(t *testing.T) { + { + // SELECT COUNT(*) FROM t GROUP BY t.values + tc := newTestCase([]bool{false}, []types.Type{{Oid: types.T_varchar}}, + []*plan.Expr{newExpression(0)}, []agg.Aggregate{{Op: 5, E: newExpression(0)}}) + tc.arg.NeedEval = true + + // a->4, b->3, c->3, d->2 + values := []string{"a", "b", "b", "a", "c", "b", "c", "a", "a", "d", "c", "d"} + v := testutil.NewVector(len(values), types.T_varchar.ToType(), tc.proc.Mp(), false, values) + constructIndex(t, v, tc.proc.Mp()) + + err := Prepare(tc.proc, tc.arg) + require.NoError(t, err) + tc.proc.Reg.InputBatch = testutil.NewBatchWithVectors([]*vector.Vector{v}, nil) + _, err = Call(0, tc.proc, tc.arg) + require.NoError(t, err) + tc.proc.Reg.InputBatch = nil + _, err = Call(0, tc.proc, tc.arg) + require.NoError(t, err) + + rbat := tc.proc.Reg.InputBatch + require.Equal(t, []string{"a", "b", "c", "d"}, vector.GetStrVectorValues(rbat.Vecs[0])) + require.Equal(t, []int64{4, 3, 3, 2}, vector.MustTCols[int64](rbat.Vecs[1])) + + if tc.proc.Reg.InputBatch != nil { + tc.proc.Reg.InputBatch.Clean(tc.proc.Mp()) + } + } + + { + // SELECT SUM(t.values) FROM t GROUP BY t.values + tc := newTestCase([]bool{false}, []types.Type{{Oid: types.T_int64}}, + []*plan.Expr{newExpression(0)}, []agg.Aggregate{{Op: 0, E: newExpression(0)}}) + tc.arg.NeedEval = true + + // 16->32, 1->2, 4->8, 2->6, 8->16, 32->32 + values := []int64{16, 16, 1, 4, 4, 2, 8, 8, 1, 32, 2, 2} + v := testutil.NewVector(len(values), types.T_int64.ToType(), tc.proc.Mp(), false, values) + constructIndex(t, v, tc.proc.Mp()) + + err := Prepare(tc.proc, tc.arg) + require.NoError(t, err) + tc.proc.Reg.InputBatch = testutil.NewBatchWithVectors([]*vector.Vector{v}, nil) + _, err = Call(0, tc.proc, tc.arg) + require.NoError(t, err) + tc.proc.Reg.InputBatch = nil + _, err = Call(0, tc.proc, tc.arg) + require.NoError(t, err) + + rbat := tc.proc.Reg.InputBatch + require.Equal(t, []int64{16, 1, 4, 2, 8, 32}, vector.MustTCols[int64](rbat.Vecs[0])) + require.Equal(t, []int64{32, 2, 8, 6, 16, 32}, vector.MustTCols[int64](rbat.Vecs[1])) + + if tc.proc.Reg.InputBatch != nil { + tc.proc.Reg.InputBatch.Clean(tc.proc.Mp()) + } + } +} + func BenchmarkGroup(b *testing.B) { for i := 0; i < b.N; i++ { tcs = []groupTestCase{ @@ -176,3 +238,13 @@ func newExpression(pos int32) *plan.Expr { func newBatch(t *testing.T, flgs []bool, ts []types.Type, proc *process.Process, rows int64) *batch.Batch { return testutil.NewBatch(ts, false, int(rows), proc.Mp()) } + +func constructIndex(t *testing.T, v *vector.Vector, m *mpool.MPool) { + idx, err := index.New(v.Typ, m) + require.NoError(t, err) + + err = idx.InsertBatch(v) + require.NoError(t, err) + + v.SetIndex(idx) +} diff --git a/pkg/sql/colexec/group/types.go b/pkg/sql/colexec/group/types.go index e210f1529..a5024d7b4 100644 --- a/pkg/sql/colexec/group/types.go +++ b/pkg/sql/colexec/group/types.go @@ -17,6 +17,7 @@ package group import ( "github.com/matrixorigin/matrixone/pkg/common/hashmap" "github.com/matrixorigin/matrixone/pkg/container/batch" + "github.com/matrixorigin/matrixone/pkg/container/index" "github.com/matrixorigin/matrixone/pkg/container/types" "github.com/matrixorigin/matrixone/pkg/container/vector" "github.com/matrixorigin/matrixone/pkg/pb/plan" @@ -26,6 +27,7 @@ import ( const ( H8 = iota HStr + HIndex ) type evalVector struct { @@ -40,6 +42,7 @@ type container struct { intHashMap *hashmap.IntHashMap strHashMap *hashmap.StrHashMap + idx *index.LowCardinalityIndex aggVecs []evalVector groupVecs []evalVector diff --git a/pkg/sql/colexec/hashbuild/build.go b/pkg/sql/colexec/hashbuild/build.go index 5a8690777..b23b6b2c9 100644 --- a/pkg/sql/colexec/hashbuild/build.go +++ b/pkg/sql/colexec/hashbuild/build.go @@ -19,6 +19,7 @@ import ( "github.com/matrixorigin/matrixone/pkg/common/hashmap" "github.com/matrixorigin/matrixone/pkg/container/batch" + "github.com/matrixorigin/matrixone/pkg/container/index" "github.com/matrixorigin/matrixone/pkg/container/vector" "github.com/matrixorigin/matrixone/pkg/sql/colexec" "github.com/matrixorigin/matrixone/pkg/sql/plan" @@ -68,7 +69,7 @@ func Call(idx int, proc *process.Process, arg any) (bool, error) { default: if ctr.bat != nil { if ap.NeedHashMap { - ctr.bat.Ht = hashmap.NewJoinMap(ctr.sels, nil, ctr.mp, ctr.hasNull) + ctr.bat.Ht = hashmap.NewJoinMap(ctr.sels, nil, ctr.mp, ctr.hasNull, ctr.idx) } proc.SetInputBatch(ctr.bat) ctr.bat = nil @@ -108,6 +109,10 @@ func (ctr *container) build(ap *Argument, proc *process.Process, anal process.An } defer ctr.freeJoinCondition(proc) + if ctr.idx != nil { + return ctr.indexBuild() + } + itr := ctr.mp.NewIterator() count := ctr.bat.Length() for i := 0; i < count; i += hashmap.UnitLimit { @@ -138,6 +143,26 @@ func (ctr *container) build(ap *Argument, proc *process.Process, anal process.An return nil } +func (ctr *container) indexBuild() error { + // e.g. original data = ["a", "b", "a", "c", "b", "c", "a", "a"] + // => dictionary = ["a"->1, "b"->2, "c"->3] + // => poses = [1, 2, 1, 3, 2, 3, 1, 1] + // sels = [[0, 2, 6, 7], [1, 4], [3, 5]] + ctr.sels = make([][]int64, index.MaxLowCardinality) + poses := vector.MustTCols[uint16](ctr.idx.GetPoses()) + for k, v := range poses { + if v == 0 { + continue + } + bucket := int(v) - 1 + if len(ctr.sels[bucket]) == 0 { + ctr.sels[bucket] = make([]int64, 0, 64) + } + ctr.sels[bucket] = append(ctr.sels[bucket], int64(k)) + } + return nil +} + func (ctr *container) evalJoinCondition(bat *batch.Batch, conds []*plan.Expr, proc *process.Process) error { for i, cond := range conds { vec, err := colexec.EvalExpr(bat, proc, cond) @@ -158,6 +183,14 @@ func (ctr *container) evalJoinCondition(bat *batch.Batch, conds []*plan.Expr, pr break } } + + // 1. multiple equivalent conditions are not considered currently + // 2. do not want the condition to be an expression + if len(conds) == 1 && !ctr.evecs[i].needFree { + if idx, ok := ctr.vecs[i].Index().(*index.LowCardinalityIndex); ok { + ctr.idx = idx.Dup() + } + } } return nil } diff --git a/pkg/sql/colexec/hashbuild/build_test.go b/pkg/sql/colexec/hashbuild/build_test.go index 7fafe1356..837741870 100644 --- a/pkg/sql/colexec/hashbuild/build_test.go +++ b/pkg/sql/colexec/hashbuild/build_test.go @@ -22,7 +22,9 @@ import ( "github.com/matrixorigin/matrixone/pkg/common/hashmap" "github.com/matrixorigin/matrixone/pkg/common/mpool" "github.com/matrixorigin/matrixone/pkg/container/batch" + "github.com/matrixorigin/matrixone/pkg/container/index" "github.com/matrixorigin/matrixone/pkg/container/types" + "github.com/matrixorigin/matrixone/pkg/container/vector" "github.com/matrixorigin/matrixone/pkg/pb/plan" "github.com/matrixorigin/matrixone/pkg/testutil" "github.com/matrixorigin/matrixone/pkg/vm/process" @@ -87,6 +89,37 @@ func TestBuild(t *testing.T) { } } +func TestLowCardinalityBuild(t *testing.T) { + tc := newTestCase([]bool{false}, []types.Type{types.T_varchar.ToType()}, + []*plan.Expr{ + newExpr(0, types.T_varchar.ToType()), + }, + ) + err := Prepare(tc.proc, tc.arg) + require.NoError(t, err) + + values := []string{"a", "b", "a", "c", "b", "c", "a", "a"} + v := testutil.NewVector(len(values), types.T_varchar.ToType(), tc.proc.Mp(), false, values) + constructIndex(t, v, tc.proc.Mp()) + + tc.proc.Reg.MergeReceivers[0].Ch <- testutil.NewBatchWithVectors([]*vector.Vector{v}, nil) + tc.proc.Reg.MergeReceivers[0].Ch <- nil + + ok, err := Call(0, tc.proc, tc.arg) + require.NoError(t, err) + require.Equal(t, true, ok) + mp := tc.proc.Reg.InputBatch.Ht.(*hashmap.JoinMap) + require.NotNil(t, mp.Index()) + + sels := mp.Sels() + require.Equal(t, []int64{0, 2, 6, 7}, sels[0]) + require.Equal(t, []int64{1, 4}, sels[1]) + require.Equal(t, []int64{3, 5}, sels[2]) + + mp.Free() + tc.proc.Reg.InputBatch.Clean(tc.proc.Mp()) +} + func BenchmarkBuild(b *testing.B) { for i := 0; i < b.N; i++ { tcs = []buildTestCase{ @@ -156,3 +189,13 @@ func newTestCase(flgs []bool, ts []types.Type, cs []*plan.Expr) buildTestCase { func newBatch(t *testing.T, flgs []bool, ts []types.Type, proc *process.Process, rows int64) *batch.Batch { return testutil.NewBatch(ts, false, int(rows), proc.Mp()) } + +func constructIndex(t *testing.T, v *vector.Vector, m *mpool.MPool) { + idx, err := index.New(v.Typ, m) + require.NoError(t, err) + + err = idx.InsertBatch(v) + require.NoError(t, err) + + v.SetIndex(idx) +} diff --git a/pkg/sql/colexec/hashbuild/types.go b/pkg/sql/colexec/hashbuild/types.go index 74eed2381..3da6120a4 100644 --- a/pkg/sql/colexec/hashbuild/types.go +++ b/pkg/sql/colexec/hashbuild/types.go @@ -17,6 +17,7 @@ package hashbuild import ( "github.com/matrixorigin/matrixone/pkg/common/hashmap" "github.com/matrixorigin/matrixone/pkg/container/batch" + "github.com/matrixorigin/matrixone/pkg/container/index" "github.com/matrixorigin/matrixone/pkg/container/types" "github.com/matrixorigin/matrixone/pkg/container/vector" "github.com/matrixorigin/matrixone/pkg/sql/plan" @@ -45,6 +46,8 @@ type container struct { vecs []*vector.Vector mp *hashmap.StrHashMap + + idx *index.LowCardinalityIndex } type Argument struct { diff --git a/pkg/sql/colexec/join/join.go b/pkg/sql/colexec/join/join.go index 9c698085f..54d85f4ec 100644 --- a/pkg/sql/colexec/join/join.go +++ b/pkg/sql/colexec/join/join.go @@ -18,7 +18,10 @@ import ( "bytes" "github.com/matrixorigin/matrixone/pkg/common/hashmap" + "github.com/matrixorigin/matrixone/pkg/common/mpool" "github.com/matrixorigin/matrixone/pkg/container/batch" + "github.com/matrixorigin/matrixone/pkg/container/index" + "github.com/matrixorigin/matrixone/pkg/container/types" "github.com/matrixorigin/matrixone/pkg/container/vector" "github.com/matrixorigin/matrixone/pkg/sql/colexec" "github.com/matrixorigin/matrixone/pkg/sql/plan" @@ -103,12 +106,25 @@ func (ctr *container) probe(bat *batch.Batch, ap *Argument, proc *process.Proces rbat.Vecs[i] = vector.New(ctr.bat.Vecs[rp.Pos].Typ) } } - if err := ctr.evalJoinCondition(bat, ap.Conditions[0], proc); err != nil { + + idxFlg := false + if err := ctr.evalJoinCondition(bat, ap.Conditions[0], proc, &idxFlg); err != nil { return err } defer ctr.freeJoinCondition(proc) - count := bat.Length() + mSels := ctr.mp.Sels() + if idxFlg { + if err := ctr.indexProbe(ap, bat, rbat, mSels, proc); err != nil { + return err + } + rbat.ExpandNulls() + anal.Output(rbat) + proc.SetInputBatch(rbat) + return nil + } + + count := bat.Length() itr := ctr.mp.Map().NewIterator() for i := 0; i < count; i += hashmap.UnitLimit { n := count - i @@ -158,7 +174,54 @@ func (ctr *container) probe(bat *batch.Batch, ap *Argument, proc *process.Proces return nil } -func (ctr *container) evalJoinCondition(bat *batch.Batch, conds []*plan.Expr, proc *process.Process) error { +func (ctr *container) indexProbe(ap *Argument, bat, rbat *batch.Batch, mSels [][]int64, proc *process.Process) error { + col := vector.MustTCols[uint16](ctr.vecs[0]) + for i, v := range col { + if v == 0 { + continue + } + sels := mSels[v-1] + for _, sel := range sels { + if ap.Cond != nil { + vec, err := colexec.JoinFilterEvalExprInBucket(bat, ctr.bat, i, int(sel), proc, ap.Cond) + if err != nil { + return err + } + bs := vector.MustTCols[bool](vec) + if !bs[0] { + vec.Free(proc.Mp()) + continue + } + vec.Free(proc.Mp()) + } + for j, rp := range ap.Result { + if rp.Rel == 0 { + if err := vector.UnionOne(rbat.Vecs[j], bat.Vecs[rp.Pos], int64(i), proc.Mp()); err != nil { + rbat.Clean(proc.Mp()) + return err + } + if err := populateIndex(rbat.Vecs[j], bat.Vecs[rp.Pos], int64(i), proc.Mp()); err != nil { + rbat.Clean(proc.Mp()) + return err + } + } else { + if err := vector.UnionOne(rbat.Vecs[j], ctr.bat.Vecs[rp.Pos], sel, proc.Mp()); err != nil { + rbat.Clean(proc.Mp()) + return err + } + if err := populateIndex(rbat.Vecs[j], ctr.bat.Vecs[rp.Pos], sel, proc.Mp()); err != nil { + rbat.Clean(proc.Mp()) + return err + } + } + } + rbat.Zs = append(rbat.Zs, ctr.bat.Zs[sel]) + } + } + return nil +} + +func (ctr *container) evalJoinCondition(bat *batch.Batch, conds []*plan.Expr, proc *process.Process, flg *bool) error { for i, cond := range conds { vec, err := colexec.EvalExpr(bat, proc, cond) if err != nil || vec.ConstExpand(proc.Mp()) == nil { @@ -178,6 +241,10 @@ func (ctr *container) evalJoinCondition(bat *batch.Batch, conds []*plan.Expr, pr break } } + + if *flg, err = ctr.dictEncoding(proc.Mp()); err != nil { + return err + } } return nil } @@ -189,3 +256,67 @@ func (ctr *container) freeJoinCondition(proc *process.Process) { } } } + +func (ctr *container) dictEncoding(m *mpool.MPool) (bool, error) { + // find out whether hashbuild is built by low cardinality index + idx := ctr.mp.Index() + if idx == nil { + return false, nil + } + + vec := ctr.vecs[0] + encoded := vector.New(types.Type{Oid: types.T_uint16}) + // case 1 + // 1. the join columns of both left table and right table are indexed + // 2. left condition is not an expression + if vec.IsLowCardinality() && !ctr.evecs[0].needFree { + leftIdx := ctr.vecs[0].Index().(*index.LowCardinalityIndex) + // e.g. idx.dict = ["a"->1, "b"->2, "c"->3] + // leftIdx.dict = ["c"->1, "d"->2, "b"->3, "a"->4] + // mapping => fixed map = [3, 0, 2, 1] + fixedMap := idx.GetDict().FindBatch(leftIdx.GetDict().GetUnique()) + poses := vector.MustTCols[uint16](leftIdx.GetPoses()) + col := make([]uint16, len(poses)) + for i, pos := range poses { + if pos == 0 { + continue + } + col[i] = fixedMap[pos-1] + } + if err := vector.AppendFixed(encoded, col, m); err != nil { + encoded.Free(m) + return false, err + } + } else { + // case 2 + // 1. only the join column of right table is indexed + // 2. it does not matter if left is an expression or not + if err := idx.Encode(encoded, vec); err != nil { + encoded.Free(m) + vec.Free(m) + return false, err + } + if ctr.evecs[0].needFree { + vec.Free(m) + } + } + ctr.vecs[0] = encoded + ctr.evecs[0].vec = encoded + ctr.evecs[0].needFree = true + return true, nil +} + +func populateIndex(result, selected *vector.Vector, row int64, m *mpool.MPool) error { + if !selected.IsLowCardinality() { + return nil + } + + idx := selected.Index().(*index.LowCardinalityIndex) + if result.Index() == nil { + result.SetIndex(idx.DupEmpty()) + } + + resultIdx := result.Index().(*index.LowCardinalityIndex) + dst, src := resultIdx.GetPoses(), idx.GetPoses() + return vector.UnionOne(dst, src, row, m) +} diff --git a/pkg/sql/colexec/join/join_bench_test.go b/pkg/sql/colexec/join/join_bench_test.go new file mode 100644 index 000000000..88b452b50 --- /dev/null +++ b/pkg/sql/colexec/join/join_bench_test.go @@ -0,0 +1,226 @@ +// Copyright 2021 Matrix Origin +// +// 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 join + +import ( + "encoding/json" + "math/rand" + "testing" + "time" + + "github.com/matrixorigin/matrixone/pkg/common/mpool" + "github.com/matrixorigin/matrixone/pkg/container/index" + "github.com/matrixorigin/matrixone/pkg/container/types" + "github.com/matrixorigin/matrixone/pkg/container/vector" + "github.com/matrixorigin/matrixone/pkg/pb/plan" + "github.com/matrixorigin/matrixone/pkg/sql/colexec" + "github.com/matrixorigin/matrixone/pkg/testutil" + "github.com/stretchr/testify/require" +) + +const ( + benchFlag = false + benchCardinality = 1024 + + benchBuildTargetRows = 2_500 + benchProbeTargetRows = 5_000 +) + +var ( + benchBuildData []string + benchProbeData []string + benchBuildIndex *index.LowCardinalityIndex + benchProbeIndex *index.LowCardinalityIndex +) + +func init() { + if !benchFlag { + return + } + + // init benchBuildData + benchBuildData = testutil.MakeRandomStrings(benchCardinality, benchBuildTargetRows) + + // init benchProbeData + for len(benchProbeData) < benchProbeTargetRows { + // there is 1/3 probability picking a not existed string + if rand.Intn(3) == 0 { + benchProbeData = append(benchProbeData, "hello_world") // '_' is not existed + } else { + src := benchBuildData[rand.Intn(len(benchBuildData))] + benchProbeData = append(benchProbeData, string(append([]byte{}, src...))) + } + } + + // init benchBuildIndex and benchProbeIndex + var err error + if benchBuildIndex, err = initBenchIndex(benchBuildData); err != nil { + panic(err) + } + if benchProbeIndex, err = initBenchIndex(benchProbeData); err != nil { + panic(err) + } +} + +func initBenchIndex(values []string) (*index.LowCardinalityIndex, error) { + var err error + m := mpool.MustNewZero() + v := testutil.NewVector(len(values), types.T_varchar.ToType(), m, false, values) + idx, err := index.New(v.Typ, m) + if err != nil { + return nil, err + } + if err = idx.InsertBatch(v); err != nil { + return nil, err + } + return idx, nil +} + +func TestJoinPerf(t *testing.T) { + if !benchFlag { + t.Log("benchmark flag is turned off...") + return + } + + const testCnt = 10 + + metricMp := map[string][]int64{ + "totalCost": make([]int64, testCnt), + "constructBuildDataCost": make([]int64, testCnt), + "hashbuildCost": make([]int64, testCnt), + "constructProbeDataCost": make([]int64, testCnt), + "probeCost": make([]int64, testCnt), + } + avgMp := map[string]int64{ + "totalCost": 0, + "constructBuildDataCost": 0, + "hashbuildCost": 0, + "constructProbeDataCost": 0, + "probeCost": 0, + } + + //------------ + // common join + //------------ + { + t.Log("---------- test common join performance ----------") + for i := 0; i < testCnt; i++ { + mockTimingCase(t, metricMp, i, nil, nil) + } + + metric, err := json.Marshal(metricMp) + require.NoError(t, err) + t.Log(string(metric)) + + avg := calcAvg(t, testCnt, metricMp, avgMp) + t.Logf("common join performance average: \n%s\n", avg) + } + + t.Logf("\n") + + //--------------------- + // low cardinality join + //--------------------- + { + t.Log("---------- test low cardinality join performance ----------") + for i := 0; i < testCnt; i++ { + mockTimingCase(t, metricMp, i, nil, benchBuildIndex.Dup()) + } + + metric, err := json.Marshal(metricMp) + require.NoError(t, err) + t.Log(string(metric)) + + avg := calcAvg(t, testCnt, metricMp, avgMp) + t.Logf("low cardinality join performance average: \n%v\n", avg) + } + + t.Logf("\n") + + //----------------------------- + // low cardinality indexes join + //----------------------------- + { + t.Log("---------- test low cardinality indexes join performance ----------") + for i := 0; i < testCnt; i++ { + mockTimingCase(t, metricMp, i, benchProbeIndex.Dup(), benchBuildIndex.Dup()) + } + + metric, err := json.Marshal(metricMp) + require.NoError(t, err) + t.Log(string(metric)) + + avg := calcAvg(t, testCnt, metricMp, avgMp) + t.Logf("low cardinality indexes join performance average: \n%v\n", avg) + } +} + +func mockTimingCase(t *testing.T, metricMp map[string][]int64, pos int, probeIdx, buildIdx *index.LowCardinalityIndex) { + totalStart := time.Now().UnixNano() + tc := newTestCase([]bool{false}, []types.Type{types.T_varchar.ToType()}, []colexec.ResultPos{colexec.NewResultPos(0, 0)}, + [][]*plan.Expr{ + {newExpr(0, types.T_varchar.ToType())}, + {newExpr(0, types.T_varchar.ToType())}, + }) + tc.arg.Cond = nil + + // construct build data part + constructBuildDataStart := time.Now().UnixNano() + v0 := testutil.NewVector(len(benchBuildData), types.T_varchar.ToType(), tc.proc.Mp(), false, benchBuildData) + if buildIdx != nil { + v0.SetIndex(buildIdx) + } + constructBuildDataEnd := time.Now().UnixNano() + metricMp["constructBuildDataCost"][pos] = constructBuildDataEnd - constructBuildDataStart + + // hashbuild part + hashbuildStart := time.Now().UnixNano() + bat := hashBuildWithBatch(t, tc, testutil.NewBatchWithVectors([]*vector.Vector{v0}, nil)) + hashbuildEnd := time.Now().UnixNano() + metricMp["hashbuildCost"][pos] = hashbuildEnd - hashbuildStart + + // construct probe data part + constructProbeDataStart := time.Now().UnixNano() + v1 := testutil.NewVector(len(benchProbeData), types.T_varchar.ToType(), tc.proc.Mp(), false, benchProbeData) + if probeIdx != nil { + v1.SetIndex(probeIdx) + } + constructProbeDataEnd := time.Now().UnixNano() + metricMp["constructProbeDataCost"][pos] = constructProbeDataEnd - constructProbeDataStart + + // probe part + probeStart := time.Now().UnixNano() + rbat := probeWithBatches(t, tc, testutil.NewBatchWithVectors([]*vector.Vector{v1}, nil), bat) + require.NotNil(t, rbat) + probeEnd := time.Now().UnixNano() + metricMp["probeCost"][pos] = probeEnd - probeStart + + totalEnd := time.Now().UnixNano() + metricMp["totalCost"][pos] = totalEnd - totalStart +} + +func calcAvg(t *testing.T, cnt int64, perf map[string][]int64, avg map[string]int64) string { + for k, data := range perf { + sum := int64(0) + for _, v := range data { + sum += v + } + avg[k] = sum / cnt + } + + res, err := json.Marshal(avg) + require.NoError(t, err) + return string(res) +} diff --git a/pkg/sql/colexec/join/join_test.go b/pkg/sql/colexec/join/join_test.go index 9dbe008a8..93e1e665b 100644 --- a/pkg/sql/colexec/join/join_test.go +++ b/pkg/sql/colexec/join/join_test.go @@ -21,7 +21,9 @@ import ( "github.com/matrixorigin/matrixone/pkg/common/mpool" "github.com/matrixorigin/matrixone/pkg/container/batch" + "github.com/matrixorigin/matrixone/pkg/container/index" "github.com/matrixorigin/matrixone/pkg/container/types" + "github.com/matrixorigin/matrixone/pkg/container/vector" "github.com/matrixorigin/matrixone/pkg/pb/plan" "github.com/matrixorigin/matrixone/pkg/sql/colexec" "github.com/matrixorigin/matrixone/pkg/sql/colexec/hashbuild" @@ -104,6 +106,79 @@ func TestJoin(t *testing.T) { } } +func TestLowCardinalityJoin(t *testing.T) { + tc := newTestCase([]bool{false}, []types.Type{types.T_varchar.ToType()}, []colexec.ResultPos{colexec.NewResultPos(1, 0)}, + [][]*plan.Expr{ + { + newExpr(0, types.T_varchar.ToType()), + }, + { + newExpr(0, types.T_varchar.ToType()), + }, + }) + tc.arg.Cond = nil // only numeric type can be compared + + values0 := []string{"a", "b", "a", "c", "b", "c", "a", "a"} + v0 := testutil.NewVector(len(values0), types.T_varchar.ToType(), tc.proc.Mp(), false, values0) + constructIndex(t, v0, tc.proc.Mp()) + + // hashbuild + bat := hashBuildWithBatch(t, tc, testutil.NewBatchWithVectors([]*vector.Vector{v0}, nil)) + + values1 := []string{"c", "d", "c", "c", "b", "a", "b", "d", "a", "b"} + v1 := testutil.NewVector(len(values1), types.T_varchar.ToType(), tc.proc.Mp(), false, values1) + + // probe + // only the join column of right table is indexed + rbat := probeWithBatches(t, tc, testutil.NewBatchWithVectors([]*vector.Vector{v1}, nil), bat) + + result := rbat.Vecs[0] + require.NotNil(t, result.Index()) + resultIdx := result.Index().(*index.LowCardinalityIndex) + require.Equal( + t, + []uint16{3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2}, + vector.MustTCols[uint16](resultIdx.GetPoses()), + ) +} + +func TestLowCardinalityIndexesJoin(t *testing.T) { + tc := newTestCase([]bool{false}, []types.Type{types.T_varchar.ToType()}, []colexec.ResultPos{colexec.NewResultPos(0, 0)}, + [][]*plan.Expr{ + { + newExpr(0, types.T_varchar.ToType()), + }, + { + newExpr(0, types.T_varchar.ToType()), + }, + }) + tc.arg.Cond = nil // only numeric type can be compared + + values0 := []string{"a", "b", "a", "c", "b", "c", "a", "a"} + v0 := testutil.NewVector(len(values0), types.T_varchar.ToType(), tc.proc.Mp(), false, values0) + constructIndex(t, v0, tc.proc.Mp()) + + // hashbuild + bat := hashBuildWithBatch(t, tc, testutil.NewBatchWithVectors([]*vector.Vector{v0}, nil)) + + values1 := []string{"c", "d", "c", "c", "b", "a", "b", "d", "a", "b"} + v1 := testutil.NewVector(len(values1), types.T_varchar.ToType(), tc.proc.Mp(), false, values1) + constructIndex(t, v1, tc.proc.Mp()) + + // probe + // the join columns of both left table and right table are indexed + rbat := probeWithBatches(t, tc, testutil.NewBatchWithVectors([]*vector.Vector{v1}, nil), bat) + + result := rbat.Vecs[0] + require.NotNil(t, result.Index()) + resultIdx := result.Index().(*index.LowCardinalityIndex) + require.Equal( + t, + []uint16{1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 3, 3}, + vector.MustTCols[uint16](resultIdx.GetPoses()), + ) +} + func BenchmarkJoin(b *testing.B) { for i := 0; i < b.N; i++ { tcs = []joinTestCase{ @@ -234,9 +309,13 @@ func newTestCase(flgs []bool, ts []types.Type, rp []colexec.ResultPos, cs [][]*p } func hashBuild(t *testing.T, tc joinTestCase) *batch.Batch { + return hashBuildWithBatch(t, tc, newBatch(t, tc.flgs, tc.types, tc.proc, Rows)) +} + +func hashBuildWithBatch(t *testing.T, tc joinTestCase, bat *batch.Batch) *batch.Batch { err := hashbuild.Prepare(tc.proc, tc.barg) require.NoError(t, err) - tc.proc.Reg.MergeReceivers[0].Ch <- newBatch(t, tc.flgs, tc.types, tc.proc, Rows) + tc.proc.Reg.MergeReceivers[0].Ch <- bat tc.proc.Reg.MergeReceivers[0].Ch <- nil ok, err := hashbuild.Call(0, tc.proc, tc.barg) require.NoError(t, err) @@ -244,7 +323,28 @@ func hashBuild(t *testing.T, tc joinTestCase) *batch.Batch { return tc.proc.Reg.InputBatch } +func probeWithBatches(t *testing.T, tc joinTestCase, l, r *batch.Batch) *batch.Batch { + err := Prepare(tc.proc, tc.arg) + require.NoError(t, err) + tc.proc.Reg.MergeReceivers[0].Ch <- l + tc.proc.Reg.MergeReceivers[1].Ch <- r + ok, err := Call(0, tc.proc, tc.arg) + require.NoError(t, err) + require.Equal(t, false, ok) + return tc.proc.Reg.InputBatch +} + // create a new block based on the type information, flgs[i] == ture: has null func newBatch(t *testing.T, flgs []bool, ts []types.Type, proc *process.Process, rows int64) *batch.Batch { return testutil.NewBatch(ts, false, int(rows), proc.Mp()) } + +func constructIndex(t *testing.T, v *vector.Vector, m *mpool.MPool) { + idx, err := index.New(v.Typ, m) + require.NoError(t, err) + + err = idx.InsertBatch(v) + require.NoError(t, err) + + v.SetIndex(idx) +} diff --git a/pkg/sql/parsers/dialect/mysql/keywords.go b/pkg/sql/parsers/dialect/mysql/keywords.go index c2556119d..b00c5fec7 100644 --- a/pkg/sql/parsers/dialect/mysql/keywords.go +++ b/pkg/sql/parsers/dialect/mysql/keywords.go @@ -516,5 +516,6 @@ func init() { "reference": REFERENCE, "modump": MODUMP, "generate_series": GENERATE_SERIES, + "low_cardinality": LOW_CARDINALITY, } } diff --git a/pkg/sql/parsers/dialect/mysql/mysql_sql.go b/pkg/sql/parsers/dialect/mysql/mysql_sql.go index 5662a283c..ea7ebbdc2 100644 --- a/pkg/sql/parsers/dialect/mysql/mysql_sql.go +++ b/pkg/sql/parsers/dialect/mysql/mysql_sql.go @@ -345,170 +345,171 @@ const SIGNED = 57667 const UNSIGNED = 57668 const ZEROFILL = 57669 const ENGINES = 57670 -const ADMIN_NAME = 57671 -const RANDOM = 57672 -const SUSPEND = 57673 -const ATTRIBUTE = 57674 -const HISTORY = 57675 -const REUSE = 57676 -const CURRENT = 57677 -const OPTIONAL = 57678 -const FAILED_LOGIN_ATTEMPTS = 57679 -const PASSWORD_LOCK_TIME = 57680 -const UNBOUNDED = 57681 -const SECONDARY = 57682 -const USER = 57683 -const IDENTIFIED = 57684 -const CIPHER = 57685 -const ISSUER = 57686 -const X509 = 57687 -const SUBJECT = 57688 -const SAN = 57689 -const REQUIRE = 57690 -const SSL = 57691 -const NONE = 57692 -const PASSWORD = 57693 -const MAX_QUERIES_PER_HOUR = 57694 -const MAX_UPDATES_PER_HOUR = 57695 -const MAX_CONNECTIONS_PER_HOUR = 57696 -const MAX_USER_CONNECTIONS = 57697 -const FORMAT = 57698 -const VERBOSE = 57699 -const CONNECTION = 57700 -const TRIGGERS = 57701 -const PROFILES = 57702 -const LOAD = 57703 -const INFILE = 57704 -const TERMINATED = 57705 -const OPTIONALLY = 57706 -const ENCLOSED = 57707 -const ESCAPED = 57708 -const STARTING = 57709 -const LINES = 57710 -const ROWS = 57711 -const IMPORT = 57712 -const FROM_JSONLINE = 57713 -const MODUMP = 57714 -const DATABASES = 57715 -const TABLES = 57716 -const EXTENDED = 57717 -const FULL = 57718 -const PROCESSLIST = 57719 -const FIELDS = 57720 -const COLUMNS = 57721 -const OPEN = 57722 -const ERRORS = 57723 -const WARNINGS = 57724 -const INDEXES = 57725 -const SCHEMAS = 57726 -const NAMES = 57727 -const GLOBAL = 57728 -const SESSION = 57729 -const ISOLATION = 57730 -const LEVEL = 57731 -const READ = 57732 -const WRITE = 57733 -const ONLY = 57734 -const REPEATABLE = 57735 -const COMMITTED = 57736 -const UNCOMMITTED = 57737 -const SERIALIZABLE = 57738 -const LOCAL = 57739 -const EVENTS = 57740 -const PLUGINS = 57741 -const CURRENT_TIMESTAMP = 57742 -const DATABASE = 57743 -const CURRENT_TIME = 57744 -const LOCALTIME = 57745 -const LOCALTIMESTAMP = 57746 -const UTC_DATE = 57747 -const UTC_TIME = 57748 -const UTC_TIMESTAMP = 57749 -const REPLACE = 57750 -const CONVERT = 57751 -const SEPARATOR = 57752 -const TIMESTAMPDIFF = 57753 -const CURRENT_DATE = 57754 -const CURRENT_USER = 57755 -const CURRENT_ROLE = 57756 -const SECOND_MICROSECOND = 57757 -const MINUTE_MICROSECOND = 57758 -const MINUTE_SECOND = 57759 -const HOUR_MICROSECOND = 57760 -const HOUR_SECOND = 57761 -const HOUR_MINUTE = 57762 -const DAY_MICROSECOND = 57763 -const DAY_SECOND = 57764 -const DAY_MINUTE = 57765 -const DAY_HOUR = 57766 -const YEAR_MONTH = 57767 -const SQL_TSI_HOUR = 57768 -const SQL_TSI_DAY = 57769 -const SQL_TSI_WEEK = 57770 -const SQL_TSI_MONTH = 57771 -const SQL_TSI_QUARTER = 57772 -const SQL_TSI_YEAR = 57773 -const SQL_TSI_SECOND = 57774 -const SQL_TSI_MINUTE = 57775 -const RECURSIVE = 57776 -const CONFIG = 57777 -const DRAINER = 57778 -const MATCH = 57779 -const AGAINST = 57780 -const BOOLEAN = 57781 -const LANGUAGE = 57782 -const WITH = 57783 -const QUERY = 57784 -const EXPANSION = 57785 -const ADDDATE = 57786 -const BIT_AND = 57787 -const BIT_OR = 57788 -const BIT_XOR = 57789 -const CAST = 57790 -const COUNT = 57791 -const APPROX_COUNT_DISTINCT = 57792 -const APPROX_PERCENTILE = 57793 -const CURDATE = 57794 -const CURTIME = 57795 -const DATE_ADD = 57796 -const DATE_SUB = 57797 -const EXTRACT = 57798 -const GROUP_CONCAT = 57799 -const MAX = 57800 -const MID = 57801 -const MIN = 57802 -const NOW = 57803 -const POSITION = 57804 -const SESSION_USER = 57805 -const STD = 57806 -const STDDEV = 57807 -const STDDEV_POP = 57808 -const STDDEV_SAMP = 57809 -const SUBDATE = 57810 -const SUBSTR = 57811 -const SUBSTRING = 57812 -const SUM = 57813 -const SYSDATE = 57814 -const SYSTEM_USER = 57815 -const TRANSLATE = 57816 -const TRIM = 57817 -const VARIANCE = 57818 -const VAR_POP = 57819 -const VAR_SAMP = 57820 -const AVG = 57821 -const JSON_EXTRACT = 57822 -const ARROW = 57823 -const UNNEST = 57824 -const GENERATE_SERIES = 57825 -const ROW = 57826 -const OUTFILE = 57827 -const HEADER = 57828 -const MAX_FILE_SIZE = 57829 -const FORCE_QUOTE = 57830 -const UNUSED = 57831 -const BINDINGS = 57832 -const DO = 57833 -const DECLARE = 57834 +const LOW_CARDINALITY = 57671 +const ADMIN_NAME = 57672 +const RANDOM = 57673 +const SUSPEND = 57674 +const ATTRIBUTE = 57675 +const HISTORY = 57676 +const REUSE = 57677 +const CURRENT = 57678 +const OPTIONAL = 57679 +const FAILED_LOGIN_ATTEMPTS = 57680 +const PASSWORD_LOCK_TIME = 57681 +const UNBOUNDED = 57682 +const SECONDARY = 57683 +const USER = 57684 +const IDENTIFIED = 57685 +const CIPHER = 57686 +const ISSUER = 57687 +const X509 = 57688 +const SUBJECT = 57689 +const SAN = 57690 +const REQUIRE = 57691 +const SSL = 57692 +const NONE = 57693 +const PASSWORD = 57694 +const MAX_QUERIES_PER_HOUR = 57695 +const MAX_UPDATES_PER_HOUR = 57696 +const MAX_CONNECTIONS_PER_HOUR = 57697 +const MAX_USER_CONNECTIONS = 57698 +const FORMAT = 57699 +const VERBOSE = 57700 +const CONNECTION = 57701 +const TRIGGERS = 57702 +const PROFILES = 57703 +const LOAD = 57704 +const INFILE = 57705 +const TERMINATED = 57706 +const OPTIONALLY = 57707 +const ENCLOSED = 57708 +const ESCAPED = 57709 +const STARTING = 57710 +const LINES = 57711 +const ROWS = 57712 +const IMPORT = 57713 +const FROM_JSONLINE = 57714 +const MODUMP = 57715 +const DATABASES = 57716 +const TABLES = 57717 +const EXTENDED = 57718 +const FULL = 57719 +const PROCESSLIST = 57720 +const FIELDS = 57721 +const COLUMNS = 57722 +const OPEN = 57723 +const ERRORS = 57724 +const WARNINGS = 57725 +const INDEXES = 57726 +const SCHEMAS = 57727 +const NAMES = 57728 +const GLOBAL = 57729 +const SESSION = 57730 +const ISOLATION = 57731 +const LEVEL = 57732 +const READ = 57733 +const WRITE = 57734 +const ONLY = 57735 +const REPEATABLE = 57736 +const COMMITTED = 57737 +const UNCOMMITTED = 57738 +const SERIALIZABLE = 57739 +const LOCAL = 57740 +const EVENTS = 57741 +const PLUGINS = 57742 +const CURRENT_TIMESTAMP = 57743 +const DATABASE = 57744 +const CURRENT_TIME = 57745 +const LOCALTIME = 57746 +const LOCALTIMESTAMP = 57747 +const UTC_DATE = 57748 +const UTC_TIME = 57749 +const UTC_TIMESTAMP = 57750 +const REPLACE = 57751 +const CONVERT = 57752 +const SEPARATOR = 57753 +const TIMESTAMPDIFF = 57754 +const CURRENT_DATE = 57755 +const CURRENT_USER = 57756 +const CURRENT_ROLE = 57757 +const SECOND_MICROSECOND = 57758 +const MINUTE_MICROSECOND = 57759 +const MINUTE_SECOND = 57760 +const HOUR_MICROSECOND = 57761 +const HOUR_SECOND = 57762 +const HOUR_MINUTE = 57763 +const DAY_MICROSECOND = 57764 +const DAY_SECOND = 57765 +const DAY_MINUTE = 57766 +const DAY_HOUR = 57767 +const YEAR_MONTH = 57768 +const SQL_TSI_HOUR = 57769 +const SQL_TSI_DAY = 57770 +const SQL_TSI_WEEK = 57771 +const SQL_TSI_MONTH = 57772 +const SQL_TSI_QUARTER = 57773 +const SQL_TSI_YEAR = 57774 +const SQL_TSI_SECOND = 57775 +const SQL_TSI_MINUTE = 57776 +const RECURSIVE = 57777 +const CONFIG = 57778 +const DRAINER = 57779 +const MATCH = 57780 +const AGAINST = 57781 +const BOOLEAN = 57782 +const LANGUAGE = 57783 +const WITH = 57784 +const QUERY = 57785 +const EXPANSION = 57786 +const ADDDATE = 57787 +const BIT_AND = 57788 +const BIT_OR = 57789 +const BIT_XOR = 57790 +const CAST = 57791 +const COUNT = 57792 +const APPROX_COUNT_DISTINCT = 57793 +const APPROX_PERCENTILE = 57794 +const CURDATE = 57795 +const CURTIME = 57796 +const DATE_ADD = 57797 +const DATE_SUB = 57798 +const EXTRACT = 57799 +const GROUP_CONCAT = 57800 +const MAX = 57801 +const MID = 57802 +const MIN = 57803 +const NOW = 57804 +const POSITION = 57805 +const SESSION_USER = 57806 +const STD = 57807 +const STDDEV = 57808 +const STDDEV_POP = 57809 +const STDDEV_SAMP = 57810 +const SUBDATE = 57811 +const SUBSTR = 57812 +const SUBSTRING = 57813 +const SUM = 57814 +const SYSDATE = 57815 +const SYSTEM_USER = 57816 +const TRANSLATE = 57817 +const TRIM = 57818 +const VARIANCE = 57819 +const VAR_POP = 57820 +const VAR_SAMP = 57821 +const AVG = 57822 +const JSON_EXTRACT = 57823 +const ARROW = 57824 +const UNNEST = 57825 +const GENERATE_SERIES = 57826 +const ROW = 57827 +const OUTFILE = 57828 +const HEADER = 57829 +const MAX_FILE_SIZE = 57830 +const FORCE_QUOTE = 57831 +const UNUSED = 57832 +const BINDINGS = 57833 +const DO = 57834 +const DECLARE = 57835 var yyToknames = [...]string{ "$end", @@ -856,6 +857,7 @@ var yyToknames = [...]string{ "UNSIGNED", "ZEROFILL", "ENGINES", + "LOW_CARDINALITY", "ADMIN_NAME", "RANDOM", "SUSPEND", @@ -1032,7 +1034,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line mysql_sql.y:8016 +//line mysql_sql.y:8021 //line yacctab:1 var yyExca = [...]int{ @@ -1050,128 +1052,128 @@ var yyExca = [...]int{ 210, 334, 237, 341, 238, 341, - 400, 334, + 401, 334, -2, 362, - -1, 460, - 67, 1073, - -2, 1573, -1, 461, - 67, 1091, - -2, 1544, - -1, 466, + 67, 1074, + -2, 1574, + -1, 462, 67, 1092, - -2, 1572, - -1, 487, - 67, 1006, - -2, 1620, + -2, 1545, + -1, 467, + 67, 1093, + -2, 1573, -1, 488, 67, 1007, - -2, 1619, + -2, 1622, -1, 489, - 67, 1582, - -2, 1604, + 67, 1008, + -2, 1621, -1, 490, - 67, 1583, - -2, 1605, - -1, 491, 67, 1584, - -2, 1611, - -1, 492, + -2, 1606, + -1, 491, 67, 1585, - -2, 1594, - -1, 493, + -2, 1607, + -1, 492, 67, 1586, - -2, 1602, - -1, 494, + -2, 1613, + -1, 493, 67, 1587, - -2, 1612, - -1, 495, + -2, 1596, + -1, 494, 67, 1588, - -2, 1613, - -1, 496, + -2, 1604, + -1, 495, 67, 1589, - -2, 1618, - -1, 497, + -2, 1614, + -1, 496, 67, 1590, - -2, 1623, - -1, 498, + -2, 1615, + -1, 497, 67, 1591, - -2, 1624, - -1, 502, - 67, 1070, - -2, 1425, - -1, 509, - 67, 1079, - -2, 1451, - -1, 513, - 67, 1083, - -2, 1490, + -2, 1620, + -1, 498, + 67, 1592, + -2, 1625, + -1, 499, + 67, 1593, + -2, 1626, + -1, 503, + 67, 1071, + -2, 1426, + -1, 510, + 67, 1080, + -2, 1452, -1, 514, 67, 1084, - -2, 1568, - -1, 522, - 67, 1094, - -2, 1553, - -1, 524, - 67, 1096, - -2, 1563, - -1, 536, - 67, 986, - -2, 1614, + -2, 1491, + -1, 515, + 67, 1085, + -2, 1569, + -1, 523, + 67, 1095, + -2, 1554, + -1, 525, + 67, 1097, + -2, 1564, -1, 537, 67, 987, - -2, 1615, + -2, 1616, -1, 538, 67, 988, - -2, 1616, - -1, 545, + -2, 1617, + -1, 539, + 67, 989, + -2, 1618, + -1, 546, 21, 495, -2, 458, - -1, 587, - 395, 362, + -1, 588, 396, 362, + 397, 362, -2, 335, - -1, 629, - 103, 1425, - 114, 1425, - 133, 1425, - -2, 1231, - -1, 666, + -1, 630, + 103, 1426, + 114, 1426, + 133, 1426, + -2, 1232, + -1, 667, 21, 495, -2, 458, - -1, 764, + -1, 765, 21, 494, - -2, 914, - -1, 1066, - 67, 1139, - -2, 1570, + -2, 915, -1, 1067, 67, 1140, -2, 1571, - -1, 1221, + -1, 1068, + 67, 1141, + -2, 1572, + -1, 1222, 1, 710, 68, 710, - 510, 710, + 511, 710, -2, 717, - -1, 1337, - 133, 1241, - -2, 1239, - -1, 1339, - 133, 628, - -2, 1236, + -1, 1338, + 133, 1242, + -2, 1240, -1, 1340, - 133, 629, + 133, 628, -2, 1237, - -1, 1627, + -1, 1341, + 133, 629, + -2, 1238, + -1, 1628, 1, 711, 68, 711, - 510, 711, + 511, 711, -2, 717, - -1, 1841, + -1, 1842, 65, 406, 134, 406, -2, 820, - -1, 2042, + -1, 2043, 6, 506, 7, 506, 8, 506, @@ -1180,41 +1182,41 @@ var yyExca = [...]int{ 21, 506, 68, 506, -2, 585, - -1, 2084, + -1, 2085, 87, 717, 129, 717, 166, 717, 169, 717, -2, 768, - -1, 2086, - 271, 882, + -1, 2087, + 271, 883, -2, 862, - -1, 2116, + -1, 2117, 65, 406, 134, 406, -2, 821, - -1, 2152, + -1, 2153, 87, 717, 129, 717, 166, 717, 169, 717, -2, 769, - -1, 2180, - 271, 882, + -1, 2181, + 271, 883, -2, 863, - -1, 2581, + -1, 2583, 68, 740, 134, 740, -2, 717, - -1, 2586, + -1, 2588, 68, 740, 134, 740, -2, 717, - -1, 2602, + -1, 2604, 68, 744, 134, 744, -2, 717, - -1, 2607, + -1, 2609, 68, 745, 134, 745, -2, 717, @@ -1222,991 +1224,943 @@ var yyExca = [...]int{ const yyPrivate = 57344 -const yyLast = 26503 +const yyLast = 26621 var yyAct = [...]int{ - 432, 2586, 1130, 2588, 2595, 2585, 2558, 411, 1047, 2218, - 2424, 413, 2546, 2504, 434, 2461, 1677, 2192, 2489, 2393, - 2488, 2397, 2373, 2138, 1611, 2216, 1298, 2217, 458, 790, - 2381, 123, 1673, 1043, 1264, 913, 120, 120, 2148, 2238, - 959, 546, 120, 351, 358, 2078, 358, 2136, 1177, 2201, - 2109, 356, 29, 2181, 1979, 628, 1226, 1844, 1050, 2200, - 1975, 1323, 1709, 2090, 900, 362, 1859, 1679, 1980, 1286, - 119, 119, 1672, 820, 1518, 2055, 342, 1984, 541, 405, - 1316, 1994, 2032, 1634, 1882, 1990, 660, 410, 574, 1973, - 368, 1334, 1939, 889, 1180, 1228, 1187, 1514, 1325, 1337, - 1324, 1897, 1201, 1279, 902, 632, 1317, 1513, 79, 1259, - 541, 1858, 1257, 1659, 1814, 355, 18, 446, 80, 120, - 1819, 635, 39, 1237, 354, 7, 352, 8, 353, 6, - 1545, 3, 1628, 655, 1041, 1217, 412, 1209, 2156, 826, - 981, 414, 1515, 1283, 1633, 1620, 1239, 1617, 656, 344, - 1238, 1249, 630, 662, 1250, 654, 1525, 341, 590, 1094, - 80, 1046, 1529, 1080, 39, 422, 1032, 29, 347, 1599, - 677, 871, 1320, 1675, 1302, 1213, 1040, 620, 1682, 1245, - 1216, 928, 573, 938, 406, 1192, 545, 543, 1817, 951, - 1099, 370, 1100, 357, 371, 15, 9, 4, 2599, 914, - 980, 571, 2572, 110, 113, 115, 583, 2470, 2140, 621, - 2245, 1522, 365, 1710, 1532, 2077, 1205, 1319, 544, 791, - 633, 2209, 114, 114, 35, 104, 86, 2452, 696, 634, - 2442, 18, 114, 80, 35, 104, 86, 39, 114, 360, - 7, 114, 8, 340, 6, 1730, 1519, 653, 940, 114, - 563, 1530, 114, 887, 35, 104, 86, 114, 1120, 1914, - 704, 114, 706, 531, 1738, 530, 532, 533, 116, 534, - 535, 640, 639, 641, 1907, 730, 925, 999, 926, 111, - 111, 992, 1267, 1268, 2477, 1017, 1816, 540, 729, 111, - 707, 2475, 1129, 996, 1805, 111, 600, 989, 111, 941, - 114, 638, 35, 104, 86, 910, 111, 917, 723, 111, - 916, 919, 920, 1241, 998, 919, 920, 1049, 991, 986, - 109, 728, 2492, 2493, 1033, 2236, 1037, 98, 2465, 2466, - 2239, 2240, 2241, 2242, 1966, 1815, 78, 711, 2326, 712, - 1967, 2329, 1968, 2247, 120, 670, 2079, 1051, 643, 1725, - 1036, 64, 671, 700, 669, 680, 1276, 111, 2396, 1280, - 358, 2067, 120, 367, 636, 2098, 1526, 714, 1272, 2214, - 565, 2451, 2105, 1135, 702, 1028, 1995, 604, 668, 2005, - 562, 561, 665, 667, 2306, 1618, 705, 708, 2198, 2003, - 1596, 1176, 1175, 1822, 547, 401, 687, 1116, 402, 1930, - 1113, 556, 726, 727, 1115, 1112, 1114, 1118, 1119, 701, - 1928, 725, 1117, 1735, 85, 2502, 112, 1038, 699, 766, - 637, 2309, 2211, 664, 359, 105, 106, 2479, 107, 108, - 709, 2300, 2577, 605, 102, 2596, 1035, 680, 2000, 2001, - 2454, 2455, 2512, 2474, 2426, 559, 2491, 666, 1830, 1831, - 1832, 1833, 1999, 2002, 2422, 2423, 691, 2426, 2519, 633, - 2395, 2449, 2293, 1531, 554, 2569, 80, 80, 634, 703, - 39, 39, 404, 908, 2262, 2261, 403, 1535, 1537, 1538, - 642, 2481, 2482, 2432, 1828, 927, 710, 721, 722, 2549, - 932, 2284, 85, 103, 112, 888, 62, 560, 2382, 2383, - 2384, 2386, 2385, 947, 946, 631, 912, 911, 905, 689, - 2597, 2358, 102, 97, 96, 2288, 2590, 673, 674, 41, - 555, 890, 682, 681, 2559, 633, 2250, 661, 1546, 716, - 366, 717, 2604, 1034, 764, 2324, 1123, 1124, 1125, 1126, - 1127, 1128, 1121, 1122, 1997, 939, 713, 1731, 696, 897, - 893, 1691, 1520, 685, 767, 768, 769, 770, 688, 719, - 1523, 1884, 1886, 1058, 1061, 1062, 1211, 1935, 1933, 1520, - 1520, 895, 361, 574, 1059, 1890, 99, 100, 1941, 1940, - 564, 2571, 1988, 1688, 868, 944, 2469, 2139, 611, 771, - 1690, 1689, 737, 942, 943, 1271, 675, 568, 569, 570, - 1270, 765, 799, 2550, 682, 681, 1687, 918, 2453, 773, - 72, 1269, 919, 920, 101, 608, 73, 607, 915, 919, - 920, 1229, 715, 541, 541, 541, 695, 2555, 963, 963, - 777, 2480, 1229, 1622, 2508, 610, 2589, 2531, 2394, 613, - 612, 1718, 732, 696, 358, 984, 984, 36, 1996, 891, - 892, 1521, 894, 1533, 1281, 1821, 720, 2006, 2307, 2210, - 1713, 961, 961, 909, 994, 876, 967, 36, 74, 965, - 87, 87, 987, 1931, 2085, 2015, 2610, 75, 718, 34, - 87, 2609, 2215, 906, 1015, 2600, 87, 801, 802, 87, - 922, 923, 1275, 731, 1536, 2603, 963, 87, 963, 670, - 87, 1000, 1739, 1989, 1273, 87, 1825, 1826, 1048, 87, - 2286, 1029, 990, 1885, 2285, 36, 997, 1998, 2289, 2290, - 1824, 2578, 646, 651, 652, 2547, 2548, 1621, 1711, 690, - 2359, 2361, 2362, 2363, 2360, 631, 1024, 2573, 1573, 1669, - 545, 1572, 732, 929, 1843, 929, 873, 732, 87, 969, - 2029, 2601, 875, 341, 1842, 1068, 1069, 1070, 1071, 1072, - 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1668, 1010, 1011, - 1089, 1090, 1605, 1730, 899, 2562, 933, 1098, 80, 601, - 1060, 601, 80, 1669, 1985, 1988, 1145, 1528, 1305, 1030, - 1052, 921, 1700, 80, 924, 1045, 1151, 39, 76, 77, - 1023, 1519, 80, 2574, 693, 1153, 39, 732, 1157, 1158, - 945, 1020, 1610, 1019, 1031, 957, 958, 936, 937, 1593, - 541, 2256, 1577, 1836, 1700, 749, 2119, 1063, 1026, 983, - 983, 2561, 954, 955, 956, 2506, 968, 979, 1001, 340, - 1510, 1528, 2499, 2494, 1006, 898, 985, 2483, 2471, 972, - 973, 974, 975, 976, 977, 978, 1014, 1042, 603, 694, - 603, 602, 2447, 602, 1013, 2446, 2445, 1002, 1198, 2444, - 545, 1669, 548, 1843, 694, 2434, 1092, 948, 1183, 1184, - 1022, 1021, 1018, 2016, 1144, 1609, 1039, 648, 649, 650, - 1214, 1044, 963, 1899, 1845, 1221, 1191, 1528, 1088, 574, - 2317, 2507, 1227, 1733, 1199, 963, 1989, 1303, 2311, 2311, - 1220, 1982, 1292, 1700, 2472, 1983, 1986, 1053, 1054, 1055, - 1056, 1057, 1732, 1182, 2316, 1082, 1246, 1246, 2311, 1251, - 2020, 2311, 2311, 696, 1251, 2311, 1724, 1214, 963, 120, - 1202, 2435, 1189, 1190, 1837, 1652, 1569, 2310, 1244, 541, - 1556, 963, 1509, 734, 735, 736, 733, 1310, 1003, 1096, - 1097, 2233, 867, 776, 1132, 2231, 2318, 1987, 2053, 1139, - 2051, 1133, 683, 1214, 963, 2049, 1297, 120, 120, 663, - 1877, 1212, 2104, 1219, 1307, 1801, 1925, 869, 120, 1222, - 1638, 903, 1145, 1145, 1327, 655, 1155, 1608, 1555, 1145, - 1145, 2584, 1233, 1812, 1300, 1799, 1256, 1797, 2544, 1795, - 656, 1299, 1299, 2311, 1313, 609, 1235, 1236, 1242, 1243, - 1339, 1248, 1299, 734, 735, 736, 733, 2234, 1227, 1172, - 1784, 2232, 963, 930, 732, 1340, 2052, 1744, 1277, 1728, - 1230, 2050, 1722, 952, 1720, 1206, 1669, 1715, 1282, 1637, - 1194, 1802, 1197, 1218, 953, 1203, 929, 1200, 1234, 1207, - 1927, 1331, 1210, 1517, 1606, 1296, 1231, 1554, 566, 1240, - 2535, 1800, 1131, 1796, 1134, 1796, 950, 1328, 2532, 1146, - 1223, 1224, 1095, 1580, 1511, 1252, 1540, 1232, 1579, 1152, - 1322, 1154, 1527, 1007, 1543, 1544, 732, 1322, 1818, 1218, - 633, 1290, 1291, 732, 2436, 1638, 1247, 633, 1716, 634, - 1721, 1926, 1253, 1716, 1516, 1638, 634, 1255, 1254, 734, - 735, 736, 733, 1750, 614, 80, 1278, 736, 733, 39, - 1605, 931, 733, 2332, 1301, 1042, 1203, 1137, 1136, 1293, - 2030, 1934, 1203, 1203, 1287, 1288, 1289, 1719, 1294, 732, - 1295, 1087, 1693, 672, 732, 1215, 949, 1138, 1528, 1008, - 1311, 2296, 1095, 1960, 1551, 1584, 1085, 1086, 1084, 2295, - 2094, 1329, 1332, 606, 1333, 2089, 1507, 1338, 1156, 1508, - 1903, 1159, 1160, 1161, 1162, 1164, 1165, 1166, 1167, 1168, - 1169, 1170, 633, 734, 735, 736, 733, 1512, 2321, 2322, - 2568, 764, 2176, 750, 751, 752, 753, 754, 755, 756, - 749, 2279, 120, 120, 2369, 1534, 752, 753, 754, 755, - 756, 749, 1542, 120, 1635, 2319, 2320, 1163, 2367, 2583, - 1539, 1953, 1149, 1251, 2365, 120, 1630, 2565, 1991, 1565, - 2355, 351, 1150, 2567, 2212, 2102, 1614, 1616, 1541, 1251, - 1082, 2176, 2368, 1550, 2529, 655, 2513, 1631, 734, 735, - 736, 733, 2410, 2587, 120, 2486, 2366, 1752, 2375, 1643, - 656, 2353, 2364, 2158, 2598, 2591, 1952, 1548, 2354, 2352, - 1552, 2184, 2213, 2103, 2351, 1630, 2602, 734, 735, 736, - 733, 2348, 1564, 963, 1678, 2342, 1678, 2339, 734, 735, - 736, 733, 2437, 2338, 984, 2194, 120, 2101, 2004, 1704, - 1964, 1706, 1612, 1613, 734, 735, 736, 733, 2187, 2579, - 1562, 1963, 2158, 1563, 2182, 1567, 1698, 1921, 1901, 2196, - 2197, 1644, 1645, 1775, 1604, 2183, 1603, 1684, 1602, 1598, - 2556, 1578, 1646, 1597, 1581, 1582, 1583, 1004, 2509, 1586, - 1587, 1588, 1589, 1590, 1591, 1592, 1601, 2501, 1594, 401, - 1629, 2485, 402, 1648, 2400, 1650, 734, 735, 736, 733, - 2188, 2374, 1680, 1703, 2149, 1623, 657, 658, 659, 2251, - 2467, 1681, 2430, 2429, 1642, 2417, 734, 735, 736, 733, - 1649, 1651, 1759, 1559, 1647, 1240, 2356, 2349, 1701, 2345, - 1655, 1654, 2344, 1653, 2343, 2308, 2162, 1708, 734, 735, - 736, 733, 2281, 2246, 1639, 2243, 2147, 2166, 866, 863, - 864, 865, 799, 2145, 1764, 2132, 1763, 1762, 1760, 2131, - 2112, 1694, 1695, 1696, 2100, 2099, 2096, 2155, 2305, 2069, - 1993, 2157, 2159, 2161, 1702, 2163, 2164, 2165, 2167, 2168, - 2169, 2171, 2172, 2173, 2174, 2162, 2195, 1962, 1981, 1932, - 734, 735, 736, 733, 1902, 1893, 2166, 1792, 734, 735, - 736, 733, 1203, 1203, 1203, 740, 741, 742, 743, 744, - 745, 746, 738, 2190, 2177, 1742, 2155, 1761, 983, 2143, - 2157, 2159, 2161, 2142, 2163, 2164, 2165, 2167, 2168, 2169, - 2171, 2172, 2173, 2174, 1607, 2189, 2191, 486, 485, 2575, - 1726, 734, 735, 736, 733, 734, 735, 736, 733, 2175, - 963, 1600, 963, 1312, 963, 1171, 1005, 800, 795, 670, - 794, 2008, 2407, 2177, 1553, 2406, 2154, 2072, 1740, 748, - 747, 757, 758, 750, 751, 752, 753, 754, 755, 756, - 749, 2405, 2404, 1956, 2113, 1736, 963, 1768, 1575, 734, - 735, 736, 733, 2084, 2170, 2075, 2074, 2062, 2175, 2198, - 1776, 2160, 2054, 2042, 963, 734, 735, 736, 733, 2021, - 1961, 2185, 1958, 1778, 1951, 2154, 1955, 1943, 1938, 961, - 734, 735, 736, 733, 1878, 1798, 1767, 1794, 1793, 114, - 1585, 1954, 104, 86, 1765, 1766, 1576, 961, 734, 735, - 736, 733, 1574, 2170, 1777, 549, 550, 551, 552, 760, - 2160, 763, 963, 734, 735, 736, 733, 1754, 548, 1571, - 1570, 1737, 1568, 1841, 1561, 1748, 761, 762, 759, 1847, - 748, 747, 757, 758, 750, 751, 752, 753, 754, 755, - 756, 749, 1727, 1855, 1734, 1729, 111, 670, 120, 120, - 120, 120, 1558, 1557, 1148, 1147, 1860, 1839, 114, 670, - 120, 1875, 970, 1745, 1791, 1803, 2299, 971, 1860, 1811, - 1790, 1042, 2543, 1747, 120, 1835, 670, 1789, 29, 1889, - 1641, 1788, 963, 2537, 1758, 1888, 734, 735, 736, 733, - 120, 120, 734, 735, 736, 733, 1678, 1876, 2520, 734, - 735, 736, 733, 734, 735, 736, 733, 1145, 2517, 1145, - 2515, 792, 1913, 2409, 2391, 111, 2379, 2376, 2371, 2333, - 1179, 963, 1848, 2303, 1895, 1896, 1751, 2302, 2301, 1850, - 2298, 1919, 1851, 2292, 1769, 1770, 2277, 1849, 1808, 901, - 1773, 1774, 18, 1852, 80, 1853, 1920, 1827, 39, 2127, - 1834, 7, 1779, 8, 2125, 6, 1629, 1908, 1846, 1856, - 1861, 1862, 1863, 1864, 1915, 1854, 1857, 1840, 2107, 1874, - 1873, 1872, 2095, 1218, 1202, 1188, 1181, 545, 1838, 1912, - 1203, 1813, 1879, 1806, 1807, 1210, 1714, 1894, 1910, 1891, - 1692, 634, 1686, 1685, 1916, 1636, 1083, 111, 1944, 1193, - 1900, 1946, 1929, 1948, 670, 1909, 1917, 1906, 2566, 1911, - 1904, 1196, 1924, 1978, 1918, 1186, 1185, 1027, 1923, 1787, - 120, 2541, 993, 80, 1936, 870, 818, 817, 816, 670, - 80, 815, 814, 120, 1635, 813, 2019, 812, 1978, 1942, - 811, 734, 735, 736, 733, 1945, 810, 809, 1949, 1950, - 1947, 808, 807, 806, 2009, 748, 747, 757, 758, 750, - 751, 752, 753, 754, 755, 756, 749, 805, 748, 747, - 757, 758, 750, 751, 752, 753, 754, 755, 756, 749, - 1746, 804, 803, 798, 797, 796, 793, 789, 788, 1203, - 1768, 786, 785, 784, 1203, 783, 2039, 1786, 782, 781, - 2017, 780, 748, 747, 757, 758, 750, 751, 752, 753, - 754, 755, 756, 749, 779, 778, 2014, 2018, 2013, 734, - 735, 736, 733, 1785, 120, 775, 120, 1937, 774, 2027, - 2041, 698, 2026, 2033, 2034, 2022, 2037, 1625, 2023, 2024, - 686, 2525, 2523, 2490, 2028, 734, 735, 736, 733, 2025, - 1957, 1783, 2046, 2047, 2048, 2060, 2043, 1782, 2068, 2040, - 2070, 2036, 1829, 120, 2038, 1699, 2059, 1315, 1781, 697, - 1866, 2582, 2088, 734, 735, 736, 733, 1865, 2063, 734, - 735, 736, 733, 1869, 1723, 2064, 1780, 1717, 1870, 2066, - 734, 735, 736, 733, 1810, 1867, 1630, 2083, 1173, 1772, - 1868, 963, 963, 2065, 1969, 1970, 120, 2116, 734, 735, - 736, 733, 1712, 2082, 2010, 2011, 2012, 1972, 63, 38, - 670, 734, 735, 736, 733, 2130, 37, 2129, 1871, 1860, - 1665, 1666, 1771, 1743, 961, 2110, 1678, 1741, 2087, 2093, - 1749, 2108, 2086, 1612, 1613, 117, 1619, 1091, 872, 692, - 2134, 2091, 1145, 2091, 734, 735, 736, 733, 337, 338, - 2121, 2128, 734, 735, 736, 733, 339, 2118, 2092, 734, - 735, 736, 733, 2115, 2248, 1971, 670, 2114, 2153, 80, - 2202, 2204, 336, 2202, 2202, 1978, 2122, 1671, 1225, 2458, - 2123, 1137, 1136, 884, 885, 935, 1656, 934, 670, 882, - 883, 2539, 724, 2117, 880, 881, 878, 879, 2141, 2045, - 1506, 2120, 904, 2135, 874, 2538, 1227, 2414, 2227, 1661, - 1664, 1665, 1666, 1662, 2412, 1663, 1667, 2336, 2071, 2144, - 2203, 2199, 2334, 2331, 548, 2073, 2178, 1922, 2150, 2330, - 2328, 2230, 2205, 2206, 2229, 2146, 2252, 2224, 748, 747, - 757, 758, 750, 751, 752, 753, 754, 755, 756, 749, - 2081, 2080, 2221, 2057, 2118, 877, 2056, 1661, 1664, 1665, - 1666, 1662, 2225, 1663, 1667, 1898, 1229, 1560, 2207, 963, - 2527, 2526, 2280, 684, 2526, 1959, 2527, 2294, 2061, 120, - 549, 550, 551, 552, 1670, 907, 45, 1, 2204, 1314, - 2222, 2223, 2255, 548, 1880, 1203, 1881, 2044, 2124, 1883, - 1524, 2126, 2110, 757, 758, 750, 751, 752, 753, 754, - 755, 756, 749, 2297, 2278, 2199, 2097, 2007, 1992, 2282, - 896, 2133, 748, 747, 757, 758, 750, 751, 752, 753, - 754, 755, 756, 749, 567, 2337, 1140, 2304, 886, 1547, - 1012, 645, 679, 1009, 2315, 678, 676, 2312, 1093, 2314, - 448, 1318, 2372, 2226, 2457, 2503, 2370, 2327, 2408, 2460, - 2208, 748, 747, 757, 758, 750, 751, 752, 753, 754, - 755, 756, 749, 1025, 433, 2323, 1965, 1678, 2350, 670, - 2335, 2235, 670, 670, 670, 2325, 2237, 1804, 2137, 1905, - 579, 480, 670, 456, 787, 995, 988, 647, 455, 2402, - 2106, 1823, 553, 2377, 2380, 644, 580, 2388, 2389, 2390, - 1595, 2387, 2076, 1174, 2419, 1195, 1178, 2399, 2594, 2398, - 2581, 963, 963, 2253, 2254, 2557, 2257, 2258, 2259, 2260, - 2536, 2401, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, - 2271, 2272, 2273, 2274, 2275, 2276, 80, 2413, 2425, 2415, - 2416, 2411, 120, 2420, 961, 961, 2576, 2473, 2518, 2511, - 670, 2427, 2428, 2421, 2249, 372, 1274, 539, 618, 2392, - 373, 1640, 670, 2450, 2378, 557, 1624, 558, 2433, 1627, - 1626, 1064, 739, 1081, 2313, 2443, 1299, 2439, 772, 409, - 2464, 1549, 421, 415, 1820, 2193, 1892, 2448, 44, 43, - 42, 1306, 1335, 450, 2463, 2456, 748, 747, 757, 758, - 750, 751, 752, 753, 754, 755, 756, 749, 122, 1336, - 2418, 2244, 2462, 431, 2340, 2341, 2476, 2478, 430, 429, - 2346, 2347, 428, 2468, 427, 1660, 1658, 1657, 2484, 1261, - 1260, 1304, 2487, 2440, 2441, 2291, 2495, 2496, 2497, 2498, - 2505, 2357, 2287, 2510, 2283, 2431, 2152, 2151, 2179, 2180, - 2186, 825, 821, 2514, 823, 2516, 747, 757, 758, 750, - 751, 752, 753, 754, 755, 756, 749, 824, 822, 1757, - 1753, 1976, 1977, 1974, 2035, 2031, 2521, 2522, 2464, 2534, - 2524, 1326, 1208, 1809, 1262, 1258, 670, 2528, 670, 2530, - 2220, 542, 2463, 2533, 2540, 1048, 2542, 1048, 2545, 5, - 28, 27, 26, 14, 13, 1016, 12, 17, 25, 24, - 2551, 23, 22, 2505, 670, 2552, 71, 70, 69, 2560, - 68, 21, 2564, 1048, 11, 67, 2570, 66, 65, 20, - 19, 2438, 60, 61, 55, 54, 53, 578, 52, 51, - 50, 49, 59, 58, 57, 56, 48, 47, 46, 84, - 83, 2580, 82, 81, 30, 31, 32, 33, 94, 93, - 2593, 95, 2592, 91, 89, 92, 90, 88, 40, 10, - 16, 2605, 2, 0, 2607, 0, 2606, 2608, 0, 0, - 0, 2593, 0, 0, 0, 0, 0, 1451, 1493, 0, - 0, 1440, 288, 1398, 1453, 1371, 1387, 1461, 1388, 1389, - 1426, 1350, 1408, 250, 1385, 0, 0, 0, 0, 0, - 2500, 1443, 1342, 1374, 1375, 1344, 1381, 1345, 1372, 1400, - 195, 1370, 1411, 220, 1423, 1384, 1405, 1459, 0, 0, - 280, 234, 0, 0, 1403, 1445, 1406, 1431, 1397, 1427, - 1358, 1419, 1454, 1386, 0, 1424, 1455, 0, 0, 0, - 0, 657, 658, 659, 0, 0, 0, 0, 176, 0, - 0, 0, 0, 0, 1422, 1449, 1383, 0, 179, 1452, - 1404, 1425, 0, 0, 1343, 1420, 0, 1348, 1351, 1460, - 1447, 1378, 1379, 0, 0, 0, 0, 2554, 0, 0, - 0, 1401, 1407, 1428, 1394, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1376, 0, 1416, 0, 0, 0, - 1353, 1349, 0, 1399, 0, 0, 168, 285, 301, 177, - 276, 314, 182, 283, 173, 249, 272, 0, 1492, 170, - 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, - 189, 247, 0, 298, 326, 188, 317, 1352, 309, 172, - 1487, 308, 246, 295, 300, 232, 226, 171, 297, 230, - 225, 218, 197, 0, 210, 258, 224, 259, 211, 236, - 235, 237, 1471, 1472, 1473, 1474, 1475, 1483, 1484, 0, - 1488, 1489, 1490, 1357, 0, 1377, 1429, 0, 1341, 1438, - 1446, 1396, 311, 1448, 1393, 1392, 1478, 0, 1477, 284, - 1479, 1480, 219, 1444, 1373, 1382, 327, 1380, 270, 252, - 1450, 1415, 1491, 268, 222, 296, 260, 302, 286, 310, - 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, - 196, 198, 199, 242, 243, 255, 275, 289, 290, 291, - 190, 183, 269, 184, 208, 185, 164, 277, 186, 166, - 256, 294, 1476, 204, 265, 229, 167, 228, 257, 293, - 292, 318, 324, 325, 329, 0, 330, 0, 0, 0, - 0, 0, 0, 0, 332, 0, 0, 0, 1485, 0, - 1486, 323, 202, 161, 306, 0, 248, 0, 1441, 1346, - 1356, 1354, 1390, 1417, 1418, 244, 322, 1433, 1437, 1434, - 1462, 273, 0, 0, 0, 0, 0, 213, 254, 1435, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1347, 0, 281, 304, 316, 333, 1494, 1495, 1496, - 165, 335, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 307, - 1391, 1364, 1402, 315, 1367, 1365, 1432, 1366, 1421, 331, - 238, 239, 240, 241, 205, 0, 181, 334, 263, 1412, - 1395, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1413, 0, - 1505, 1369, 328, 201, 207, 0, 209, 180, 253, 203, - 313, 216, 1439, 245, 212, 278, 217, 223, 266, 312, - 251, 271, 178, 303, 279, 227, 0, 0, 1363, 1368, - 1362, 1409, 1410, 1456, 1457, 1458, 1430, 1355, 1442, 0, - 1359, 1361, 1360, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1436, 0, 0, 1414, 162, 0, 221, 1463, - 262, 200, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 288, 462, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, - 0, 0, 1481, 1482, 319, 320, 321, 305, 423, 192, - 1504, 0, 195, 0, 0, 220, 0, 0, 0, 454, - 0, 0, 280, 234, 0, 0, 0, 0, 510, 518, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 416, 0, 0, 447, 486, 485, 435, 444, 0, 0, - 176, 436, 0, 443, 437, 441, 440, 438, 439, 0, - 502, 0, 0, 0, 0, 0, 0, 407, 420, 0, - 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 417, 418, 0, 0, 0, 0, 463, 0, - 419, 0, 0, 465, 0, 445, 0, 0, 168, 285, - 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, - 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, - 193, 206, 189, 247, 442, 461, 466, 188, 524, 459, - 309, 172, 0, 308, 246, 295, 300, 232, 226, 171, - 297, 230, 225, 218, 197, 525, 210, 258, 224, 259, - 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 457, 0, 0, 311, 0, 0, 508, 0, 0, - 0, 284, 0, 0, 219, 0, 0, 0, 460, 0, - 270, 252, 521, 408, 0, 268, 222, 296, 260, 302, - 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, - 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, - 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, - 186, 166, 256, 294, 0, 204, 265, 229, 167, 228, - 257, 293, 292, 318, 324, 325, 329, 0, 330, 0, - 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, - 1142, 1141, 1143, 323, 202, 161, 306, 506, 248, 0, - 520, 501, 503, 504, 507, 511, 512, 513, 514, 515, - 517, 519, 523, 273, 0, 0, 0, 0, 0, 213, - 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 281, 304, 316, 333, 0, - 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, - 0, 522, 0, 0, 0, 315, 0, 0, 0, 0, - 0, 464, 238, 239, 240, 241, 509, 0, 181, 334, - 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 328, 201, 207, 0, 209, 180, - 253, 203, 313, 216, 0, 245, 212, 278, 217, 223, - 266, 312, 251, 271, 178, 303, 279, 227, 0, 0, - 531, 505, 530, 532, 533, 529, 534, 535, 516, 426, - 0, 469, 527, 526, 528, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, - 221, 0, 262, 200, 492, 473, 474, 475, 425, 476, - 471, 472, 493, 467, 489, 490, 449, 452, 477, 139, - 478, 491, 494, 495, 536, 537, 538, 481, 496, 488, - 487, 479, 468, 497, 498, 453, 451, 482, 483, 470, - 484, 0, 499, 500, 288, 462, 319, 320, 321, 305, - 0, 192, 0, 0, 0, 250, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, - 0, 0, 195, 1204, 0, 220, 0, 0, 0, 454, - 0, 0, 280, 234, 0, 0, 0, 0, 510, 518, - 0, 0, 0, 0, 0, 0, 0, 1284, 0, 0, - 416, 0, 0, 447, 486, 485, 435, 444, 0, 0, - 176, 436, 0, 443, 437, 441, 440, 438, 439, 0, - 502, 0, 0, 0, 0, 0, 0, 407, 420, 0, - 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 417, 418, 0, 0, 0, 0, 463, 0, - 419, 0, 0, 1285, 0, 445, 0, 0, 168, 285, - 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, - 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, - 193, 206, 189, 247, 442, 461, 466, 188, 524, 459, - 309, 172, 0, 308, 246, 295, 300, 232, 226, 171, - 297, 230, 225, 218, 197, 525, 210, 258, 224, 259, - 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 457, 0, 0, 311, 0, 0, 508, 0, 0, - 0, 284, 0, 0, 219, 0, 0, 0, 460, 0, - 270, 252, 521, 408, 0, 268, 222, 296, 260, 302, - 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, - 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, - 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, - 186, 166, 256, 294, 0, 204, 265, 229, 167, 228, - 257, 293, 292, 318, 324, 325, 329, 0, 330, 0, - 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, - 0, 0, 0, 323, 202, 161, 306, 506, 248, 0, - 520, 501, 503, 504, 507, 511, 512, 513, 514, 515, - 517, 519, 523, 273, 0, 0, 0, 0, 0, 213, - 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 281, 304, 316, 333, 0, - 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, - 0, 522, 0, 0, 0, 315, 0, 0, 0, 0, - 0, 464, 238, 239, 240, 241, 509, 0, 181, 334, - 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 328, 201, 207, 0, 209, 180, - 253, 203, 313, 216, 0, 245, 212, 278, 217, 223, - 266, 312, 251, 271, 178, 303, 279, 227, 0, 0, - 531, 505, 530, 532, 533, 529, 534, 535, 516, 426, - 0, 469, 527, 526, 528, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, - 221, 0, 262, 200, 492, 473, 474, 475, 425, 476, - 471, 472, 493, 467, 489, 490, 449, 452, 477, 139, - 478, 491, 494, 495, 536, 537, 538, 481, 496, 488, - 487, 479, 468, 497, 498, 453, 451, 482, 483, 470, - 484, 0, 499, 500, 0, 0, 319, 320, 321, 305, - 0, 192, 114, 288, 462, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, - 0, 195, 0, 0, 220, 0, 0, 0, 454, 0, - 0, 280, 234, 0, 0, 0, 0, 510, 518, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, - 0, 0, 447, 486, 485, 435, 444, 0, 0, 176, - 436, 0, 443, 437, 441, 440, 438, 439, 0, 502, - 0, 0, 0, 0, 0, 0, 407, 420, 0, 424, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 418, 0, 0, 0, 0, 463, 0, 419, - 0, 0, 465, 0, 445, 0, 0, 168, 285, 301, - 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, - 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, - 206, 189, 247, 442, 461, 466, 188, 524, 459, 309, - 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, - 230, 225, 218, 197, 525, 210, 258, 224, 259, 211, - 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 457, 0, 0, 311, 0, 0, 508, 0, 0, 0, - 284, 0, 0, 219, 0, 0, 0, 460, 0, 270, - 252, 521, 408, 0, 268, 222, 296, 260, 302, 286, - 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, - 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, - 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, - 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, - 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, - 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, - 0, 0, 323, 202, 161, 306, 506, 248, 0, 520, - 501, 503, 504, 507, 511, 512, 513, 514, 515, 517, - 519, 523, 273, 0, 0, 0, 0, 0, 213, 254, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 281, 304, 316, 333, 0, 0, - 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, - 522, 0, 0, 0, 315, 0, 0, 0, 0, 0, - 464, 238, 239, 240, 241, 509, 0, 181, 334, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 201, 207, 0, 209, 180, 253, - 203, 313, 216, 0, 245, 212, 278, 217, 223, 266, - 312, 251, 271, 178, 303, 279, 227, 0, 0, 531, - 505, 530, 532, 533, 529, 534, 535, 516, 426, 0, - 469, 527, 526, 528, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 162, 0, 221, - 87, 262, 200, 492, 473, 474, 475, 425, 476, 471, - 472, 493, 467, 489, 490, 449, 452, 477, 139, 478, - 491, 494, 495, 536, 537, 538, 481, 496, 488, 487, - 479, 468, 497, 498, 453, 451, 482, 483, 470, 484, - 0, 499, 500, 288, 462, 319, 320, 321, 305, 0, - 192, 0, 0, 0, 250, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, - 0, 195, 2553, 0, 220, 0, 0, 0, 454, 0, - 0, 280, 234, 0, 0, 0, 0, 510, 518, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, - 0, 0, 447, 486, 485, 435, 444, 0, 0, 176, - 436, 0, 443, 437, 441, 440, 438, 439, 0, 502, - 0, 0, 0, 0, 0, 0, 407, 420, 0, 424, + 433, 2588, 1131, 2590, 2597, 2587, 2560, 412, 1048, 2220, + 2426, 414, 2548, 2506, 435, 2463, 1678, 2193, 2491, 2395, + 2490, 2399, 2375, 2139, 1612, 2218, 1299, 2079, 914, 2149, + 791, 2219, 2383, 1044, 1265, 459, 120, 120, 2203, 1674, + 960, 2110, 120, 352, 359, 2240, 359, 1980, 357, 29, + 123, 547, 1178, 2137, 2182, 1227, 1845, 1051, 890, 1229, + 629, 2202, 1976, 1710, 1673, 363, 1860, 901, 1324, 1287, + 119, 119, 1985, 2091, 821, 1981, 343, 2056, 542, 406, + 1317, 1519, 1680, 1883, 2033, 1991, 369, 1995, 575, 903, + 1974, 1635, 1940, 1181, 1818, 411, 1188, 1515, 661, 1335, + 1338, 1325, 1318, 1280, 1898, 1326, 1202, 1514, 79, 633, + 542, 1260, 1660, 1859, 1820, 636, 39, 447, 80, 120, + 3, 1815, 356, 18, 1218, 1238, 1210, 1258, 353, 8, + 354, 6, 1629, 656, 413, 355, 7, 1546, 2157, 827, + 1634, 1516, 1042, 982, 415, 1621, 1240, 1284, 1618, 1251, + 1239, 345, 1047, 663, 655, 1526, 1600, 342, 39, 1095, + 80, 1530, 631, 591, 29, 423, 1081, 657, 1250, 1033, + 348, 678, 872, 1676, 1303, 1321, 1214, 1041, 621, 1683, + 574, 1217, 544, 1246, 407, 929, 1193, 939, 1130, 371, + 546, 952, 1101, 15, 9, 4, 372, 358, 622, 1100, + 110, 915, 113, 981, 2574, 2472, 572, 2141, 2601, 584, + 1533, 1523, 115, 2247, 1711, 2078, 1206, 1320, 545, 366, + 634, 792, 114, 1121, 35, 104, 86, 697, 2211, 635, + 114, 39, 114, 80, 114, 114, 654, 114, 18, 114, + 341, 1731, 1520, 361, 8, 114, 6, 35, 104, 86, + 1000, 7, 114, 1739, 35, 104, 86, 993, 2444, 941, + 1531, 926, 116, 927, 731, 1817, 997, 2454, 1915, 888, + 1908, 1268, 1269, 990, 730, 1242, 541, 920, 921, 111, + 918, 842, 1806, 917, 920, 921, 601, 999, 987, 111, + 2479, 111, 111, 2477, 992, 911, 111, 532, 1050, 531, + 533, 534, 111, 535, 536, 641, 640, 642, 1018, 111, + 942, 729, 2467, 2468, 1816, 2494, 2495, 2241, 2242, 2243, + 2244, 2238, 2080, 1967, 2328, 1968, 2331, 1969, 564, 2249, + 724, 1052, 1726, 672, 2398, 639, 1281, 2068, 1273, 368, + 2099, 1277, 1527, 2106, 2216, 120, 671, 1619, 2006, 681, + 1597, 548, 1029, 1177, 1176, 670, 727, 728, 1034, 1823, + 1038, 359, 1117, 120, 1996, 1114, 2200, 1929, 2308, 1116, + 1113, 1115, 1119, 1120, 2481, 726, 1931, 1118, 700, 669, + 402, 830, 644, 403, 1037, 820, 2311, 1736, 2213, 2504, + 2000, 360, 2302, 666, 668, 2579, 2598, 688, 637, 850, + 854, 856, 858, 860, 861, 863, 2514, 867, 864, 865, + 866, 2453, 2476, 845, 846, 847, 848, 828, 829, 851, + 767, 831, 2428, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 843, 849, 681, 665, 85, 2521, 112, + 2493, 2451, 853, 855, 857, 859, 862, 712, 566, 713, + 2295, 1039, 667, 692, 2571, 638, 605, 102, 563, 562, + 634, 2397, 632, 909, 2264, 39, 39, 80, 80, 635, + 1036, 928, 2592, 1532, 2004, 405, 844, 715, 2263, 557, + 2456, 2457, 1998, 404, 2286, 1536, 1538, 1539, 2483, 2484, + 2434, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, + 1111, 1112, 1124, 1125, 1126, 1127, 1128, 1129, 1122, 1123, + 722, 723, 889, 606, 705, 643, 707, 683, 682, 2290, + 674, 675, 1829, 560, 2001, 2002, 634, 948, 947, 690, + 1059, 1062, 1063, 2424, 2425, 765, 2428, 913, 912, 2003, + 710, 1060, 555, 933, 708, 906, 2384, 2385, 2386, 2388, + 2387, 2599, 1521, 768, 769, 770, 771, 2561, 686, 2252, + 662, 689, 2606, 1547, 1885, 1887, 1521, 1521, 1035, 1831, + 1832, 1833, 1834, 2326, 575, 561, 891, 367, 2482, 940, + 1732, 1692, 1524, 697, 2573, 2471, 1212, 2140, 894, 1936, + 772, 2551, 2591, 738, 1989, 869, 1934, 711, 896, 556, + 362, 800, 766, 683, 682, 1942, 1941, 701, 919, 898, + 774, 1891, 916, 1136, 1689, 892, 893, 676, 895, 920, + 921, 1822, 920, 921, 542, 542, 542, 2007, 703, 964, + 964, 778, 1282, 2360, 569, 570, 571, 1997, 36, 2396, + 706, 709, 988, 2309, 945, 359, 985, 985, 1271, 2455, + 1534, 1932, 1522, 1272, 910, 1999, 1688, 714, 2217, 565, + 968, 696, 962, 962, 702, 995, 877, 2212, 36, 907, + 966, 87, 1270, 1826, 1827, 1274, 923, 924, 1276, 87, + 732, 87, 608, 87, 87, 1016, 87, 1825, 87, 1030, + 802, 803, 1740, 632, 87, 1001, 609, 964, 1669, 964, + 671, 87, 1537, 2288, 1760, 2552, 691, 2287, 852, 1049, + 991, 2612, 1986, 1989, 998, 1990, 1886, 2016, 717, 1712, + 718, 2533, 2291, 2292, 704, 2605, 1691, 1690, 943, 944, + 867, 864, 865, 866, 1025, 1623, 1765, 612, 1764, 1763, + 1761, 2611, 1719, 733, 930, 546, 930, 1061, 720, 874, + 970, 876, 697, 1714, 342, 2086, 1069, 1070, 1071, 1072, + 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1606, 1731, + 1843, 1090, 1091, 735, 736, 737, 734, 733, 1099, 80, + 900, 934, 1574, 80, 611, 1573, 1844, 1146, 614, 613, + 1053, 1230, 39, 1670, 80, 922, 1046, 1152, 925, 1762, + 549, 39, 1670, 80, 1701, 1520, 1154, 733, 1024, 1158, + 1159, 716, 2602, 946, 1021, 1701, 1020, 1961, 958, 959, + 2580, 542, 955, 956, 957, 937, 938, 2549, 2550, 1622, + 984, 984, 1027, 2575, 1990, 969, 1064, 341, 2564, 1983, + 1002, 2563, 980, 1984, 1987, 721, 2508, 1007, 2501, 1043, + 986, 733, 2361, 2363, 2364, 2365, 2362, 973, 974, 975, + 976, 977, 978, 979, 1031, 2496, 602, 2485, 719, 1199, + 1003, 647, 652, 653, 1230, 546, 1011, 1012, 2603, 1023, + 1022, 1019, 1611, 1184, 1185, 1040, 1529, 2473, 2449, 1844, + 1594, 1215, 1145, 964, 1045, 1988, 1222, 1089, 1200, 2576, + 575, 1192, 2448, 1228, 1529, 1578, 964, 1529, 2258, 1670, + 1511, 1221, 2509, 1293, 2313, 870, 1766, 1767, 1054, 1055, + 1056, 1057, 1058, 1183, 2447, 1121, 1083, 1247, 1247, 1306, + 1252, 2313, 2446, 1701, 695, 1252, 694, 899, 1215, 964, + 120, 1203, 1032, 1190, 1191, 604, 1093, 1213, 603, 1245, + 542, 2436, 964, 2474, 2313, 1223, 1610, 949, 2557, 2510, + 1097, 1098, 602, 2120, 1015, 1133, 2319, 1234, 2313, 1132, + 1140, 1135, 1014, 2105, 1215, 964, 1147, 1298, 120, 120, + 1220, 1134, 1556, 1243, 1244, 1308, 1153, 1249, 1155, 120, + 2313, 750, 2030, 1146, 1146, 1328, 656, 1156, 2313, 2318, + 1146, 1146, 1236, 1237, 1837, 1301, 695, 735, 736, 737, + 734, 2312, 1300, 1300, 2017, 1314, 2235, 2437, 1900, 1173, + 2233, 1340, 1257, 1300, 735, 736, 737, 734, 2054, 1228, + 657, 2052, 2320, 964, 2050, 1278, 649, 650, 651, 1231, + 1846, 604, 1734, 1878, 603, 1219, 1802, 1207, 1304, 1283, + 1800, 1555, 1195, 1201, 1198, 1341, 1204, 930, 1232, 1235, + 1208, 697, 1297, 1211, 1117, 1639, 1798, 1114, 1609, 1332, + 1241, 1116, 1113, 1115, 1119, 1120, 1796, 2313, 1329, 1118, + 1225, 904, 2236, 1733, 1512, 1224, 2234, 1541, 1785, 1745, + 577, 1219, 1233, 1729, 733, 1544, 1545, 2053, 1323, 1723, + 2051, 634, 1721, 1253, 1716, 1323, 1291, 1292, 634, 1670, + 635, 1248, 1803, 1725, 1254, 2021, 1801, 635, 1653, 1256, + 1255, 1570, 1557, 1510, 39, 1838, 80, 1043, 1279, 1638, + 1607, 1581, 1797, 1580, 1302, 1311, 1004, 1204, 868, 777, + 684, 1294, 1797, 1204, 1204, 664, 1528, 1288, 1289, 1290, + 1295, 602, 1296, 1008, 733, 733, 1138, 1137, 1926, 1639, + 953, 1312, 567, 610, 951, 1717, 1585, 1928, 1722, 1518, + 1717, 954, 2586, 931, 1333, 1330, 1334, 2546, 1339, 1508, + 2537, 1509, 748, 758, 759, 751, 752, 753, 754, 755, + 756, 757, 750, 634, 2534, 1639, 1606, 733, 1819, 733, + 1096, 1513, 765, 2438, 1124, 1125, 1126, 1127, 1128, 1129, + 1122, 1123, 1529, 120, 120, 1535, 2334, 2031, 1927, 1009, + 1517, 1543, 1088, 1935, 120, 1636, 735, 736, 737, 734, + 604, 1540, 1720, 603, 1252, 1753, 120, 1086, 1087, 1085, + 1694, 1813, 352, 673, 950, 1751, 1164, 1615, 1617, 734, + 1252, 1083, 1542, 1096, 1551, 1552, 656, 2298, 1632, 753, + 754, 755, 756, 757, 750, 120, 589, 607, 737, 734, + 1644, 932, 615, 578, 735, 736, 737, 734, 1549, 2488, + 1216, 1553, 751, 752, 753, 754, 755, 756, 757, 750, + 657, 2297, 2095, 2090, 964, 2402, 1645, 1646, 1904, 594, + 2281, 735, 736, 737, 734, 985, 2585, 120, 2323, 2324, + 1705, 2567, 1707, 2531, 1679, 2570, 1679, 735, 736, 737, + 734, 1563, 1613, 1614, 1564, 2515, 1568, 1699, 1647, 2371, + 1685, 758, 759, 751, 752, 753, 754, 755, 756, 757, + 750, 2412, 1579, 1954, 1602, 1582, 1583, 1584, 2321, 2322, + 1587, 1588, 1589, 1590, 1591, 1592, 1593, 2369, 2569, 1595, + 2377, 1630, 2367, 1702, 2593, 2355, 1649, 2370, 1651, 1776, + 2357, 1150, 1709, 1681, 576, 1624, 735, 736, 737, 734, + 2214, 1151, 1682, 2354, 2353, 2350, 597, 2344, 1953, 1704, + 2341, 2340, 1652, 1650, 1648, 2368, 1241, 2103, 1139, 1654, + 2366, 1656, 1643, 1655, 2102, 2005, 1965, 1566, 2356, 592, + 735, 736, 737, 734, 1964, 1640, 1922, 1902, 2215, 1157, + 1605, 800, 1160, 1161, 1162, 1163, 1165, 1166, 1167, 1168, + 1169, 1170, 1171, 1604, 1603, 2104, 1695, 1696, 1697, 1599, + 1598, 593, 598, 1005, 735, 736, 737, 734, 1703, 1554, + 1992, 658, 659, 660, 2307, 586, 2581, 588, 601, 2604, + 1565, 2558, 585, 583, 582, 2577, 587, 402, 599, 600, + 403, 2511, 2503, 1204, 1204, 1204, 735, 736, 737, 734, + 595, 596, 735, 736, 737, 734, 2487, 2376, 2009, 984, + 749, 748, 758, 759, 751, 752, 753, 754, 755, 756, + 757, 750, 2150, 2469, 2144, 735, 736, 737, 734, 1576, + 2432, 1727, 2568, 2431, 2419, 2358, 2351, 590, 1747, 2347, + 2346, 964, 2345, 964, 2310, 964, 735, 736, 737, 734, + 671, 741, 742, 743, 744, 745, 746, 747, 739, 1741, + 749, 748, 758, 759, 751, 752, 753, 754, 755, 756, + 757, 750, 2283, 2248, 2143, 2245, 1737, 964, 1769, 749, + 748, 758, 759, 751, 752, 753, 754, 755, 756, 757, + 750, 1777, 2148, 2146, 2133, 964, 735, 736, 737, 734, + 2073, 2132, 2113, 2101, 1779, 2439, 2100, 1957, 2097, 2070, + 962, 1994, 2409, 1963, 1956, 1933, 1903, 1768, 1894, 2408, + 1793, 1743, 735, 736, 737, 734, 487, 486, 962, 735, + 736, 737, 734, 1955, 1608, 1778, 735, 736, 737, 734, + 1601, 1313, 1172, 964, 1792, 1006, 801, 796, 1791, 1755, + 795, 2407, 1738, 2406, 1842, 735, 736, 737, 734, 2114, + 1848, 2085, 2076, 2075, 1749, 2063, 735, 736, 737, 734, + 735, 736, 737, 734, 1856, 1730, 1728, 2055, 671, 120, + 120, 120, 120, 1735, 2043, 2022, 1962, 1861, 1840, 1959, + 671, 120, 1876, 1043, 114, 1790, 1804, 104, 86, 1861, + 1952, 1746, 1748, 1812, 1944, 120, 29, 671, 1789, 1939, + 1890, 1836, 1879, 964, 1799, 1759, 1889, 735, 736, 737, + 734, 120, 120, 1795, 1851, 1794, 1586, 1852, 1577, 1575, + 735, 736, 737, 734, 1572, 1877, 1571, 1569, 1146, 1562, + 1146, 1559, 1558, 1914, 1149, 1148, 1679, 971, 2600, 1849, + 2545, 111, 964, 1850, 2539, 1896, 1897, 1752, 1809, 1853, + 114, 1854, 1920, 2522, 2519, 1770, 1771, 1828, 2517, 793, + 2411, 1774, 1775, 39, 2393, 80, 2381, 2378, 1847, 2373, + 18, 1835, 2335, 1780, 1180, 1909, 8, 1630, 6, 2305, + 2304, 1858, 1916, 7, 1841, 1219, 1921, 1857, 1855, 2303, + 2300, 1873, 1875, 1874, 1788, 1203, 1862, 1863, 1864, 1865, + 1913, 1204, 546, 1880, 1807, 1808, 1211, 111, 1895, 1911, + 1892, 2294, 635, 2279, 902, 1917, 735, 736, 737, 734, + 2128, 2126, 2108, 1945, 1901, 671, 1947, 1905, 1949, 1925, + 1930, 1912, 1907, 1910, 1979, 1918, 1919, 2096, 1189, 1924, + 1182, 120, 1839, 1814, 80, 1715, 2040, 2543, 1693, 1687, + 671, 80, 1686, 1937, 120, 1636, 1637, 2020, 1084, 1979, + 1943, 761, 111, 764, 1194, 1946, 1197, 1187, 1186, 1950, + 1951, 1948, 1028, 994, 871, 2010, 819, 818, 762, 763, + 760, 817, 749, 748, 758, 759, 751, 752, 753, 754, + 755, 756, 757, 750, 749, 748, 758, 759, 751, 752, + 753, 754, 755, 756, 757, 750, 816, 2527, 1787, 815, + 1204, 1769, 814, 813, 812, 1204, 811, 810, 809, 808, + 2023, 807, 806, 2024, 2025, 805, 804, 799, 798, 2029, + 735, 736, 737, 734, 797, 794, 2018, 2525, 1786, 790, + 2014, 2011, 2012, 2013, 2041, 120, 2019, 120, 1938, 2015, + 1784, 789, 787, 2027, 2042, 2026, 2028, 786, 785, 2038, + 735, 736, 737, 734, 784, 783, 782, 781, 2047, 2048, + 2049, 1958, 735, 736, 737, 734, 2044, 2061, 1783, 2069, + 780, 2071, 779, 776, 120, 1782, 775, 699, 2301, 2060, + 1781, 2034, 2035, 2089, 1642, 1626, 687, 2185, 2492, 2064, + 735, 736, 737, 734, 1560, 2037, 2065, 735, 736, 737, + 734, 1830, 735, 736, 737, 734, 1700, 2067, 2084, 1316, + 2066, 2195, 964, 964, 698, 1870, 2039, 120, 2117, 1867, + 1871, 2083, 1866, 2584, 2188, 1773, 550, 551, 552, 553, + 2183, 671, 1724, 1868, 1718, 2198, 2199, 1811, 1869, 549, + 1861, 2184, 1970, 1971, 2093, 962, 2111, 735, 736, 737, + 734, 1631, 2109, 1174, 2087, 1713, 2088, 2092, 1973, 2092, + 2094, 2135, 63, 1146, 2541, 1872, 1679, 1666, 1667, 735, + 736, 737, 734, 1613, 1614, 1620, 2189, 2119, 2118, 1744, + 2115, 2122, 1772, 38, 37, 1742, 2121, 671, 972, 2154, + 80, 2204, 2206, 873, 2204, 2204, 1979, 2123, 2131, 2116, + 2130, 2124, 338, 117, 735, 736, 737, 734, 693, 671, + 2250, 749, 748, 758, 759, 751, 752, 753, 754, 755, + 756, 757, 750, 339, 340, 2142, 1972, 1228, 1672, 2229, + 2205, 2136, 1226, 2460, 2129, 2201, 1750, 1138, 1137, 2072, + 337, 2145, 936, 1092, 885, 886, 2074, 883, 884, 2179, + 935, 2226, 2151, 725, 2209, 2207, 2208, 2254, 735, 736, + 737, 734, 2197, 2046, 1982, 735, 736, 737, 734, 881, + 882, 1507, 2223, 1657, 2119, 2224, 2225, 1662, 1665, 1666, + 1667, 1663, 2227, 1664, 1668, 879, 880, 905, 875, 2191, + 964, 2540, 2416, 2282, 2414, 2338, 1662, 1665, 1666, 1667, + 1663, 120, 1664, 1668, 550, 551, 552, 553, 2336, 2333, + 2206, 2190, 2192, 2332, 2330, 2232, 1204, 549, 2257, 2125, + 2231, 2147, 2127, 2111, 2082, 2081, 2058, 878, 549, 2201, + 2057, 2284, 1899, 1230, 1923, 2299, 2280, 2529, 2528, 1671, + 1561, 685, 2134, 2528, 2529, 2296, 2062, 908, 2306, 45, + 2255, 2256, 1, 2259, 2260, 2261, 2262, 2339, 1315, 2265, + 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, + 2276, 2277, 2278, 2314, 1881, 2200, 2317, 2316, 2372, 1882, + 2045, 2210, 1884, 1525, 2098, 2329, 2008, 2186, 1993, 897, + 568, 1141, 887, 2196, 1013, 646, 680, 1010, 679, 2337, + 677, 671, 1094, 449, 671, 671, 671, 2352, 1319, 2374, + 2228, 2459, 2505, 2410, 671, 2462, 1026, 434, 1679, 2325, + 1966, 2404, 2237, 2327, 2239, 1805, 2382, 2138, 1906, 2390, + 2391, 2392, 2379, 580, 481, 2389, 2421, 457, 788, 2401, + 996, 989, 648, 964, 964, 2400, 2403, 456, 2107, 1824, + 554, 645, 2342, 2343, 581, 2413, 1596, 2077, 2348, 2349, + 2415, 1175, 2417, 2418, 1196, 1179, 2422, 2596, 80, 2583, + 2559, 2538, 2427, 2578, 120, 2475, 962, 962, 2520, 2513, + 2423, 1960, 671, 2429, 2430, 2251, 373, 1275, 540, 619, + 2394, 374, 1641, 2452, 671, 2380, 558, 1625, 559, 1628, + 2435, 1627, 1065, 740, 1082, 773, 2315, 2445, 1300, 410, + 2441, 1550, 2466, 422, 416, 1821, 2194, 1893, 44, 2450, + 43, 42, 1307, 1336, 451, 122, 2465, 2458, 749, 748, + 758, 759, 751, 752, 753, 754, 755, 756, 757, 750, + 1337, 2420, 2246, 2464, 432, 431, 2470, 430, 2478, 2480, + 429, 428, 1661, 1659, 1658, 1262, 1261, 1305, 2489, 2442, + 2486, 2443, 2293, 2359, 2289, 2285, 1548, 2433, 2497, 2498, + 2499, 2500, 2507, 2153, 2152, 2512, 2180, 2181, 2187, 826, + 822, 824, 825, 823, 1758, 2516, 1754, 2518, 749, 748, + 758, 759, 751, 752, 753, 754, 755, 756, 757, 750, + 1977, 1978, 1975, 2036, 2032, 1327, 1209, 1810, 2523, 2524, + 2466, 2536, 2526, 1263, 1259, 2222, 543, 5, 671, 2530, + 671, 2532, 28, 27, 2465, 2535, 2542, 1049, 2544, 1049, + 2547, 26, 14, 13, 1017, 12, 17, 25, 24, 23, + 22, 71, 2553, 70, 69, 2507, 671, 2554, 2502, 68, + 21, 2562, 11, 67, 2566, 1049, 66, 65, 2572, 20, + 19, 60, 61, 2440, 749, 748, 758, 759, 751, 752, + 753, 754, 755, 756, 757, 750, 55, 54, 53, 579, + 52, 51, 50, 2582, 49, 59, 58, 57, 56, 48, + 47, 46, 2595, 84, 2594, 83, 82, 81, 30, 31, + 32, 33, 94, 2607, 93, 95, 2609, 91, 2608, 2610, + 1452, 1494, 89, 2595, 1441, 288, 1399, 1454, 1372, 1388, + 1462, 1389, 1390, 1427, 1351, 1409, 250, 1386, 92, 90, + 88, 40, 10, 16, 1444, 1343, 1375, 1376, 1345, 1382, + 1346, 1373, 1401, 195, 1371, 1412, 220, 1424, 1385, 1406, + 1460, 2, 0, 280, 234, 0, 0, 1404, 1446, 1407, + 1432, 1398, 1428, 1359, 1420, 1455, 1387, 0, 1425, 1456, + 0, 0, 0, 0, 658, 659, 660, 0, 0, 0, + 0, 176, 0, 0, 0, 0, 0, 1423, 1450, 1384, + 0, 179, 1453, 1405, 1426, 0, 0, 1344, 1421, 0, + 1349, 1352, 1461, 1448, 1379, 1380, 0, 0, 0, 0, + 0, 0, 0, 0, 1402, 1408, 1429, 1395, 0, 2556, + 0, 0, 0, 0, 0, 0, 0, 1377, 0, 1417, + 0, 0, 0, 1354, 1350, 0, 1400, 0, 0, 168, + 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, + 0, 1493, 170, 299, 282, 231, 214, 215, 169, 0, + 267, 193, 206, 189, 247, 0, 298, 326, 188, 317, + 1353, 309, 172, 1488, 308, 246, 295, 300, 232, 226, + 171, 297, 230, 225, 218, 197, 0, 210, 258, 224, + 259, 211, 236, 235, 237, 1472, 1473, 1474, 1475, 1476, + 1484, 1485, 0, 1489, 1490, 1491, 1358, 0, 1378, 1430, + 0, 1342, 1439, 1447, 1397, 311, 1449, 1394, 1393, 1479, + 0, 1478, 284, 1480, 1481, 219, 1445, 1374, 1383, 327, + 1381, 270, 252, 1451, 1416, 1492, 268, 222, 296, 260, + 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, + 175, 187, 194, 196, 198, 199, 242, 243, 255, 275, + 289, 290, 291, 190, 183, 269, 184, 208, 185, 164, + 277, 186, 166, 256, 294, 1477, 204, 265, 229, 167, + 228, 257, 293, 292, 318, 324, 325, 329, 0, 330, + 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, + 0, 1486, 0, 1487, 323, 202, 161, 306, 0, 248, + 0, 1442, 1347, 1357, 1355, 1391, 1418, 1419, 244, 322, + 1434, 1438, 1435, 1463, 273, 0, 0, 0, 0, 0, + 213, 254, 1436, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1348, 0, 281, 304, 316, 333, + 336, 1495, 1496, 1497, 165, 335, 1498, 1499, 1500, 1501, + 1502, 1503, 1504, 307, 1392, 1365, 1403, 315, 1368, 1366, + 1433, 1367, 1422, 331, 238, 239, 240, 241, 205, 0, + 181, 334, 263, 1413, 1396, 1465, 1466, 1467, 1468, 1469, + 1470, 1471, 1414, 0, 1506, 1370, 328, 201, 207, 0, + 209, 180, 253, 203, 313, 216, 1440, 245, 212, 278, + 217, 223, 266, 312, 251, 271, 178, 303, 279, 227, + 0, 0, 1364, 1369, 1363, 1410, 1411, 1457, 1458, 1459, + 1431, 1356, 1443, 0, 1360, 1362, 1361, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1437, 0, 0, 1415, + 162, 0, 221, 1464, 262, 200, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 288, 463, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, + 0, 0, 0, 0, 0, 0, 1482, 1483, 319, 320, + 321, 305, 424, 192, 1505, 0, 195, 0, 0, 220, + 0, 0, 0, 455, 0, 0, 280, 234, 0, 0, + 0, 0, 511, 519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 417, 0, 0, 448, 487, 486, + 436, 445, 0, 0, 176, 437, 0, 444, 438, 442, + 441, 439, 440, 0, 503, 0, 0, 0, 0, 0, + 0, 408, 421, 0, 425, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 418, 419, 0, 0, + 0, 0, 464, 0, 420, 0, 0, 466, 0, 446, + 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, + 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, + 215, 169, 0, 267, 193, 206, 189, 247, 443, 462, + 467, 188, 525, 460, 309, 172, 0, 308, 246, 295, + 300, 232, 226, 171, 297, 230, 225, 218, 197, 526, + 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 458, 0, 0, 311, 0, + 0, 509, 0, 0, 0, 284, 0, 0, 219, 0, + 0, 0, 461, 0, 270, 252, 522, 409, 0, 268, + 222, 296, 260, 302, 286, 310, 264, 261, 163, 287, + 191, 233, 174, 175, 187, 194, 196, 198, 199, 242, + 243, 255, 275, 289, 290, 291, 190, 183, 269, 184, + 208, 185, 164, 277, 186, 166, 256, 294, 0, 204, + 265, 229, 167, 228, 257, 293, 292, 318, 324, 325, + 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, + 332, 0, 0, 0, 1143, 1142, 1144, 323, 202, 161, + 306, 507, 248, 0, 521, 502, 504, 505, 508, 512, + 513, 514, 515, 516, 518, 520, 524, 273, 0, 0, + 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, + 304, 316, 333, 336, 0, 0, 0, 165, 335, 0, + 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, + 315, 0, 0, 0, 0, 0, 465, 238, 239, 240, + 241, 510, 0, 181, 334, 263, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 201, 207, 0, 209, 180, 253, 203, 313, 216, 0, + 245, 212, 278, 217, 223, 266, 312, 251, 271, 178, + 303, 279, 227, 0, 0, 532, 506, 531, 533, 534, + 530, 535, 536, 517, 427, 0, 470, 528, 527, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 418, 0, 0, 0, 0, 463, 0, 419, - 0, 0, 465, 0, 445, 0, 0, 168, 285, 301, - 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, - 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, - 206, 189, 247, 442, 461, 466, 188, 524, 459, 309, - 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, - 230, 225, 218, 197, 525, 210, 258, 224, 259, 211, - 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 457, 0, 0, 311, 0, 0, 508, 0, 0, 0, - 284, 0, 0, 219, 0, 0, 0, 460, 0, 270, - 252, 521, 408, 0, 268, 222, 296, 260, 302, 286, - 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, - 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, - 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, - 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, - 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, - 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, - 0, 0, 323, 202, 161, 306, 506, 248, 0, 520, - 501, 503, 504, 507, 511, 512, 513, 514, 515, 517, - 519, 523, 273, 0, 0, 0, 0, 0, 213, 254, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 281, 304, 316, 333, 0, 0, - 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, - 522, 0, 0, 0, 315, 0, 0, 0, 0, 0, - 464, 238, 239, 240, 241, 509, 0, 181, 334, 263, + 0, 0, 0, 162, 0, 221, 0, 262, 200, 493, + 474, 475, 476, 426, 477, 472, 473, 494, 468, 490, + 491, 450, 453, 478, 139, 479, 492, 495, 496, 537, + 538, 539, 482, 497, 489, 488, 480, 469, 498, 499, + 454, 452, 483, 484, 471, 485, 0, 500, 501, 288, + 463, 319, 320, 321, 305, 0, 192, 0, 0, 0, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 424, 0, 0, 0, 195, 1205, 0, + 220, 0, 0, 0, 455, 0, 0, 280, 234, 0, + 0, 0, 0, 511, 519, 0, 0, 0, 0, 0, + 0, 0, 1285, 0, 0, 417, 0, 0, 448, 487, + 486, 436, 445, 0, 0, 176, 437, 0, 444, 438, + 442, 441, 439, 440, 0, 503, 0, 0, 0, 0, + 0, 0, 408, 421, 0, 425, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 418, 419, 0, + 0, 0, 0, 464, 0, 420, 0, 0, 1286, 0, + 446, 0, 0, 168, 285, 301, 177, 276, 314, 182, + 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, + 214, 215, 169, 0, 267, 193, 206, 189, 247, 443, + 462, 467, 188, 525, 460, 309, 172, 0, 308, 246, + 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, + 526, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 201, 207, 0, 209, 180, 253, - 203, 313, 216, 0, 245, 212, 278, 217, 223, 266, - 312, 251, 271, 178, 303, 279, 227, 0, 0, 531, - 505, 530, 532, 533, 529, 534, 535, 516, 426, 0, - 469, 527, 526, 528, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 458, 0, 0, 311, + 0, 0, 509, 0, 0, 0, 284, 0, 0, 219, + 0, 0, 0, 461, 0, 270, 252, 522, 409, 0, + 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, + 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, + 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, + 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, + 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, + 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, + 161, 306, 507, 248, 0, 521, 502, 504, 505, 508, + 512, 513, 514, 515, 516, 518, 520, 524, 273, 0, + 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 162, 0, 221, - 0, 262, 200, 492, 473, 474, 475, 425, 476, 471, - 472, 493, 467, 489, 490, 449, 452, 477, 139, 478, - 491, 494, 495, 536, 537, 538, 481, 496, 488, 487, - 479, 468, 497, 498, 453, 451, 482, 483, 470, 484, - 0, 499, 500, 288, 462, 319, 320, 321, 305, 0, - 192, 0, 0, 0, 250, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, - 0, 195, 1204, 0, 220, 0, 0, 0, 454, 0, - 0, 280, 234, 0, 0, 0, 0, 510, 518, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, - 0, 0, 447, 486, 485, 435, 444, 0, 0, 176, - 436, 0, 443, 437, 441, 440, 438, 439, 0, 502, - 0, 0, 0, 0, 0, 0, 407, 420, 0, 424, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, + 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, + 0, 315, 0, 0, 0, 0, 0, 465, 238, 239, + 240, 241, 510, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 328, 201, 207, 0, 209, 180, 253, 203, 313, 216, + 0, 245, 212, 278, 217, 223, 266, 312, 251, 271, + 178, 303, 279, 227, 0, 0, 532, 506, 531, 533, + 534, 530, 535, 536, 517, 427, 0, 470, 528, 527, + 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 418, 0, 0, 0, 0, 463, 0, 419, - 0, 0, 465, 0, 445, 0, 0, 168, 285, 301, - 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, - 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, - 206, 189, 247, 442, 461, 466, 188, 524, 459, 309, - 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, - 230, 225, 218, 197, 525, 210, 258, 224, 259, 211, - 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 162, 0, 221, 0, 262, 200, + 493, 474, 475, 476, 426, 477, 472, 473, 494, 468, + 490, 491, 450, 453, 478, 139, 479, 492, 495, 496, + 537, 538, 539, 482, 497, 489, 488, 480, 469, 498, + 499, 454, 452, 483, 484, 471, 485, 0, 500, 501, + 0, 0, 319, 320, 321, 305, 0, 192, 114, 288, + 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 424, 0, 0, 0, 195, 0, 0, + 220, 0, 0, 0, 455, 0, 0, 280, 234, 0, + 0, 0, 0, 511, 519, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 417, 0, 0, 448, 487, + 486, 436, 445, 0, 0, 176, 437, 0, 444, 438, + 442, 441, 439, 440, 0, 503, 0, 0, 0, 0, + 0, 0, 408, 421, 0, 425, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 418, 419, 0, + 0, 0, 0, 464, 0, 420, 0, 0, 466, 0, + 446, 0, 0, 168, 285, 301, 177, 276, 314, 182, + 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, + 214, 215, 169, 0, 267, 193, 206, 189, 247, 443, + 462, 467, 188, 525, 460, 309, 172, 0, 308, 246, + 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, + 526, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 457, 0, 0, 311, 0, 0, 508, 0, 0, 0, - 284, 0, 0, 219, 0, 0, 0, 460, 0, 270, - 252, 521, 408, 0, 268, 222, 296, 260, 302, 286, - 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, - 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, - 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, - 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, - 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, - 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, - 0, 0, 323, 202, 161, 306, 506, 248, 0, 520, - 501, 503, 504, 507, 511, 512, 513, 514, 515, 517, - 519, 523, 273, 0, 0, 0, 0, 0, 213, 254, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 281, 304, 316, 333, 0, 0, - 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, - 522, 0, 0, 0, 315, 0, 0, 0, 0, 0, - 464, 238, 239, 240, 241, 509, 0, 181, 334, 263, + 0, 0, 0, 0, 0, 0, 458, 0, 0, 311, + 0, 0, 509, 0, 0, 0, 284, 0, 0, 219, + 0, 0, 0, 461, 0, 270, 252, 522, 409, 0, + 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, + 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, + 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, + 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, + 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, + 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, + 161, 306, 507, 248, 0, 521, 502, 504, 505, 508, + 512, 513, 514, 515, 516, 518, 520, 524, 273, 0, + 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 201, 207, 0, 209, 180, 253, - 203, 313, 216, 0, 245, 212, 278, 217, 223, 266, - 312, 251, 271, 178, 303, 279, 227, 0, 0, 531, - 505, 530, 532, 533, 529, 534, 535, 516, 426, 0, - 469, 527, 526, 528, 0, 0, 0, 0, 0, 0, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, + 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, + 0, 315, 0, 0, 0, 0, 0, 465, 238, 239, + 240, 241, 510, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 162, 0, 221, - 0, 262, 200, 492, 473, 474, 475, 425, 476, 471, - 472, 493, 467, 489, 490, 449, 452, 477, 139, 478, - 491, 494, 495, 536, 537, 538, 481, 496, 488, 487, - 479, 468, 497, 498, 453, 451, 482, 483, 470, 484, - 0, 499, 500, 288, 462, 319, 320, 321, 305, 0, - 192, 0, 0, 0, 250, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, - 0, 195, 0, 0, 220, 0, 0, 0, 454, 0, - 0, 280, 234, 0, 0, 0, 0, 510, 518, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, - 0, 0, 447, 486, 485, 435, 444, 0, 0, 176, - 436, 0, 443, 437, 441, 440, 438, 439, 0, 502, - 0, 0, 0, 0, 0, 0, 407, 420, 0, 424, + 328, 201, 207, 0, 209, 180, 253, 203, 313, 216, + 0, 245, 212, 278, 217, 223, 266, 312, 251, 271, + 178, 303, 279, 227, 0, 0, 532, 506, 531, 533, + 534, 530, 535, 536, 517, 427, 0, 470, 528, 527, + 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 162, 0, 221, 87, 262, 200, + 493, 474, 475, 476, 426, 477, 472, 473, 494, 468, + 490, 491, 450, 453, 478, 139, 479, 492, 495, 496, + 537, 538, 539, 482, 497, 489, 488, 480, 469, 498, + 499, 454, 452, 483, 484, 471, 485, 0, 500, 501, + 288, 463, 319, 320, 321, 305, 0, 192, 0, 0, + 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 424, 0, 0, 0, 195, 2555, + 0, 220, 0, 0, 0, 455, 0, 0, 280, 234, + 0, 0, 0, 0, 511, 519, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 417, 0, 0, 448, + 487, 486, 436, 445, 0, 0, 176, 437, 0, 444, + 438, 442, 441, 439, 440, 0, 503, 0, 0, 0, + 0, 0, 0, 408, 421, 0, 425, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, + 0, 0, 0, 0, 464, 0, 420, 0, 0, 466, + 0, 446, 0, 0, 168, 285, 301, 177, 276, 314, + 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, + 231, 214, 215, 169, 0, 267, 193, 206, 189, 247, + 443, 462, 467, 188, 525, 460, 309, 172, 0, 308, + 246, 295, 300, 232, 226, 171, 297, 230, 225, 218, + 197, 526, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 418, 982, 0, 0, 0, 463, 0, 419, - 0, 0, 465, 0, 445, 0, 0, 168, 285, 301, - 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, - 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, - 206, 189, 247, 442, 461, 466, 188, 524, 459, 309, - 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, - 230, 225, 218, 197, 525, 210, 258, 224, 259, 211, - 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, + 311, 0, 0, 509, 0, 0, 0, 284, 0, 0, + 219, 0, 0, 0, 461, 0, 270, 252, 522, 409, + 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, + 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, + 199, 242, 243, 255, 275, 289, 290, 291, 190, 183, + 269, 184, 208, 185, 164, 277, 186, 166, 256, 294, + 0, 204, 265, 229, 167, 228, 257, 293, 292, 318, + 324, 325, 329, 0, 330, 0, 0, 0, 0, 0, + 0, 0, 332, 0, 0, 0, 0, 0, 0, 323, + 202, 161, 306, 507, 248, 0, 521, 502, 504, 505, + 508, 512, 513, 514, 515, 516, 518, 520, 524, 273, + 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 457, 0, 0, 311, 0, 0, 508, 0, 0, 0, - 284, 0, 0, 219, 0, 0, 0, 460, 0, 270, - 252, 521, 408, 0, 268, 222, 296, 260, 302, 286, - 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, - 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, - 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, - 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, - 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, - 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, - 0, 0, 323, 202, 161, 306, 506, 248, 0, 520, - 501, 503, 504, 507, 511, 512, 513, 514, 515, 517, - 519, 523, 273, 0, 0, 0, 0, 0, 213, 254, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 281, 304, 316, 333, 0, 0, - 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, - 522, 0, 0, 0, 315, 0, 0, 0, 0, 0, - 464, 238, 239, 240, 241, 509, 0, 181, 334, 263, + 0, 281, 304, 316, 333, 336, 0, 0, 0, 165, + 335, 0, 0, 0, 0, 0, 0, 0, 523, 0, + 0, 0, 315, 0, 0, 0, 0, 0, 465, 238, + 239, 240, 241, 510, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 201, 207, 0, 209, 180, 253, - 203, 313, 216, 0, 245, 212, 278, 217, 223, 266, - 312, 251, 271, 178, 303, 279, 227, 0, 0, 531, - 505, 530, 532, 533, 529, 534, 535, 516, 426, 0, - 469, 527, 526, 528, 0, 0, 0, 0, 0, 0, + 0, 328, 201, 207, 0, 209, 180, 253, 203, 313, + 216, 0, 245, 212, 278, 217, 223, 266, 312, 251, + 271, 178, 303, 279, 227, 0, 0, 532, 506, 531, + 533, 534, 530, 535, 536, 517, 427, 0, 470, 528, + 527, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 162, 0, 221, - 0, 262, 200, 492, 473, 474, 475, 425, 476, 471, - 472, 493, 467, 489, 490, 449, 452, 477, 139, 478, - 491, 494, 495, 536, 537, 538, 481, 496, 488, 487, - 479, 468, 497, 498, 453, 451, 482, 483, 470, 484, - 0, 499, 500, 0, 0, 319, 320, 321, 305, 0, - 192, 288, 462, 0, 0, 1566, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 162, 0, 221, 0, 262, + 200, 493, 474, 475, 476, 426, 477, 472, 473, 494, + 468, 490, 491, 450, 453, 478, 139, 479, 492, 495, + 496, 537, 538, 539, 482, 497, 489, 488, 480, 469, + 498, 499, 454, 452, 483, 484, 471, 485, 0, 500, + 501, 288, 463, 319, 320, 321, 305, 0, 192, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 423, 0, 0, 0, 195, - 0, 0, 220, 0, 0, 0, 454, 0, 0, 280, - 234, 0, 0, 0, 0, 510, 518, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, - 447, 486, 485, 435, 444, 0, 0, 176, 436, 0, - 443, 437, 441, 440, 438, 439, 0, 502, 0, 0, - 0, 0, 0, 0, 407, 420, 0, 424, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 418, 0, 0, 0, 0, 463, 0, 419, 0, 0, - 465, 0, 445, 0, 0, 168, 285, 301, 177, 276, + 0, 0, 0, 0, 0, 424, 0, 0, 0, 195, + 1205, 0, 220, 0, 0, 0, 455, 0, 0, 280, + 234, 0, 0, 0, 0, 511, 519, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, + 448, 487, 486, 436, 445, 0, 0, 176, 437, 0, + 444, 438, 442, 441, 439, 440, 0, 503, 0, 0, + 0, 0, 0, 0, 408, 421, 0, 425, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, + 419, 0, 0, 0, 0, 464, 0, 420, 0, 0, + 466, 0, 446, 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, - 247, 442, 461, 466, 188, 524, 459, 309, 172, 0, + 247, 443, 462, 467, 188, 525, 460, 309, 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, 230, 225, - 218, 197, 525, 210, 258, 224, 259, 211, 236, 235, + 218, 197, 526, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, - 0, 311, 0, 0, 508, 0, 0, 0, 284, 0, - 0, 219, 0, 0, 0, 460, 0, 270, 252, 521, - 408, 0, 268, 222, 296, 260, 302, 286, 310, 264, + 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, + 0, 311, 0, 0, 509, 0, 0, 0, 284, 0, + 0, 219, 0, 0, 0, 461, 0, 270, 252, 522, + 409, 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, - 323, 202, 161, 306, 506, 248, 0, 520, 501, 503, - 504, 507, 511, 512, 513, 514, 515, 517, 519, 523, + 323, 202, 161, 306, 507, 248, 0, 521, 502, 504, + 505, 508, 512, 513, 514, 515, 516, 518, 520, 524, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 304, 316, 333, 0, 0, 0, 165, - 335, 0, 0, 0, 0, 0, 0, 0, 522, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 464, 238, - 239, 240, 241, 509, 0, 181, 334, 263, 0, 0, + 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, + 165, 335, 0, 0, 0, 0, 0, 0, 0, 523, + 0, 0, 0, 315, 0, 0, 0, 0, 0, 465, + 238, 239, 240, 241, 510, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 201, 207, 0, 209, 180, 253, 203, 313, - 216, 0, 245, 212, 278, 217, 223, 266, 312, 251, - 271, 178, 303, 279, 227, 0, 0, 531, 505, 530, - 532, 533, 529, 534, 535, 516, 426, 0, 469, 527, - 526, 528, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 328, 201, 207, 0, 209, 180, 253, 203, + 313, 216, 0, 245, 212, 278, 217, 223, 266, 312, + 251, 271, 178, 303, 279, 227, 0, 0, 532, 506, + 531, 533, 534, 530, 535, 536, 517, 427, 0, 470, + 528, 527, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 221, 0, 262, - 200, 492, 473, 474, 475, 425, 476, 471, 472, 493, - 467, 489, 490, 449, 452, 477, 139, 478, 491, 494, - 495, 536, 537, 538, 481, 496, 488, 487, 479, 468, - 497, 498, 453, 451, 482, 483, 470, 484, 0, 499, - 500, 288, 462, 319, 320, 321, 305, 0, 192, 0, - 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 423, 0, 0, 0, 195, - 0, 0, 220, 0, 0, 0, 454, 0, 0, 280, - 234, 0, 0, 0, 0, 510, 518, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, - 447, 486, 485, 435, 444, 0, 0, 176, 436, 0, - 443, 437, 441, 440, 438, 439, 0, 502, 0, 0, - 0, 0, 0, 0, 407, 420, 0, 424, 0, 0, + 0, 0, 0, 0, 0, 0, 162, 0, 221, 0, + 262, 200, 493, 474, 475, 476, 426, 477, 472, 473, + 494, 468, 490, 491, 450, 453, 478, 139, 479, 492, + 495, 496, 537, 538, 539, 482, 497, 489, 488, 480, + 469, 498, 499, 454, 452, 483, 484, 471, 485, 0, + 500, 501, 288, 463, 319, 320, 321, 305, 0, 192, + 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, + 195, 0, 0, 220, 0, 0, 0, 455, 0, 0, + 280, 234, 0, 0, 0, 0, 511, 519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, + 0, 448, 487, 486, 436, 445, 0, 0, 176, 437, + 0, 444, 438, 442, 441, 439, 440, 0, 503, 0, + 0, 0, 0, 0, 0, 408, 421, 0, 425, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 418, 419, 983, 0, 0, 0, 464, 0, 420, 0, + 0, 466, 0, 446, 0, 0, 168, 285, 301, 177, + 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, + 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, + 189, 247, 443, 462, 467, 188, 525, 460, 309, 172, + 0, 308, 246, 295, 300, 232, 226, 171, 297, 230, + 225, 218, 197, 526, 210, 258, 224, 259, 211, 236, + 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, + 0, 0, 311, 0, 0, 509, 0, 0, 0, 284, + 0, 0, 219, 0, 0, 0, 461, 0, 270, 252, + 522, 409, 0, 268, 222, 296, 260, 302, 286, 310, + 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, + 196, 198, 199, 242, 243, 255, 275, 289, 290, 291, + 190, 183, 269, 184, 208, 185, 164, 277, 186, 166, + 256, 294, 0, 204, 265, 229, 167, 228, 257, 293, + 292, 318, 324, 325, 329, 0, 330, 0, 0, 0, + 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, + 0, 323, 202, 161, 306, 507, 248, 0, 521, 502, + 504, 505, 508, 512, 513, 514, 515, 516, 518, 520, + 524, 273, 0, 0, 0, 0, 0, 213, 254, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 281, 304, 316, 333, 336, 0, 0, + 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, + 523, 0, 0, 0, 315, 0, 0, 0, 0, 0, + 465, 238, 239, 240, 241, 510, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 418, 0, 0, 0, 0, 463, 0, 419, 0, 0, - 465, 0, 445, 0, 0, 168, 285, 301, 177, 276, + 0, 0, 0, 328, 201, 207, 0, 209, 180, 253, + 203, 313, 216, 0, 245, 212, 278, 217, 223, 266, + 312, 251, 271, 178, 303, 279, 227, 0, 0, 532, + 506, 531, 533, 534, 530, 535, 536, 517, 427, 0, + 470, 528, 527, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 162, 0, 221, + 0, 262, 200, 493, 474, 475, 476, 426, 477, 472, + 473, 494, 468, 490, 491, 450, 453, 478, 139, 479, + 492, 495, 496, 537, 538, 539, 482, 497, 489, 488, + 480, 469, 498, 499, 454, 452, 483, 484, 471, 485, + 0, 500, 501, 0, 0, 319, 320, 321, 305, 0, + 192, 288, 463, 0, 0, 1567, 0, 0, 0, 0, + 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 424, 0, 0, 0, 195, + 0, 0, 220, 0, 0, 0, 455, 0, 0, 280, + 234, 0, 0, 0, 0, 511, 519, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, + 448, 487, 486, 436, 445, 0, 0, 176, 437, 0, + 444, 438, 442, 441, 439, 440, 0, 503, 0, 0, + 0, 0, 0, 0, 408, 421, 0, 425, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, + 419, 0, 0, 0, 0, 464, 0, 420, 0, 0, + 466, 0, 446, 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, - 247, 442, 461, 466, 188, 524, 459, 309, 172, 0, + 247, 443, 462, 467, 188, 525, 460, 309, 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, 230, 225, - 218, 197, 525, 210, 258, 224, 259, 211, 236, 235, + 218, 197, 526, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, - 0, 311, 0, 0, 508, 0, 0, 0, 284, 0, - 0, 219, 0, 0, 0, 460, 0, 270, 252, 521, - 408, 0, 268, 222, 296, 260, 302, 286, 310, 264, + 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, + 0, 311, 0, 0, 509, 0, 0, 0, 284, 0, + 0, 219, 0, 0, 0, 461, 0, 270, 252, 522, + 409, 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, - 323, 202, 161, 306, 506, 248, 0, 520, 501, 503, - 504, 507, 511, 512, 513, 514, 515, 517, 519, 523, + 323, 202, 161, 306, 507, 248, 0, 521, 502, 504, + 505, 508, 512, 513, 514, 515, 516, 518, 520, 524, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 304, 316, 333, 0, 0, 0, 165, - 335, 0, 0, 0, 0, 0, 0, 0, 522, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 464, 238, - 239, 240, 241, 509, 0, 181, 334, 263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 201, 207, 0, 209, 180, 253, 203, 313, - 216, 0, 245, 212, 278, 217, 223, 266, 312, 251, - 271, 178, 303, 279, 227, 0, 0, 531, 505, 530, - 532, 533, 529, 534, 535, 516, 426, 0, 469, 527, - 526, 528, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, + 165, 335, 0, 0, 0, 0, 0, 0, 0, 523, + 0, 0, 0, 315, 0, 0, 0, 0, 0, 465, + 238, 239, 240, 241, 510, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 221, 0, 262, - 200, 492, 473, 474, 475, 425, 476, 471, 472, 493, - 467, 489, 490, 449, 452, 477, 139, 478, 491, 494, - 495, 536, 537, 538, 481, 496, 488, 487, 479, 468, - 497, 498, 453, 451, 482, 483, 470, 484, 0, 499, - 500, 288, 462, 319, 320, 321, 305, 0, 192, 0, - 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, - 0, 1065, 0, 0, 0, 423, 0, 0, 0, 195, - 0, 0, 220, 0, 0, 0, 454, 0, 0, 280, - 234, 0, 0, 0, 0, 510, 518, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, - 447, 486, 485, 435, 444, 0, 0, 176, 436, 0, - 443, 437, 441, 440, 438, 439, 0, 502, 0, 0, - 0, 0, 0, 0, 0, 420, 0, 424, 0, 0, + 0, 0, 328, 201, 207, 0, 209, 180, 253, 203, + 313, 216, 0, 245, 212, 278, 217, 223, 266, 312, + 251, 271, 178, 303, 279, 227, 0, 0, 532, 506, + 531, 533, 534, 530, 535, 536, 517, 427, 0, 470, + 528, 527, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 418, 0, 0, 0, 0, 463, 0, 419, 0, 0, - 465, 0, 445, 0, 0, 168, 285, 301, 177, 276, - 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, - 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, - 247, 442, 461, 466, 188, 524, 459, 309, 172, 0, - 308, 246, 295, 300, 232, 226, 171, 297, 230, 225, - 218, 197, 525, 210, 258, 224, 259, 211, 236, 235, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, - 0, 311, 0, 0, 508, 0, 0, 0, 284, 0, - 0, 219, 0, 0, 0, 460, 0, 270, 252, 521, - 0, 0, 268, 222, 296, 260, 302, 286, 310, 264, - 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, - 198, 199, 242, 243, 255, 275, 289, 290, 291, 190, - 183, 269, 184, 208, 185, 164, 277, 186, 166, 256, - 294, 0, 204, 265, 229, 167, 228, 257, 293, 292, - 318, 1066, 1067, 329, 0, 330, 0, 0, 0, 0, - 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, - 323, 202, 161, 306, 506, 248, 0, 520, 501, 503, - 504, 507, 511, 512, 513, 514, 515, 517, 519, 523, - 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 304, 316, 333, 0, 0, 0, 165, - 335, 0, 0, 0, 0, 0, 0, 0, 522, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 464, 238, - 239, 240, 241, 509, 0, 181, 334, 263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 201, 207, 0, 209, 180, 253, 203, 313, - 216, 0, 245, 212, 278, 217, 223, 266, 312, 251, - 271, 178, 303, 279, 227, 0, 0, 531, 505, 530, - 532, 533, 529, 534, 535, 516, 426, 0, 469, 527, - 526, 528, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 221, 0, 262, - 200, 492, 473, 474, 475, 425, 476, 471, 472, 493, - 467, 489, 490, 449, 452, 477, 139, 478, 491, 494, - 495, 536, 537, 538, 481, 496, 488, 487, 479, 468, - 497, 498, 453, 451, 482, 483, 470, 484, 0, 499, - 500, 288, 462, 319, 320, 321, 305, 0, 192, 0, - 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 423, 0, 0, 0, 195, - 0, 0, 220, 0, 0, 0, 454, 0, 0, 280, - 234, 0, 0, 0, 0, 510, 518, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 162, 0, 221, 0, + 262, 200, 493, 474, 475, 476, 426, 477, 472, 473, + 494, 468, 490, 491, 450, 453, 478, 139, 479, 492, + 495, 496, 537, 538, 539, 482, 497, 489, 488, 480, + 469, 498, 499, 454, 452, 483, 484, 471, 485, 0, + 500, 501, 288, 463, 319, 320, 321, 305, 0, 192, + 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, + 195, 0, 0, 220, 0, 0, 0, 455, 0, 0, + 280, 234, 0, 0, 0, 0, 511, 519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, + 0, 448, 487, 486, 436, 445, 0, 0, 176, 437, + 0, 444, 438, 442, 441, 439, 440, 0, 503, 0, + 0, 0, 0, 0, 0, 408, 421, 0, 425, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 418, 419, 0, 0, 0, 0, 464, 0, 420, 0, + 0, 466, 0, 446, 0, 0, 168, 285, 301, 177, + 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, + 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, + 189, 247, 443, 462, 467, 188, 525, 460, 309, 172, + 0, 308, 246, 295, 300, 232, 226, 171, 297, 230, + 225, 218, 197, 526, 210, 258, 224, 259, 211, 236, + 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, + 0, 0, 311, 0, 0, 509, 0, 0, 0, 284, + 0, 0, 219, 0, 0, 0, 461, 0, 270, 252, + 522, 409, 0, 268, 222, 296, 260, 302, 286, 310, + 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, + 196, 198, 199, 242, 243, 255, 275, 289, 290, 291, + 190, 183, 269, 184, 208, 185, 164, 277, 186, 166, + 256, 294, 0, 204, 265, 229, 167, 228, 257, 293, + 292, 318, 324, 325, 329, 0, 330, 0, 0, 0, + 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, + 0, 323, 202, 161, 306, 507, 248, 0, 521, 502, + 504, 505, 508, 512, 513, 514, 515, 516, 518, 520, + 524, 273, 0, 0, 0, 0, 0, 213, 254, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 281, 304, 316, 333, 336, 0, 0, + 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, + 523, 0, 0, 0, 315, 0, 0, 0, 0, 0, + 465, 238, 239, 240, 241, 510, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 447, 486, 485, 435, 444, 0, 0, 176, 436, 0, - 443, 437, 441, 440, 438, 439, 0, 502, 0, 0, - 0, 0, 0, 0, 407, 420, 0, 424, 0, 0, + 0, 0, 0, 328, 201, 207, 0, 209, 180, 253, + 203, 313, 216, 0, 245, 212, 278, 217, 223, 266, + 312, 251, 271, 178, 303, 279, 227, 0, 0, 532, + 506, 531, 533, 534, 530, 535, 536, 517, 427, 0, + 470, 528, 527, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 162, 0, 221, + 0, 262, 200, 493, 474, 475, 476, 426, 477, 472, + 473, 494, 468, 490, 491, 450, 453, 478, 139, 479, + 492, 495, 496, 537, 538, 539, 482, 497, 489, 488, + 480, 469, 498, 499, 454, 452, 483, 484, 471, 485, + 0, 500, 501, 288, 463, 319, 320, 321, 305, 0, + 192, 0, 0, 0, 250, 0, 0, 0, 0, 0, + 0, 0, 0, 1066, 0, 0, 0, 424, 0, 0, + 0, 195, 0, 0, 220, 0, 0, 0, 455, 0, + 0, 280, 234, 0, 0, 0, 0, 511, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 418, 0, 0, 0, 0, 463, 0, 419, 0, 0, - 465, 0, 445, 0, 0, 168, 285, 301, 177, 276, - 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, - 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, - 247, 442, 461, 466, 188, 524, 459, 309, 172, 0, - 308, 246, 295, 300, 232, 226, 171, 297, 230, 225, - 218, 197, 525, 210, 258, 224, 259, 211, 236, 235, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, - 0, 311, 0, 0, 508, 0, 0, 0, 284, 0, - 0, 219, 0, 0, 0, 460, 0, 270, 252, 521, - 408, 0, 268, 222, 296, 260, 302, 286, 310, 264, - 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, - 198, 199, 242, 243, 255, 275, 289, 290, 291, 190, - 183, 269, 184, 208, 185, 164, 277, 186, 166, 256, - 294, 0, 204, 265, 229, 167, 228, 257, 293, 292, - 318, 324, 325, 329, 0, 330, 0, 0, 0, 0, - 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, - 323, 202, 161, 306, 506, 248, 0, 520, 501, 503, - 504, 507, 511, 512, 513, 514, 515, 517, 519, 523, - 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, + 0, 0, 448, 487, 486, 436, 445, 0, 0, 176, + 437, 0, 444, 438, 442, 441, 439, 440, 0, 503, + 0, 0, 0, 0, 0, 0, 0, 421, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 304, 316, 333, 0, 0, 0, 165, - 335, 0, 0, 0, 0, 0, 0, 0, 522, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 464, 238, - 239, 240, 241, 509, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 201, 207, 0, 209, 180, 253, 203, 313, - 216, 0, 245, 212, 278, 217, 223, 266, 312, 251, - 271, 178, 303, 279, 227, 0, 0, 531, 505, 530, - 532, 533, 529, 534, 535, 516, 426, 0, 469, 527, - 526, 528, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 418, 419, 0, 0, 0, 0, 464, 0, 420, + 0, 0, 466, 0, 446, 0, 0, 168, 285, 301, + 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, + 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, + 206, 189, 247, 443, 462, 467, 188, 525, 460, 309, + 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, + 230, 225, 218, 197, 526, 210, 258, 224, 259, 211, + 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 221, 0, 262, - 200, 492, 473, 474, 475, 425, 476, 471, 472, 493, - 467, 489, 490, 449, 452, 477, 139, 478, 491, 494, - 495, 536, 537, 538, 481, 496, 488, 487, 479, 468, - 497, 498, 453, 451, 482, 483, 470, 484, 0, 499, - 500, 288, 462, 319, 320, 321, 305, 0, 192, 0, - 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 423, 0, 0, 0, 195, - 0, 0, 220, 0, 0, 0, 454, 0, 0, 280, - 234, 0, 0, 0, 0, 510, 518, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, - 447, 486, 485, 435, 444, 0, 0, 176, 436, 0, - 443, 437, 441, 440, 438, 439, 0, 502, 0, 0, - 0, 0, 0, 0, 0, 420, 0, 424, 0, 0, + 458, 0, 0, 311, 0, 0, 509, 0, 0, 0, + 284, 0, 0, 219, 0, 0, 0, 461, 0, 270, + 252, 522, 0, 0, 268, 222, 296, 260, 302, 286, + 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, + 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, + 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, + 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, + 293, 292, 318, 1067, 1068, 329, 0, 330, 0, 0, + 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, + 0, 0, 323, 202, 161, 306, 507, 248, 0, 521, + 502, 504, 505, 508, 512, 513, 514, 515, 516, 518, + 520, 524, 273, 0, 0, 0, 0, 0, 213, 254, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 281, 304, 316, 333, 336, 0, + 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, + 0, 523, 0, 0, 0, 315, 0, 0, 0, 0, + 0, 465, 238, 239, 240, 241, 510, 0, 181, 334, + 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 328, 201, 207, 0, 209, 180, + 253, 203, 313, 216, 0, 245, 212, 278, 217, 223, + 266, 312, 251, 271, 178, 303, 279, 227, 0, 0, + 532, 506, 531, 533, 534, 530, 535, 536, 517, 427, + 0, 470, 528, 527, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 418, 0, 0, 0, 0, 463, 0, 419, 0, 0, - 465, 0, 445, 0, 0, 168, 285, 301, 177, 276, - 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, - 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, - 247, 442, 461, 466, 188, 524, 459, 309, 172, 0, - 308, 246, 295, 300, 232, 226, 171, 297, 230, 225, - 218, 197, 525, 210, 258, 224, 259, 211, 236, 235, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, - 0, 311, 0, 0, 508, 0, 0, 0, 284, 0, - 0, 219, 0, 0, 0, 460, 0, 270, 252, 521, - 0, 0, 268, 222, 296, 260, 302, 286, 310, 264, - 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, - 198, 199, 242, 243, 255, 275, 289, 290, 291, 190, - 183, 269, 184, 208, 185, 164, 277, 186, 166, 256, - 294, 0, 204, 265, 229, 167, 228, 257, 293, 292, - 318, 324, 325, 329, 0, 330, 0, 0, 0, 0, - 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, - 323, 202, 161, 306, 506, 248, 0, 520, 501, 503, - 504, 507, 511, 512, 513, 514, 515, 517, 519, 523, - 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, + 221, 0, 262, 200, 493, 474, 475, 476, 426, 477, + 472, 473, 494, 468, 490, 491, 450, 453, 478, 139, + 479, 492, 495, 496, 537, 538, 539, 482, 497, 489, + 488, 480, 469, 498, 499, 454, 452, 483, 484, 471, + 485, 0, 500, 501, 288, 463, 319, 320, 321, 305, + 0, 192, 0, 0, 0, 250, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, + 0, 0, 195, 0, 0, 220, 0, 0, 0, 455, + 0, 0, 280, 234, 0, 0, 0, 0, 511, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 304, 316, 333, 0, 0, 0, 165, - 335, 0, 0, 0, 0, 0, 0, 0, 522, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 464, 238, - 239, 240, 241, 509, 0, 181, 334, 263, 0, 0, + 0, 0, 0, 448, 487, 486, 436, 445, 0, 0, + 176, 437, 0, 444, 438, 442, 441, 439, 440, 0, + 503, 0, 0, 0, 0, 0, 0, 408, 421, 0, + 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 201, 207, 0, 209, 180, 253, 203, 313, - 216, 0, 245, 212, 278, 217, 223, 266, 312, 251, - 271, 178, 303, 279, 227, 0, 0, 531, 505, 530, - 532, 533, 529, 534, 535, 516, 426, 0, 469, 527, - 526, 528, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 418, 419, 0, 0, 0, 0, 464, 0, + 420, 0, 0, 466, 0, 446, 0, 0, 168, 285, + 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, + 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, + 193, 206, 189, 247, 443, 462, 467, 188, 525, 460, + 309, 172, 0, 308, 246, 295, 300, 232, 226, 171, + 297, 230, 225, 218, 197, 526, 210, 258, 224, 259, + 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 221, 0, 262, - 200, 492, 473, 474, 475, 425, 476, 471, 472, 493, - 467, 489, 490, 449, 452, 477, 139, 478, 491, 494, - 495, 536, 537, 538, 481, 496, 488, 487, 479, 468, - 497, 498, 453, 451, 482, 483, 470, 484, 0, 499, - 500, 0, 0, 319, 320, 321, 305, 0, 192, 114, - 288, 35, 104, 86, 0, 0, 0, 0, 0, 0, - 0, 250, 345, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, - 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, + 0, 458, 0, 0, 311, 0, 0, 509, 0, 0, + 0, 284, 0, 0, 219, 0, 0, 0, 461, 0, + 270, 252, 522, 409, 0, 268, 222, 296, 260, 302, + 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, + 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, + 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, + 186, 166, 256, 294, 0, 204, 265, 229, 167, 228, + 257, 293, 292, 318, 324, 325, 329, 0, 330, 0, + 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, + 0, 0, 0, 323, 202, 161, 306, 507, 248, 0, + 521, 502, 504, 505, 508, 512, 513, 514, 515, 516, + 518, 520, 524, 273, 0, 0, 0, 0, 0, 213, + 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 281, 304, 316, 333, 336, + 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, + 0, 0, 523, 0, 0, 0, 315, 0, 0, 0, + 0, 0, 465, 238, 239, 240, 241, 510, 0, 181, + 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 328, 201, 207, 0, 209, + 180, 253, 203, 313, 216, 0, 245, 212, 278, 217, + 223, 266, 312, 251, 271, 178, 303, 279, 227, 0, + 0, 532, 506, 531, 533, 534, 530, 535, 536, 517, + 427, 0, 470, 528, 527, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 350, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, + 0, 221, 0, 262, 200, 493, 474, 475, 476, 426, + 477, 472, 473, 494, 468, 490, 491, 450, 453, 478, + 139, 479, 492, 495, 496, 537, 538, 539, 482, 497, + 489, 488, 480, 469, 498, 499, 454, 452, 483, 484, + 471, 485, 0, 500, 501, 288, 463, 319, 320, 321, + 305, 0, 192, 0, 0, 0, 250, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, + 0, 0, 0, 195, 0, 0, 220, 0, 0, 0, + 455, 0, 0, 280, 234, 0, 0, 0, 0, 511, + 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 417, 0, 0, 448, 487, 486, 436, 445, 0, + 0, 176, 437, 0, 444, 438, 442, 441, 439, 440, + 0, 503, 0, 0, 0, 0, 0, 0, 0, 421, + 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 418, 419, 0, 0, 0, 0, 464, + 0, 420, 0, 0, 466, 0, 446, 0, 0, 168, + 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, + 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, + 267, 193, 206, 189, 247, 443, 462, 467, 188, 525, + 460, 309, 172, 0, 308, 246, 295, 300, 232, 226, + 171, 297, 230, 225, 218, 197, 526, 210, 258, 224, + 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 458, 0, 0, 311, 0, 0, 509, 0, + 0, 0, 284, 0, 0, 219, 0, 0, 0, 461, + 0, 270, 252, 522, 0, 0, 268, 222, 296, 260, + 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, + 175, 187, 194, 196, 198, 199, 242, 243, 255, 275, + 289, 290, 291, 190, 183, 269, 184, 208, 185, 164, + 277, 186, 166, 256, 294, 0, 204, 265, 229, 167, + 228, 257, 293, 292, 318, 324, 325, 329, 0, 330, + 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, + 0, 0, 0, 0, 323, 202, 161, 306, 507, 248, + 0, 521, 502, 504, 505, 508, 512, 513, 514, 515, + 516, 518, 520, 524, 273, 0, 0, 0, 0, 0, + 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 281, 304, 316, 333, + 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, + 0, 0, 0, 523, 0, 0, 0, 315, 0, 0, + 0, 0, 0, 465, 238, 239, 240, 241, 510, 0, + 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 201, 207, 0, + 209, 180, 253, 203, 313, 216, 0, 245, 212, 278, + 217, 223, 266, 312, 251, 271, 178, 303, 279, 227, + 0, 0, 532, 506, 531, 533, 534, 530, 535, 536, + 517, 427, 0, 470, 528, 527, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 162, 0, 221, 0, 262, 200, 493, 474, 475, 476, + 426, 477, 472, 473, 494, 468, 490, 491, 450, 453, + 478, 139, 479, 492, 495, 496, 537, 538, 539, 482, + 497, 489, 488, 480, 469, 498, 499, 454, 452, 483, + 484, 471, 485, 0, 500, 501, 0, 0, 319, 320, + 321, 305, 0, 192, 114, 288, 35, 104, 86, 0, + 0, 0, 0, 0, 0, 0, 250, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 285, 301, 177, 276, 314, - 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, - 231, 214, 215, 169, 0, 267, 193, 206, 189, 247, - 0, 298, 326, 188, 317, 0, 309, 172, 0, 308, - 246, 295, 300, 232, 226, 171, 297, 230, 225, 218, - 197, 0, 210, 258, 224, 259, 211, 236, 235, 237, + 0, 0, 0, 195, 0, 0, 220, 0, 0, 0, + 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, - 311, 0, 0, 0, 0, 0, 0, 284, 0, 0, - 219, 0, 0, 0, 327, 0, 270, 252, 0, 0, - 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, - 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, - 199, 242, 243, 255, 275, 289, 290, 291, 190, 183, - 269, 184, 208, 185, 164, 277, 186, 166, 256, 294, - 0, 204, 265, 229, 167, 228, 257, 293, 292, 318, - 324, 325, 329, 0, 330, 0, 0, 0, 0, 0, - 0, 0, 332, 0, 0, 0, 0, 0, 0, 323, - 202, 161, 306, 0, 248, 0, 0, 0, 0, 0, - 0, 0, 0, 244, 322, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, + 0, 351, 0, 0, 121, 0, 0, 0, 0, 0, + 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 281, 304, 316, 333, 0, 0, 0, 165, 335, - 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, - 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, - 240, 241, 346, 348, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 328, 201, 207, 0, 209, 180, 253, 203, 313, 216, - 0, 245, 212, 278, 217, 223, 266, 312, 251, 271, - 178, 303, 279, 227, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, + 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, + 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, + 267, 193, 206, 189, 247, 0, 298, 326, 188, 317, + 0, 309, 172, 0, 308, 246, 295, 300, 232, 226, + 171, 297, 230, 225, 218, 197, 0, 210, 258, 224, + 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 162, 0, 221, 87, 262, 200, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 0, 288, 0, 0, - 0, 0, 319, 320, 321, 305, 0, 192, 250, 0, + 350, 0, 0, 0, 0, 311, 0, 0, 0, 0, + 0, 0, 284, 0, 0, 219, 0, 0, 0, 327, + 0, 270, 252, 0, 0, 0, 268, 222, 296, 260, + 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, + 175, 187, 194, 196, 198, 199, 242, 243, 255, 275, + 289, 290, 291, 190, 183, 269, 184, 208, 185, 164, + 277, 186, 166, 256, 294, 0, 204, 265, 229, 167, + 228, 257, 293, 292, 318, 324, 325, 329, 0, 330, + 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, + 0, 0, 0, 0, 323, 202, 161, 306, 0, 248, + 0, 0, 0, 0, 0, 0, 0, 0, 244, 322, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, + 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 281, 304, 316, 333, + 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, + 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, + 0, 0, 0, 331, 238, 239, 240, 241, 347, 349, + 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 201, 207, 0, + 209, 180, 253, 203, 313, 216, 0, 245, 212, 278, + 217, 223, 266, 312, 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 195, 0, 0, 220, 0, - 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, + 36, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, - 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 179, 1985, 1988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 162, 0, 221, 87, 262, 200, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 0, 288, 0, 0, 0, 0, 319, 320, + 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, + 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 121, 0, 0, 0, 0, 0, 0, 176, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, + 1986, 1989, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, - 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, - 169, 0, 267, 193, 206, 189, 247, 0, 298, 326, - 188, 317, 0, 309, 172, 0, 308, 246, 295, 300, - 232, 226, 171, 297, 230, 225, 218, 197, 0, 210, - 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1989, 311, 0, 0, - 0, 1982, 0, 1981, 284, 1983, 1986, 219, 0, 0, - 0, 327, 0, 270, 252, 0, 0, 0, 268, 222, - 296, 260, 302, 286, 310, 264, 261, 163, 287, 191, - 233, 174, 175, 187, 194, 196, 198, 199, 242, 243, - 255, 275, 289, 290, 291, 190, 183, 269, 184, 208, - 185, 164, 277, 186, 166, 256, 294, 1987, 204, 265, - 229, 167, 228, 257, 293, 292, 318, 324, 325, 329, - 0, 330, 0, 0, 0, 0, 0, 0, 0, 332, - 0, 0, 0, 0, 0, 0, 323, 202, 161, 306, - 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, - 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, - 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 281, 304, - 316, 333, 0, 0, 0, 165, 335, 0, 0, 0, - 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, - 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, - 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 328, 201, 207, - 0, 209, 180, 253, 203, 313, 216, 0, 245, 212, - 278, 217, 223, 266, 312, 251, 271, 178, 303, 279, - 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 0, 221, 0, 262, 200, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 0, 288, 0, 0, 0, 0, 319, - 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1308, 0, 0, - 0, 0, 195, 0, 0, 220, 0, 0, 0, 0, - 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 121, 0, 0, 1309, 0, 0, 0, - 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 179, 0, 0, 734, 735, 736, 733, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 168, 285, - 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, - 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, - 193, 206, 189, 247, 0, 298, 326, 188, 317, 0, - 309, 172, 0, 308, 246, 295, 300, 232, 226, 171, - 297, 230, 225, 218, 197, 0, 210, 258, 224, 259, - 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, - 0, 284, 0, 0, 219, 0, 0, 0, 327, 0, - 270, 252, 0, 0, 0, 268, 222, 296, 260, 302, - 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, - 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, - 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, - 186, 166, 256, 294, 0, 204, 265, 229, 167, 228, - 257, 293, 292, 318, 324, 325, 329, 0, 330, 0, - 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, - 0, 0, 0, 323, 202, 161, 306, 0, 248, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 322, 0, - 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, - 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 281, 304, 316, 333, 0, + 0, 0, 0, 0, 0, 0, 0, 168, 285, 301, + 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, + 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, + 206, 189, 247, 0, 298, 326, 188, 317, 0, 309, + 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, + 230, 225, 218, 197, 0, 210, 258, 224, 259, 211, + 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1990, 311, 0, 0, 0, 1983, 0, 1982, + 284, 1984, 1987, 219, 0, 0, 0, 327, 0, 270, + 252, 0, 0, 0, 268, 222, 296, 260, 302, 286, + 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, + 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, + 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, + 166, 256, 294, 1988, 204, 265, 229, 167, 228, 257, + 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, + 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, + 0, 0, 323, 202, 161, 306, 0, 248, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 322, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, @@ -2224,27 +2178,27 @@ var yyAct = [...]int{ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, - 617, 0, 220, 0, 0, 0, 0, 0, 0, 280, + 0, 0, 0, 0, 1309, 0, 0, 0, 0, 195, + 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 625, 626, 0, 0, 0, 0, 176, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 121, 0, 0, 1310, 0, 0, 0, 176, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, + 735, 736, 737, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, - 247, 0, 298, 326, 188, 317, 603, 309, 172, 602, + 247, 0, 298, 326, 188, 317, 0, 309, 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, 252, 0, - 0, 0, 268, 222, 296, 260, 302, 286, 310, 615, + 0, 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, 166, 256, @@ -2255,56 +2209,105 @@ var yyAct = [...]int{ 0, 0, 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 304, 316, 333, 0, 0, 0, 165, - 335, 0, 0, 0, 0, 0, 0, 616, 307, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 619, 238, - 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, + 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, + 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, + 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 201, 207, 0, 209, 180, 253, 203, 313, - 216, 0, 627, 622, 623, 217, 223, 266, 312, 251, - 271, 178, 303, 279, 624, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, + 0, 0, 328, 201, 207, 0, 209, 180, 253, 203, + 313, 216, 0, 245, 212, 278, 217, 223, 266, 312, + 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 221, 0, 262, - 200, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 114, 288, 0, - 0, 0, 0, 319, 320, 321, 305, 0, 192, 250, + 0, 0, 0, 0, 0, 0, 162, 0, 221, 0, + 262, 200, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, + 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 195, 618, 0, + 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 195, 0, 0, 220, - 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 121, 626, + 627, 0, 0, 0, 0, 176, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1683, 0, 0, 121, 0, 0, - 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, + 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, + 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, + 298, 326, 188, 317, 604, 309, 172, 603, 308, 246, + 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, + 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, - 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, - 215, 169, 0, 267, 193, 206, 189, 247, 0, 298, - 326, 188, 317, 0, 309, 172, 0, 308, 246, 295, - 300, 232, 226, 171, 297, 230, 225, 218, 197, 0, - 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, + 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, + 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, + 268, 222, 296, 260, 302, 286, 310, 616, 261, 163, + 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, + 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, + 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, + 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, + 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, + 161, 306, 0, 248, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, - 0, 0, 0, 0, 0, 284, 0, 0, 219, 0, - 0, 0, 327, 0, 270, 252, 0, 0, 0, 268, - 222, 296, 260, 302, 286, 310, 264, 261, 163, 287, - 191, 233, 174, 175, 187, 194, 196, 198, 199, 242, - 243, 255, 275, 289, 290, 291, 190, 183, 269, 184, - 208, 185, 164, 277, 186, 166, 256, 294, 0, 204, - 265, 229, 167, 228, 257, 293, 292, 318, 324, 325, - 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, - 332, 0, 0, 0, 0, 0, 0, 323, 202, 161, - 306, 0, 248, 0, 0, 0, 0, 0, 0, 0, - 0, 244, 322, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, - 304, 316, 333, 0, 0, 0, 165, 335, 0, 0, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, + 0, 0, 0, 0, 0, 0, 617, 307, 0, 0, + 0, 315, 0, 0, 0, 0, 0, 620, 238, 239, + 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 328, 201, 207, 0, 209, 180, 253, 203, 313, 216, + 0, 628, 623, 624, 217, 223, 266, 312, 251, 271, + 178, 303, 279, 625, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 162, 0, 221, 0, 262, 200, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 114, 288, 0, 0, + 0, 0, 319, 320, 321, 305, 0, 192, 250, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 195, 0, 0, 220, 0, + 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1684, 0, 0, 121, 0, 0, 0, + 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, + 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, + 169, 0, 267, 193, 206, 189, 247, 0, 298, 326, + 188, 317, 0, 309, 172, 0, 308, 246, 295, 300, + 232, 226, 171, 297, 230, 225, 218, 197, 0, 210, + 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, + 0, 0, 0, 0, 284, 0, 0, 219, 0, 0, + 0, 327, 0, 270, 252, 0, 0, 0, 268, 222, + 296, 260, 302, 286, 310, 264, 261, 163, 287, 191, + 233, 174, 175, 187, 194, 196, 198, 199, 242, 243, + 255, 275, 289, 290, 291, 190, 183, 269, 184, 208, + 185, 164, 277, 186, 166, 256, 294, 0, 204, 265, + 229, 167, 228, 257, 293, 292, 318, 324, 325, 329, + 0, 330, 0, 0, 0, 0, 0, 0, 0, 332, + 0, 0, 0, 0, 0, 0, 323, 202, 161, 306, + 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, + 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 281, 304, + 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, @@ -2319,13 +2322,13 @@ var yyAct = [...]int{ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 114, 288, 1265, 1266, 0, 0, + 156, 157, 158, 159, 114, 288, 1266, 1267, 0, 0, 319, 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 111, 1330, 0, 121, 0, 0, 0, 0, 0, + 0, 111, 1331, 0, 121, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2353,153 +2356,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 304, 316, 333, - 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, - 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, - 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, - 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 328, 201, 207, 0, 209, - 180, 253, 203, 313, 216, 0, 245, 212, 278, 217, - 223, 266, 312, 251, 271, 178, 303, 279, 227, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, - 0, 221, 87, 262, 200, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 114, 288, 0, 0, 0, 0, 319, 320, 321, - 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, - 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 111, 1321, - 0, 121, 0, 0, 0, 0, 0, 0, 176, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 285, 301, 177, - 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, - 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, - 189, 247, 0, 298, 326, 188, 317, 0, 309, 172, - 0, 308, 246, 295, 300, 232, 226, 171, 297, 230, - 225, 218, 197, 0, 210, 258, 224, 259, 211, 236, - 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 311, 0, 0, 0, 0, 0, 0, 284, - 0, 0, 219, 0, 0, 0, 327, 0, 270, 252, - 0, 0, 0, 268, 222, 296, 260, 302, 286, 310, - 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, - 196, 198, 199, 242, 243, 255, 275, 289, 290, 291, - 190, 183, 269, 184, 208, 185, 164, 277, 186, 166, - 256, 294, 0, 204, 265, 229, 167, 228, 257, 293, - 292, 318, 324, 325, 329, 0, 330, 0, 0, 0, - 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, - 0, 323, 202, 161, 306, 0, 248, 0, 0, 0, - 0, 0, 0, 0, 0, 244, 322, 0, 0, 0, - 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 281, 304, 316, 333, 0, 0, 0, - 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, - 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 328, 201, 207, 0, 209, 180, 253, 203, - 313, 216, 0, 245, 212, 278, 217, 223, 266, 312, - 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 162, 0, 221, 87, - 262, 200, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, - 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, - 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, - 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 121, 625, - 626, 0, 0, 0, 0, 176, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, - 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, - 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, - 298, 326, 188, 317, 603, 309, 172, 602, 308, 246, - 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, - 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, - 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, - 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, - 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, - 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, - 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, - 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, - 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, - 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, - 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, - 161, 306, 0, 248, 0, 0, 0, 0, 0, 0, - 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, - 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 281, 304, 316, 333, 0, 0, 0, 165, 335, 0, - 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, - 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, - 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 201, 207, 0, 209, 180, 253, 203, 313, 216, 0, - 627, 622, 623, 217, 223, 266, 312, 251, 271, 178, - 303, 279, 624, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 0, 221, 0, 262, 200, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 0, 288, 0, 0, 0, - 0, 319, 320, 321, 305, 0, 192, 250, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 195, 0, 0, 220, 0, 0, - 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1263, 0, 0, 121, 0, 0, 0, 0, - 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 285, 301, 177, 276, 314, 182, 283, 173, 249, - 272, 0, 0, 170, 299, 282, 231, 214, 215, 169, - 0, 267, 193, 206, 189, 247, 0, 298, 326, 188, - 317, 0, 309, 172, 0, 308, 246, 295, 300, 232, - 226, 171, 297, 230, 225, 218, 197, 0, 210, 258, - 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, - 0, 0, 0, 284, 0, 0, 219, 0, 0, 0, - 327, 0, 270, 252, 0, 0, 0, 268, 222, 296, - 260, 302, 286, 310, 264, 261, 163, 287, 191, 233, - 174, 175, 187, 194, 196, 198, 199, 242, 243, 255, - 275, 289, 290, 291, 190, 183, 269, 184, 208, 185, - 164, 277, 186, 166, 256, 294, 0, 204, 265, 229, - 167, 228, 257, 293, 292, 318, 324, 325, 329, 0, - 330, 0, 0, 0, 0, 0, 0, 0, 332, 0, - 0, 0, 0, 0, 0, 323, 202, 161, 306, 0, - 248, 0, 0, 0, 0, 0, 0, 0, 0, 244, - 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, - 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 281, 304, 316, - 333, 0, 0, 0, 165, 335, 0, 0, 0, 0, + 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, @@ -2510,23 +2367,23 @@ var yyAct = [...]int{ 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 162, 0, 221, 0, 262, 200, 124, 125, 126, 127, + 162, 0, 221, 87, 262, 200, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 0, 288, 1265, 1266, 0, 0, 319, 320, + 158, 159, 114, 288, 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 195, 966, 0, 220, 0, 0, 0, 0, 0, + 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 121, 0, 0, 964, 0, 0, 0, 176, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, + 1322, 0, 121, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 962, 0, 0, 0, 0, 168, 285, 301, + 0, 0, 0, 0, 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, 298, 326, 188, 317, 0, 309, @@ -2547,56 +2404,105 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 281, 304, 316, 333, 0, 0, - 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, - 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, - 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, + 0, 0, 0, 0, 281, 304, 316, 333, 336, 0, + 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, + 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, + 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, + 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 328, 201, 207, 0, 209, 180, + 253, 203, 313, 216, 0, 245, 212, 278, 217, 223, + 266, 312, 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 201, 207, 0, 209, 180, 253, - 203, 313, 216, 0, 245, 212, 278, 217, 223, 266, - 312, 251, 271, 178, 303, 279, 227, 0, 0, 0, + 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, + 221, 87, 262, 200, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 0, 288, 0, 0, 0, 0, 319, 320, 321, 305, + 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, + 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, + 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 162, 0, 221, - 0, 262, 200, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 0, - 288, 0, 0, 0, 0, 319, 320, 321, 305, 0, - 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 195, 960, - 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, + 121, 626, 627, 0, 0, 0, 0, 176, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, - 0, 0, 964, 0, 0, 0, 176, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 962, - 0, 0, 0, 0, 168, 285, 301, 177, 276, 314, - 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, - 231, 214, 215, 169, 0, 267, 193, 206, 189, 247, - 0, 298, 326, 188, 317, 0, 309, 172, 0, 308, - 246, 295, 300, 232, 226, 171, 297, 230, 225, 218, - 197, 0, 210, 258, 224, 259, 211, 236, 235, 237, + 0, 0, 0, 0, 0, 168, 285, 301, 177, 276, + 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, + 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, + 247, 0, 298, 326, 188, 317, 604, 309, 172, 603, + 308, 246, 295, 300, 232, 226, 171, 297, 230, 225, + 218, 197, 0, 210, 258, 224, 259, 211, 236, 235, + 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 311, 0, 0, 0, 0, 0, 0, 284, 0, + 0, 219, 0, 0, 0, 327, 0, 270, 252, 0, + 0, 0, 268, 222, 296, 260, 302, 286, 310, 264, + 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, + 198, 199, 242, 243, 255, 275, 289, 290, 291, 190, + 183, 269, 184, 208, 185, 164, 277, 186, 166, 256, + 294, 0, 204, 265, 229, 167, 228, 257, 293, 292, + 318, 324, 325, 329, 0, 330, 0, 0, 0, 0, + 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, + 323, 202, 161, 306, 0, 248, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 322, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, + 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, + 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 328, 201, 207, 0, 209, 180, 253, 203, + 313, 216, 0, 628, 623, 624, 217, 223, 266, 312, + 251, 271, 178, 303, 279, 625, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 162, 0, 221, 0, + 262, 200, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, + 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, + 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1264, 0, 0, 121, 0, + 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 311, 0, 0, 0, 0, 0, 0, 284, 0, 0, - 219, 0, 0, 0, 327, 0, 270, 252, 0, 0, - 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, - 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, - 199, 242, 243, 255, 275, 289, 290, 291, 190, 183, - 269, 184, 208, 185, 164, 277, 186, 166, 256, 294, - 0, 204, 265, 229, 167, 228, 257, 293, 292, 318, - 324, 325, 329, 0, 330, 0, 0, 0, 0, 0, - 0, 0, 332, 0, 0, 0, 0, 0, 0, 323, - 202, 161, 306, 0, 248, 0, 0, 0, 0, 0, - 0, 0, 0, 244, 322, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 281, 304, 316, 333, 0, 0, 0, 165, 335, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, + 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, + 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, + 298, 326, 188, 317, 0, 309, 172, 0, 308, 246, + 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, + 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, + 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, + 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, + 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, + 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, + 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, + 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, + 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, + 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, + 161, 306, 0, 248, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, @@ -2611,19 +2517,19 @@ var yyAct = [...]int{ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 0, 288, 0, 0, + 154, 155, 156, 157, 158, 159, 0, 288, 1266, 1267, 0, 0, 319, 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 195, 0, 0, 220, 0, + 0, 0, 0, 0, 0, 195, 967, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2459, 0, 121, 486, 0, 0, + 0, 0, 0, 0, 0, 0, 121, 0, 0, 965, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 963, 0, 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, 298, 326, @@ -2645,55 +2551,104 @@ var yyAct = [...]int{ 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 304, - 316, 333, 0, 0, 0, 165, 335, 0, 0, 0, - 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, - 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, - 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 328, 201, 207, - 0, 209, 180, 253, 203, 313, 216, 0, 245, 212, - 278, 217, 223, 266, 312, 251, 271, 178, 303, 279, - 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, + 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, + 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, + 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, + 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 328, 201, + 207, 0, 209, 180, 253, 203, 313, 216, 0, 245, + 212, 278, 217, 223, 266, 312, 251, 271, 178, 303, + 279, 227, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 0, 221, 0, 262, 200, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 0, 288, 0, 0, 0, 0, 319, - 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, + 0, 0, 162, 0, 221, 0, 262, 200, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 0, 288, 0, 0, 0, 0, + 319, 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 195, 0, 0, 220, 0, 0, 0, 0, - 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 195, 961, 0, 220, 0, 0, 0, + 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 121, 0, 0, 964, 0, 0, 0, - 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 121, 0, 0, 965, 0, 0, + 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 962, 0, 0, 0, 0, 168, 285, - 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, - 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, - 193, 206, 189, 247, 0, 298, 326, 188, 317, 0, - 309, 172, 0, 308, 246, 295, 300, 232, 226, 171, - 297, 230, 225, 218, 197, 0, 210, 258, 224, 259, - 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 963, 0, 0, 0, 0, 168, + 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, + 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, + 267, 193, 206, 189, 247, 0, 298, 326, 188, 317, + 0, 309, 172, 0, 308, 246, 295, 300, 232, 226, + 171, 297, 230, 225, 218, 197, 0, 210, 258, 224, + 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, + 0, 0, 284, 0, 0, 219, 0, 0, 0, 327, + 0, 270, 252, 0, 0, 0, 268, 222, 296, 260, + 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, + 175, 187, 194, 196, 198, 199, 242, 243, 255, 275, + 289, 290, 291, 190, 183, 269, 184, 208, 185, 164, + 277, 186, 166, 256, 294, 0, 204, 265, 229, 167, + 228, 257, 293, 292, 318, 324, 325, 329, 0, 330, + 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, + 0, 0, 0, 0, 323, 202, 161, 306, 0, 248, + 0, 0, 0, 0, 0, 0, 0, 0, 244, 322, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, + 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 281, 304, 316, 333, + 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, + 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, + 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, + 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 201, 207, 0, + 209, 180, 253, 203, 313, 216, 0, 245, 212, 278, + 217, 223, 266, 312, 251, 271, 178, 303, 279, 227, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 162, 0, 221, 0, 262, 200, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 0, 288, 0, 0, 0, 0, 319, 320, + 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, + 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2461, 0, 121, 487, 0, 0, 0, 0, 0, 176, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 168, 285, 301, + 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, + 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, + 206, 189, 247, 0, 298, 326, 188, 317, 0, 309, + 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, + 230, 225, 218, 197, 0, 210, 258, 224, 259, 211, + 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, - 0, 284, 0, 0, 219, 0, 0, 0, 327, 0, - 270, 252, 0, 0, 0, 268, 222, 296, 260, 302, - 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, - 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, - 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, - 186, 166, 256, 294, 0, 204, 265, 229, 167, 228, - 257, 293, 292, 318, 324, 325, 329, 0, 330, 0, - 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, - 0, 0, 0, 323, 202, 161, 306, 0, 248, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 322, 0, - 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, - 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 281, 304, 316, 333, 0, + 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, + 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, + 252, 0, 0, 0, 268, 222, 296, 260, 302, 286, + 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, + 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, + 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, + 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, + 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, + 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, + 0, 0, 323, 202, 161, 306, 0, 248, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 322, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, @@ -2715,13 +2670,13 @@ var yyAct = [...]int{ 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 0, 0, 964, 0, 0, 0, 176, 0, 0, + 121, 0, 0, 965, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2111, 0, 0, 0, 0, 168, 285, 301, 177, 276, + 963, 0, 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, 298, 326, 188, 317, 0, 309, 172, 0, @@ -2742,56 +2697,105 @@ var yyAct = [...]int{ 0, 0, 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 304, 316, 333, 0, 0, 0, 165, - 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, - 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, + 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, + 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, + 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 201, 207, 0, 209, 180, 253, 203, 313, - 216, 0, 245, 212, 278, 217, 223, 266, 312, 251, - 271, 178, 303, 279, 227, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, + 0, 0, 328, 201, 207, 0, 209, 180, 253, 203, + 313, 216, 0, 245, 212, 278, 217, 223, 266, 312, + 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 221, 0, 262, - 200, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 0, 288, 0, - 0, 0, 0, 319, 320, 321, 305, 0, 192, 250, + 0, 0, 0, 0, 0, 0, 162, 0, 221, 0, + 262, 200, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, + 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, + 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, + 0, 965, 0, 0, 0, 176, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2112, 0, + 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, + 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, + 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, + 298, 326, 188, 317, 0, 309, 172, 0, 308, 246, + 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, + 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, + 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, + 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, + 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, + 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, + 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, + 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, + 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, + 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, + 161, 306, 0, 248, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 195, 1697, 0, 220, - 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, + 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, + 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, + 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, - 964, 0, 0, 0, 176, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, + 328, 201, 207, 0, 209, 180, 253, 203, 313, 216, + 0, 245, 212, 278, 217, 223, 266, 312, 251, 271, + 178, 303, 279, 227, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 162, 0, 221, 0, 262, 200, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 0, 288, 0, 0, + 0, 0, 319, 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 195, 1698, 0, 220, 0, + 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, - 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, - 215, 169, 0, 267, 193, 206, 189, 247, 0, 298, - 326, 188, 317, 0, 309, 172, 0, 308, 246, 295, - 300, 232, 226, 171, 297, 230, 225, 218, 197, 0, - 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, + 0, 0, 0, 0, 0, 0, 121, 0, 0, 965, + 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, - 0, 0, 0, 0, 0, 284, 0, 0, 219, 0, - 0, 0, 327, 0, 270, 252, 0, 0, 0, 268, - 222, 296, 260, 302, 286, 310, 264, 261, 163, 287, - 191, 233, 174, 175, 187, 194, 196, 198, 199, 242, - 243, 255, 275, 289, 290, 291, 190, 183, 269, 184, - 208, 185, 164, 277, 186, 166, 256, 294, 0, 204, - 265, 229, 167, 228, 257, 293, 292, 318, 324, 325, - 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, - 332, 0, 0, 0, 0, 0, 0, 323, 202, 161, - 306, 0, 248, 0, 0, 0, 0, 0, 0, 0, - 0, 244, 322, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, - 304, 316, 333, 0, 0, 0, 165, 335, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, + 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, + 169, 0, 267, 193, 206, 189, 247, 0, 298, 326, + 188, 317, 0, 309, 172, 0, 308, 246, 295, 300, + 232, 226, 171, 297, 230, 225, 218, 197, 0, 210, + 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, + 0, 0, 0, 0, 284, 0, 0, 219, 0, 0, + 0, 327, 0, 270, 252, 0, 0, 0, 268, 222, + 296, 260, 302, 286, 310, 264, 261, 163, 287, 191, + 233, 174, 175, 187, 194, 196, 198, 199, 242, 243, + 255, 275, 289, 290, 291, 190, 183, 269, 184, 208, + 185, 164, 277, 186, 166, 256, 294, 0, 204, 265, + 229, 167, 228, 257, 293, 292, 318, 324, 325, 329, + 0, 330, 0, 0, 0, 0, 0, 0, 0, 332, + 0, 0, 0, 0, 0, 0, 323, 202, 161, 306, + 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, + 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 281, 304, + 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, @@ -2812,7 +2816,7 @@ var yyAct = [...]int{ 0, 0, 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2563, 0, 121, 0, 0, 0, 0, 0, + 0, 0, 2565, 0, 121, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2840,153 +2844,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 304, 316, 333, - 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, - 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, - 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, - 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 328, 201, 207, 0, 209, - 180, 253, 203, 313, 216, 0, 245, 212, 278, 217, - 223, 266, 312, 251, 271, 178, 303, 279, 227, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, - 0, 221, 0, 262, 200, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 0, 288, 0, 0, 0, 0, 319, 320, 321, - 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, - 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 121, 486, 0, 0, 0, 0, 0, 176, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 285, 301, 177, - 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, - 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, - 189, 247, 0, 298, 326, 188, 317, 0, 309, 172, - 0, 308, 246, 295, 300, 232, 226, 171, 297, 230, - 225, 218, 197, 0, 210, 258, 224, 259, 211, 236, - 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 311, 0, 0, 0, 0, 0, 0, 284, - 0, 0, 219, 0, 0, 0, 327, 0, 270, 252, - 0, 0, 0, 268, 222, 296, 260, 302, 286, 310, - 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, - 196, 198, 199, 242, 243, 255, 275, 289, 290, 291, - 190, 183, 269, 184, 208, 185, 164, 277, 186, 166, - 256, 294, 0, 204, 265, 229, 167, 228, 257, 293, - 292, 318, 324, 325, 329, 0, 330, 0, 0, 0, - 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, - 0, 323, 202, 161, 306, 0, 248, 0, 0, 0, - 0, 0, 0, 0, 0, 244, 322, 0, 0, 0, - 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 281, 304, 316, 333, 0, 0, 0, - 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, - 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 328, 201, 207, 0, 209, 180, 253, 203, - 313, 216, 0, 245, 212, 278, 217, 223, 266, 312, - 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 162, 0, 221, 0, - 262, 200, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, - 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, - 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, - 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2219, 0, 0, 121, 0, - 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, - 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, - 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, - 298, 326, 188, 317, 0, 309, 172, 0, 308, 246, - 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, - 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, - 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, - 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, - 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, - 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, - 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, - 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, - 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, - 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, - 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, - 161, 306, 0, 248, 0, 0, 0, 0, 0, 0, - 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, - 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 281, 304, 316, 333, 0, 0, 0, 165, 335, 0, - 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, - 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, - 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 201, 207, 0, 209, 180, 253, 203, 313, 216, 0, - 245, 212, 278, 217, 223, 266, 312, 251, 271, 178, - 303, 279, 227, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 0, 221, 0, 262, 200, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 0, 288, 0, 0, 0, - 0, 319, 320, 321, 305, 0, 192, 250, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 195, 0, 0, 220, 0, 0, - 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, - 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 285, 301, 177, 276, 314, 182, 283, 173, 249, - 272, 0, 0, 170, 299, 282, 231, 214, 215, 169, - 0, 267, 193, 206, 189, 247, 0, 298, 326, 188, - 317, 0, 309, 172, 0, 308, 246, 295, 300, 232, - 226, 171, 297, 230, 225, 218, 197, 0, 210, 258, - 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, - 2403, 0, 0, 284, 0, 0, 219, 0, 0, 0, - 327, 0, 270, 252, 0, 0, 0, 268, 222, 296, - 260, 302, 286, 310, 264, 261, 163, 287, 191, 233, - 174, 175, 187, 194, 196, 198, 199, 242, 243, 255, - 275, 289, 290, 291, 190, 183, 269, 184, 208, 185, - 164, 277, 186, 166, 256, 294, 0, 204, 265, 229, - 167, 228, 257, 293, 292, 318, 324, 325, 329, 0, - 330, 0, 0, 0, 0, 0, 0, 0, 332, 0, - 0, 0, 0, 0, 0, 323, 202, 161, 306, 0, - 248, 0, 0, 0, 0, 0, 0, 0, 0, 244, - 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, - 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 281, 304, 316, - 333, 0, 0, 0, 165, 335, 0, 0, 0, 0, + 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, @@ -3007,7 +2865,7 @@ var yyAct = [...]int{ 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 176, + 0, 0, 121, 487, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3021,69 +2879,118 @@ var yyAct = [...]int{ 230, 225, 218, 197, 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 311, 0, 0, 0, 2228, 0, 0, - 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, - 252, 0, 0, 0, 268, 222, 296, 260, 302, 286, - 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, - 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, - 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, - 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, - 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, - 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, - 0, 0, 323, 202, 161, 306, 0, 248, 0, 0, - 0, 0, 0, 0, 0, 0, 244, 322, 0, 0, - 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 281, 304, 316, 333, 0, 0, - 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, - 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, - 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, + 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, + 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, + 252, 0, 0, 0, 268, 222, 296, 260, 302, 286, + 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, + 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, + 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, + 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, + 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, + 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, + 0, 0, 323, 202, 161, 306, 0, 248, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 322, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 281, 304, 316, 333, 336, 0, + 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, + 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, + 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, + 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 328, 201, 207, 0, 209, 180, + 253, 203, 313, 216, 0, 245, 212, 278, 217, 223, + 266, 312, 251, 271, 178, 303, 279, 227, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, + 221, 0, 262, 200, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 0, 288, 0, 0, 0, 0, 319, 320, 321, 305, + 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, + 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, + 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2221, 0, 0, + 121, 0, 0, 0, 0, 0, 0, 176, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 168, 285, 301, 177, 276, + 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, + 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, + 247, 0, 298, 326, 188, 317, 0, 309, 172, 0, + 308, 246, 295, 300, 232, 226, 171, 297, 230, 225, + 218, 197, 0, 210, 258, 224, 259, 211, 236, 235, + 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 311, 0, 0, 0, 0, 0, 0, 284, 0, + 0, 219, 0, 0, 0, 327, 0, 270, 252, 0, + 0, 0, 268, 222, 296, 260, 302, 286, 310, 264, + 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, + 198, 199, 242, 243, 255, 275, 289, 290, 291, 190, + 183, 269, 184, 208, 185, 164, 277, 186, 166, 256, + 294, 0, 204, 265, 229, 167, 228, 257, 293, 292, + 318, 324, 325, 329, 0, 330, 0, 0, 0, 0, + 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, + 323, 202, 161, 306, 0, 248, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 322, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, + 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, + 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 201, 207, 0, 209, 180, 253, - 203, 313, 216, 0, 245, 212, 278, 217, 223, 266, - 312, 251, 271, 178, 303, 279, 227, 0, 0, 0, + 0, 0, 328, 201, 207, 0, 209, 180, 253, 203, + 313, 216, 0, 245, 212, 278, 217, 223, 266, 312, + 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 162, 0, 221, - 0, 262, 200, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 0, - 288, 0, 0, 0, 0, 319, 320, 321, 305, 0, - 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, - 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, + 0, 0, 0, 0, 0, 0, 162, 0, 221, 0, + 262, 200, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, + 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, + 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, + 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 285, 301, 177, 276, 314, - 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, - 231, 214, 215, 169, 0, 267, 193, 206, 189, 247, - 0, 298, 326, 188, 317, 0, 309, 172, 0, 308, - 246, 295, 300, 232, 226, 171, 297, 230, 225, 218, - 197, 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, + 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, + 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, + 298, 326, 188, 317, 0, 309, 172, 0, 308, 246, + 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, + 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 311, 0, 0, 0, 0, 0, 0, 284, 0, 0, - 219, 0, 0, 0, 327, 0, 270, 252, 0, 0, - 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, - 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, - 199, 242, 243, 255, 275, 289, 290, 291, 190, 183, - 269, 184, 208, 185, 164, 277, 186, 166, 256, 294, - 0, 204, 265, 229, 167, 228, 257, 293, 292, 318, - 324, 325, 329, 0, 330, 0, 0, 0, 0, 0, - 0, 0, 332, 0, 0, 0, 0, 0, 0, 323, - 202, 161, 306, 0, 248, 0, 0, 0, 0, 0, - 0, 0, 0, 244, 322, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, + 0, 0, 0, 2405, 0, 0, 284, 0, 0, 219, + 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, + 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, + 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, + 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, + 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, + 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, + 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, + 161, 306, 0, 248, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 281, 304, 316, 333, 0, 0, 0, 165, 335, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, @@ -3109,7 +3016,7 @@ var yyAct = [...]int{ 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2058, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, @@ -3119,7 +3026,7 @@ var yyAct = [...]int{ 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, - 0, 0, 0, 0, 284, 0, 0, 219, 0, 0, + 0, 2230, 0, 0, 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, 242, 243, @@ -3132,55 +3039,104 @@ var yyAct = [...]int{ 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 304, - 316, 333, 0, 0, 0, 165, 335, 0, 0, 0, - 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, - 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, - 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 328, 201, 207, - 0, 209, 180, 253, 203, 313, 216, 0, 245, 212, - 278, 217, 223, 266, 312, 251, 271, 178, 303, 279, - 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, + 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, + 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, + 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, + 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 328, 201, + 207, 0, 209, 180, 253, 203, 313, 216, 0, 245, + 212, 278, 217, 223, 266, 312, 251, 271, 178, 303, + 279, 227, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 0, 221, 0, 262, 200, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 0, 288, 0, 0, 0, 0, 319, - 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, + 0, 0, 162, 0, 221, 0, 262, 200, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 0, 288, 0, 0, 0, 0, + 319, 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 195, 0, 0, 220, 0, 0, 0, 0, - 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 195, 0, 0, 220, 0, 0, 0, + 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 121, 0, 0, 964, 0, 0, 0, - 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, + 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2021, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, + 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, + 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, + 267, 193, 206, 189, 247, 0, 298, 326, 188, 317, + 0, 309, 172, 0, 308, 246, 295, 300, 232, 226, + 171, 297, 230, 225, 218, 197, 0, 210, 258, 224, + 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 168, 285, - 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, - 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, - 193, 206, 189, 247, 0, 298, 326, 188, 317, 0, - 309, 172, 0, 308, 246, 295, 300, 232, 226, 171, - 297, 230, 225, 218, 197, 0, 210, 258, 224, 259, - 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, + 0, 0, 284, 0, 0, 219, 0, 0, 0, 327, + 0, 270, 252, 0, 0, 0, 268, 222, 296, 260, + 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, + 175, 187, 194, 196, 198, 199, 242, 243, 255, 275, + 289, 290, 291, 190, 183, 269, 184, 208, 185, 164, + 277, 186, 166, 256, 294, 0, 204, 265, 229, 167, + 228, 257, 293, 292, 318, 324, 325, 329, 0, 330, + 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, + 0, 0, 0, 0, 323, 202, 161, 306, 0, 248, + 0, 0, 0, 0, 0, 0, 0, 0, 244, 322, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, + 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 281, 304, 316, 333, + 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, + 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, + 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, + 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 201, 207, 0, + 209, 180, 253, 203, 313, 216, 0, 245, 212, 278, + 217, 223, 266, 312, 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, - 0, 284, 0, 0, 219, 0, 0, 0, 327, 0, - 270, 252, 0, 0, 0, 268, 222, 296, 260, 302, - 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, - 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, - 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, - 186, 166, 256, 294, 0, 204, 265, 229, 167, 228, - 257, 293, 292, 318, 324, 325, 329, 0, 330, 0, - 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, - 0, 0, 0, 323, 202, 161, 306, 0, 248, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 322, 0, - 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, - 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 281, 304, 316, 333, 0, + 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 162, 0, 221, 0, 262, 200, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 0, 288, 0, 0, 0, 0, 319, 320, + 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, + 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 121, 0, 0, 0, 0, 0, 0, 176, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2059, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 168, 285, 301, + 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, + 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, + 206, 189, 247, 0, 298, 326, 188, 317, 0, 309, + 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, + 230, 225, 218, 197, 0, 210, 258, 224, 259, 211, + 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, + 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, + 252, 0, 0, 0, 268, 222, 296, 260, 302, 286, + 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, + 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, + 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, + 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, + 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, + 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, + 0, 0, 323, 202, 161, 306, 0, 248, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 322, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, @@ -3202,7 +3158,7 @@ var yyAct = [...]int{ 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 0, 0, 1887, 0, 0, 0, 176, 0, 0, + 121, 0, 0, 965, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3229,56 +3185,105 @@ var yyAct = [...]int{ 0, 0, 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 304, 316, 333, 0, 0, 0, 165, - 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, - 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, + 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, + 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, + 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 201, 207, 0, 209, 180, 253, 203, 313, - 216, 0, 245, 212, 278, 217, 223, 266, 312, 251, - 271, 178, 303, 279, 227, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, + 0, 0, 328, 201, 207, 0, 209, 180, 253, 203, + 313, 216, 0, 245, 212, 278, 217, 223, 266, 312, + 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 221, 0, 262, - 200, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 0, 288, 0, - 0, 0, 0, 319, 320, 321, 305, 0, 192, 250, + 0, 0, 0, 0, 0, 0, 162, 0, 221, 0, + 262, 200, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, + 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, + 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 195, 0, 0, 220, - 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, + 0, 1888, 0, 0, 0, 176, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, - 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 168, 285, 301, 177, 276, 314, 182, 283, - 173, 249, 272, 0, 0, 170, 299, 282, 231, 214, - 215, 169, 0, 267, 193, 206, 189, 247, 0, 298, - 326, 188, 317, 0, 309, 172, 0, 308, 246, 295, - 300, 232, 226, 171, 297, 230, 225, 218, 197, 0, - 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, + 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, + 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, + 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, + 298, 326, 188, 317, 0, 309, 172, 0, 308, 246, + 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, + 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, - 0, 0, 0, 0, 0, 284, 0, 0, 219, 0, - 0, 0, 327, 0, 270, 252, 0, 0, 0, 268, - 222, 296, 260, 302, 286, 310, 264, 261, 163, 287, - 191, 233, 174, 175, 187, 194, 196, 198, 199, 242, - 243, 255, 275, 289, 290, 291, 190, 183, 269, 184, - 208, 185, 164, 277, 186, 166, 256, 294, 0, 204, - 265, 229, 167, 228, 257, 293, 292, 318, 324, 325, - 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, - 332, 0, 0, 0, 0, 0, 0, 323, 202, 161, - 306, 0, 248, 0, 0, 0, 0, 0, 0, 0, - 0, 244, 322, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, - 304, 316, 333, 0, 0, 0, 165, 335, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, + 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, + 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, + 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, + 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, + 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, + 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, + 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, + 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, + 161, 306, 0, 248, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, + 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, + 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, + 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 328, 201, 207, 0, 209, 180, 253, 203, 313, 216, + 0, 245, 212, 278, 217, 223, 266, 312, 251, 271, + 178, 303, 279, 227, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 162, 0, 221, 0, 262, 200, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 0, 288, 0, 0, + 0, 0, 319, 320, 321, 305, 0, 192, 250, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 195, 0, 0, 220, 0, + 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, + 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1708, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 168, 285, 301, 177, 276, 314, 182, 283, 173, + 249, 272, 0, 0, 170, 299, 282, 231, 214, 215, + 169, 0, 267, 193, 206, 189, 247, 0, 298, 326, + 188, 317, 0, 309, 172, 0, 308, 246, 295, 300, + 232, 226, 171, 297, 230, 225, 218, 197, 0, 210, + 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, + 0, 0, 0, 0, 284, 0, 0, 219, 0, 0, + 0, 327, 0, 270, 252, 0, 0, 0, 268, 222, + 296, 260, 302, 286, 310, 264, 261, 163, 287, 191, + 233, 174, 175, 187, 194, 196, 198, 199, 242, 243, + 255, 275, 289, 290, 291, 190, 183, 269, 184, 208, + 185, 164, 277, 186, 166, 256, 294, 0, 204, 265, + 229, 167, 228, 257, 293, 292, 318, 324, 325, 329, + 0, 330, 0, 0, 0, 0, 0, 0, 0, 332, + 0, 0, 0, 0, 0, 0, 323, 202, 161, 306, + 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, + 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 281, 304, + 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, @@ -3299,7 +3304,7 @@ var yyAct = [...]int{ 0, 0, 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 121, 0, 0, 1705, 0, 0, + 0, 0, 0, 0, 121, 0, 0, 1706, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3327,55 +3332,104 @@ var yyAct = [...]int{ 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 304, 316, 333, - 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, - 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, - 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, - 334, 263, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 328, 201, 207, 0, 209, - 180, 253, 203, 313, 216, 0, 245, 212, 278, 217, - 223, 266, 312, 251, 271, 178, 303, 279, 227, 0, + 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, + 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, + 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, + 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 201, 207, 0, + 209, 180, 253, 203, 313, 216, 0, 245, 212, 278, + 217, 223, 266, 312, 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, - 0, 221, 0, 262, 200, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 0, 288, 0, 0, 0, 1632, 319, 320, 321, - 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, - 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, + 162, 0, 221, 0, 262, 200, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 0, 288, 0, 0, 0, 1633, 319, 320, + 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 121, 0, 0, 0, 0, 0, 0, 176, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, + 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, + 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 121, 0, 0, 0, 0, 0, 0, 176, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 285, 301, 177, - 276, 314, 182, 283, 173, 249, 272, 0, 0, 170, - 299, 282, 231, 214, 215, 169, 0, 267, 193, 206, - 189, 247, 0, 298, 326, 188, 317, 0, 309, 172, - 0, 308, 246, 295, 300, 232, 226, 171, 297, 230, - 225, 218, 197, 0, 210, 258, 224, 259, 211, 236, - 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 311, 0, 0, 0, 0, 0, 0, 284, - 0, 0, 219, 0, 0, 0, 327, 0, 270, 252, - 0, 0, 0, 268, 222, 296, 260, 302, 286, 310, - 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, - 196, 198, 199, 242, 243, 255, 275, 289, 290, 291, - 190, 183, 269, 184, 208, 185, 164, 277, 186, 166, - 256, 294, 0, 204, 265, 229, 167, 228, 257, 293, - 292, 318, 324, 325, 329, 0, 330, 0, 0, 0, - 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, - 0, 323, 202, 161, 306, 0, 248, 0, 0, 0, - 0, 0, 0, 0, 0, 244, 322, 0, 0, 0, - 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 281, 304, 316, 333, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 168, 285, 301, + 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, + 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, + 206, 189, 247, 0, 298, 326, 188, 317, 0, 309, + 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, + 230, 225, 218, 197, 0, 210, 258, 224, 259, 211, + 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, + 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, + 252, 0, 0, 0, 268, 222, 296, 260, 302, 286, + 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, + 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, + 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, + 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, + 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, + 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, + 0, 0, 323, 202, 161, 306, 0, 248, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 322, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 281, 304, 316, 333, 336, 0, + 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, + 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, + 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, + 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 328, 201, 207, 0, 209, 180, + 253, 203, 313, 216, 0, 245, 212, 278, 217, 223, + 266, 312, 251, 271, 178, 303, 279, 227, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, + 221, 0, 262, 200, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 0, 288, 0, 0, 0, 0, 319, 320, 321, 305, + 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, + 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, + 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 121, 0, 0, 0, 0, 0, 0, 176, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 168, 285, 301, 177, 276, + 314, 182, 283, 173, 249, 272, 0, 0, 170, 299, + 282, 231, 214, 215, 169, 0, 267, 193, 206, 189, + 247, 0, 298, 326, 188, 317, 0, 309, 172, 0, + 308, 246, 295, 300, 232, 226, 171, 297, 230, 225, + 218, 197, 0, 210, 258, 224, 259, 211, 236, 235, + 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 311, 0, 0, 1616, 0, 0, 0, 284, 0, + 0, 219, 0, 0, 0, 327, 0, 270, 252, 0, + 0, 0, 268, 222, 296, 260, 302, 286, 310, 264, + 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, + 198, 199, 242, 243, 255, 275, 289, 290, 291, 190, + 183, 269, 184, 208, 185, 164, 277, 186, 166, 256, + 294, 0, 204, 265, 229, 167, 228, 257, 293, 292, + 318, 324, 325, 329, 0, 330, 0, 0, 0, 0, + 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, + 323, 202, 161, 306, 0, 248, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 322, 0, 0, 0, 0, + 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, @@ -3411,7 +3465,7 @@ var yyAct = [...]int{ 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, - 0, 0, 1615, 0, 0, 0, 284, 0, 0, 219, + 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, @@ -3424,153 +3478,7 @@ var yyAct = [...]int{ 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 281, 304, 316, 333, 0, 0, 0, 165, 335, 0, - 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, - 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, - 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 201, 207, 0, 209, 180, 253, 203, 313, 216, 0, - 245, 212, 278, 217, 223, 266, 312, 251, 271, 178, - 303, 279, 227, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 0, 221, 0, 262, 200, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 0, 288, 0, 0, 0, - 0, 319, 320, 321, 305, 0, 192, 250, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 195, 0, 0, 220, 0, 0, - 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, - 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 285, 301, 177, 276, 314, 182, 283, 173, 249, - 272, 0, 0, 170, 299, 282, 231, 214, 215, 169, - 0, 267, 193, 206, 189, 247, 0, 298, 326, 188, - 317, 0, 309, 172, 0, 308, 246, 295, 300, 232, - 226, 171, 297, 230, 225, 218, 197, 0, 210, 258, - 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, - 0, 0, 0, 284, 0, 0, 219, 0, 0, 0, - 327, 0, 270, 252, 0, 0, 0, 268, 222, 296, - 260, 302, 286, 310, 264, 261, 163, 287, 191, 233, - 174, 175, 187, 194, 196, 198, 199, 242, 243, 255, - 275, 289, 290, 291, 190, 183, 269, 184, 208, 185, - 164, 277, 186, 166, 256, 294, 0, 204, 265, 229, - 167, 228, 257, 293, 292, 318, 324, 325, 329, 0, - 330, 0, 0, 0, 0, 0, 0, 0, 332, 0, - 0, 0, 0, 0, 0, 323, 202, 161, 306, 0, - 248, 0, 0, 0, 0, 0, 0, 0, 0, 244, - 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, - 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 281, 304, 316, - 333, 0, 0, 0, 165, 335, 0, 0, 0, 0, - 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, - 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, - 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 328, 201, 207, 0, - 209, 180, 253, 203, 313, 216, 0, 245, 212, 278, - 217, 223, 266, 312, 251, 271, 178, 303, 279, 227, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, - 162, 0, 221, 0, 262, 200, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 0, 288, 0, 0, 0, 0, 319, 320, - 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, - 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 176, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 168, 285, 301, - 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, - 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, - 206, 189, 247, 0, 298, 326, 188, 317, 0, 309, - 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, - 230, 225, 218, 197, 0, 210, 258, 224, 259, 211, - 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, - 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, - 252, 0, 0, 0, 268, 222, 296, 260, 302, 286, - 310, 363, 261, 163, 287, 191, 233, 174, 175, 187, - 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, - 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, - 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, - 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, - 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, - 0, 0, 323, 202, 161, 306, 0, 248, 0, 0, - 0, 0, 0, 0, 0, 0, 244, 322, 0, 0, - 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 281, 304, 316, 333, 0, 0, - 0, 165, 335, 0, 0, 0, 0, 0, 0, 364, - 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, - 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 201, 207, 0, 209, 180, 253, - 203, 313, 216, 0, 245, 212, 278, 217, 223, 266, - 312, 251, 271, 178, 303, 279, 227, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 162, 0, 221, - 0, 262, 200, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 0, - 288, 0, 0, 0, 0, 319, 320, 321, 305, 0, - 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, - 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 285, 301, 177, 276, 314, - 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, - 231, 214, 215, 169, 0, 267, 193, 206, 189, 247, - 0, 298, 326, 188, 317, 0, 309, 172, 0, 308, - 246, 295, 300, 232, 226, 171, 297, 230, 225, 218, - 197, 0, 210, 258, 224, 259, 211, 236, 235, 237, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, - 311, 0, 0, 0, 0, 0, 0, 284, 0, 0, - 219, 0, 0, 0, 327, 0, 270, 252, 0, 0, - 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, - 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, - 199, 242, 243, 255, 275, 289, 290, 291, 190, 183, - 269, 184, 208, 185, 164, 277, 186, 166, 256, 294, - 0, 204, 265, 229, 167, 228, 257, 293, 292, 318, - 324, 325, 329, 0, 330, 0, 0, 0, 0, 0, - 0, 0, 332, 0, 0, 0, 0, 0, 0, 323, - 202, 161, 306, 0, 248, 0, 0, 0, 0, 0, - 0, 0, 0, 244, 322, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 281, 304, 316, 333, 0, 0, 0, 165, 335, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, @@ -3581,14 +3489,14 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 162, 0, 221, 0, 262, 200, + 573, 0, 0, 0, 162, 0, 221, 0, 262, 200, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 118, 195, 0, 0, 220, 0, + 0, 0, 0, 0, 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, @@ -3608,7 +3516,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, 268, 222, - 296, 260, 302, 286, 310, 264, 261, 163, 287, 191, + 296, 260, 302, 286, 310, 364, 261, 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, 204, 265, @@ -3619,55 +3527,104 @@ var yyAct = [...]int{ 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 304, - 316, 333, 0, 0, 0, 165, 335, 0, 0, 0, - 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, - 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, - 0, 181, 334, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 328, 201, 207, - 0, 209, 180, 253, 203, 313, 216, 0, 245, 212, - 278, 217, 223, 266, 312, 251, 271, 178, 303, 279, - 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, + 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, + 0, 0, 0, 0, 365, 307, 0, 0, 0, 315, + 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, + 205, 0, 181, 334, 263, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 328, 201, + 207, 0, 209, 180, 253, 203, 313, 216, 0, 245, + 212, 278, 217, 223, 266, 312, 251, 271, 178, 303, + 279, 227, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 162, 0, 221, 0, 262, 200, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 0, 288, 0, 0, 0, 0, + 319, 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 0, 221, 0, 262, 200, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 0, 288, 0, 0, 0, 0, 319, - 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, + 0, 0, 0, 195, 0, 0, 220, 0, 0, 0, + 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 195, 0, 0, 220, 0, 0, 0, 0, - 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, + 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, - 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, + 285, 301, 177, 276, 314, 182, 283, 173, 249, 272, + 0, 0, 170, 299, 282, 231, 214, 215, 169, 0, + 267, 193, 206, 189, 247, 0, 298, 326, 188, 317, + 0, 309, 172, 0, 308, 246, 295, 300, 232, 226, + 171, 297, 230, 225, 218, 197, 0, 210, 258, 224, + 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 168, 285, - 301, 177, 276, 314, 182, 283, 173, 249, 272, 0, - 0, 170, 299, 282, 231, 214, 215, 169, 0, 267, - 193, 206, 189, 247, 0, 298, 326, 188, 317, 0, - 309, 172, 0, 308, 246, 295, 300, 232, 226, 171, - 297, 230, 225, 218, 197, 0, 210, 258, 224, 259, - 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 344, 0, 311, 0, 0, 0, 0, + 0, 0, 284, 0, 0, 219, 0, 0, 0, 327, + 0, 270, 252, 0, 0, 0, 268, 222, 296, 260, + 302, 286, 310, 264, 261, 163, 287, 191, 233, 174, + 175, 187, 194, 196, 198, 199, 242, 243, 255, 275, + 289, 290, 291, 190, 183, 269, 184, 208, 185, 164, + 277, 186, 166, 256, 294, 0, 204, 265, 229, 167, + 228, 257, 293, 292, 318, 324, 325, 329, 0, 330, + 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, + 0, 0, 0, 0, 323, 202, 161, 306, 0, 248, + 0, 0, 0, 0, 0, 0, 0, 0, 244, 322, + 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, + 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 281, 304, 316, 333, + 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, + 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, + 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, + 181, 334, 263, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 201, 207, 0, + 209, 180, 253, 203, 313, 216, 0, 245, 212, 278, + 217, 223, 266, 312, 251, 271, 178, 303, 279, 227, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 162, 0, 221, 0, 262, 200, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 0, 288, 0, 0, 0, 0, 319, 320, + 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 118, 195, 0, 0, 220, 0, 0, 0, 0, 0, + 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 121, 0, 0, 0, 0, 0, 0, 176, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 168, 285, 301, + 177, 276, 314, 182, 283, 173, 249, 272, 0, 0, + 170, 299, 282, 231, 214, 215, 169, 0, 267, 193, + 206, 189, 247, 0, 298, 326, 188, 317, 0, 309, + 172, 0, 308, 246, 295, 300, 232, 226, 171, 297, + 230, 225, 218, 197, 0, 210, 258, 224, 259, 211, + 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, - 0, 284, 0, 0, 219, 0, 0, 0, 327, 0, - 270, 252, 0, 0, 0, 268, 222, 296, 260, 302, - 286, 310, 264, 261, 163, 287, 191, 233, 174, 175, - 187, 194, 196, 198, 199, 242, 243, 255, 275, 289, - 290, 291, 190, 183, 269, 184, 208, 185, 164, 277, - 186, 166, 256, 294, 0, 204, 265, 229, 167, 228, - 257, 293, 292, 318, 324, 325, 329, 0, 330, 0, - 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, - 0, 0, 0, 323, 202, 161, 306, 0, 248, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 322, 0, - 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, - 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 281, 304, 316, 333, 0, + 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, + 284, 0, 0, 219, 0, 0, 0, 327, 0, 270, + 252, 0, 0, 0, 268, 222, 296, 260, 302, 286, + 310, 264, 261, 163, 287, 191, 233, 174, 175, 187, + 194, 196, 198, 199, 242, 243, 255, 275, 289, 290, + 291, 190, 183, 269, 184, 208, 185, 164, 277, 186, + 166, 256, 294, 0, 204, 265, 229, 167, 228, 257, + 293, 292, 318, 324, 325, 329, 0, 330, 0, 0, + 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, + 0, 0, 323, 202, 161, 306, 0, 248, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 322, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, @@ -3685,11 +3642,11 @@ var yyAct = [...]int{ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, 250, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1674, 0, 0, 0, 0, 195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 657, 658, 659, 1676, 0, 0, 0, 176, 0, 0, + 121, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3716,45 +3673,56 @@ var yyAct = [...]int{ 0, 0, 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 304, 316, 333, 0, 0, 0, 165, - 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, - 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, + 0, 0, 281, 304, 316, 333, 336, 0, 0, 0, + 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, + 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, + 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 328, 201, 207, 0, 209, 180, 253, 203, + 313, 216, 0, 245, 212, 278, 217, 223, 266, 312, + 251, 271, 178, 303, 279, 227, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 288, 328, 201, 207, 0, 209, 180, 253, 203, 313, - 216, 250, 245, 212, 278, 217, 223, 266, 312, 251, - 271, 178, 303, 279, 227, 0, 0, 0, 195, 0, - 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, + 0, 0, 0, 0, 0, 0, 162, 0, 221, 0, + 262, 200, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 0, 288, + 0, 0, 0, 0, 319, 320, 321, 305, 0, 192, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1675, 0, 0, 0, 0, 195, 0, 0, + 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, - 658, 659, 1676, 0, 0, 162, 176, 221, 0, 262, - 200, 0, 0, 0, 0, 0, 179, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 658, 659, + 660, 1677, 0, 0, 0, 176, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 319, 320, 321, 305, 0, 192, 0, - 0, 0, 0, 0, 168, 285, 301, 177, 276, 314, - 182, 283, 173, 249, 272, 0, 0, 170, 299, 282, - 231, 214, 215, 169, 0, 267, 193, 206, 189, 247, - 0, 298, 326, 188, 317, 0, 309, 172, 0, 308, - 246, 295, 300, 232, 226, 171, 297, 230, 225, 218, - 197, 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, + 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, + 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, + 298, 326, 188, 317, 0, 309, 172, 0, 308, 246, + 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, + 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 311, 0, 0, 0, 0, 0, 0, 284, 0, 0, - 219, 0, 0, 0, 327, 0, 270, 252, 0, 0, - 0, 268, 222, 296, 260, 302, 286, 310, 264, 261, - 163, 287, 191, 233, 174, 175, 187, 194, 196, 198, - 199, 242, 243, 255, 275, 289, 290, 291, 190, 183, - 269, 184, 208, 185, 164, 277, 186, 166, 256, 294, - 0, 204, 265, 229, 167, 228, 257, 293, 292, 318, - 324, 325, 329, 0, 330, 0, 0, 0, 0, 0, - 0, 0, 332, 0, 0, 0, 0, 0, 0, 323, - 202, 161, 306, 0, 248, 0, 0, 0, 0, 0, - 0, 0, 0, 244, 322, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, + 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, + 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, + 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, + 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, + 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, + 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, + 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, + 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, + 161, 306, 0, 248, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, + 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 281, 304, 316, 333, 0, 0, 0, 165, 335, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, @@ -3764,8 +3732,8 @@ var yyAct = [...]int{ 178, 303, 279, 227, 0, 0, 0, 195, 0, 0, 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 657, 658, - 659, 0, 0, 0, 162, 176, 221, 0, 262, 200, + 0, 0, 0, 0, 0, 0, 0, 0, 658, 659, + 660, 1677, 0, 0, 162, 176, 221, 0, 262, 200, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3792,106 +3760,152 @@ var yyAct = [...]int{ 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 213, 254, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 281, 304, 316, 333, 0, 0, 841, 165, 335, 0, - 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, - 315, 0, 0, 0, 0, 0, 331, 238, 239, 240, - 241, 205, 0, 181, 334, 263, 0, 0, 0, 0, - 0, 734, 735, 736, 733, 0, 0, 0, 0, 328, - 201, 207, 0, 209, 180, 253, 203, 313, 216, 0, - 245, 212, 278, 217, 223, 266, 312, 251, 271, 178, - 303, 279, 227, 0, 0, 0, 841, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, - 0, 0, 0, 162, 0, 221, 1120, 262, 200, 0, - 0, 0, 0, 0, 849, 853, 855, 857, 859, 860, - 862, 0, 866, 863, 864, 865, 0, 0, 844, 845, - 846, 847, 827, 828, 850, 0, 830, 0, 831, 832, - 833, 834, 835, 836, 837, 838, 839, 840, 842, 848, - 841, 319, 320, 321, 305, 0, 192, 852, 854, 856, - 858, 861, 0, 0, 0, 0, 829, 0, 0, 0, - 819, 0, 0, 0, 0, 0, 0, 1120, 0, 0, - 0, 0, 0, 0, 849, 853, 855, 857, 859, 860, - 862, 843, 866, 863, 864, 865, 0, 0, 844, 845, - 846, 847, 827, 828, 850, 0, 830, 0, 831, 832, - 833, 834, 835, 836, 837, 838, 839, 840, 842, 848, - 576, 0, 0, 0, 0, 0, 0, 852, 854, 856, - 858, 861, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1116, 0, 0, 1113, 0, - 829, 0, 1115, 1112, 1114, 1118, 1119, 0, 0, 0, - 1117, 843, 0, 0, 0, 0, 0, 0, 849, 853, - 855, 857, 859, 860, 862, 0, 866, 863, 864, 865, - 0, 601, 844, 845, 846, 847, 827, 828, 850, 0, - 830, 0, 831, 832, 833, 834, 835, 836, 837, 838, - 839, 840, 842, 848, 0, 0, 0, 0, 1755, 1756, - 0, 852, 854, 856, 858, 861, 1116, 0, 0, 1113, - 0, 0, 0, 1115, 1112, 1114, 1118, 1119, 0, 0, - 0, 1117, 0, 0, 383, 0, 382, 389, 379, 0, - 0, 0, 0, 0, 0, 843, 0, 0, 386, 387, - 0, 388, 392, 0, 0, 374, 0, 0, 0, 0, - 603, 0, 0, 602, 0, 397, 0, 0, 0, 0, - 0, 0, 0, 1101, 1102, 1103, 1104, 1105, 1106, 1107, - 1108, 1109, 1110, 1111, 1123, 1124, 1125, 1126, 1127, 1128, - 1121, 1122, 2176, 0, 401, 0, 588, 402, 0, 0, - 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 851, 0, 0, 0, 1630, 0, 0, 593, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1101, 1102, 1103, 1104, 1105, 1106, - 1107, 1108, 1109, 1110, 1111, 1123, 1124, 1125, 1126, 1127, - 1128, 1121, 1122, 2158, 0, 0, 0, 0, 0, 0, - 0, 0, 383, 0, 382, 389, 379, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 386, 387, 0, 388, - 392, 0, 851, 374, 383, 0, 382, 389, 379, 0, - 0, 0, 0, 397, 575, 0, 0, 0, 386, 387, - 0, 388, 392, 0, 0, 374, 596, 0, 0, 0, - 0, 0, 0, 0, 0, 397, 375, 377, 376, 0, - 0, 0, 401, 0, 381, 402, 0, 0, 0, 591, - 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, - 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, - 378, 0, 0, 0, 369, 0, 0, 0, 0, 0, - 592, 597, 0, 0, 0, 0, 851, 0, 0, 0, - 0, 0, 0, 0, 585, 0, 587, 600, 0, 0, - 0, 584, 582, 581, 0, 586, 2162, 598, 599, 0, - 0, 0, 0, 0, 0, 0, 0, 2166, 0, 594, - 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2155, 0, 0, - 0, 2157, 2159, 2161, 0, 2163, 2164, 2165, 2167, 2168, - 2169, 2171, 2172, 2173, 2174, 0, 589, 0, 380, 384, - 390, 0, 391, 393, 0, 0, 394, 395, 396, 0, - 0, 398, 399, 0, 375, 377, 376, 0, 0, 0, - 0, 0, 381, 0, 2177, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 385, 0, 375, 377, 376, 0, - 0, 400, 0, 0, 381, 0, 0, 0, 378, 0, - 0, 0, 0, 0, 0, 0, 385, 0, 0, 2175, - 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, - 378, 0, 0, 0, 0, 0, 2154, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2170, 0, 0, 0, 0, 0, - 0, 2160, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 380, 384, 390, 0, - 391, 393, 0, 0, 394, 395, 396, 0, 0, 398, - 399, 0, 0, 0, 0, 0, 0, 0, 380, 384, - 390, 0, 391, 393, 0, 0, 394, 395, 396, 0, - 0, 398, 399, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, + 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, + 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, + 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, + 328, 201, 207, 0, 209, 180, 253, 203, 313, 216, + 250, 245, 212, 278, 217, 223, 266, 312, 251, 271, + 178, 303, 279, 227, 0, 0, 0, 195, 0, 0, + 220, 0, 0, 0, 0, 0, 0, 280, 234, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 658, 659, + 660, 0, 0, 0, 162, 176, 221, 0, 262, 200, + 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 319, 320, 321, 305, 0, 192, 0, 0, + 0, 0, 0, 168, 285, 301, 177, 276, 314, 182, + 283, 173, 249, 272, 0, 0, 170, 299, 282, 231, + 214, 215, 169, 0, 267, 193, 206, 189, 247, 0, + 298, 326, 188, 317, 0, 309, 172, 0, 308, 246, + 295, 300, 232, 226, 171, 297, 230, 225, 218, 197, + 0, 210, 258, 224, 259, 211, 236, 235, 237, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, + 0, 0, 0, 0, 0, 0, 284, 0, 0, 219, + 0, 0, 0, 327, 0, 270, 252, 0, 0, 0, + 268, 222, 296, 260, 302, 286, 310, 264, 261, 163, + 287, 191, 233, 174, 175, 187, 194, 196, 198, 199, + 242, 243, 255, 275, 289, 290, 291, 190, 183, 269, + 184, 208, 185, 164, 277, 186, 166, 256, 294, 0, + 204, 265, 229, 167, 228, 257, 293, 292, 318, 324, + 325, 329, 0, 330, 0, 0, 0, 0, 0, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 323, 202, + 161, 306, 114, 248, 35, 104, 86, 0, 0, 0, + 0, 0, 244, 322, 0, 0, 0, 0, 273, 0, + 0, 0, 109, 0, 213, 254, 0, 274, 0, 98, + 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, + 281, 304, 316, 333, 336, 0, 0, 0, 165, 335, + 0, 0, 0, 64, 0, 0, 0, 307, 0, 111, + 0, 315, 0, 0, 0, 0, 0, 331, 238, 239, + 240, 241, 205, 0, 181, 334, 263, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 328, 201, 207, 0, 209, 180, 253, 203, 313, 216, + 0, 245, 212, 278, 217, 223, 266, 312, 251, 271, + 178, 303, 279, 227, 0, 0, 0, 0, 0, 842, + 0, 0, 0, 0, 0, 0, 0, 105, 106, 0, + 107, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 162, 0, 221, 0, 262, 200, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, + 736, 737, 734, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 103, 112, 0, 62, 0, + 0, 842, 319, 320, 321, 305, 0, 192, 0, 0, + 0, 0, 0, 0, 102, 97, 96, 0, 0, 830, + 0, 41, 0, 0, 2177, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 850, 854, 856, + 858, 860, 861, 863, 1121, 867, 864, 865, 866, 0, + 0, 845, 846, 847, 848, 828, 829, 851, 1631, 831, + 0, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 841, 843, 849, 0, 0, 0, 0, 0, 99, 100, + 853, 855, 857, 859, 862, 2589, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2159, 0, 0, 0, 0, + 0, 830, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 0, 844, 0, 101, 0, 73, 850, + 854, 856, 858, 860, 861, 863, 0, 867, 864, 865, + 866, 0, 0, 845, 846, 847, 848, 828, 829, 851, + 0, 831, 0, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 843, 849, 0, 0, 0, 0, 0, + 0, 0, 853, 855, 857, 859, 862, 2177, 0, 0, + 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, + 75, 0, 34, 1117, 0, 0, 1114, 0, 0, 0, + 1116, 1113, 1115, 1119, 1120, 0, 844, 0, 1118, 0, + 0, 1631, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2177, 0, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2163, 0, + 0, 1756, 1757, 0, 0, 0, 0, 0, 2159, 2167, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1631, 87, 0, 0, 0, 0, 0, 0, 0, 2156, + 0, 0, 0, 2158, 2160, 2162, 0, 2164, 2165, 2166, + 2168, 2169, 2170, 2172, 2173, 2174, 2175, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2159, 0, 0, + 0, 0, 0, 0, 0, 2253, 0, 0, 0, 0, + 0, 76, 77, 0, 0, 0, 2178, 0, 0, 0, + 0, 0, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, + 1110, 1111, 1112, 1124, 1125, 1126, 1127, 1128, 1129, 1122, + 1123, 0, 0, 0, 0, 384, 0, 383, 390, 380, + 0, 2176, 0, 0, 0, 0, 852, 0, 0, 387, + 388, 0, 389, 393, 0, 0, 375, 0, 2155, 384, + 0, 383, 390, 380, 0, 0, 398, 0, 0, 0, + 0, 2163, 0, 387, 388, 0, 389, 393, 0, 0, + 375, 0, 2167, 0, 0, 0, 0, 2171, 0, 0, + 398, 0, 0, 0, 2161, 402, 0, 0, 403, 0, + 0, 0, 2156, 0, 0, 0, 2158, 2160, 2162, 0, + 2164, 2165, 2166, 2168, 2169, 2170, 2172, 2173, 2174, 2175, + 2163, 0, 384, 0, 383, 390, 380, 0, 852, 0, + 0, 2167, 0, 0, 0, 0, 387, 388, 0, 389, + 393, 0, 0, 375, 0, 0, 0, 0, 0, 2178, + 0, 2156, 0, 398, 0, 2158, 2160, 2162, 0, 2164, + 2165, 2166, 2168, 2169, 2170, 2172, 2173, 2174, 2175, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 402, 0, 2176, 403, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2178, 0, + 0, 2155, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 376, 378, 377, + 2171, 0, 0, 2176, 0, 382, 0, 2161, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, + 2155, 376, 378, 377, 401, 0, 0, 0, 0, 382, + 0, 379, 0, 0, 0, 370, 0, 0, 0, 0, + 0, 386, 0, 0, 0, 0, 0, 0, 401, 2171, + 0, 0, 0, 0, 0, 379, 2161, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 376, 378, 377, 0, 0, 0, + 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, + 0, 401, 0, 0, 0, 0, 0, 0, 379, 381, + 385, 391, 0, 392, 394, 0, 0, 395, 396, 397, + 0, 0, 399, 400, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 381, 385, 391, 0, 392, 394, 0, + 0, 395, 396, 397, 0, 0, 399, 400, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 381, 385, 391, 0, + 392, 394, 0, 0, 395, 396, 397, 0, 0, 399, + 400, } var yyPact = [...]int{ - 290, -1000, -305, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 25662, -1000, -299, -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, -150, 23596, 23596, -1000, -1000, 1589, - -1000, 23109, 8499, 24083, 138, 24083, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -157, 23632, 23632, -1000, -1000, 1664, + -1000, 23144, 8504, 24120, 105, 24120, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 363, -1000, 22622, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 316, 26004, 229, 225, 6530, 24083, -283, -1000, - 2194, -1000, -1000, -1000, -1000, 162, 398, 22135, -1000, -1000, + -1000, -1000, 391, -1000, 22656, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 363, 26195, 236, 228, 6531, 24120, -284, -1000, + 2198, -1000, -1000, -1000, -1000, 240, 435, 22168, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 25874, 75, 398, 477, 478, 495, 495, 9960, - 2194, 239, 62, -1000, 691, 290, 25328, 296, 24083, -1000, - 846, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1064, 154, 435, 542, 559, 644, 644, 9968, + 2198, 225, 96, -1000, 840, 25662, 25368, 329, 24120, -1000, + 1012, -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, @@ -3912,110 +3926,107 @@ 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, 296, -1000, -1000, -1000, - 2194, 2194, -1000, 24083, 24083, -23, 1050, -1000, 242, 222, - 231, 839, -1000, -1000, -1000, -1000, -1000, 2178, -1000, 24083, - 1885, 24083, -1000, 1289, 270, 26142, 2024, 740, 414, 1915, - -1000, -1000, 1874, -1000, 96, 51, 128, 320, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 97, -1000, 2086, -1000, -1000, - 84, -1000, -1000, 72, -1000, -1000, -1000, -70, -1000, -1000, - -1000, -1000, -1000, -139, -139, 508, 1103, 6530, -1000, 1372, - -1000, 1525, -1000, -1000, -1000, -1000, 4072, 8000, 8000, 8000, - 8000, -1000, -1000, 1740, 6530, 1871, 1868, -1000, -1000, -1000, - -1000, -1000, 830, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 7510, -1000, 1858, 1857, 1844, - 1842, 1841, 1838, 1836, 1835, 1834, 1831, 1830, 1654, 1829, - 1457, 1455, 1828, 1827, 1826, 8000, 1454, 1654, 1654, 1825, - 1824, 1810, 1796, 1795, 1794, 1790, 1789, 1783, 1780, 1778, - 1775, 1774, 1771, 1770, 1769, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 329, -1000, -1000, + -1000, 2198, 2198, -1000, 24120, 24120, -43, 1140, -1000, 212, + 242, 229, 1007, -1000, -1000, -1000, -1000, -1000, 2226, -1000, + 24120, 1921, 24120, -1000, 1397, 290, 26282, 2073, 872, 449, + 1950, -1000, -1000, 1910, -1000, 56, 305, 238, 509, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 119, -1000, 2127, -1000, + -1000, 48, -1000, -1000, 26, -1000, -1000, -1000, -81, -1000, + -1000, -1000, -1000, -1000, -151, -151, 609, 1184, 6531, -1000, + 1428, -1000, 1757, -1000, -1000, -1000, -1000, 4068, 8004, 8004, + 8004, 8004, -1000, -1000, 1785, 6531, 1909, 1906, -1000, -1000, + -1000, -1000, -1000, 1006, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 7513, -1000, 1905, 1903, + 1890, 1889, 1888, 1887, 1881, 1880, 1875, 1874, 1862, 1682, + 1858, 1557, 1554, 1857, 1851, 1850, 8004, 1553, 1682, 1682, + 1849, 1848, 1845, 1844, 1842, 1841, 1840, 1839, 1837, 1836, + 1835, 1832, 1829, 1804, 1800, 1799, -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, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 25716, - -1000, 829, 853, -1000, 1768, 2020, 2103, 1658, 2155, 2085, - 2083, 2078, 2072, 44, 307, 307, 307, 340, 307, 362, - -1000, -1000, -1000, -1000, -1000, -1000, 402, -1000, -1000, -1000, - -1000, 711, 24083, -1000, 1682, 880, 2099, 271, 880, 263, - 269, 2103, 2103, -84, -97, 880, 880, -97, 67, -1000, - -1000, -1000, 1018, 253, 1018, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 2077, 2075, 316, 316, 332, -1000, -159, -1000, - -1000, 450, -1000, 440, -1000, 1289, 265, 264, 743, 1053, - -1000, 940, 24083, 24083, 24083, 940, 940, 13369, 12882, -1000, - 2103, 1658, -1000, 1604, 1609, 1658, 316, 316, 316, 316, - 316, 316, 316, 24083, 5542, 5542, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 281, -1000, -1000, -1000, -1000, -1000, - 251, 1765, -1000, 24083, 247, 2103, 2020, 2103, -1000, -1000, - 825, 1269, 1453, -1000, -1000, 242, 1025, -1000, 684, -1000, - -1000, -1000, -1000, 24083, 212, -1000, 1436, 1760, -1000, 344, - 725, 799, -1000, 115, 26164, 19213, 1289, 19213, 24083, -1000, - -1000, -1000, -1000, -1000, -1000, -74, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -32, - -1000, -32, 6530, 6530, 6530, 6530, 6530, -1000, 480, 7020, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 8000, 8000, 8000, - 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 1739, - 1055, 8000, 8000, 8000, 1609, 1989, 742, -1000, -1000, -1000, - -1000, -1000, 984, 1103, 6530, 6530, 24083, 25621, 6530, 6530, - 25692, 6530, 2070, 2070, 3083, 24083, 6530, -1000, 1597, 1596, - -1000, -1000, 1164, 6530, -1000, -1000, 6530, 8000, 6530, -1000, - -1000, -1000, -1000, 93, 2070, 6530, 6530, 2070, 2070, 2070, - 1106, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 1452, 24083, - 1968, 49, -1000, -1000, -1000, 1663, -1000, 1719, 1719, 1663, - 1663, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1759, 1758, -1000, -1000, 1718, 1718, 1718, 1663, -1000, -1000, + 251, -1000, 1005, 781, -1000, 1797, 2055, 2167, 1730, 2207, + 2154, 2138, 2116, 2113, 60, 362, 362, 362, 378, 362, + 389, -1000, -1000, -1000, -1000, -1000, -1000, 462, -1000, -1000, + -1000, -1000, 803, 24120, -1000, 1737, 970, 2164, 308, 970, + 253, 300, 2167, 2167, -112, -108, 970, 970, -108, 52, + -1000, -1000, -1000, 1158, 306, 1158, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 2120, 2112, 363, 363, 366, -1000, -149, + -1000, -1000, 585, -1000, 499, -1000, 1397, 289, 288, 823, + 1141, -1000, 1057, 24120, 24120, 24120, 1057, 1057, 13384, 12896, + -1000, 2167, 1730, -1000, 1659, 2020, 1730, 363, 363, 363, + 363, 363, 363, 363, 24120, 5541, 5541, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 250, -1000, -1000, -1000, -1000, + -1000, 227, 1796, -1000, 24120, 220, 2167, 2055, 2167, -1000, + -1000, 1003, 1365, 1552, -1000, -1000, 212, 1085, -1000, 792, + -1000, -1000, -1000, -1000, 24120, 235, -1000, 1535, 1795, -1000, + 321, 800, 927, -1000, 149, 26219, 19240, 1397, 19240, 24120, + -1000, -1000, -1000, -1000, -1000, -1000, -94, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1742, 1742, 1754, 1742, 24083, 2103, -283, - 5052, -1000, -286, 2020, 6530, -1000, -1000, 6530, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 355, 307, -1000, 24083, - 1061, 19213, 1289, 1306, 24083, 307, 332, -1000, 24083, 711, - 2064, 24083, 2170, 8000, 19213, 1018, 2170, 1018, -1000, -1000, - -1000, 880, 880, -1000, -1000, -1000, -1000, 1018, 1018, -1000, - -1000, -78, 2170, 2170, -80, 24083, 24083, 307, 24083, -1000, - -1000, -1000, -1000, 24083, -1000, -1000, 24083, 19213, 12395, -1000, - -126, 470, 456, 452, -1000, -1000, 337, 325, 11908, 286, - 19213, 3573, -1000, -1000, 940, 940, 940, 3573, 3573, 783, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2020, -1000, -1000, - -1000, -1000, 24083, 19213, 1289, 24083, 24083, 24083, 25328, -1000, - 773, -1000, -1000, 9473, 824, 773, 1450, 24083, 1913, -284, - -1000, 11421, 24083, 24083, -1000, -1000, -284, -1000, 10934, 24083, - 2020, -1000, 2020, 2611, -1000, 2097, -1000, 242, 149, -1000, - -1000, -1000, -1000, -1000, -1000, 819, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 706, -1000, 24083, -1000, -1000, - 115, 19213, 993, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 112, -1000, -1000, 140, -1000, 348, 7, 1024, -1000, -1000, - 38, 141, 38, 1103, -1000, 1035, 1035, 1039, -1000, 394, - -1000, -1000, -1000, -1000, 1740, -1000, -1000, -1000, 2106, 2370, - -1000, 1095, 1095, 699, 699, 699, 699, 699, 1084, 1084, - -1000, -1000, -1000, 4072, 1739, 8000, 8000, 8000, 302, 2311, - 2166, -1000, 6530, 1064, -1000, 6530, 1500, 933, 817, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -49, -1000, -49, 6531, 6531, 6531, 6531, 6531, -1000, 447, + 7022, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 8004, 8004, + 8004, 8004, 8004, 8004, 8004, 8004, 8004, 8004, 8004, 8004, + 1781, 1126, 8004, 8004, 8004, 2020, 2075, 812, -1000, -1000, + -1000, -1000, -1000, 1102, 1184, 6531, 6531, 24120, 25749, 6531, + 6531, 58, 6531, 2106, 2106, 3077, 24120, 6531, -1000, 1657, + 1656, -1000, -1000, 1303, 6531, -1000, -1000, 6531, 8004, 6531, + -1000, -1000, -1000, -1000, 760, 2106, 6531, 6531, 2106, 2106, + 2106, 1125, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 1549, + 24120, 2013, 11, -1000, -1000, -1000, 1697, -1000, 1763, 1763, + 1697, 1697, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1791, 1790, -1000, -1000, 1761, 1761, 1761, 1697, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1595, - 508, 1594, 1378, 2172, 1566, 6530, -1000, -1000, 6530, 1224, - 6040, -1000, -1000, -1000, 1564, 813, 1562, -1000, -1000, -1000, - 1561, 673, 1544, 1424, 1538, 688, 6530, 1020, 1015, 6530, - 6530, 6530, 6530, 1532, 6530, 6530, 6530, 6530, 6530, 6530, - 6530, 685, -1000, 6530, 46, -1000, -1000, -1000, -1000, 1265, - -1000, 1261, -1000, -1000, -1000, 1448, 1448, -1000, 1260, -1000, - -1000, -1000, -1000, 1258, -1000, -1000, 1256, -1000, -1000, -1000, - -1000, 996, -1000, 1103, -1000, 1431, -1000, 863, 678, -1000, - 1276, 21648, 24083, 39, -1000, 2021, 593, -1000, 7, 509, - 1882, 1966, 24083, 21161, -1000, 1738, 981, -1000, -1000, 6530, - -1000, 1625, 24083, -1000, 24083, 2170, 2170, 880, 25328, 1018, - 24083, 1018, -1000, -1000, 1018, -1000, 812, -1000, 24083, -1000, - -1000, -1000, -1000, 39, 593, 2076, 737, -1000, -1000, -1000, - -1000, 2063, 24570, 10447, 24570, 1736, 1735, -1000, -1000, 464, - 438, 446, -1000, -1000, 339, -1000, -1000, 509, -1000, -1000, - -1000, 1733, 1049, -1000, -1000, 8000, -1000, 3573, 3573, 3573, - -1000, -1000, 15317, -1000, -1000, 667, 509, 1911, 658, -1000, - 658, -1000, 2170, 5542, -1000, 12395, -1000, -1000, 20674, -1000, - 20187, 2170, -291, 690, -1000, 1983, 526, -1000, 1729, -1000, - 979, 1951, -1000, 507, -1000, 1044, 976, -1000, 526, 974, - 1948, 507, -1000, -1000, -1000, 803, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1787, 1787, 1789, 1787, 24120, 2167, + -284, 5050, -1000, -287, 2055, 6531, -1000, -1000, 6531, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 375, 362, -1000, + 24120, 1186, 19240, 1397, 1381, 24120, 362, 366, -1000, 24120, + 803, 2098, 24120, 2217, 8004, 19240, 1158, 2217, 1158, -1000, + -1000, -1000, 970, 970, -1000, -1000, -1000, -1000, 1158, 1158, + -1000, -1000, -117, 2217, 2217, -119, 24120, 24120, 362, 24120, + -1000, -1000, -1000, -1000, 24120, -1000, -1000, 24120, 19240, 12408, + -1000, -138, 531, 504, 510, -1000, -1000, 307, 310, 11920, + 263, 19240, 3568, -1000, -1000, 1057, 1057, 1057, 3568, 3568, + 784, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2055, -1000, + -1000, -1000, -1000, 24120, 19240, 1397, 24120, 24120, 24120, 25368, + -1000, 914, -1000, -1000, 9480, 1002, 914, 1548, 24120, 1945, + -285, -1000, 11432, 24120, 24120, -1000, -1000, -285, -1000, 10944, + 24120, 2055, -1000, 2055, 2604, -1000, 2148, -1000, 212, 143, + -1000, -1000, -1000, -1000, -1000, -1000, 990, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 776, -1000, 24120, -1000, + -1000, 149, 19240, 1099, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 108, -1000, -1000, 140, -1000, 370, -18, 1078, -1000, + -1000, 47, 137, 47, 1184, -1000, 1176, 1176, 1156, -1000, + 402, -1000, -1000, -1000, -1000, 1785, -1000, -1000, -1000, 1214, + 1066, -1000, 1138, 1138, 865, 865, 865, 865, 865, 1163, + 1163, -1000, -1000, -1000, 4068, 1781, 8004, 8004, 8004, 337, + 2449, 2373, -1000, 6531, 1155, -1000, 6531, 1415, 917, 989, -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, + 1654, 609, 1653, 1979, 2225, 1651, 6531, -1000, -1000, 6531, + 1392, 6040, -1000, -1000, -1000, 1649, 988, 1648, -1000, -1000, + -1000, 1646, 717, 1641, 1375, 1640, 771, 6531, 1065, 1063, + 6531, 6531, 6531, 6531, 1638, 6531, 6531, 6531, 6531, 6531, + 6531, 6531, 756, -1000, 6531, 6, -1000, -1000, -1000, -1000, + 1362, -1000, 1361, -1000, -1000, -1000, 1547, 1547, -1000, 1356, + -1000, -1000, -1000, -1000, 1355, -1000, -1000, 1342, -1000, -1000, + -1000, -1000, 1062, -1000, 1184, -1000, 1541, -1000, 934, 748, + -1000, 1286, 21680, 24120, 0, -1000, 2040, 695, -1000, -18, + 618, 1920, 2011, 24120, 21192, -1000, 1779, 1061, -1000, -1000, + 6531, -1000, 1919, 24120, -1000, 24120, 2217, 2217, 970, 25368, + 1158, 24120, 1158, -1000, -1000, 1158, -1000, 985, -1000, 24120, + -1000, -1000, -1000, -1000, 0, 695, 2143, 668, -1000, -1000, + -1000, -1000, 2094, 24608, 10456, 24608, 1775, 1772, -1000, -1000, + 514, 469, 582, -1000, -1000, 369, -1000, -1000, 618, -1000, + -1000, -1000, 1771, 1137, -1000, -1000, 8004, -1000, 3568, 3568, + 3568, -1000, -1000, 15336, -1000, -1000, 671, 618, 1942, 670, + -1000, 670, -1000, 2217, 5541, -1000, 12408, -1000, -1000, 20704, + -1000, 20216, 2217, -291, 681, -1000, 2016, 619, -1000, 1768, + -1000, 1036, 1988, -1000, 608, -1000, 1129, 1034, -1000, 619, + 1031, 1986, 608, -1000, -1000, -1000, 980, -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, @@ -4029,164 +4040,167 @@ 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, -26, -1000, -1000, 24083, - 1436, 971, 993, 639, -1000, 335, 789, 770, -1000, 19213, - 87, 19213, -1000, 19213, -1000, -1000, 244, -1000, 24083, 2009, - -1000, -1000, -1000, 1412, 2005, -1000, -1000, -1000, -1000, -1000, - 969, -1000, 302, 2311, 1797, -1000, 8000, 8000, 1982, 1022, - -1000, 6530, 1168, 25646, 1262, 14343, 24083, -1000, -1000, 6530, - 6530, -1000, 1974, 1941, -1000, 6530, 6530, 1318, -1000, 24083, - -1000, -1000, -1000, 14343, -1000, 8000, -1000, 6530, 1928, -1000, - -1000, 1910, 1899, 1893, 962, -1000, 1865, 1839, 1761, 1623, - 1619, 1612, 1606, 1394, 1103, -1000, -1000, 1530, 1529, 941, - -1000, 939, 1527, 937, 917, 5052, -1000, -101, 6530, 6530, - 6530, 1961, -1000, -1000, 1682, 909, 1724, -62, 995, -1000, - 352, 19213, 245, -1000, 1908, 156, -1000, 1966, -1000, 694, - -1000, 1721, 24083, 739, -1000, 761, 290, -1000, 24083, 1103, - -1000, 1289, 880, 2170, -1000, -1000, 2170, -1000, 880, -1000, - 880, 1018, 24083, -1000, -62, 352, 24083, 12395, 12395, 12395, - 12395, -1000, 1934, 1927, -1000, 1952, 1940, 1985, 24083, 12395, - 24083, -1000, -1000, -1000, 24949, -1000, -1000, -1000, -1000, 912, - 1526, 2194, 2124, 10447, 500, 19700, 6530, -1000, -1000, -1000, - 430, 19213, 1392, 286, -1000, -1000, -1000, -1000, -1000, 24083, - 24083, 2168, -1000, 649, -1000, -1000, 760, -1000, 2168, -1000, - 1250, 1391, 1091, -284, 5052, 228, 24083, -284, 24083, 5052, - -1000, 24083, 213, -284, 2611, 1249, -1000, -1000, -1000, 2132, - 19213, 1289, 865, 990, -1000, 83, -1000, 111, 326, 1386, - -1000, 359, 1038, 358, -1000, -1000, 8000, -1000, -1000, -1000, - -1000, 1103, 6530, 1520, -1000, 426, 426, 1519, -1000, 1663, - 1719, -1000, 1663, 1718, 1663, 426, 426, 1516, -1000, 1208, - 1533, -1000, -1000, 1518, 1485, 6530, -1000, 1514, 2127, 1029, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1512, -1000, -1000, -1000, 1384, -1000, -1000, -1000, - 1243, -1000, 1232, -1000, -51, -40, 1103, 1103, -1000, -1000, - 1970, 2051, 1992, 8986, 1161, -1000, -1000, 1367, -1000, 299, - -1000, -1000, -1000, 412, 88, 1230, 301, -1000, 1461, 24083, - -1000, -1000, -1000, -1000, -1000, 995, 995, 995, 8986, 296, - 610, 750, 12395, 24083, -1000, 18239, 1511, -1000, 509, 2170, - -1000, -1000, 2170, 2170, 880, -1000, 1161, 299, 616, -1000, - 1037, 1879, 1907, 1879, -1000, -1000, -1000, -1000, 1921, -1000, - 1853, -1000, -1000, 616, -1000, 1682, -1000, -1000, -1000, 1505, - -1000, 500, -1000, 2096, 493, 493, 493, 907, 902, 900, - -1000, 639, 1504, -1000, -1000, -1000, -1000, 2158, 2153, 18726, - 2158, -1000, -291, 2185, -1000, 1499, 638, -284, -1000, -1000, - 526, -1000, -1000, -1000, -284, -1000, 526, -1000, -1000, -1000, - -1000, -1000, 1289, -1000, 94, -1000, -1000, -1000, -1000, -1000, - -1000, -7, -1000, 24083, 1366, 24083, -1000, 1103, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 6530, -1000, -1000, -1000, 1469, -1000, -1000, - 6530, -1000, -1000, 1498, 1497, -288, -34, 2151, 2150, -1000, - -1000, 239, 24083, 1495, 540, -1000, -1000, -1000, 25800, 696, - -1000, 24083, 1086, 493, 307, 493, 1081, 1715, -1000, -1000, - -1000, 1363, 6, -1000, -1000, 1362, 1361, 1229, -1000, -1000, - 1205, 850, 20, -1000, -1000, -1000, -1000, -1000, -1000, 1711, - 14343, 14830, 1357, 1486, 24570, 12395, 18239, 605, -1000, 693, - -1000, -1000, -1000, -1000, -1000, 2170, -1000, -1000, 2125, 24083, - 5052, -1000, -1000, 6530, 1697, -1000, 6530, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1692, 2018, -1000, -1000, -1000, -1000, - 1356, -1000, 1352, -1000, -1000, -1000, 6530, 6530, -1000, -1000, - -1000, 24083, -1000, 526, 526, 509, -1000, -1000, -80, 74, - -80, 1425, -1000, 1421, -1000, -1000, -291, 1350, -1000, 2135, - 1343, 1301, -1000, 1682, 26066, 8986, 1241, -1000, -1000, 24083, - 24083, -1000, 24083, 24083, 307, 6530, -1000, -1000, 201, -1000, - -1000, 118, -1000, -1000, 1204, 329, -1000, 16778, -1000, -1000, - -1000, -1000, -1000, -32, 2170, 605, 693, -1000, -1000, 809, - -1000, 2103, -1000, -1000, 1103, 24083, 1103, 17752, -1000, 2134, - 2131, 897, 893, 1103, 508, 507, -1000, -60, -50, -1000, - 1342, -1000, -1000, -1000, -295, -1000, 1340, -39, -1000, -1000, - 2050, 295, 1245, -1000, 995, 995, 692, 995, 995, 995, - 995, 227, 226, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 1679, -1000, -1000, - 1241, -1000, -1000, 1128, 8000, -1000, -1000, 1339, 14830, 451, - 475, 1676, -1000, 191, 2184, 1080, 1072, -1000, 24083, -1000, - 1673, 1611, 151, 1671, -1000, 1670, 1666, 24083, 1370, 311, - 1332, -1000, -1000, 117, -1000, -1000, 879, -1000, 1663, 6530, - -1000, -80, 2125, -1000, -1000, 856, 832, -1000, -1000, -1000, - -1000, -1000, 1141, -1000, 1114, 322, -46, -50, -1000, 2130, - -41, 2129, 2123, 1030, -1000, 1662, -1000, 2122, 239, -1000, - 2117, 26066, -1000, 1225, 1219, 995, 995, 1217, 1331, 1329, - 1326, 995, 995, 1213, 1324, 24949, 1206, 1201, 1193, 1200, - 1323, 471, 1194, 1188, 1174, 24083, 1661, 1298, -1000, -1000, - 2311, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1190, 1660, -154, -1000, -1000, 1659, 16778, 206, - 206, 16778, 16778, 16778, 1657, 366, -1000, -10, -1000, -1000, - -1000, 16778, 2017, 1296, -1000, 2103, -1000, -1000, 17265, 1484, - 1483, 1467, 1464, 1656, 1184, -34, 2114, -1000, 1301, 2107, - 1301, 1301, 1312, 24083, 1301, -1000, 181, -1000, -1000, -1000, - 14343, 14343, -1000, -1000, -1000, -1000, 1310, 1309, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -44, -1000, -1000, + 24120, 1535, 1025, 1099, 635, -1000, 368, 950, 909, -1000, + 19240, 61, 19240, -1000, 19240, -1000, -1000, 233, -1000, 24120, + 2047, -1000, -1000, -1000, 1528, 2041, -1000, -1000, -1000, -1000, + -1000, 1021, -1000, 337, 2449, 1425, -1000, 8004, 8004, 2068, + 1144, -1000, 6531, 1136, 25759, 574, 14360, 24120, -1000, -1000, + 6531, 6531, -1000, 2014, 1957, -1000, 6531, 6531, 1354, -1000, + 24120, -1000, -1000, -1000, 14360, -1000, 8004, -1000, 6531, 1912, + -1000, -1000, 1907, 1900, 1872, 1020, -1000, 1860, 1830, 1716, + 1620, 1607, 1560, 1556, 1527, 1184, -1000, -1000, 1637, 1635, + 1008, -1000, 998, 1626, 982, 978, 5050, -1000, -114, 6531, + 6531, 6531, 1994, -1000, -1000, 1737, 1147, 1766, -84, 1095, + -1000, 318, 19240, 283, -1000, 1937, 277, -1000, 2011, -1000, + 875, -1000, 1765, 24120, 755, -1000, 907, 25662, -1000, 24120, + 1184, -1000, 1397, 970, 2217, -1000, -1000, 2217, -1000, 970, + -1000, 970, 1158, 24120, -1000, -84, 318, 24120, 12408, 12408, + 12408, 12408, -1000, 1969, 1966, -1000, 1980, 1962, 2012, 24120, + 12408, 24120, -1000, -1000, -1000, 24988, -1000, -1000, -1000, -1000, + 975, 1624, 2198, 2124, 10456, 503, 19728, 6531, -1000, -1000, + -1000, 466, 19240, 1525, 263, -1000, -1000, -1000, -1000, -1000, + 24120, 24120, 2215, -1000, 659, -1000, -1000, 885, -1000, 2215, + -1000, 1339, 1523, 1209, -285, 5050, 224, 24120, -285, 24120, + 5050, -1000, 24120, 222, -285, 2604, 1338, -1000, -1000, -1000, + 2219, 19240, 1397, 1037, 1097, -1000, 40, -1000, 107, 303, + 1522, -1000, 387, 1120, 380, -1000, -1000, 8004, -1000, -1000, + -1000, -1000, 1184, 6531, 1621, -1000, 453, 453, 1616, -1000, + 1697, 1763, -1000, 1697, 1761, 1697, 453, 453, 1612, -1000, + 1320, 1545, -1000, -1000, 1526, 1519, 6531, -1000, 1601, 2313, + 683, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1598, -1000, -1000, -1000, 1520, -1000, -1000, + -1000, 1336, -1000, 1328, -1000, -63, -56, 1184, 1184, -1000, + -1000, 1998, 2092, 2023, 8992, 1373, -1000, -1000, 1518, -1000, + 287, -1000, -1000, -1000, 350, 173, 1327, 270, -1000, 1418, + 24120, -1000, -1000, -1000, -1000, -1000, 1095, 1095, 1095, 8992, + 329, 652, 881, 12408, 24120, -1000, 18264, 1597, -1000, 618, + 2217, -1000, -1000, 2217, 2217, 970, -1000, 1373, 287, 858, + -1000, 1114, 1917, 1931, 1917, -1000, -1000, -1000, -1000, 1963, + -1000, 1783, -1000, -1000, 858, -1000, 1737, -1000, -1000, -1000, + 1596, -1000, 503, -1000, 2140, 505, 505, 505, 966, 963, + 960, -1000, 635, 1589, -1000, -1000, -1000, -1000, 2212, 2206, + 18752, 2212, -1000, -291, 2233, -1000, 1577, 634, -285, -1000, + -1000, 619, -1000, -1000, -1000, -285, -1000, 619, -1000, -1000, + -1000, -1000, -1000, 1397, -1000, 93, -1000, -1000, -1000, -1000, + -1000, -1000, -32, -1000, 24120, 1516, 24120, -1000, 1184, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 241, 24083, 807, -1000, 1001, 1234, 6530, 1654, -224, 16778, - 801, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 798, 797, - 794, 16778, -1000, -1000, -1000, 189, -1000, 150, -1000, -1000, - 2017, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2069, 13856, - -57, -1000, 1307, -1000, 1301, -1000, -1000, 73, 780, -1000, - -1000, 166, 224, 217, -1000, 338, -1000, -1000, -1000, -1000, - -1000, -1000, 238, 779, -1000, 1298, 1288, -1000, 1197, -1000, - 1889, -1000, 53, 775, -1000, -1000, -1000, -1000, 774, -1000, - -1000, 995, 1284, 126, -1000, -1000, -1000, -1000, 24083, -1000, - 767, -1000, -1000, -1000, 501, -1000, -1000, -1000, -1000, -1000, - 1275, -1000, 24083, 164, 1178, 8000, 1653, 8000, 1651, 183, - 1641, -1000, -1000, -1000, -1000, -1000, 366, -1000, 1888, 1887, - 2177, -1000, -1000, -1000, -1000, 150, 150, 150, 150, 60, - 1176, -1000, 1306, 503, -1000, 975, -1000, 16291, 24083, 967, - -1000, 1626, 2105, -1000, 2043, 24083, 1763, 24083, 1615, 905, - 8000, -1000, -1000, 2183, -1000, 2180, 459, 459, -1000, -1000, - -1000, 24083, 4562, -1000, 494, 1267, -1000, 293, 168, -1000, - 763, -1000, 707, 15804, 1159, 1750, -1000, -1000, -1000, 1160, - 197, -1000, -1000, -1000, 1103, 24083, 68, 669, -1000, 1439, - 153, -1000, -1000, -1000, 653, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1246, -1000, 293, 1935, -1000, 1151, -1000, 898, - -1000, 1196, 403, -1000, 1202, -1000, 1196, 157, -1000, 276, - 1207, -315, -1000, -1000, 617, -1000, 1216, 465, 6530, -1000, - -1000, 157, 26066, -1000, 6530, 613, -1000, 26066, 608, -1000, - -1000, + -1000, -1000, -1000, -1000, 6531, -1000, -1000, -1000, 1512, -1000, + -1000, 6531, -1000, -1000, 1575, 1574, -289, -59, 2205, 2204, + -1000, -1000, 225, 24120, 1573, 621, -1000, -1000, -1000, 25841, + 624, -1000, 24120, 1204, 505, 362, 505, 1203, 1760, -1000, + -1000, -1000, 1515, -20, -1000, -1000, 1513, 1510, 1326, -1000, + -1000, 1357, 841, -10, -1000, -1000, -1000, -1000, -1000, -1000, + 1745, 14360, 14848, 1509, 1571, 24608, 12408, 18264, 775, -1000, + 830, -1000, -1000, -1000, -1000, -1000, 2217, -1000, -1000, 2209, + 24120, 5050, -1000, -1000, 6531, 1744, -1000, 6531, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1743, 2081, -1000, -1000, -1000, + -1000, 1508, -1000, 1501, -1000, -1000, -1000, 6531, 6531, -1000, + -1000, -1000, 24120, -1000, 619, 619, 618, -1000, -1000, -119, + 73, -119, 1486, -1000, 1436, -1000, -1000, -291, 1500, -1000, + 2201, 1499, 1429, -1000, 1737, 26080, 8992, 1947, -1000, -1000, + 24120, 24120, -1000, 24120, 24120, 362, 6531, -1000, -1000, 208, + -1000, -1000, 84, -1000, -1000, 1340, 304, -1000, 16800, -1000, + -1000, -1000, -1000, -1000, -49, 2217, 775, 830, -1000, -1000, + 994, -1000, 2167, -1000, -1000, 1184, 24120, 1184, 17776, -1000, + 2200, 2195, 952, 948, 1184, 609, 608, -1000, -65, -64, + -1000, 1482, -1000, -1000, -1000, -293, -1000, 1480, -54, -1000, + -1000, 2076, 328, 26031, -1000, 1095, 1095, 779, 1095, 1095, + 1095, 1095, 230, 216, 1095, 1095, 1095, 1095, 1095, 1095, + 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1736, -1000, + -1000, 1947, -1000, -1000, 1217, 8004, -1000, -1000, 1479, 14848, + 444, 479, 1734, -1000, 179, 2232, -1000, 1202, 1168, -1000, + 24120, -1000, 1713, 1913, 112, 1712, -1000, 1703, 1702, 24120, + 1386, 295, 1451, -1000, -1000, 82, -1000, -1000, 943, -1000, + 1697, 6531, -1000, -119, 2209, -1000, -1000, 931, 898, -1000, + -1000, -1000, -1000, -1000, 1264, -1000, 1224, 360, -61, -64, + -1000, 2194, -57, 2193, 2189, 1113, -1000, 1695, -1000, 2188, + 225, -1000, 2175, 26080, -1000, 1313, 1312, 1095, 1095, 1309, + 1449, 1447, 1446, 1095, 1095, 1307, 1443, 24988, 1306, 1305, + 1287, 1330, 1442, 593, 1322, 1317, 1289, 24120, 1692, 1414, + -1000, -1000, 2449, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1282, 1690, -121, -1000, -1000, 1689, + 16800, 254, 254, 16800, 16800, 16800, 1687, 367, -1000, -35, + -1000, -1000, -1000, 16800, 2037, 1227, -1000, 2167, -1000, -1000, + 17288, 1565, 1563, 1531, 1524, 1683, 1263, -59, 2174, -1000, + 1429, 2172, 1429, 1429, 1441, 24120, 1429, -1000, 260, -1000, + -1000, -1000, 14360, 14360, -1000, -1000, -1000, -1000, 1440, 1437, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 248, 24120, 883, -1000, 1100, 1517, 6531, 1682, + -197, 16800, 864, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 856, 834, 820, 16800, -1000, -1000, -1000, 169, -1000, 190, + -1000, -1000, 2037, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 2103, 13872, -74, -1000, 1430, -1000, 1429, -1000, -1000, 71, + 819, -1000, -1000, 135, 226, 223, -1000, 285, -1000, -1000, + -1000, -1000, -1000, -1000, 245, 799, -1000, 1414, 1413, -1000, + 1211, -1000, 1924, -1000, 46, 797, -1000, -1000, -1000, -1000, + 780, -1000, -1000, 1095, 1399, 100, -1000, -1000, -1000, -1000, + 24120, -1000, 778, -1000, -1000, -1000, 826, -1000, -1000, -1000, + -1000, -1000, 1398, -1000, 24120, 128, 1247, 8004, 1681, 8004, + 1677, 163, 1676, -1000, -1000, -1000, -1000, -1000, 367, -1000, + 1863, 1833, 2224, -1000, -1000, -1000, -1000, 190, 190, 190, + 190, 38, 1235, -1000, 1381, 587, -1000, 1091, -1000, 16312, + 24120, 1077, -1000, 1667, 2171, -1000, 1996, 24120, 1769, 24120, + 1663, 1074, 8004, -1000, -1000, 2231, -1000, 2229, 561, 561, + -1000, -1000, -1000, 24120, 4559, -1000, 825, 1388, -1000, 326, + 146, -1000, 773, -1000, 770, 15824, 1233, 1444, -1000, -1000, + -1000, 1275, 186, -1000, -1000, -1000, 1184, 24120, 70, 765, + -1000, 1395, 116, -1000, -1000, -1000, 752, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1383, -1000, 326, 1977, -1000, 1228, + -1000, 1069, -1000, 25888, 359, -1000, 1291, -1000, 25888, 118, + -1000, 317, 1661, -306, -1000, -1000, 744, -1000, 1389, 495, + 6531, -1000, -1000, 118, 26080, -1000, 6531, 673, -1000, 26080, + 643, -1000, -1000, } var yyPgo = [...]int{ - 0, 131, 2602, 197, 128, 126, 196, 2600, 2599, 2036, - 2029, 2598, 2597, 2596, 2595, 2594, 2593, 2591, 2589, 2588, - 2587, 2586, 2585, 2584, 2583, 2582, 2580, 2579, 195, 2578, - 2577, 2576, 2575, 2574, 2573, 2572, 2571, 2570, 2569, 2568, - 2567, 2566, 2565, 2564, 2563, 2562, 115, 2560, 2028, 2559, - 2558, 2557, 2555, 2554, 168, 2551, 2550, 2548, 2547, 2546, - 2542, 2541, 2539, 2538, 2537, 2536, 2535, 2534, 2533, 124, - 2532, 2531, 2530, 2529, 2521, 187, 171, 58, 2520, 47, - 51, 108, 203, 117, 204, 200, 140, 144, 67, 2515, - 2055, 2514, 112, 178, 109, 24, 2513, 137, 2512, 105, - 41, 35, 199, 98, 56, 64, 86, 2511, 172, 82, - 2505, 2504, 89, 2503, 60, 2502, 68, 34, 83, 26, - 2501, 2500, 2499, 73, 2498, 2497, 2484, 2482, 139, 2481, - 92, 53, 2480, 2479, 2478, 2477, 2476, 40, 2475, 50, - 2474, 2472, 2471, 2465, 62, 2464, 2463, 12, 20, 18, - 2462, 17, 3, 2461, 174, 95, 75, 101, 2460, 394, - 2459, 2457, 2456, 113, 2455, 373, 2454, 2452, 2449, 2448, - 2443, 9, 2442, 169, 2441, 2440, 2439, 55, 154, 151, - 2438, 2423, 99, 31, 188, 91, 2422, 2421, 72, 173, - 16, 33, 0, 155, 32, 2420, 2419, 2418, 193, 149, - 146, 179, 104, 206, 123, 2416, 2415, 54, 2414, 120, - 2413, 87, 7, 2412, 136, 2411, 184, 130, 2409, 163, - 2408, 292, 2, 106, 29, 219, 2403, 2402, 2401, 132, - 2400, 2399, 93, 138, 2397, 2396, 2395, 25, 2394, 27, - 21, 2393, 90, 2391, 194, 2390, 161, 97, 134, 135, - 107, 176, 180, 66, 111, 1015, 103, 74, 19, 2389, - 177, 2388, 209, 189, 2387, 143, 2386, 191, 363, 166, - 2385, 142, 8, 2384, 2383, 10, 2379, 23, 2378, 2377, - 2376, 2368, 6, 2350, 2345, 2340, 1, 4, 2338, 5, - 165, 48, 94, 2336, 96, 185, 2335, 2333, 2332, 2330, - 2326, 212, 2325, 2322, 2321, 2320, 2318, 2317, 2316, 2315, - 80, 28, 2314, 2313, 2311, 2310, 69, 102, 2309, 288, - 162, 2308, 39, 2307, 2306, 38, 2305, 45, 2301, 2296, - 2295, 14, 141, 2294, 2293, 15, 2279, 2278, 11, 13, - 2275, 2274, 59, 2273, 49, 30, 63, 77, 2272, 22, - 61, 100, 2271, 2270, 190, 192, 159, 2268, 121, 182, - 201, 2266, 170, 2265, 2263, 2262, 2261, 2260, 2258, 2256, - 1068, 2254, 2240, 183, 57, 175, 2238, 2237, 147, 2236, - 114, 85, 81, 156, 2220, 145, 2219, 2217, 84, 2216, - 2214, 2209, 2207, 2206, 181, 150, 2205, 2204, -} - -//line mysql_sql.y:8016 + 0, 120, 2651, 195, 130, 128, 194, 2633, 2632, 2084, + 2083, 2631, 2630, 2629, 2628, 2612, 2607, 2605, 2604, 2602, + 2601, 2600, 2599, 2598, 2597, 2596, 2595, 2593, 193, 2591, + 2590, 2589, 2588, 2587, 2586, 2585, 2584, 2582, 2581, 2580, + 2579, 2578, 2577, 2576, 2562, 2561, 122, 2560, 2062, 2559, + 2557, 2556, 2553, 2552, 170, 2550, 2549, 2544, 2543, 2541, + 2540, 2539, 2538, 2537, 2536, 2535, 2534, 2533, 2532, 135, + 2531, 2523, 2522, 2517, 2516, 182, 172, 57, 2515, 53, + 48, 108, 200, 117, 202, 203, 143, 140, 82, 2514, + 2103, 2513, 127, 179, 111, 24, 2507, 126, 2506, 109, + 51, 28, 201, 105, 55, 67, 98, 2505, 175, 84, + 2504, 2503, 90, 2502, 62, 2501, 75, 34, 91, 26, + 2500, 2486, 2484, 74, 2483, 2482, 2481, 2480, 139, 2479, + 92, 54, 2478, 2477, 2476, 2474, 2473, 40, 2467, 41, + 2465, 2464, 2463, 2462, 63, 2461, 2459, 12, 20, 18, + 2458, 17, 3, 2457, 174, 59, 77, 104, 2456, 351, + 2455, 2454, 2453, 112, 2452, 613, 2451, 2450, 2447, 2445, + 2444, 9, 2443, 156, 2442, 2441, 2440, 60, 149, 168, + 2425, 2424, 100, 50, 94, 99, 2423, 2422, 64, 173, + 16, 33, 0, 154, 39, 2421, 2420, 2418, 197, 151, + 146, 183, 89, 209, 125, 2417, 2416, 47, 2415, 114, + 2414, 95, 7, 2413, 134, 2411, 184, 137, 2409, 166, + 2405, 188, 2, 102, 30, 221, 2404, 2403, 2402, 132, + 2401, 2399, 58, 138, 2398, 2397, 2396, 25, 2395, 31, + 21, 2393, 86, 2392, 196, 2391, 152, 97, 142, 124, + 107, 177, 181, 66, 113, 1163, 103, 81, 19, 2390, + 178, 2389, 198, 191, 2388, 147, 2387, 189, 339, 169, + 2386, 141, 8, 2385, 2380, 10, 2379, 23, 2378, 2375, + 2373, 2372, 6, 2371, 2370, 2369, 1, 4, 2367, 5, + 165, 52, 93, 2365, 96, 186, 2364, 2361, 2357, 2356, + 2354, 219, 2351, 2350, 2349, 2348, 2347, 2342, 2341, 2340, + 80, 35, 2338, 2337, 2334, 2333, 69, 106, 2328, 274, + 161, 2327, 45, 2325, 2324, 29, 2323, 27, 2322, 2320, + 2319, 14, 144, 2317, 2316, 15, 2315, 2313, 11, 13, + 2312, 2311, 61, 2310, 38, 32, 73, 72, 2309, 22, + 68, 101, 2308, 2303, 199, 192, 159, 2302, 115, 180, + 206, 2300, 171, 2298, 2297, 2296, 2295, 2294, 2292, 2291, + 1162, 2290, 2289, 187, 56, 176, 2288, 2286, 148, 2284, + 121, 85, 87, 155, 2283, 145, 2282, 2280, 83, 2279, + 2274, 2258, 2252, 2249, 185, 150, 2247, 2239, +} + +//line mysql_sql.y:8021 type yySymType struct { union interface{} id int @@ -4964,43 +4978,43 @@ var yyR1 = [...]int{ 344, 344, 120, 172, 172, 172, 192, 192, 192, 171, 171, 171, 134, 134, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 258, 258, 206, 206, 207, 207, 151, 150, 150, 150, - 150, 150, 148, 149, 147, 147, 147, 147, 147, 146, - 146, 145, 145, 145, 238, 238, 143, 143, 141, 141, - 141, 140, 140, 140, 290, 212, 212, 212, 212, 212, - 212, 212, 212, 212, 212, 212, 212, 212, 214, 214, + 131, 258, 258, 206, 206, 207, 207, 151, 150, 150, + 150, 150, 150, 148, 149, 147, 147, 147, 147, 147, + 146, 146, 145, 145, 145, 238, 238, 143, 143, 141, + 141, 141, 140, 140, 140, 290, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 215, - 215, 220, 220, 357, 357, 356, 121, 121, 121, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 130, 130, - 130, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 314, 314, 314, 166, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 215, 215, 220, 220, 357, 357, 356, 121, 121, 121, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 130, + 130, 130, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 314, 314, 314, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 170, 369, 369, 369, 353, 353, 354, 354, + 166, 166, 166, 170, 369, 369, 369, 353, 353, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 168, 168, 168, - 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, - 167, 167, 167, 224, 224, 225, 225, 311, 311, 311, - 311, 311, 311, 312, 312, 313, 313, 313, 313, 306, + 354, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 168, 168, + 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 224, 224, 225, 225, 311, 311, + 311, 311, 311, 311, 312, 312, 313, 313, 313, 313, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 213, 165, - 165, 165, 226, 221, 221, 222, 222, 216, 216, 216, - 216, 216, 216, 216, 218, 218, 218, 218, 218, 218, - 218, 218, 218, 218, 218, 211, 211, 211, 211, 211, - 211, 211, 211, 211, 217, 217, 219, 219, 228, 228, - 228, 227, 227, 227, 227, 227, 227, 227, 132, 132, - 132, 132, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 123, 123, 123, 123, 127, 127, 129, 129, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 213, + 165, 165, 165, 226, 221, 221, 222, 222, 216, 216, + 216, 216, 216, 216, 216, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 217, 217, 219, 219, 228, + 228, 228, 227, 227, 227, 227, 227, 227, 227, 132, + 132, 132, 132, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 123, 123, 123, 123, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 128, 128, 128, 128, 126, 126, 126, 126, - 126, 124, 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 70, 71, 71, - 125, 173, 173, 291, 291, 294, 294, 292, 292, 293, - 295, 295, 295, 296, 296, 296, 297, 297, 297, 299, - 299, 177, 177, 177, 184, 184, 176, 176, 185, 185, - 186, 186, 182, 182, 182, 182, 182, 182, 182, 182, + 129, 129, 129, 128, 128, 128, 128, 126, 126, 126, + 126, 126, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 70, 71, + 71, 125, 173, 173, 291, 291, 294, 294, 292, 292, + 293, 295, 295, 295, 296, 296, 296, 297, 297, 297, + 299, 299, 177, 177, 177, 184, 184, 176, 176, 185, + 185, 186, 186, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, @@ -5016,7 +5030,7 @@ var yyR1 = [...]int{ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 183, 183, 183, + 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, @@ -5034,12 +5048,12 @@ var yyR1 = [...]int{ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 180, 180, 180, 180, 180, 180, + 183, 183, 183, 183, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, + 180, 180, 180, } var yyR2 = [...]int{ @@ -5131,42 +5145,42 @@ var yyR2 = [...]int{ 0, 1, 3, 1, 3, 5, 1, 1, 1, 1, 3, 5, 0, 1, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 5, 6, 4, - 1, 2, 0, 1, 1, 2, 5, 0, 1, 1, - 2, 2, 3, 3, 1, 1, 2, 2, 2, 0, - 1, 2, 2, 2, 0, 3, 0, 3, 1, 1, - 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, - 1, 3, 5, 2, 2, 2, 2, 1, 1, 2, - 5, 6, 6, 6, 1, 1, 1, 1, 1, 0, - 2, 0, 1, 1, 2, 4, 1, 2, 2, 1, - 2, 2, 1, 2, 2, 2, 2, 2, 0, 1, - 1, 5, 4, 4, 5, 5, 5, 5, 4, 5, - 5, 5, 5, 5, 5, 5, 1, 1, 1, 4, - 4, 6, 8, 6, 4, 5, 5, 4, 6, 6, - 7, 4, 6, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 0, 1, 1, 2, 5, 0, 1, + 1, 2, 2, 3, 3, 1, 1, 2, 2, 2, + 0, 1, 2, 2, 2, 0, 3, 0, 3, 1, + 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, + 1, 1, 3, 5, 2, 2, 2, 2, 1, 1, + 2, 5, 6, 6, 6, 1, 1, 1, 1, 1, + 0, 2, 0, 1, 1, 2, 4, 1, 2, 2, + 1, 2, 2, 1, 2, 2, 2, 2, 2, 0, + 1, 1, 5, 4, 4, 5, 5, 5, 5, 4, + 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, + 4, 4, 6, 8, 6, 4, 5, 5, 4, 6, + 6, 7, 4, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 8, - 4, 2, 3, 2, 4, 6, 2, 2, 4, 6, - 4, 2, 2, 0, 1, 2, 3, 1, 1, 1, - 1, 1, 1, 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, 3, 0, - 1, 1, 3, 0, 1, 1, 3, 3, 3, 3, - 3, 2, 1, 1, 3, 4, 3, 4, 3, 4, - 3, 4, 3, 4, 1, 3, 4, 4, 5, 3, - 4, 5, 6, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 8, 4, 2, 3, 2, 4, 6, 2, 2, 4, + 6, 4, 2, 2, 0, 1, 2, 3, 1, 1, + 1, 1, 1, 1, 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, 3, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 0, 1, 1, 3, 0, 1, 1, 3, 3, 3, + 3, 3, 2, 1, 1, 3, 4, 3, 4, 3, + 4, 3, 4, 3, 4, 1, 3, 4, 4, 5, + 3, 4, 5, 6, 1, 0, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 4, 4, 1, 2, 3, 5, - 1, 1, 3, 0, 1, 0, 3, 0, 3, 3, - 0, 3, 5, 0, 3, 5, 0, 1, 1, 0, - 1, 1, 2, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 4, 4, 1, 2, 3, + 5, 1, 1, 3, 0, 1, 0, 3, 0, 3, + 3, 0, 3, 5, 0, 3, 5, 0, 1, 1, + 0, 1, 1, 2, 2, 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, @@ -5206,272 +5220,272 @@ 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, } var yyChk = [...]int{ -1000, -392, -2, -1, -3, -73, -4, -69, -5, -6, -8, -53, -65, -67, -68, -28, -7, -64, -46, -47, -49, -55, -60, -61, -62, -63, -70, -71, -72, -80, - -23, -22, -21, -20, 389, 12, 425, -9, -10, -358, + -23, -22, -21, -20, 390, 12, 426, -9, -10, -358, -11, 229, -195, -196, -197, -393, -29, -30, -31, -36, -37, -38, -39, -41, -42, -43, -32, -33, -34, -35, -45, -44, 206, -48, 61, -50, -51, -52, -56, -57, - -58, -59, 320, 326, 378, 387, 508, 509, 46, -81, - -83, -24, -25, -26, -27, 202, 14, 458, -12, -15, + -58, -59, 320, 326, 379, 388, 509, 510, 46, -81, + -83, -24, -25, -26, -27, 202, 14, 459, -12, -15, -13, -16, -14, -18, -19, -17, 224, 223, 37, 286, 287, 324, 222, 203, 13, 135, 136, 138, 139, 30, - -82, 67, 204, -84, 10, 510, 418, -90, 38, -117, - -192, 70, -180, -183, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 428, 302, 455, 241, 265, 349, 268, 275, 135, 154, - 148, 176, 168, 143, 245, 246, 77, 138, 411, 87, - 396, 375, 141, 260, 262, 264, 267, 247, 164, 159, - 259, 243, 508, 157, 248, 39, 249, 181, 250, 251, - 460, 392, 301, 398, 272, 373, 158, 393, 263, 395, - 183, 187, 403, 326, 152, 153, 400, 405, 180, 221, - 42, 457, 233, 406, 185, 179, 175, 414, 276, 274, - 178, 151, 174, 244, 50, 189, 188, 190, 369, 370, - 371, 372, 252, 253, 314, 402, 171, 160, 305, 144, - 22, 409, 228, 397, 327, 254, 269, 277, 184, 186, - 235, 240, 459, 377, 239, 273, 407, 156, 232, 261, - 227, 410, 145, 320, 329, 255, 139, 266, 404, 413, + -82, 67, 204, -84, 10, 511, 419, -90, 38, -117, + -192, 70, -180, -183, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 429, 302, 456, 241, 265, 350, 268, 275, 135, 154, + 148, 176, 168, 143, 245, 246, 77, 138, 412, 87, + 397, 376, 141, 260, 262, 264, 267, 247, 164, 159, + 259, 243, 509, 157, 248, 39, 249, 181, 250, 251, + 461, 393, 301, 399, 272, 374, 158, 394, 263, 396, + 183, 187, 404, 326, 152, 153, 401, 406, 180, 221, + 42, 458, 233, 407, 185, 179, 175, 415, 276, 274, + 178, 151, 174, 244, 50, 189, 188, 190, 370, 371, + 372, 373, 252, 253, 314, 403, 171, 160, 305, 144, + 22, 410, 228, 398, 327, 254, 269, 277, 184, 186, + 235, 240, 460, 378, 239, 273, 408, 156, 232, 261, + 227, 411, 145, 320, 329, 255, 139, 266, 405, 414, 49, 342, 150, 142, 218, 136, 237, 242, 11, 256, 257, 258, 279, 278, 270, 172, 234, 177, 162, 149, - 173, 137, 236, 412, 343, 506, 303, 358, 170, 167, - 238, 211, 408, 399, 140, 362, 344, 165, 280, 503, - 504, 505, 315, 300, 281, 282, 163, 225, 391, 283, - 285, 368, 293, 345, 376, 350, -90, -48, -10, -9, - -82, -83, -117, 209, -199, 23, 373, -54, 374, 206, - 67, -192, -5, -4, -69, -46, -80, -198, -192, 286, - -198, 209, -192, 239, 357, -301, 214, -268, -242, 240, - -267, -244, -270, -245, 31, 202, 204, 203, 236, 14, - 324, 210, 12, 10, 325, 222, 24, 25, 27, 13, - 326, 328, 28, 329, 332, 333, 334, 41, 337, 338, - 229, 70, 73, 247, 247, -222, -216, 94, 230, -218, - -211, -212, -214, -338, -332, -210, 67, 119, 120, 127, - 95, -213, -290, 35, 97, 465, 426, -166, -167, -168, - -169, -170, -192, -333, -331, 73, 78, 81, 84, 85, - 83, 82, 161, 80, 74, 132, -83, 70, -353, 473, - -181, 493, 474, 492, 46, -306, -313, 208, -311, 166, - 225, 162, 12, 125, 368, 130, 163, 470, 489, 428, - 496, 467, 468, 462, 463, 464, 466, 475, 477, 488, - -314, 484, 494, 495, 497, 72, 71, 487, 486, 471, - 472, 478, 461, 469, 479, 480, 485, 490, 491, 499, - 500, 308, 87, 309, 310, 418, 304, 311, 214, 373, - 55, 312, 313, 314, 315, 316, 425, 317, 56, 318, - 307, 229, 358, 319, 165, 182, 430, 429, 431, 422, - 419, 417, 420, 421, 423, 424, 481, 482, 483, -264, - -262, -192, -74, -75, 501, -99, -100, -159, 19, 6, - 7, 8, 9, -303, 302, 358, 239, -236, -234, 283, - 335, 219, 218, 88, 418, 208, -370, -371, 199, 200, - 201, -360, 451, -359, -192, 310, 26, 209, -40, -315, - -300, 399, 398, -203, 397, 390, 401, 392, 202, 452, - -177, 345, 376, 235, 415, 416, 322, 377, 403, 404, - 393, 87, 169, 166, 302, 358, -370, 140, 137, -255, - 140, 93, 145, 144, -255, 239, 357, 40, -261, 368, - -260, -262, 403, 404, 414, 71, 72, 402, -177, 87, - -100, -159, -99, -81, -83, -358, 302, 358, 239, 210, - 209, 211, 418, 286, -302, -366, 31, -307, 196, 197, - 198, 32, 33, -1, -193, -190, -183, 70, 71, 72, - -106, 231, -117, 133, -106, -100, -99, -100, -117, -171, - -192, 375, 103, -54, -54, 374, -361, -362, -363, -365, - 206, 374, 373, 133, 15, -198, 65, -117, -244, 239, - -268, -242, 35, 64, 134, 212, 134, 64, 67, 322, - 302, 358, 323, 418, 209, 335, 211, 239, 336, 302, - 358, 209, 211, 418, 239, 302, 209, 211, 358, 239, - 336, 390, 391, 211, 26, 327, 330, 331, 391, -319, - 414, -319, 134, 93, 90, 91, 92, -216, 110, -227, - 103, 104, 105, 106, 107, 108, 109, 116, 115, 126, - 119, 120, 121, 122, 123, 124, 125, 117, 118, 113, - 94, 111, 112, 96, -83, -216, -222, -214, -214, -214, - -214, -290, -220, -216, 67, 67, 133, -216, 67, 67, - 67, 67, 67, 67, 67, 67, 67, -312, 67, 67, - -224, -225, 67, 67, 73, 73, 67, 67, 67, -214, - 73, -225, -225, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 134, - -123, -127, -124, -126, -125, -129, -128, 166, 167, 130, - 170, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 30, 182, 225, 162, 163, 164, 165, 183, 148, - 168, 456, 191, 149, 192, 150, 193, 151, 194, 152, - 153, 195, 154, 157, 158, 159, 156, 133, -100, 134, - 67, -76, 38, -102, 21, -84, -83, 20, 31, 32, - 31, 32, 31, 32, 31, 32, -368, 209, 451, -232, - 214, -232, -232, 210, -232, 209, -372, 147, 134, -360, - -105, 67, -202, 111, 23, 237, -202, -396, 210, 400, - 42, 238, 237, -101, -102, -101, 394, 391, -277, 395, - 396, -203, -202, -202, -203, 209, 211, 418, -394, -395, - 15, 113, 237, -394, 30, 30, -301, -301, -373, 213, - 407, 458, 143, 144, 145, -244, 239, 239, 134, 103, - 23, -263, 103, 114, -262, -262, -262, -263, -263, -137, - 40, -191, 130, -192, 73, -137, 40, -101, -84, -83, - 68, 68, -301, -301, -301, -301, -301, -301, -301, -198, - -85, -86, 121, -216, -192, -85, 38, 391, -308, 46, - -80, 67, 30, 67, -192, -309, 46, -80, 67, 30, - -101, -76, -102, 133, 78, 73, -54, 68, 134, -364, - 84, 85, -367, 180, 172, -192, -66, 73, -3, -4, - -5, -6, -28, -46, -80, -334, -332, 67, 31, 367, - 64, 15, -269, 209, 418, 321, 235, 211, 302, -267, - -251, -248, -246, -191, -244, -247, -246, -272, -171, 391, - -77, 379, -77, -216, -216, -216, -216, -216, 83, 94, - 300, 84, 85, -211, -228, 31, 281, 282, -212, -212, + 173, 137, 236, 413, 343, 507, 303, 359, 170, 167, + 238, 211, 409, 400, 140, 363, 344, 165, 280, 504, + 505, 506, 315, 300, 281, 282, 163, 225, 392, 283, + 285, 369, 293, 345, 377, 351, 346, -90, -48, -10, + -9, -82, -83, -117, 209, -199, 23, 374, -54, 375, + 206, 67, -192, -5, -4, -69, -46, -80, -198, -192, + 286, -198, 209, -192, 239, 358, -301, 214, -268, -242, + 240, -267, -244, -270, -245, 31, 202, 204, 203, 236, + 14, 324, 210, 12, 10, 325, 222, 24, 25, 27, + 13, 326, 328, 28, 329, 332, 333, 334, 41, 337, + 338, 229, 70, 73, 247, 247, -222, -216, 94, 230, + -218, -211, -212, -214, -338, -332, -210, 67, 119, 120, + 127, 95, -213, -290, 35, 97, 466, 427, -166, -167, + -168, -169, -170, -192, -333, -331, 73, 78, 81, 84, + 85, 83, 82, 161, 80, 74, 132, -83, 70, -353, + 474, -181, 494, 475, 493, 46, -306, -313, 208, -311, + 166, 225, 162, 12, 125, 369, 130, 163, 471, 490, + 429, 497, 468, 469, 463, 464, 465, 467, 476, 478, + 489, -314, 485, 495, 496, 498, 72, 71, 488, 487, + 472, 473, 479, 462, 470, 480, 481, 486, 491, 492, + 500, 501, 308, 87, 309, 310, 419, 304, 311, 214, + 374, 55, 312, 313, 314, 315, 316, 426, 317, 56, + 318, 307, 229, 359, 319, 165, 182, 431, 430, 432, + 423, 420, 418, 421, 422, 424, 425, 482, 483, 484, + -264, -262, -192, -74, -75, 502, -99, -100, -159, 19, + 6, 7, 8, 9, -303, 302, 359, 239, -236, -234, + 283, 335, 219, 218, 88, 419, 208, -370, -371, 199, + 200, 201, -360, 452, -359, -192, 310, 26, 209, -40, + -315, -300, 400, 399, -203, 398, 391, 402, 393, 202, + 453, -177, 345, 377, 235, 416, 417, 322, 378, 404, + 405, 394, 87, 169, 166, 302, 359, -370, 140, 137, + -255, 140, 93, 145, 144, -255, 239, 358, 40, -261, + 369, -260, -262, 404, 405, 415, 71, 72, 403, -177, + 87, -100, -159, -99, -81, -83, -358, 302, 359, 239, + 210, 209, 211, 419, 286, -302, -366, 31, -307, 196, + 197, 198, 32, 33, -1, -193, -190, -183, 70, 71, + 72, -106, 231, -117, 133, -106, -100, -99, -100, -117, + -171, -192, 376, 103, -54, -54, 375, -361, -362, -363, + -365, 206, 375, 374, 133, 15, -198, 65, -117, -244, + 239, -268, -242, 35, 64, 134, 212, 134, 64, 67, + 322, 302, 359, 323, 419, 209, 335, 211, 239, 336, + 302, 359, 209, 211, 419, 239, 302, 209, 211, 359, + 239, 336, 391, 392, 211, 26, 327, 330, 331, 392, + -319, 415, -319, 134, 93, 90, 91, 92, -216, 110, + -227, 103, 104, 105, 106, 107, 108, 109, 116, 115, + 126, 119, 120, 121, 122, 123, 124, 125, 117, 118, + 113, 94, 111, 112, 96, -83, -216, -222, -214, -214, + -214, -214, -290, -220, -216, 67, 67, 133, -216, 67, + 67, 67, 67, 67, 67, 67, 67, 67, -312, 67, + 67, -224, -225, 67, 67, 73, 73, 67, 67, 67, + -214, 73, -225, -225, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, + 134, -123, -127, -124, -126, -125, -129, -128, 166, 167, + 130, 170, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 30, 182, 225, 162, 163, 164, 165, 183, + 148, 168, 457, 191, 149, 192, 150, 193, 151, 194, + 152, 153, 195, 154, 157, 158, 159, 156, 133, -100, + 134, 67, -76, 38, -102, 21, -84, -83, 20, 31, + 32, 31, 32, 31, 32, 31, 32, -368, 209, 452, + -232, 214, -232, -232, 210, -232, 209, -372, 147, 134, + -360, -105, 67, -202, 111, 23, 237, -202, -396, 210, + 401, 42, 238, 237, -101, -102, -101, 395, 392, -277, + 396, 397, -203, -202, -202, -203, 209, 211, 419, -394, + -395, 15, 113, 237, -394, 30, 30, -301, -301, -373, + 213, 408, 459, 143, 144, 145, -244, 239, 239, 134, + 103, 23, -263, 103, 114, -262, -262, -262, -263, -263, + -137, 40, -191, 130, -192, 73, -137, 40, -101, -84, + -83, 68, 68, -301, -301, -301, -301, -301, -301, -301, + -198, -85, -86, 121, -216, -192, -85, 38, 392, -308, + 46, -80, 67, 30, 67, -192, -309, 46, -80, 67, + 30, -101, -76, -102, 133, 78, 73, -54, 68, 134, + -364, 84, 85, -367, 180, 172, -192, -66, 73, -3, + -4, -5, -6, -28, -46, -80, -334, -332, 67, 31, + 368, 64, 15, -269, 209, 419, 321, 235, 211, 302, + -267, -251, -248, -246, -191, -244, -247, -246, -272, -171, + 392, -77, 380, -77, -216, -216, -216, -216, -216, 83, + 94, 300, 84, 85, -211, -228, 31, 281, 282, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, - -219, -226, -290, 67, 113, 111, 112, 96, -214, -212, - -212, 68, 134, -357, -356, 98, -216, -216, -192, -354, - -355, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 312, 307, 313, 311, 304, 319, 314, 315, - 165, 449, 450, 443, 444, 445, 446, 447, 448, -221, - -222, -221, -216, -354, -221, -165, 32, 31, -165, -216, - -369, 298, 297, 299, -103, -192, -221, 68, 68, 68, - 78, -222, -221, -212, -221, -355, -165, -222, -222, -165, - -165, -165, -165, 121, -165, -165, -165, -165, -165, -165, - -165, 73, -262, 40, -297, 343, 342, -291, -293, 67, - -292, 67, -292, -291, -291, 67, 67, -294, 67, -294, - -294, -291, -295, 67, -295, -296, 67, -295, -192, -101, - -75, -317, -316, -216, 40, 502, -76, -216, -98, -97, - -216, 211, -232, -375, -192, 94, -252, -249, -246, -242, - -190, -192, -232, -373, -359, 34, -104, -192, -155, 16, - -214, -246, -394, -155, -395, -202, -202, -204, -395, -200, - -395, 391, -155, -155, -277, -201, -192, -201, -232, -179, - -178, -192, -179, -375, -252, -93, -88, -92, -89, -94, - -158, -160, -91, 67, -117, 499, 500, 408, 409, 141, - 144, 143, 31, 367, -266, 367, 31, -242, -260, -256, - 73, 368, -247, -265, 64, 130, -316, -263, -263, -263, - -265, -265, 129, -76, -375, -251, -242, -192, -119, -117, - -119, -193, -154, 134, -153, 15, -187, -192, 34, 73, - 133, -154, 73, -119, -391, 64, -310, -223, -352, 501, - -108, 68, -103, -350, -351, -103, -107, -192, -310, -108, - 68, -350, -76, -76, -185, -186, -176, -182, -189, -190, - -183, 207, 31, 93, 34, 36, 308, 340, 96, 130, - 20, 97, 166, 129, 310, 426, 309, 202, 59, 429, - 431, 430, 419, 417, 360, 364, 366, 363, 418, 390, - 40, 14, 37, 223, 32, 33, 123, 204, 100, 101, - 226, 35, 224, 85, 44, 23, 62, 15, 17, 18, - 311, 359, 214, 213, 113, 379, 210, 57, 12, 132, - 38, 110, 361, 53, 89, 45, 55, 111, 21, 420, - 421, 41, 378, 387, 454, 230, 125, 312, 313, 60, - 94, 367, 83, 43, 64, 90, 19, 58, 112, 205, - 425, 56, 365, 316, 318, 328, 451, 317, 208, 401, - 10, 307, 427, 30, 222, 54, 209, 99, 212, 84, - 229, 6, 88, 13, 61, 65, 422, 423, 424, 46, - 98, 16, 319, 458, 380, 381, 382, 383, 384, 385, - 386, 191, 192, 193, 194, 195, 271, 217, 215, 219, - 220, 501, 502, 196, 197, 297, 299, 169, 199, 200, - 201, 231, 147, 7, 346, 347, 348, 351, 352, 353, - 354, 355, 356, 357, 509, 389, 23, -54, -362, 133, - 134, -104, -269, -250, -247, -271, 121, 70, -257, 134, - 458, 511, 71, 212, -384, -383, 359, 68, 134, -320, - 213, 425, 73, 512, -320, 83, 300, 84, 85, -290, - -222, -219, -214, -212, -212, -217, 226, 93, -216, -215, - -356, 100, -216, 34, 134, 65, 133, 68, 68, 15, - 15, 68, -216, -216, 68, 15, 15, -216, 68, 133, - 68, 68, 68, 65, 68, 134, 68, 134, -216, 68, - 68, -216, -216, -216, -222, 68, -216, -216, -216, -216, - -216, -216, -216, 134, -216, -299, 344, 78, 78, -173, - 73, -173, 78, 78, 78, 134, 68, 73, 134, 22, - 134, -95, 36, 37, -117, 214, -117, -378, 346, 35, - -385, 134, 40, -383, -235, 65, -230, -231, -229, -233, - 40, -117, 15, -87, -118, -192, 67, 68, 134, -216, - -243, 65, -179, -117, -155, -155, -202, -193, -204, -199, - -204, -200, 133, -178, -378, -385, 30, -161, -162, -163, - -164, 53, 57, 59, 54, 55, 56, 60, 30, 134, - -397, 34, -188, -194, 34, -189, 73, -190, -183, -88, - -81, -83, -93, 67, -188, 67, 67, 142, 145, 145, - 144, 212, 67, 103, -265, -265, -265, 40, -191, 64, - 134, -155, -86, -88, -192, 73, -192, 121, -155, -144, - 504, 38, 39, 134, 67, 68, 134, 46, 134, 103, - 68, 134, 68, 46, 133, 375, -192, -332, 68, -271, - 134, 212, 133, 133, -248, 326, -191, -250, 20, 458, - -171, 38, 73, 38, 68, -217, 93, -214, -211, 68, - 101, -216, 99, -121, -123, 342, 343, -122, -128, 130, - 166, 225, 165, 164, 162, 342, 343, -137, -192, -216, - -216, 68, 68, -216, -216, 15, -192, -137, -212, -216, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 73, 68, 68, 68, 134, 68, 68, 68, - 134, 68, 134, -316, -323, 395, -216, -216, -97, -96, - 43, -105, 94, 67, -380, 397, 348, -184, 103, -209, - -208, 303, 41, -304, 368, 354, 355, -249, 239, 64, - 292, 293, 294, 295, -229, -177, 129, 250, 67, -117, - -87, -192, 15, 134, -374, 133, -1, -192, -242, -202, - -155, -155, -202, -202, -204, -192, -380, -209, -254, -253, - -171, -92, -92, -92, -92, 53, 53, 53, 58, 53, - 58, 53, -163, -254, -94, -192, -194, 68, 68, -81, - -390, -389, -388, -386, 61, 213, 62, 73, -171, -222, - 145, -250, -205, 73, -256, -117, -117, -157, 17, 133, - -157, 78, 73, 89, -223, -318, -317, 46, -80, -103, - -310, -351, -316, -192, 46, -80, -310, -185, -182, -190, - -183, 78, 15, -247, -242, 121, 121, 70, 327, -257, - 73, 347, 73, 209, 103, 209, -211, -216, 68, -130, - 153, 152, -130, 68, -291, -292, -291, -294, -291, -130, - -130, 68, 68, 23, 68, 68, 68, -216, 68, 68, - 134, 68, 73, 78, 78, -329, 385, 380, 382, 44, - 45, 34, 35, -112, -113, -114, -120, -115, -171, -207, - -116, 217, 215, 219, -347, 88, 220, 271, 89, 210, - -381, 77, -376, 73, -382, 77, 349, 132, 305, 40, - 350, 351, 365, 301, 78, 78, 356, -377, 70, -117, - -184, -184, -184, -112, -106, 65, 133, -88, -118, -192, - 121, 68, -155, -155, -155, -202, -381, -382, -155, 134, - 103, -110, -109, 64, 65, -111, 64, -109, 53, 53, - -155, -105, 68, -388, -387, 23, -347, -347, -347, 68, - 134, 68, 134, 68, 68, -156, 18, 20, 121, -156, - -144, 13, 68, -310, -310, -242, -257, 368, -117, 73, - -117, -216, 68, -216, 68, 68, -298, 503, -327, 380, - 20, 20, -80, -117, 68, 134, -123, -116, -192, 89, - -346, -347, -232, -346, 89, 67, 73, -379, 359, 73, - 73, 78, 40, 78, 132, 352, -305, 67, -137, -139, - -191, 130, 73, 68, -188, -88, -192, -155, -374, 133, - -155, -100, -253, -316, -216, 67, -216, 67, 53, 19, - 17, 73, 73, -216, -222, -350, -79, -321, -277, 513, - 134, -79, 68, 68, -144, 73, 20, 73, -325, 73, - -105, -135, -136, -152, 340, 241, -233, 245, 77, 246, - 375, 247, 210, 249, 250, 251, 221, 252, 253, 254, - 368, 255, 256, 257, 258, 323, 6, 288, -114, -134, - -133, -131, 83, 94, 40, 340, -132, 77, 129, 264, - 242, 265, -151, -206, 64, 215, 88, 89, 328, -207, - -342, -344, -192, -344, -192, -342, -342, -232, -216, 20, - 458, 304, 40, 78, 40, 353, -237, -239, -171, 67, - -78, -77, -155, -155, -101, -104, -343, -192, 215, 20, - 20, 68, 134, 68, 134, -328, 385, -324, -322, 380, - 381, 382, 383, 73, -174, 505, 73, 382, 34, -273, - 231, 134, -152, -184, -184, -177, 129, -184, -184, -184, - -184, 248, 248, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, 67, -131, 83, - -212, 73, -139, -140, 40, 263, 259, -141, 40, 243, - 244, -143, 67, 271, 13, 89, 89, -117, 67, 65, - 280, 67, 67, 67, -344, 68, 73, 347, 73, 304, - 68, 134, -291, -216, -79, -100, 68, 68, 134, 84, - 85, 84, 85, -330, 213, -326, 384, -322, 20, 382, - 20, 20, 103, 67, 20, -80, 20, -152, 78, 78, - -184, -184, 78, 73, 73, 73, -184, -184, 78, 73, - -194, 78, 78, 78, 78, 40, 73, -142, 40, 259, - 263, 260, 261, 262, 78, 40, 78, 40, 78, 40, - -192, 67, -348, -349, 73, 78, 67, -311, -238, 67, - -237, -345, 292, 293, 294, 296, 295, -345, -237, -237, - -237, 67, -259, -258, 272, 94, 368, -240, -239, -95, - 68, -101, -192, 215, 68, 68, 68, 68, -337, 67, - 78, -327, 20, -325, 20, -325, -325, 73, -175, -192, - -325, -274, 273, 274, -275, -281, 276, -137, -137, 73, - 73, -138, 242, -119, 68, 134, 103, 68, -216, -224, - -146, -145, 454, -237, 68, 68, 68, 68, -237, 272, - -241, 221, 77, 458, 290, 291, -95, -341, 30, 68, - -336, -335, -172, -331, -192, 385, 386, 73, -325, 513, - 134, 68, 134, -279, 277, 67, -277, 67, -277, 89, - 293, 243, 244, 68, -349, 73, 68, -150, -148, -149, - 64, 393, 269, 270, 68, -240, -240, -240, -240, 68, - -184, 73, 289, -340, -339, -338, 68, 134, 133, 73, - -192, -276, 278, 78, -212, 67, -212, 67, -278, 275, - 67, -258, -149, 64, -148, 64, 14, 13, -151, 78, - -190, 134, 103, -335, -192, 103, -283, 67, 20, 68, - -272, 68, -272, 67, 103, -212, -147, 266, 267, 30, - 144, -147, -339, 40, -216, 133, 73, -284, -282, 231, - -275, 68, 68, 68, -272, 78, 68, 83, 40, 268, - -192, 513, 134, 68, 134, 70, -280, 279, 68, 73, - -282, -285, 46, 78, 103, -289, -286, 67, -152, 233, - 113, 73, -289, -152, -288, -287, 278, 234, 67, 513, - 68, 134, 70, 230, 67, -222, -287, -286, -222, 68, - 68, + -212, -219, -226, -290, 67, 113, 111, 112, 96, -214, + -212, -212, 68, 134, -357, -356, 98, -216, -216, -192, + -354, -355, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 312, 307, 313, 311, 304, 319, 314, + 315, 165, 450, 451, 444, 445, 446, 447, 448, 449, + -221, -222, -221, -216, -354, -221, -165, 32, 31, -165, + -216, -369, 298, 297, 299, -103, -192, -221, 68, 68, + 68, 78, -222, -221, -212, -221, -355, -165, -222, -222, + -165, -165, -165, -165, 121, -165, -165, -165, -165, -165, + -165, -165, 73, -262, 40, -297, 343, 342, -291, -293, + 67, -292, 67, -292, -291, -291, 67, 67, -294, 67, + -294, -294, -291, -295, 67, -295, -296, 67, -295, -192, + -101, -75, -317, -316, -216, 40, 503, -76, -216, -98, + -97, -216, 211, -232, -375, -192, 94, -252, -249, -246, + -242, -190, -192, -232, -373, -359, 34, -104, -192, -155, + 16, -214, -246, -394, -155, -395, -202, -202, -204, -395, + -200, -395, 392, -155, -155, -277, -201, -192, -201, -232, + -179, -178, -192, -179, -375, -252, -93, -88, -92, -89, + -94, -158, -160, -91, 67, -117, 500, 501, 409, 410, + 141, 144, 143, 31, 368, -266, 368, 31, -242, -260, + -256, 73, 369, -247, -265, 64, 130, -316, -263, -263, + -263, -265, -265, 129, -76, -375, -251, -242, -192, -119, + -117, -119, -193, -154, 134, -153, 15, -187, -192, 34, + 73, 133, -154, 73, -119, -391, 64, -310, -223, -352, + 502, -108, 68, -103, -350, -351, -103, -107, -192, -310, + -108, 68, -350, -76, -76, -185, -186, -176, -182, -189, + -190, -183, 207, 31, 93, 34, 36, 308, 340, 96, + 130, 20, 97, 166, 129, 310, 427, 309, 202, 59, + 430, 432, 431, 420, 418, 361, 365, 367, 364, 419, + 391, 40, 14, 37, 223, 32, 33, 123, 204, 100, + 101, 226, 35, 224, 85, 44, 23, 62, 15, 17, + 18, 311, 360, 214, 213, 113, 380, 210, 57, 12, + 132, 38, 110, 362, 53, 89, 45, 55, 111, 21, + 421, 422, 41, 379, 388, 455, 230, 125, 312, 313, + 60, 94, 368, 83, 43, 64, 90, 19, 58, 112, + 205, 426, 56, 366, 316, 318, 328, 452, 317, 208, + 402, 10, 307, 428, 30, 222, 54, 209, 99, 212, + 84, 229, 6, 88, 13, 61, 65, 423, 424, 425, + 46, 98, 16, 319, 459, 381, 382, 383, 384, 385, + 386, 387, 191, 192, 193, 194, 195, 271, 217, 215, + 219, 220, 502, 503, 196, 197, 297, 299, 169, 199, + 200, 201, 231, 147, 7, 347, 348, 349, 352, 353, + 354, 355, 356, 357, 358, 510, 390, 23, -54, -362, + 133, 134, -104, -269, -250, -247, -271, 121, 70, -257, + 134, 459, 512, 71, 212, -384, -383, 360, 68, 134, + -320, 213, 426, 73, 513, -320, 83, 300, 84, 85, + -290, -222, -219, -214, -212, -212, -217, 226, 93, -216, + -215, -356, 100, -216, 34, 134, 65, 133, 68, 68, + 15, 15, 68, -216, -216, 68, 15, 15, -216, 68, + 133, 68, 68, 68, 65, 68, 134, 68, 134, -216, + 68, 68, -216, -216, -216, -222, 68, -216, -216, -216, + -216, -216, -216, -216, 134, -216, -299, 344, 78, 78, + -173, 73, -173, 78, 78, 78, 134, 68, 73, 134, + 22, 134, -95, 36, 37, -117, 214, -117, -378, 347, + 35, -385, 134, 40, -383, -235, 65, -230, -231, -229, + -233, 40, -117, 15, -87, -118, -192, 67, 68, 134, + -216, -243, 65, -179, -117, -155, -155, -202, -193, -204, + -199, -204, -200, 133, -178, -378, -385, 30, -161, -162, + -163, -164, 53, 57, 59, 54, 55, 56, 60, 30, + 134, -397, 34, -188, -194, 34, -189, 73, -190, -183, + -88, -81, -83, -93, 67, -188, 67, 67, 142, 145, + 145, 144, 212, 67, 103, -265, -265, -265, 40, -191, + 64, 134, -155, -86, -88, -192, 73, -192, 121, -155, + -144, 505, 38, 39, 134, 67, 68, 134, 46, 134, + 103, 68, 134, 68, 46, 133, 376, -192, -332, 68, + -271, 134, 212, 133, 133, -248, 326, -191, -250, 20, + 459, -171, 38, 73, 38, 68, -217, 93, -214, -211, + 68, 101, -216, 99, -121, -123, 342, 343, -122, -128, + 130, 166, 225, 165, 164, 162, 342, 343, -137, -192, + -216, -216, 68, 68, -216, -216, 15, -192, -137, -212, + -216, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 73, 68, 68, 68, 134, 68, 68, + 68, 134, 68, 134, -316, -323, 396, -216, -216, -97, + -96, 43, -105, 94, 67, -380, 398, 349, -184, 103, + -209, -208, 303, 41, -304, 369, 355, 356, -249, 239, + 64, 292, 293, 294, 295, -229, -177, 129, 250, 67, + -117, -87, -192, 15, 134, -374, 133, -1, -192, -242, + -202, -155, -155, -202, -202, -204, -192, -380, -209, -254, + -253, -171, -92, -92, -92, -92, 53, 53, 53, 58, + 53, 58, 53, -163, -254, -94, -192, -194, 68, 68, + -81, -390, -389, -388, -386, 61, 213, 62, 73, -171, + -222, 145, -250, -205, 73, -256, -117, -117, -157, 17, + 133, -157, 78, 73, 89, -223, -318, -317, 46, -80, + -103, -310, -351, -316, -192, 46, -80, -310, -185, -182, + -190, -183, 78, 15, -247, -242, 121, 121, 70, 327, + -257, 73, 348, 73, 209, 103, 209, -211, -216, 68, + -130, 153, 152, -130, 68, -291, -292, -291, -294, -291, + -130, -130, 68, 68, 23, 68, 68, 68, -216, 68, + 68, 134, 68, 73, 78, 78, -329, 386, 381, 383, + 44, 45, 34, 35, -112, -113, -114, -120, -115, -171, + -207, -116, 217, 215, 219, -347, 88, 220, 271, 89, + 210, -381, 77, -376, 73, -382, 77, 350, 132, 305, + 40, 351, 352, 366, 301, 78, 78, 357, -377, 70, + -117, -184, -184, -184, -112, -106, 65, 133, -88, -118, + -192, 121, 68, -155, -155, -155, -202, -381, -382, -155, + 134, 103, -110, -109, 64, 65, -111, 64, -109, 53, + 53, -155, -105, 68, -388, -387, 23, -347, -347, -347, + 68, 134, 68, 134, 68, 68, -156, 18, 20, 121, + -156, -144, 13, 68, -310, -310, -242, -257, 369, -117, + 73, -117, -216, 68, -216, 68, 68, -298, 504, -327, + 381, 20, 20, -80, -117, 68, 134, -123, -116, -192, + 89, -346, -347, -232, -346, 89, 67, 73, -379, 360, + 73, 73, 78, 40, 78, 132, 353, -305, 67, -137, + -139, -191, 130, 73, 68, -188, -88, -192, -155, -374, + 133, -155, -100, -253, -316, -216, 67, -216, 67, 53, + 19, 17, 73, 73, -216, -222, -350, -79, -321, -277, + 514, 134, -79, 68, 68, -144, 73, 20, 73, -325, + 73, -105, -135, -136, -152, 340, 241, -233, 245, 77, + 246, 376, 247, 210, 249, 250, 251, 221, 252, 253, + 254, 369, 255, 256, 257, 258, 323, 6, 288, -114, + -134, -133, -131, 83, 94, 40, 340, -132, 77, 129, + 264, 242, 265, -151, -206, 64, 346, 215, 88, 89, + 328, -207, -342, -344, -192, -344, -192, -342, -342, -232, + -216, 20, 459, 304, 40, 78, 40, 354, -237, -239, + -171, 67, -78, -77, -155, -155, -101, -104, -343, -192, + 215, 20, 20, 68, 134, 68, 134, -328, 386, -324, + -322, 381, 382, 383, 384, 73, -174, 506, 73, 383, + 34, -273, 231, 134, -152, -184, -184, -177, 129, -184, + -184, -184, -184, 248, 248, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, 67, + -131, 83, -212, 73, -139, -140, 40, 263, 259, -141, + 40, 243, 244, -143, 67, 271, 13, 89, 89, -117, + 67, 65, 280, 67, 67, 67, -344, 68, 73, 348, + 73, 304, 68, 134, -291, -216, -79, -100, 68, 68, + 134, 84, 85, 84, 85, -330, 213, -326, 385, -322, + 20, 383, 20, 20, 103, 67, 20, -80, 20, -152, + 78, 78, -184, -184, 78, 73, 73, 73, -184, -184, + 78, 73, -194, 78, 78, 78, 78, 40, 73, -142, + 40, 259, 263, 260, 261, 262, 78, 40, 78, 40, + 78, 40, -192, 67, -348, -349, 73, 78, 67, -311, + -238, 67, -237, -345, 292, 293, 294, 296, 295, -345, + -237, -237, -237, 67, -259, -258, 272, 94, 369, -240, + -239, -95, 68, -101, -192, 215, 68, 68, 68, 68, + -337, 67, 78, -327, 20, -325, 20, -325, -325, 73, + -175, -192, -325, -274, 273, 274, -275, -281, 276, -137, + -137, 73, 73, -138, 242, -119, 68, 134, 103, 68, + -216, -224, -146, -145, 455, -237, 68, 68, 68, 68, + -237, 272, -241, 221, 77, 459, 290, 291, -95, -341, + 30, 68, -336, -335, -172, -331, -192, 386, 387, 73, + -325, 514, 134, 68, 134, -279, 277, 67, -277, 67, + -277, 89, 293, 243, 244, 68, -349, 73, 68, -150, + -148, -149, 64, 394, 269, 270, 68, -240, -240, -240, + -240, 68, -184, 73, 289, -340, -339, -338, 68, 134, + 133, 73, -192, -276, 278, 78, -212, 67, -212, 67, + -278, 275, 67, -258, -149, 64, -148, 64, 14, 13, + -151, 78, -190, 134, 103, -335, -192, 103, -283, 67, + 20, 68, -272, 68, -272, 67, 103, -212, -147, 266, + 267, 30, 144, -147, -339, 40, -216, 133, 73, -284, + -282, 231, -275, 68, 68, 68, -272, 78, 68, 83, + 40, 268, -192, 514, 134, 68, 134, 70, -280, 279, + 68, 73, -282, -285, 46, 78, 103, -289, -286, 67, + -152, 233, 113, 73, -289, -152, -288, -287, 278, 234, + 67, 514, 68, 134, 70, 230, 67, -222, -287, -286, + -222, 68, 68, } var yyDef = [...]int{ @@ -5487,129 +5501,129 @@ var yyDef = [...]int{ 378, 379, 380, 381, 382, 383, 259, 260, 261, 256, 257, 258, -2, 0, 408, 207, 0, 198, 198, 0, 494, 0, 0, 508, 530, 30, 0, 452, 0, 457, - 820, 856, 857, 858, 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, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, - 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, - 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, - 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, - 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, - 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, - 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, - 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, - 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, - 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, - 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, - 1516, 1517, 1518, 1519, 1520, 1521, 1522, 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, 452, 219, 397, 398, - 494, 494, 373, 0, 242, 0, 1451, 246, 0, 0, - 0, 370, 237, 238, 239, 240, 241, 0, 625, 0, - 234, 0, 213, 1510, 0, 0, 0, 0, 0, 0, - 98, 679, 100, 681, 104, 111, 0, 0, 116, 117, - 120, 121, 122, 123, 124, 0, 128, 0, 130, 133, - 0, 135, 136, 0, 139, 140, 141, 0, 151, 152, - 153, 682, 683, 78, 78, 1207, 1105, 0, 1112, 1113, - 1124, 1133, 927, 928, 929, 930, 0, 0, 0, 0, - 0, 937, 938, 0, 951, 1598, 0, 944, 945, 946, - 947, 948, 41, 53, 54, 1152, 1153, 1154, 1155, 1156, - 1157, 1158, 1159, 1160, 1161, 1078, 914, 856, 0, 1606, - 0, 1626, 1607, 1625, 0, 0, 1063, 0, 1053, 0, - -2, -2, 0, 0, 1577, 0, -2, 1603, 1622, 1630, - 1629, 1600, 1601, 1595, 1596, 1597, 1599, 1608, 1610, 1621, - 0, 1617, 1627, 1628, 0, 55, 56, -2, -2, -2, - -2, -2, -2, -2, -2, -2, -2, -2, -2, 1592, - 1593, 1069, -2, 1071, 1072, 1074, 1075, 1076, 1077, -2, - 1080, 1081, 1082, -2, -2, 1085, 1086, 1087, 1088, 1089, - 1090, 1093, -2, 1095, -2, 1097, 1065, 1066, 1067, 1068, - 1057, 1058, 1059, 1060, 1061, 1062, -2, -2, -2, 0, - 191, 189, 494, 566, 0, -2, 0, 0, 0, 513, - 516, 519, 522, 643, 708, 708, 708, 0, 708, 0, - 729, 685, 686, 687, 706, 707, 413, 409, 410, 411, - 412, 482, 0, 484, 487, 353, 314, 0, 353, 0, - 0, 489, 489, 0, 362, 353, 353, -2, 0, 324, - 325, 326, 319, 0, 319, 330, 331, 332, 342, 343, - 363, 1231, 0, 0, 276, 276, 415, 208, 209, 197, - 199, 0, 203, 0, 196, 1510, 0, 0, 165, 1577, - 170, 0, 1458, 1524, 1473, 0, 0, 1491, 0, -2, - 489, 0, 495, 0, 494, 0, 276, 276, 276, 276, - 276, 276, 276, 0, 0, 0, 531, 532, 527, 528, - 529, 533, 534, 3, 0, 626, 627, 630, 631, 632, - 0, 0, 456, 0, 0, 489, -2, 0, 374, 243, - 859, 0, 0, 247, 248, 0, 0, 262, 0, 265, - 251, 252, 253, 0, 0, 236, 0, 0, 215, 0, - 0, 0, 277, 0, 0, 0, 0, 0, 0, 108, - 105, 112, 115, 125, 132, 0, 144, 146, 149, 106, - 113, 118, 119, 126, 147, 107, 109, 110, 114, 148, - 150, 127, 131, 145, 129, 134, 137, 138, 143, 0, - 79, 0, 0, 0, 0, 0, 0, 1111, 0, 0, - 1141, 1142, 1143, 1144, 1145, 1146, 1147, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -2, 1105, 0, 933, 934, 935, - 936, 939, 0, 952, 0, 0, 0, 0, 1103, 1103, - 0, 1103, 1099, 1099, 0, 0, 1103, 1041, 0, 0, - 1043, 1054, 0, 0, 1046, 1047, 1103, 0, 1103, 1051, - 1052, 1037, 1038, 0, 1099, 0, 0, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 0, 0, - 1208, 1226, 1163, 1164, 1165, 1213, 1167, 1217, 1217, 1213, - 1213, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, - 0, 0, 1206, 1186, 1215, 1215, 1215, 1213, 1210, 1168, + 820, 856, 857, 858, 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, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, + 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, + 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, + 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, + 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, + 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, + 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, + 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, + 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, + 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, + 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, + 1517, 1518, 1519, 1520, 1521, 1522, 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, 452, 219, 397, + 398, 494, 494, 373, 0, 242, 0, 1452, 246, 0, + 0, 0, 370, 237, 238, 239, 240, 241, 0, 625, + 0, 234, 0, 213, 1511, 0, 0, 0, 0, 0, + 0, 98, 679, 100, 681, 104, 111, 0, 0, 116, + 117, 120, 121, 122, 123, 124, 0, 128, 0, 130, + 133, 0, 135, 136, 0, 139, 140, 141, 0, 151, + 152, 153, 682, 683, 78, 78, 1208, 1106, 0, 1113, + 1114, 1125, 1134, 928, 929, 930, 931, 0, 0, 0, + 0, 0, 938, 939, 0, 952, 1600, 0, 945, 946, + 947, 948, 949, 41, 53, 54, 1153, 1154, 1155, 1156, + 1157, 1158, 1159, 1160, 1161, 1162, 1079, 915, 856, 0, + 1608, 0, 1628, 1609, 1627, 0, 0, 1064, 0, 1054, + 0, -2, -2, 0, 0, 1578, 0, -2, 1605, 1624, + 1632, 1631, 1602, 1603, 1597, 1598, 1599, 1601, 1610, 1612, + 1623, 0, 1619, 1629, 1630, 0, 55, 56, -2, -2, + -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, + 1594, 1595, 1070, -2, 1072, 1073, 1075, 1076, 1077, 1078, + -2, 1081, 1082, 1083, -2, -2, 1086, 1087, 1088, 1089, + 1090, 1091, 1094, -2, 1096, -2, 1098, 1066, 1067, 1068, + 1069, 1058, 1059, 1060, 1061, 1062, 1063, -2, -2, -2, + 0, 191, 189, 494, 566, 0, -2, 0, 0, 0, + 513, 516, 519, 522, 643, 708, 708, 708, 0, 708, + 0, 729, 685, 686, 687, 706, 707, 413, 409, 410, + 411, 412, 482, 0, 484, 487, 353, 314, 0, 353, + 0, 0, 489, 489, 0, 362, 353, 353, -2, 0, + 324, 325, 326, 319, 0, 319, 330, 331, 332, 342, + 343, 363, 1232, 0, 0, 276, 276, 415, 208, 209, + 197, 199, 0, 203, 0, 196, 1511, 0, 0, 165, + 1578, 170, 0, 1459, 1525, 1474, 0, 0, 1492, 0, + -2, 489, 0, 495, 0, 494, 0, 276, 276, 276, + 276, 276, 276, 276, 0, 0, 0, 531, 532, 527, + 528, 529, 533, 534, 3, 0, 626, 627, 630, 631, + 632, 0, 0, 456, 0, 0, 489, -2, 0, 374, + 243, 859, 0, 0, 247, 248, 0, 0, 262, 0, + 265, 251, 252, 253, 0, 0, 236, 0, 0, 215, + 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, + 108, 105, 112, 115, 125, 132, 0, 144, 146, 149, + 106, 113, 118, 119, 126, 147, 107, 109, 110, 114, + 148, 150, 127, 131, 145, 129, 134, 137, 138, 143, + 0, 79, 0, 0, 0, 0, 0, 0, 1112, 0, + 0, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -2, 1106, 0, 934, 935, + 936, 937, 940, 0, 953, 0, 0, 0, 0, 1104, + 1104, 0, 1104, 1100, 1100, 0, 0, 1104, 1042, 0, + 0, 1044, 1055, 0, 0, 1047, 1048, 1104, 0, 1104, + 1052, 1053, 1038, 1039, 0, 1100, 0, 0, 1100, 1100, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 0, + 0, 1209, 1227, 1164, 1165, 1166, 1214, 1168, 1218, 1218, + 1214, 1214, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, + 1204, 0, 0, 1207, 1187, 1216, 1216, 1216, 1214, 1211, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, - 1179, 1180, 1181, 1220, 1220, 1223, 1220, 0, 489, 0, - 0, 477, 0, 458, 0, 510, 512, 0, 514, 515, - 517, 518, 520, 521, 523, 524, 0, 708, 644, 0, - 0, 0, 0, 0, 0, 708, 415, 414, 0, 483, - 0, 0, 539, 0, 0, 319, 539, 0, 336, 337, - 338, 353, 353, 344, 490, 345, 346, 355, 0, 360, - 361, 0, 539, 539, 0, 0, 0, 708, 321, 320, - 358, 359, 328, 321, 1232, 1233, 0, 0, 0, 416, - 0, 0, 201, 0, 206, 158, 0, 0, 0, 0, - 0, 0, 187, 188, 0, 0, 0, 0, 0, 178, - 181, 814, 815, 676, 677, 182, 183, 458, 509, 511, - 506, 507, 0, 0, 0, 0, 0, 0, 0, 394, - 547, 541, 543, 620, 41, 547, 0, 0, 431, 444, - 426, 0, 433, 0, 821, 417, 444, 419, 0, 433, - 458, 480, 458, 0, 244, 0, 249, 0, 0, 264, - 266, 267, 268, 254, 255, 371, 232, 233, 225, 226, - 227, 228, 229, 230, 231, 235, 51, 0, 216, 217, - 0, 0, 0, 92, 93, 94, 95, 96, 97, 99, - 83, 386, 388, 668, 680, 0, 671, 0, 102, 142, - 75, 0, 75, 1106, 1107, 1108, 1109, 1110, 1114, 0, - 1116, 1118, 1120, 1122, 0, 1138, -2, -2, 915, 916, + 1179, 1180, 1181, 1182, 1221, 1221, 1224, 1221, 0, 489, + 0, 0, 477, 0, 458, 0, 510, 512, 0, 514, + 515, 517, 518, 520, 521, 523, 524, 0, 708, 644, + 0, 0, 0, 0, 0, 0, 708, 415, 414, 0, + 483, 0, 0, 539, 0, 0, 319, 539, 0, 336, + 337, 338, 353, 353, 344, 490, 345, 346, 355, 0, + 360, 361, 0, 539, 539, 0, 0, 0, 708, 321, + 320, 358, 359, 328, 321, 1233, 1234, 0, 0, 0, + 416, 0, 0, 201, 0, 206, 158, 0, 0, 0, + 0, 0, 0, 187, 188, 0, 0, 0, 0, 0, + 178, 181, 814, 815, 676, 677, 182, 183, 458, 509, + 511, 506, 507, 0, 0, 0, 0, 0, 0, 0, + 394, 547, 541, 543, 620, 41, 547, 0, 0, 431, + 444, 426, 0, 433, 0, 821, 417, 444, 419, 0, + 433, 458, 480, 458, 0, 244, 0, 249, 0, 0, + 264, 266, 267, 268, 254, 255, 371, 232, 233, 225, + 226, 227, 228, 229, 230, 231, 235, 51, 0, 216, + 217, 0, 0, 0, 92, 93, 94, 95, 96, 97, + 99, 83, 386, 388, 668, 680, 0, 671, 0, 102, + 142, 75, 0, 75, 1107, 1108, 1109, 1110, 1111, 1115, + 0, 1117, 1119, 1121, 1123, 0, 1139, -2, -2, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, - 1125, 1136, 1137, 0, 0, 0, 0, 0, 1134, 1129, - 0, 931, 0, 949, 953, 0, 0, 0, 42, 1098, - 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, + 927, 1126, 1137, 1138, 0, 0, 0, 0, 0, 1135, + 1130, 0, 932, 0, 950, 954, 0, 0, 0, 42, + 1099, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, - 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 0, - 1104, 0, 1105, 0, 0, 0, 1100, 1101, 0, 0, - 0, 1003, 1004, 1005, 0, 439, 0, 1064, 1042, 1055, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 192, 0, 1229, 1227, 1228, 1166, 1214, 0, - 1191, 0, 1192, 1193, 1194, 0, 0, 1187, 0, 1188, - 1189, 1190, 1182, 0, 1183, 1184, 0, 1185, 190, 565, - 567, 0, 448, 450, 451, 0, 478, 491, 496, 497, - 500, 0, 0, 0, 646, 0, 274, 662, 0, 678, - 700, -2, 0, 0, 485, 0, 0, 579, 313, 0, - 354, 316, 321, 323, 0, 539, 539, 353, 0, 355, - 0, 355, 349, 350, 0, 364, 367, 365, 0, 327, - 322, 369, 329, 0, 274, 552, 0, 553, 554, 550, - 581, 595, 615, 0, 615, 0, 0, 210, 211, 0, - 0, 205, 159, 160, 0, 162, 163, 164, 171, 166, - 168, 0, 0, 172, 184, 185, 186, 0, 0, 0, - 176, 177, 0, 476, 384, 385, 389, 0, 391, 818, - 392, 393, 539, 0, 548, 0, 544, 621, 0, 623, - 0, 539, 468, 0, 424, 0, 425, 441, 0, 445, - 0, 0, 437, 430, 434, 0, 0, 454, 418, 0, - 0, 423, 479, 481, 860, 0, 1238, -2, 1240, -2, - -2, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, + 0, 1105, 0, 1106, 0, 0, 0, 1101, 1102, 0, + 0, 0, 1004, 1005, 1006, 0, 439, 0, 1065, 1043, + 1056, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 192, 0, 1230, 1228, 1229, 1167, 1215, + 0, 1192, 0, 1193, 1194, 1195, 0, 0, 1188, 0, + 1189, 1190, 1191, 1183, 0, 1184, 1185, 0, 1186, 190, + 565, 567, 0, 448, 450, 451, 0, 478, 491, 496, + 497, 500, 0, 0, 0, 646, 0, 274, 662, 0, + 678, 700, -2, 0, 0, 485, 0, 0, 579, 313, + 0, 354, 316, 321, 323, 0, 539, 539, 353, 0, + 355, 0, 355, 349, 350, 0, 364, 367, 365, 0, + 327, 322, 369, 329, 0, 274, 552, 0, 553, 554, + 550, 581, 595, 615, 0, 615, 0, 0, 210, 211, + 0, 0, 205, 159, 160, 0, 162, 163, 164, 171, + 166, 168, 0, 0, 172, 184, 185, 186, 0, 0, + 0, 176, 177, 0, 476, 384, 385, 389, 0, 391, + 818, 392, 393, 539, 0, 548, 0, 544, 621, 0, + 623, 0, 539, 468, 0, 424, 0, 425, 441, 0, + 445, 0, 0, 437, 430, 434, 0, 0, 454, 418, + 0, 0, 423, 479, 481, 860, 0, 1239, -2, 1241, + -2, -2, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, @@ -5625,118 +5639,118 @@ var yyDef = [...]int{ 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, - 1401, 1402, 1403, 1404, 1405, 1406, 0, 250, 263, 0, - 0, 0, 0, 86, 665, 0, 87, 91, 81, 0, - 0, 0, 670, 0, 667, 672, 0, 101, 0, 0, - 76, 77, 722, 0, 0, 1115, 1117, 1119, 1121, 1123, - 0, 1126, 1134, 1130, 0, 1127, 0, 0, 1106, 0, - 954, 0, 0, 0, 0, 0, 0, 989, 990, 0, - 0, 994, 0, 0, 997, 0, 0, 0, 1001, 0, - 1040, 1056, 1044, 0, 1048, 0, 1050, 0, 0, 972, - 973, 0, 0, 0, 0, 978, 0, 0, 0, 0, - 0, 0, 0, 0, 1209, 1162, 1230, 0, 0, 0, - 1211, 0, 0, 0, 0, 0, 568, 460, 0, 0, - 0, 503, 501, 502, 487, 0, 0, 652, 1234, 709, - 278, 0, 0, 664, 0, 0, 705, -2, 712, 0, - 718, 0, 0, 0, 402, 406, 30, 488, 0, 540, - 315, 0, 353, 539, 339, 340, 539, 356, 353, 357, - 353, 355, 0, 366, 652, 278, 0, 0, 0, 0, - 0, 572, 0, 0, 571, 0, 0, 0, 0, 0, - 0, 596, 583, 616, 0, 618, 619, 628, 629, 0, - 0, 494, 552, 0, 598, 0, 0, 212, 200, 202, - 0, 0, 0, 0, 173, 174, 175, 179, 180, 0, - 0, 537, 542, 549, 622, 624, 42, 545, 537, 31, - 0, 0, 0, 444, 446, 0, 0, 444, 0, 0, - 453, 0, 0, 444, 0, 0, 372, 52, 269, 0, - 0, 0, 0, 0, 387, 0, 669, 83, 0, 0, - 103, 0, 0, 0, 1102, 1128, 0, 1135, 1131, 932, - 940, 950, 0, 0, 956, 968, 968, 0, 959, 1213, - 1217, 962, 1213, 1215, 1213, 968, 968, 0, 43, 0, - 0, 995, 996, 0, 0, 0, 440, 0, 0, 0, - 971, 974, 975, 976, 977, 979, 980, 981, 982, 983, - 984, 985, 0, 1219, 1218, 1204, 0, 1205, 1216, 1221, - 0, 1224, 0, 449, 464, 0, 492, 493, 498, 499, - 0, 0, 0, 822, 655, 653, 654, 0, 1235, 659, - 279, 280, 281, 282, 0, 0, 0, 663, 0, 0, - 701, 702, 703, 704, 713, 1234, 1234, 1234, 822, 452, - 0, -2, 0, 0, 404, 0, 0, 580, 317, 539, - 333, 347, 539, 539, 353, 368, 655, 659, 539, 222, - 0, 575, 569, 0, 558, 573, 574, 561, 0, 563, - 0, 559, 560, 539, 551, 487, 617, 584, 585, 0, - 597, 599, 600, 606, 0, 0, 0, 0, 0, 0, - 204, 161, 0, 298, 167, 390, 819, 535, 0, 0, - 535, 469, 468, 0, 442, 0, 447, 444, 429, 438, - 428, 435, 436, 455, 444, 422, 421, 861, 1239, 1236, - 1237, 245, 0, 666, 83, 88, 89, 90, 84, 82, - 673, 0, 675, 0, 0, 0, 1132, 955, 941, 957, - 969, 970, 958, 942, 960, 961, 963, 964, 965, 966, - 967, 943, 991, 0, 993, 998, 999, 0, 1045, 1049, - 0, 1002, 1212, 0, 0, 466, 64, 0, 0, 504, - 505, 0, 0, 0, 823, 824, 826, 827, 0, 0, - 829, 884, 0, 838, 708, 838, 0, 0, 840, 841, - 645, 0, 0, 648, 657, 0, 0, 0, 284, 285, - 0, 0, 0, 297, 293, 294, 295, 275, 658, 0, - 0, 0, 0, 0, 615, 0, 0, 539, 403, 406, - 407, 486, 318, 351, 348, 539, 272, 273, 494, 0, - 0, 555, 576, 0, 0, 556, 0, 557, 562, 564, - 221, 582, -2, 601, 0, 0, 603, 604, 605, 586, - 0, 590, 0, 594, 169, 525, 0, 0, 546, 526, - 32, 433, 443, 427, 420, 85, 80, 674, 66, 0, - 66, 0, 1000, 0, 1222, 1225, 468, 0, 465, 0, - 0, 0, 641, 487, -2, 0, -2, 828, 885, 850, - 850, 839, 850, 850, 708, 0, 656, 647, 0, 660, - 661, 0, 286, 287, 0, 290, 296, 0, 714, 715, - 816, 817, 716, 0, 539, 539, -2, 400, 405, 0, - 352, 489, 223, 224, 577, 0, 570, 610, 607, 0, - 0, 0, 0, 536, 538, 432, 34, 60, 0, 723, - 0, 33, 992, 1039, 470, 467, 0, 461, 463, 74, - 0, 730, -2, 770, 1234, 1234, 0, 1234, 1234, 1234, - 1234, 0, 0, 1234, 1234, 1234, 1234, 1234, 1234, 1234, - 1234, 1234, 1234, 1234, 1234, 1234, 1234, 0, 825, 852, - -2, 864, 866, 0, 0, 869, 870, 0, 0, 0, - 0, 906, 876, 0, 0, 0, 1150, 1151, 0, 883, - 0, 842, 851, 0, 851, 0, 0, 850, 0, 0, - 0, 283, 288, 0, 291, 292, 0, 696, 1213, 0, - 720, 66, 494, 401, 220, 0, 0, 611, 613, 608, - 609, 587, 0, 591, 0, 57, 62, 67, 68, 0, - 0, 0, 0, 0, 459, 0, 65, 0, 0, 719, - 0, 717, 772, 0, 0, 1234, 1234, 0, 0, 0, - 0, 1234, 1234, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 865, 867, - 868, 871, 872, 873, 911, 912, 913, 874, 908, 909, - 910, 875, 0, 0, 0, 1148, 1149, 904, 0, 0, - 0, 0, 0, 0, 0, 836, 649, 0, 651, 289, - 689, 0, 500, 0, 721, 489, 578, 602, 0, 0, - 0, 0, 0, 44, 0, 64, 0, 69, 0, 0, - 0, 0, 0, 0, 0, 642, 766, 771, 773, 774, - 0, 0, 777, 778, 779, 780, 0, 0, 783, 784, - 785, 786, 787, 788, 789, 790, 791, 792, 808, 809, - 810, 811, 812, 813, 793, 794, 795, 796, 797, 798, - 805, 0, 0, 802, 0, 0, 0, 1053, 899, 0, - 0, 843, 845, 846, 847, 848, 849, 844, 0, 0, - 0, 0, 835, 837, 880, 0, 650, 688, 697, 698, - 500, 399, 612, 614, 588, 589, 592, 593, 35, 0, - 0, 61, 0, 70, 0, 72, 73, 0, 0, 472, - 462, 754, 0, 0, 760, 0, 767, 775, 776, 781, - 782, 799, 0, 0, 801, 0, 0, 907, 0, 879, - 887, 900, 0, 0, 689, 689, 689, 689, 0, 881, - 690, 1234, 0, 0, 694, 695, 699, 727, 0, 45, - 0, 47, 49, 50, 853, 58, 59, 63, 71, 724, - 0, 471, 0, 732, 0, 0, 0, 0, 0, 764, - 0, 806, 807, 800, 803, 804, 877, 886, 888, 889, - 0, 901, 902, 903, 905, 830, 831, 832, 833, 0, - 0, 692, 0, 36, 37, 0, 46, 0, 0, 0, - 473, 734, 0, 755, 0, 0, 0, 0, 0, 0, - 0, 878, 890, 0, 891, 0, 0, 0, 834, 691, - 693, 0, 0, 48, 854, 0, 731, 0, 766, 756, - 0, 758, 0, 0, 0, 0, 892, 894, 895, 0, - 0, 893, 38, 39, 40, 0, 0, 0, 736, 0, - 752, 757, 759, 761, 0, 765, 763, 896, 898, 897, - 855, 725, 0, 735, 0, 748, 733, 0, 762, 0, - 737, -2, 0, 753, 0, 738, -2, 0, 746, 0, - 0, 0, 739, 747, 0, 742, 0, 0, 0, 726, - 741, 0, -2, 749, 0, 0, 743, -2, 0, 751, - 750, + 1401, 1402, 1403, 1404, 1405, 1406, 1407, 0, 250, 263, + 0, 0, 0, 0, 86, 665, 0, 87, 91, 81, + 0, 0, 0, 670, 0, 667, 672, 0, 101, 0, + 0, 76, 77, 722, 0, 0, 1116, 1118, 1120, 1122, + 1124, 0, 1127, 1135, 1131, 0, 1128, 0, 0, 1107, + 0, 955, 0, 0, 0, 0, 0, 0, 990, 991, + 0, 0, 995, 0, 0, 998, 0, 0, 0, 1002, + 0, 1041, 1057, 1045, 0, 1049, 0, 1051, 0, 0, + 973, 974, 0, 0, 0, 0, 979, 0, 0, 0, + 0, 0, 0, 0, 0, 1210, 1163, 1231, 0, 0, + 0, 1212, 0, 0, 0, 0, 0, 568, 460, 0, + 0, 0, 503, 501, 502, 487, 0, 0, 652, 1235, + 709, 278, 0, 0, 664, 0, 0, 705, -2, 712, + 0, 718, 0, 0, 0, 402, 406, 30, 488, 0, + 540, 315, 0, 353, 539, 339, 340, 539, 356, 353, + 357, 353, 355, 0, 366, 652, 278, 0, 0, 0, + 0, 0, 572, 0, 0, 571, 0, 0, 0, 0, + 0, 0, 596, 583, 616, 0, 618, 619, 628, 629, + 0, 0, 494, 552, 0, 598, 0, 0, 212, 200, + 202, 0, 0, 0, 0, 173, 174, 175, 179, 180, + 0, 0, 537, 542, 549, 622, 624, 42, 545, 537, + 31, 0, 0, 0, 444, 446, 0, 0, 444, 0, + 0, 453, 0, 0, 444, 0, 0, 372, 52, 269, + 0, 0, 0, 0, 0, 387, 0, 669, 83, 0, + 0, 103, 0, 0, 0, 1103, 1129, 0, 1136, 1132, + 933, 941, 951, 0, 0, 957, 969, 969, 0, 960, + 1214, 1218, 963, 1214, 1216, 1214, 969, 969, 0, 43, + 0, 0, 996, 997, 0, 0, 0, 440, 0, 0, + 0, 972, 975, 976, 977, 978, 980, 981, 982, 983, + 984, 985, 986, 0, 1220, 1219, 1205, 0, 1206, 1217, + 1222, 0, 1225, 0, 449, 464, 0, 492, 493, 498, + 499, 0, 0, 0, 822, 655, 653, 654, 0, 1236, + 659, 279, 280, 281, 282, 0, 0, 0, 663, 0, + 0, 701, 702, 703, 704, 713, 1235, 1235, 1235, 822, + 452, 0, -2, 0, 0, 404, 0, 0, 580, 317, + 539, 333, 347, 539, 539, 353, 368, 655, 659, 539, + 222, 0, 575, 569, 0, 558, 573, 574, 561, 0, + 563, 0, 559, 560, 539, 551, 487, 617, 584, 585, + 0, 597, 599, 600, 606, 0, 0, 0, 0, 0, + 0, 204, 161, 0, 298, 167, 390, 819, 535, 0, + 0, 535, 469, 468, 0, 442, 0, 447, 444, 429, + 438, 428, 435, 436, 455, 444, 422, 421, 861, 1240, + 1237, 1238, 245, 0, 666, 83, 88, 89, 90, 84, + 82, 673, 0, 675, 0, 0, 0, 1133, 956, 942, + 958, 970, 971, 959, 943, 961, 962, 964, 965, 966, + 967, 968, 944, 992, 0, 994, 999, 1000, 0, 1046, + 1050, 0, 1003, 1213, 0, 0, 466, 64, 0, 0, + 504, 505, 0, 0, 0, 823, 824, 826, 827, 0, + 0, 829, 885, 0, 838, 708, 838, 0, 0, 840, + 841, 645, 0, 0, 648, 657, 0, 0, 0, 284, + 285, 0, 0, 0, 297, 293, 294, 295, 275, 658, + 0, 0, 0, 0, 0, 615, 0, 0, 539, 403, + 406, 407, 486, 318, 351, 348, 539, 272, 273, 494, + 0, 0, 555, 576, 0, 0, 556, 0, 557, 562, + 564, 221, 582, -2, 601, 0, 0, 603, 604, 605, + 586, 0, 590, 0, 594, 169, 525, 0, 0, 546, + 526, 32, 433, 443, 427, 420, 85, 80, 674, 66, + 0, 66, 0, 1001, 0, 1223, 1226, 468, 0, 465, + 0, 0, 0, 641, 487, -2, 0, -2, 828, 886, + 850, 850, 839, 850, 850, 708, 0, 656, 647, 0, + 660, 661, 0, 286, 287, 0, 290, 296, 0, 714, + 715, 816, 817, 716, 0, 539, 539, -2, 400, 405, + 0, 352, 489, 223, 224, 577, 0, 570, 610, 607, + 0, 0, 0, 0, 536, 538, 432, 34, 60, 0, + 723, 0, 33, 993, 1040, 470, 467, 0, 461, 463, + 74, 0, 730, -2, 770, 1235, 1235, 0, 1235, 1235, + 1235, 1235, 0, 0, 1235, 1235, 1235, 1235, 1235, 1235, + 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 0, 825, + 852, -2, 864, 866, 0, 0, 869, 870, 0, 0, + 0, 0, 907, 876, 0, 0, 880, 0, 1151, 1152, + 0, 884, 0, 842, 851, 0, 851, 0, 0, 850, + 0, 0, 0, 283, 288, 0, 291, 292, 0, 696, + 1214, 0, 720, 66, 494, 401, 220, 0, 0, 611, + 613, 608, 609, 587, 0, 591, 0, 57, 62, 67, + 68, 0, 0, 0, 0, 0, 459, 0, 65, 0, + 0, 719, 0, 717, 772, 0, 0, 1235, 1235, 0, + 0, 0, 0, 1235, 1235, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 865, 867, 868, 871, 872, 873, 912, 913, 914, 874, + 909, 910, 911, 875, 0, 0, 0, 1149, 1150, 905, + 0, 0, 0, 0, 0, 0, 0, 836, 649, 0, + 651, 289, 689, 0, 500, 0, 721, 489, 578, 602, + 0, 0, 0, 0, 0, 44, 0, 64, 0, 69, + 0, 0, 0, 0, 0, 0, 0, 642, 766, 771, + 773, 774, 0, 0, 777, 778, 779, 780, 0, 0, + 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 808, 809, 810, 811, 812, 813, 793, 794, 795, 796, + 797, 798, 805, 0, 0, 802, 0, 0, 0, 1054, + 900, 0, 0, 843, 845, 846, 847, 848, 849, 844, + 0, 0, 0, 0, 835, 837, 881, 0, 650, 688, + 697, 698, 500, 399, 612, 614, 588, 589, 592, 593, + 35, 0, 0, 61, 0, 70, 0, 72, 73, 0, + 0, 472, 462, 754, 0, 0, 760, 0, 767, 775, + 776, 781, 782, 799, 0, 0, 801, 0, 0, 908, + 0, 879, 888, 901, 0, 0, 689, 689, 689, 689, + 0, 882, 690, 1235, 0, 0, 694, 695, 699, 727, + 0, 45, 0, 47, 49, 50, 853, 58, 59, 63, + 71, 724, 0, 471, 0, 732, 0, 0, 0, 0, + 0, 764, 0, 806, 807, 800, 803, 804, 877, 887, + 889, 890, 0, 902, 903, 904, 906, 830, 831, 832, + 833, 0, 0, 692, 0, 36, 37, 0, 46, 0, + 0, 0, 473, 734, 0, 755, 0, 0, 0, 0, + 0, 0, 0, 878, 891, 0, 892, 0, 0, 0, + 834, 691, 693, 0, 0, 48, 854, 0, 731, 0, + 766, 756, 0, 758, 0, 0, 0, 0, 893, 895, + 896, 0, 0, 894, 38, 39, 40, 0, 0, 0, + 736, 0, 752, 757, 759, 761, 0, 765, 763, 897, + 899, 898, 855, 725, 0, 735, 0, 748, 733, 0, + 762, 0, 737, -2, 0, 753, 0, 738, -2, 0, + 746, 0, 0, 0, 739, 747, 0, 742, 0, 0, + 0, 726, 741, 0, -2, 749, 0, 0, 743, -2, + 0, 751, 750, } var yyTok1 = [...]int{ @@ -5745,14 +5759,14 @@ var yyTok1 = [...]int{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 95, 3, 3, 3, 124, 116, 3, 67, 68, 121, 119, 134, 120, 133, 122, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 510, - 104, 103, 105, 3, 511, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 511, + 104, 103, 105, 3, 512, 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, 126, 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, 512, 115, 513, 127, + 3, 3, 3, 513, 115, 514, 127, } var yyTok2 = [...]int{ @@ -5832,7 +5846,7 @@ var yyTok3 = [...]int{ 57820, 495, 57821, 496, 57822, 497, 57823, 498, 57824, 499, 57825, 500, 57826, 501, 57827, 502, 57828, 503, 57829, 504, 57830, 505, 57831, 506, 57832, 507, 57833, 508, 57834, 509, - 0, + 57835, 510, 0, } var yyErrorMessages = [...]struct { @@ -12988,49 +13002,57 @@ yydefault: } yyVAL.union = yyLOCAL case 880: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL tree.ColumnAttribute +//line mysql_sql.y:5464 + { + yyLOCAL = tree.NewAttributeLowCardinality() + } + yyVAL.union = yyLOCAL + case 881: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line mysql_sql.y:5466 +//line mysql_sql.y:5470 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 881: + case 882: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line mysql_sql.y:5470 +//line mysql_sql.y:5474 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 882: + case 883: yyDollar = yyS[yypt-0 : yypt+1] -//line mysql_sql.y:5475 +//line mysql_sql.y:5479 { yyVAL.str = "" } - case 883: + case 884: yyDollar = yyS[yypt-1 : yypt+1] -//line mysql_sql.y:5479 +//line mysql_sql.y:5483 { yyVAL.str = yyDollar[1].str } - case 884: + case 885: yyDollar = yyS[yypt-1 : yypt+1] -//line mysql_sql.y:5485 +//line mysql_sql.y:5489 { yyVAL.str = "" } - case 885: + case 886: yyDollar = yyS[yypt-2 : yypt+1] -//line mysql_sql.y:5489 +//line mysql_sql.y:5493 { yyVAL.str = yyDollar[2].str } - case 886: + case 887: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.AttributeReference -//line mysql_sql.y:5495 +//line mysql_sql.y:5499 { yyLOCAL = &tree.AttributeReference{ TableName: yyDollar[2].tableNameUnion(), @@ -13041,10 +13063,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 887: + case 888: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *tree.ReferenceOnRecord -//line mysql_sql.y:5507 +//line mysql_sql.y:5511 { yyLOCAL = &tree.ReferenceOnRecord{ OnDelete: tree.REFERENCE_OPTION_INVALID, @@ -13052,10 +13074,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 888: + case 889: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.ReferenceOnRecord -//line mysql_sql.y:5514 +//line mysql_sql.y:5518 { yyLOCAL = &tree.ReferenceOnRecord{ OnDelete: yyDollar[1].referenceOptionTypeUnion(), @@ -13063,10 +13085,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 889: + case 890: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.ReferenceOnRecord -//line mysql_sql.y:5521 +//line mysql_sql.y:5525 { yyLOCAL = &tree.ReferenceOnRecord{ OnDelete: tree.REFERENCE_OPTION_INVALID, @@ -13074,10 +13096,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 890: + case 891: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.ReferenceOnRecord -//line mysql_sql.y:5528 +//line mysql_sql.y:5532 { yyLOCAL = &tree.ReferenceOnRecord{ OnDelete: yyDollar[1].referenceOptionTypeUnion(), @@ -13085,10 +13107,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 891: + case 892: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.ReferenceOnRecord -//line mysql_sql.y:5535 +//line mysql_sql.y:5539 { yyLOCAL = &tree.ReferenceOnRecord{ OnDelete: yyDollar[2].referenceOptionTypeUnion(), @@ -13096,148 +13118,140 @@ yydefault: } } yyVAL.union = yyLOCAL - case 892: + case 893: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.ReferenceOptionType -//line mysql_sql.y:5544 +//line mysql_sql.y:5548 { yyLOCAL = yyDollar[3].referenceOptionTypeUnion() } yyVAL.union = yyLOCAL - case 893: + case 894: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.ReferenceOptionType -//line mysql_sql.y:5550 +//line mysql_sql.y:5554 { yyLOCAL = yyDollar[3].referenceOptionTypeUnion() } yyVAL.union = yyLOCAL - case 894: + case 895: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.ReferenceOptionType -//line mysql_sql.y:5556 +//line mysql_sql.y:5560 { yyLOCAL = tree.REFERENCE_OPTION_RESTRICT } yyVAL.union = yyLOCAL - case 895: + case 896: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.ReferenceOptionType -//line mysql_sql.y:5560 +//line mysql_sql.y:5564 { yyLOCAL = tree.REFERENCE_OPTION_CASCADE } yyVAL.union = yyLOCAL - case 896: + case 897: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.ReferenceOptionType -//line mysql_sql.y:5564 +//line mysql_sql.y:5568 { yyLOCAL = tree.REFERENCE_OPTION_SET_NULL } yyVAL.union = yyLOCAL - case 897: + case 898: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.ReferenceOptionType -//line mysql_sql.y:5568 +//line mysql_sql.y:5572 { yyLOCAL = tree.REFERENCE_OPTION_NO_ACTION } yyVAL.union = yyLOCAL - case 898: + case 899: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.ReferenceOptionType -//line mysql_sql.y:5572 +//line mysql_sql.y:5576 { yyLOCAL = tree.REFERENCE_OPTION_SET_DEFAULT } yyVAL.union = yyLOCAL - case 899: + case 900: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL tree.MatchType -//line mysql_sql.y:5577 +//line mysql_sql.y:5581 { yyLOCAL = tree.MATCH_INVALID } yyVAL.union = yyLOCAL - case 901: + case 902: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.MatchType -//line mysql_sql.y:5584 +//line mysql_sql.y:5588 { yyLOCAL = tree.MATCH_FULL } yyVAL.union = yyLOCAL - case 902: + case 903: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.MatchType -//line mysql_sql.y:5588 +//line mysql_sql.y:5592 { yyLOCAL = tree.MATCH_PARTIAL } yyVAL.union = yyLOCAL - case 903: + case 904: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.MatchType -//line mysql_sql.y:5592 +//line mysql_sql.y:5596 { yyLOCAL = tree.MATCH_SIMPLE } yyVAL.union = yyLOCAL - case 904: + case 905: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*tree.KeyPart -//line mysql_sql.y:5597 +//line mysql_sql.y:5601 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 905: + case 906: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*tree.KeyPart -//line mysql_sql.y:5601 +//line mysql_sql.y:5605 { yyLOCAL = yyDollar[2].keyPartsUnion() } yyVAL.union = yyLOCAL - case 906: + case 907: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int64 -//line mysql_sql.y:5606 +//line mysql_sql.y:5610 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 907: + case 908: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int64 -//line mysql_sql.y:5610 +//line mysql_sql.y:5614 { yyLOCAL = yyDollar[2].item.(int64) } yyVAL.union = yyLOCAL - case 914: + case 915: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.Subquery -//line mysql_sql.y:5626 +//line mysql_sql.y:5630 { yyLOCAL = &tree.Subquery{Select: yyDollar[1].selectStatementUnion(), Exists: false} } yyVAL.union = yyLOCAL - case 915: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL tree.Expr -//line mysql_sql.y:5632 - { - yyLOCAL = tree.NewBinaryExpr(tree.BIT_AND, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) - } - yyVAL.union = yyLOCAL case 916: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr //line mysql_sql.y:5636 { - yyLOCAL = tree.NewBinaryExpr(tree.BIT_OR, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) + yyLOCAL = tree.NewBinaryExpr(tree.BIT_AND, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 917: @@ -13245,7 +13259,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5640 { - yyLOCAL = tree.NewBinaryExpr(tree.BIT_XOR, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) + yyLOCAL = tree.NewBinaryExpr(tree.BIT_OR, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 918: @@ -13253,7 +13267,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5644 { - yyLOCAL = tree.NewBinaryExpr(tree.PLUS, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) + yyLOCAL = tree.NewBinaryExpr(tree.BIT_XOR, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 919: @@ -13261,7 +13275,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5648 { - yyLOCAL = tree.NewBinaryExpr(tree.MINUS, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) + yyLOCAL = tree.NewBinaryExpr(tree.PLUS, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 920: @@ -13269,7 +13283,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5652 { - yyLOCAL = tree.NewBinaryExpr(tree.MULTI, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) + yyLOCAL = tree.NewBinaryExpr(tree.MINUS, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 921: @@ -13277,7 +13291,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5656 { - yyLOCAL = tree.NewBinaryExpr(tree.DIV, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) + yyLOCAL = tree.NewBinaryExpr(tree.MULTI, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 922: @@ -13285,7 +13299,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5660 { - yyLOCAL = tree.NewBinaryExpr(tree.INTEGER_DIV, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) + yyLOCAL = tree.NewBinaryExpr(tree.DIV, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 923: @@ -13293,7 +13307,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5664 { - yyLOCAL = tree.NewBinaryExpr(tree.MOD, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) + yyLOCAL = tree.NewBinaryExpr(tree.INTEGER_DIV, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 924: @@ -13309,7 +13323,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5672 { - yyLOCAL = tree.NewBinaryExpr(tree.LEFT_SHIFT, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) + yyLOCAL = tree.NewBinaryExpr(tree.MOD, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 926: @@ -13317,23 +13331,23 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5676 { - yyLOCAL = tree.NewBinaryExpr(tree.RIGHT_SHIFT, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) + yyLOCAL = tree.NewBinaryExpr(tree.LEFT_SHIFT, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 927: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr //line mysql_sql.y:5680 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = tree.NewBinaryExpr(tree.RIGHT_SHIFT, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL case 928: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5686 +//line mysql_sql.y:5684 { - yyLOCAL = yyDollar[1].unresolvedNameUnion() + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 929: @@ -13341,7 +13355,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5690 { - yyLOCAL = yyDollar[1].varExprUnion() + yyLOCAL = yyDollar[1].unresolvedNameUnion() } yyVAL.union = yyLOCAL case 930: @@ -13349,31 +13363,31 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5694 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = yyDollar[1].varExprUnion() } yyVAL.union = yyLOCAL case 931: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr //line mysql_sql.y:5698 { - yyLOCAL = tree.NewParenExpr(yyDollar[2].exprUnion()) + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 932: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr //line mysql_sql.y:5702 { - yyLOCAL = tree.NewTuple(append(yyDollar[2].exprsUnion(), yyDollar[4].exprUnion())) + yyLOCAL = tree.NewParenExpr(yyDollar[2].exprUnion()) } yyVAL.union = yyLOCAL case 933: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL tree.Expr //line mysql_sql.y:5706 { - yyLOCAL = tree.NewUnaryExpr(tree.UNARY_PLUS, yyDollar[2].exprUnion()) + yyLOCAL = tree.NewTuple(append(yyDollar[2].exprsUnion(), yyDollar[4].exprUnion())) } yyVAL.union = yyLOCAL case 934: @@ -13381,54 +13395,62 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:5710 { - yyLOCAL = tree.NewUnaryExpr(tree.UNARY_MINUS, yyDollar[2].exprUnion()) + yyLOCAL = tree.NewUnaryExpr(tree.UNARY_PLUS, yyDollar[2].exprUnion()) } yyVAL.union = yyLOCAL case 935: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.Expr //line mysql_sql.y:5714 + { + yyLOCAL = tree.NewUnaryExpr(tree.UNARY_MINUS, yyDollar[2].exprUnion()) + } + yyVAL.union = yyLOCAL + case 936: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL tree.Expr +//line mysql_sql.y:5718 { yyLOCAL = tree.NewUnaryExpr(tree.UNARY_TILDE, yyDollar[2].exprUnion()) } yyVAL.union = yyLOCAL - case 936: + case 937: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5718 +//line mysql_sql.y:5722 { yyLOCAL = tree.NewUnaryExpr(tree.UNARY_MARK, yyDollar[2].exprUnion()) } yyVAL.union = yyLOCAL - case 937: + case 938: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5722 +//line mysql_sql.y:5726 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 938: + case 939: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5726 +//line mysql_sql.y:5730 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 939: + case 940: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5730 +//line mysql_sql.y:5734 { yyDollar[2].subqueryUnion().Exists = true yyLOCAL = yyDollar[2].subqueryUnion() } yyVAL.union = yyLOCAL - case 940: + case 941: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5735 +//line mysql_sql.y:5739 { yyLOCAL = &tree.CaseExpr{ Expr: yyDollar[2].exprUnion(), @@ -13437,26 +13459,26 @@ yydefault: } } yyVAL.union = yyLOCAL - case 941: + case 942: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5743 +//line mysql_sql.y:5747 { yyLOCAL = tree.NewCastExpr(yyDollar[3].exprUnion(), yyDollar[5].columnTypeUnion()) } yyVAL.union = yyLOCAL - case 942: + case 943: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5747 +//line mysql_sql.y:5751 { yyLOCAL = tree.NewCastExpr(yyDollar[3].exprUnion(), yyDollar[5].columnTypeUnion()) } yyVAL.union = yyLOCAL - case 943: + case 944: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5751 +//line mysql_sql.y:5755 { name := tree.SetUnresolvedName("convert") es := tree.NewNumValWithType(constant.MakeString(yyDollar[5].str), yyDollar[5].str, false, tree.P_char) @@ -13466,14 +13488,6 @@ yydefault: } } yyVAL.union = yyLOCAL - case 944: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL tree.Expr -//line mysql_sql.y:5760 - { - yyLOCAL = yyDollar[1].funcExprUnion() - } - yyVAL.union = yyLOCAL case 945: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr @@ -13507,57 +13521,65 @@ yydefault: } yyVAL.union = yyLOCAL case 949: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL tree.Expr +//line mysql_sql.y:5780 + { + yyLOCAL = yyDollar[1].funcExprUnion() + } + yyVAL.union = yyLOCAL + case 950: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5781 +//line mysql_sql.y:5785 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 950: + case 951: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5785 +//line mysql_sql.y:5789 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 951: + case 952: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5790 +//line mysql_sql.y:5794 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 952: + case 953: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:5794 +//line mysql_sql.y:5798 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 953: + case 954: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*tree.When -//line mysql_sql.y:5800 +//line mysql_sql.y:5804 { yyLOCAL = []*tree.When{yyDollar[1].whenClauseUnion()} } yyVAL.union = yyLOCAL - case 954: + case 955: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*tree.When -//line mysql_sql.y:5804 +//line mysql_sql.y:5808 { yyLOCAL = append(yyDollar[1].whenClauseListUnion(), yyDollar[2].whenClauseUnion()) } yyVAL.union = yyLOCAL - case 955: + case 956: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.When -//line mysql_sql.y:5810 +//line mysql_sql.y:5814 { yyLOCAL = &tree.When{ Cond: yyDollar[2].exprUnion(), @@ -13565,10 +13587,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 957: + case 958: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:5820 +//line mysql_sql.y:5824 { name := yyDollar[1].str if yyDollar[2].str != "" { @@ -13586,10 +13608,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 958: + case 959: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:5837 +//line mysql_sql.y:5841 { locale := "" yyLOCAL = &tree.T{ @@ -13604,10 +13626,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 960: + case 961: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:5854 +//line mysql_sql.y:5858 { locale := "" yyLOCAL = &tree.T{ @@ -13621,10 +13643,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 961: + case 962: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:5867 +//line mysql_sql.y:5871 { locale := "" yyLOCAL = &tree.T{ @@ -13638,10 +13660,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 962: + case 963: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:5880 +//line mysql_sql.y:5884 { locale := "" yyLOCAL = &tree.T{ @@ -13654,10 +13676,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 963: + case 964: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:5892 +//line mysql_sql.y:5896 { locale := "" yyLOCAL = &tree.T{ @@ -13672,10 +13694,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 964: + case 965: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:5906 +//line mysql_sql.y:5910 { locale := "" yyLOCAL = &tree.T{ @@ -13691,10 +13713,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 965: + case 966: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:5921 +//line mysql_sql.y:5925 { locale := "" yyLOCAL = &tree.T{ @@ -13710,10 +13732,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 966: + case 967: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:5936 +//line mysql_sql.y:5940 { name := yyDollar[1].str if yyDollar[2].str != "" { @@ -13731,10 +13753,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 967: + case 968: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:5953 +//line mysql_sql.y:5957 { locale := "" yyLOCAL = &tree.T{ @@ -13749,15 +13771,15 @@ yydefault: } } yyVAL.union = yyLOCAL - case 968: + case 969: yyDollar = yyS[yypt-0 : yypt+1] -//line mysql_sql.y:5968 +//line mysql_sql.y:5972 { } - case 971: + case 972: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:5974 +//line mysql_sql.y:5978 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13767,10 +13789,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 972: + case 973: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:5983 +//line mysql_sql.y:5987 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13779,10 +13801,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 973: + case 974: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:5991 +//line mysql_sql.y:5995 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13791,10 +13813,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 974: + case 975: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:5999 +//line mysql_sql.y:6003 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13804,10 +13826,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 975: + case 976: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6008 +//line mysql_sql.y:6012 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13817,10 +13839,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 976: + case 977: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6017 +//line mysql_sql.y:6021 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13830,10 +13852,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 977: + case 978: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6026 +//line mysql_sql.y:6030 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13843,10 +13865,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 978: + case 979: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6035 +//line mysql_sql.y:6039 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) es := tree.NewNumValWithType(constant.MakeString("*"), "*", false, tree.P_char) @@ -13856,10 +13878,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 979: + case 980: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6044 +//line mysql_sql.y:6048 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13869,10 +13891,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 980: + case 981: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6053 +//line mysql_sql.y:6057 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13882,10 +13904,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 981: + case 982: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6062 +//line mysql_sql.y:6066 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13895,10 +13917,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 982: + case 983: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6071 +//line mysql_sql.y:6075 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13908,10 +13930,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 983: + case 984: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6080 +//line mysql_sql.y:6084 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13921,10 +13943,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 984: + case 985: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6089 +//line mysql_sql.y:6093 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13934,10 +13956,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 985: + case 986: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6098 +//line mysql_sql.y:6102 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13947,10 +13969,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 989: + case 990: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6114 +//line mysql_sql.y:6118 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13959,10 +13981,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 990: + case 991: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6122 +//line mysql_sql.y:6126 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13971,10 +13993,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 991: + case 992: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6130 +//line mysql_sql.y:6134 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13983,10 +14005,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 992: + case 993: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6138 +//line mysql_sql.y:6142 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -13995,10 +14017,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 993: + case 994: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6146 +//line mysql_sql.y:6150 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) timeUinit := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char) @@ -14008,10 +14030,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 994: + case 995: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6155 +//line mysql_sql.y:6159 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -14020,10 +14042,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 995: + case 996: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6163 +//line mysql_sql.y:6167 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -14033,10 +14055,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 996: + case 997: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6172 +//line mysql_sql.y:6176 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -14046,10 +14068,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 997: + case 998: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6181 +//line mysql_sql.y:6185 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -14058,10 +14080,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 998: + case 999: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6189 +//line mysql_sql.y:6193 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -14070,10 +14092,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 999: + case 1000: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6197 +//line mysql_sql.y:6201 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) arg1 := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char) @@ -14083,10 +14105,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1000: + case 1001: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6206 +//line mysql_sql.y:6210 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) arg1 := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char) @@ -14096,10 +14118,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1001: + case 1002: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6215 +//line mysql_sql.y:6219 { column := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char) name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) @@ -14109,10 +14131,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1002: + case 1003: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6226 +//line mysql_sql.y:6230 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) a1 := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char) @@ -14123,16 +14145,16 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1008: + case 1009: yyDollar = yyS[yypt-1 : yypt+1] -//line mysql_sql.y:6247 +//line mysql_sql.y:6251 { yyVAL.str = yyDollar[1].str } - case 1037: + case 1038: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6283 +//line mysql_sql.y:6287 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) var es tree.Exprs = nil @@ -14145,10 +14167,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1038: + case 1039: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6295 +//line mysql_sql.y:6299 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) var es tree.Exprs = nil @@ -14161,10 +14183,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1039: + case 1040: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6307 +//line mysql_sql.y:6311 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) arg1 := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char) @@ -14174,10 +14196,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1040: + case 1041: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6317 +//line mysql_sql.y:6321 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -14186,10 +14208,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1041: + case 1042: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6325 +//line mysql_sql.y:6329 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -14197,10 +14219,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1042: + case 1043: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6332 +//line mysql_sql.y:6336 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) yyLOCAL = &tree.FuncExpr{ @@ -14208,10 +14230,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1043: + case 1044: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6339 +//line mysql_sql.y:6343 { name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str)) var es tree.Exprs = nil @@ -14224,10 +14246,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1044: + case 1045: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6351 +//line mysql_sql.y:6355 { name := tree.SetUnresolvedName("char") yyLOCAL = &tree.FuncExpr{ @@ -14236,10 +14258,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1045: + case 1046: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6359 +//line mysql_sql.y:6363 { cn := tree.NewNumValWithType(constant.MakeString(yyDollar[5].str), yyDollar[5].str, false, tree.P_char) es := yyDollar[3].exprsUnion() @@ -14251,10 +14273,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1046: + case 1047: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6370 +//line mysql_sql.y:6374 { val := tree.NewNumValWithType(constant.MakeString(yyDollar[2].str), yyDollar[2].str, false, tree.P_char) name := tree.SetUnresolvedName("date") @@ -14264,10 +14286,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1047: + case 1048: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6379 +//line mysql_sql.y:6383 { val := tree.NewNumValWithType(constant.MakeString(yyDollar[2].str), yyDollar[2].str, false, tree.P_char) name := tree.SetUnresolvedName("time") @@ -14277,10 +14299,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1048: + case 1049: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6388 +//line mysql_sql.y:6392 { name := tree.SetUnresolvedName("insert") yyLOCAL = &tree.FuncExpr{ @@ -14289,10 +14311,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1049: + case 1050: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6396 +//line mysql_sql.y:6400 { es := tree.Exprs{yyDollar[3].exprUnion()} es = append(es, yyDollar[5].exprUnion()) @@ -14303,10 +14325,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1050: + case 1051: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6406 +//line mysql_sql.y:6410 { name := tree.SetUnresolvedName("password") yyLOCAL = &tree.FuncExpr{ @@ -14315,10 +14337,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1051: + case 1052: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6414 +//line mysql_sql.y:6418 { name := tree.SetUnresolvedName("binary") yyLOCAL = &tree.FuncExpr{ @@ -14327,10 +14349,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1052: + case 1053: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.FuncExpr -//line mysql_sql.y:6422 +//line mysql_sql.y:6426 { val := tree.NewNumValWithType(constant.MakeString(yyDollar[2].str), yyDollar[2].str, false, tree.P_char) name := tree.SetUnresolvedName("timestamp") @@ -14340,34 +14362,34 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1053: + case 1054: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6432 +//line mysql_sql.y:6436 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1054: + case 1055: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6436 +//line mysql_sql.y:6440 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1055: + case 1056: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6442 +//line mysql_sql.y:6446 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1056: + case 1057: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6446 +//line mysql_sql.y:6450 { ival, errStr := util.GetInt64(yyDollar[2].item) if errStr != "" { @@ -14378,20 +14400,20 @@ yydefault: yyLOCAL = tree.NewNumValWithType(constant.MakeInt64(ival), str, false, tree.P_int64) } yyVAL.union = yyLOCAL - case 1063: + case 1064: yyDollar = yyS[yypt-0 : yypt+1] -//line mysql_sql.y:6465 +//line mysql_sql.y:6469 { } - case 1064: + case 1065: yyDollar = yyS[yypt-2 : yypt+1] -//line mysql_sql.y:6467 +//line mysql_sql.y:6471 { } - case 1098: + case 1099: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6508 +//line mysql_sql.y:6512 { name := tree.SetUnresolvedName("interval") arg2 := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char) @@ -14401,90 +14423,90 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1099: + case 1100: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL tree.FuncType -//line mysql_sql.y:6518 +//line mysql_sql.y:6522 { yyLOCAL = tree.FUNC_TYPE_DEFAULT } yyVAL.union = yyLOCAL - case 1100: + case 1101: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.FuncType -//line mysql_sql.y:6522 +//line mysql_sql.y:6526 { yyLOCAL = tree.FUNC_TYPE_DISTINCT } yyVAL.union = yyLOCAL - case 1101: + case 1102: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.FuncType -//line mysql_sql.y:6526 +//line mysql_sql.y:6530 { yyLOCAL = tree.FUNC_TYPE_ALL } yyVAL.union = yyLOCAL - case 1102: + case 1103: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *tree.Tuple -//line mysql_sql.y:6532 +//line mysql_sql.y:6536 { yyLOCAL = tree.NewTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL - case 1103: + case 1104: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL tree.Exprs -//line mysql_sql.y:6537 +//line mysql_sql.y:6541 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1104: + case 1105: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Exprs -//line mysql_sql.y:6541 +//line mysql_sql.y:6545 { yyLOCAL = yyDollar[1].exprsUnion() } yyVAL.union = yyLOCAL - case 1105: + case 1106: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Exprs -//line mysql_sql.y:6547 +//line mysql_sql.y:6551 { yyLOCAL = tree.Exprs{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1106: + case 1107: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Exprs -//line mysql_sql.y:6551 +//line mysql_sql.y:6555 { yyLOCAL = append(yyDollar[1].exprsUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL - case 1107: + case 1108: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6558 +//line mysql_sql.y:6562 { yyLOCAL = tree.NewAndExpr(yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL - case 1108: + case 1109: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6562 +//line mysql_sql.y:6566 { yyLOCAL = tree.NewOrExpr(yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL - case 1109: + case 1110: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6566 +//line mysql_sql.y:6570 { name := tree.SetUnresolvedName(strings.ToLower("concat")) yyLOCAL = &tree.FuncExpr{ @@ -14493,221 +14515,213 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1110: + case 1111: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6574 +//line mysql_sql.y:6578 { yyLOCAL = tree.NewXorExpr(yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL - case 1111: + case 1112: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6578 +//line mysql_sql.y:6582 { yyLOCAL = tree.NewNotExpr(yyDollar[2].exprUnion()) } yyVAL.union = yyLOCAL - case 1112: + case 1113: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6582 +//line mysql_sql.y:6586 { yyLOCAL = tree.NewMaxValue() } yyVAL.union = yyLOCAL - case 1113: + case 1114: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6586 +//line mysql_sql.y:6590 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1114: + case 1115: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6592 +//line mysql_sql.y:6596 { yyLOCAL = tree.NewIsNullExpr(yyDollar[1].exprUnion()) } yyVAL.union = yyLOCAL - case 1115: + case 1116: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6596 +//line mysql_sql.y:6600 { yyLOCAL = tree.NewIsNotNullExpr(yyDollar[1].exprUnion()) } yyVAL.union = yyLOCAL - case 1116: + case 1117: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6600 +//line mysql_sql.y:6604 { yyLOCAL = tree.NewIsUnknownExpr(yyDollar[1].exprUnion()) } yyVAL.union = yyLOCAL - case 1117: + case 1118: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6604 +//line mysql_sql.y:6608 { yyLOCAL = tree.NewIsNotUnknownExpr(yyDollar[1].exprUnion()) } yyVAL.union = yyLOCAL - case 1118: + case 1119: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6608 +//line mysql_sql.y:6612 { yyLOCAL = tree.NewIsTrueExpr(yyDollar[1].exprUnion()) } yyVAL.union = yyLOCAL - case 1119: + case 1120: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6612 +//line mysql_sql.y:6616 { yyLOCAL = tree.NewIsNotTrueExpr(yyDollar[1].exprUnion()) } yyVAL.union = yyLOCAL - case 1120: + case 1121: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6616 +//line mysql_sql.y:6620 { yyLOCAL = tree.NewIsFalseExpr(yyDollar[1].exprUnion()) } yyVAL.union = yyLOCAL - case 1121: + case 1122: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6620 +//line mysql_sql.y:6624 { yyLOCAL = tree.NewIsNotFalseExpr(yyDollar[1].exprUnion()) } yyVAL.union = yyLOCAL - case 1122: + case 1123: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6624 +//line mysql_sql.y:6628 { yyLOCAL = tree.NewComparisonExpr(yyDollar[2].comparisonOpUnion(), yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL - case 1123: + case 1124: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6628 +//line mysql_sql.y:6632 { yyLOCAL = tree.NewSubqueryComparisonExpr(yyDollar[2].comparisonOpUnion(), yyDollar[3].comparisonOpUnion(), yyDollar[1].exprUnion(), yyDollar[4].subqueryUnion()) yyLOCAL = tree.NewSubqueryComparisonExpr(yyDollar[2].comparisonOpUnion(), yyDollar[3].comparisonOpUnion(), yyDollar[1].exprUnion(), yyDollar[4].subqueryUnion()) } yyVAL.union = yyLOCAL - case 1125: + case 1126: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6636 +//line mysql_sql.y:6640 { yyLOCAL = tree.NewComparisonExpr(tree.IN, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL - case 1126: + case 1127: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6640 +//line mysql_sql.y:6644 { yyLOCAL = tree.NewComparisonExpr(tree.NOT_IN, yyDollar[1].exprUnion(), yyDollar[4].exprUnion()) } yyVAL.union = yyLOCAL - case 1127: + case 1128: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6644 +//line mysql_sql.y:6648 { yyLOCAL = tree.NewComparisonExprWithEscape(tree.LIKE, yyDollar[1].exprUnion(), yyDollar[3].exprUnion(), yyDollar[4].exprUnion()) } yyVAL.union = yyLOCAL - case 1128: + case 1129: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6648 +//line mysql_sql.y:6652 { yyLOCAL = tree.NewComparisonExprWithEscape(tree.NOT_LIKE, yyDollar[1].exprUnion(), yyDollar[4].exprUnion(), yyDollar[5].exprUnion()) } yyVAL.union = yyLOCAL - case 1129: + case 1130: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6652 +//line mysql_sql.y:6656 { yyLOCAL = tree.NewComparisonExpr(tree.REG_MATCH, yyDollar[1].exprUnion(), yyDollar[3].exprUnion()) } yyVAL.union = yyLOCAL - case 1130: + case 1131: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6656 +//line mysql_sql.y:6660 { yyLOCAL = tree.NewComparisonExpr(tree.NOT_REG_MATCH, yyDollar[1].exprUnion(), yyDollar[4].exprUnion()) } yyVAL.union = yyLOCAL - case 1131: + case 1132: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6660 +//line mysql_sql.y:6664 { yyLOCAL = tree.NewRangeCond(false, yyDollar[1].exprUnion(), yyDollar[3].exprUnion(), yyDollar[5].exprUnion()) } yyVAL.union = yyLOCAL - case 1132: + case 1133: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6664 +//line mysql_sql.y:6668 { yyLOCAL = tree.NewRangeCond(true, yyDollar[1].exprUnion(), yyDollar[4].exprUnion(), yyDollar[6].exprUnion()) } yyVAL.union = yyLOCAL - case 1134: + case 1135: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6670 +//line mysql_sql.y:6674 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1135: + case 1136: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6674 +//line mysql_sql.y:6678 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1136: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL tree.Expr -//line mysql_sql.y:6680 - { - yyLOCAL = yyDollar[1].tupleUnion() - } - yyVAL.union = yyLOCAL case 1137: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr //line mysql_sql.y:6684 { - yyLOCAL = yyDollar[1].subqueryUnion() + yyLOCAL = yyDollar[1].tupleUnion() } yyVAL.union = yyLOCAL case 1138: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL tree.ComparisonOp -//line mysql_sql.y:6691 + var yyLOCAL tree.Expr +//line mysql_sql.y:6688 { - yyLOCAL = tree.ALL + yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL case 1139: @@ -14715,7 +14729,7 @@ yydefault: var yyLOCAL tree.ComparisonOp //line mysql_sql.y:6695 { - yyLOCAL = tree.ANY + yyLOCAL = tree.ALL } yyVAL.union = yyLOCAL case 1140: @@ -14723,15 +14737,15 @@ yydefault: var yyLOCAL tree.ComparisonOp //line mysql_sql.y:6699 { - yyLOCAL = tree.SOME + yyLOCAL = tree.ANY } yyVAL.union = yyLOCAL case 1141: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.ComparisonOp -//line mysql_sql.y:6705 +//line mysql_sql.y:6703 { - yyLOCAL = tree.EQUAL + yyLOCAL = tree.SOME } yyVAL.union = yyLOCAL case 1142: @@ -14739,7 +14753,7 @@ yydefault: var yyLOCAL tree.ComparisonOp //line mysql_sql.y:6709 { - yyLOCAL = tree.LESS_THAN + yyLOCAL = tree.EQUAL } yyVAL.union = yyLOCAL case 1143: @@ -14747,7 +14761,7 @@ yydefault: var yyLOCAL tree.ComparisonOp //line mysql_sql.y:6713 { - yyLOCAL = tree.GREAT_THAN + yyLOCAL = tree.LESS_THAN } yyVAL.union = yyLOCAL case 1144: @@ -14755,7 +14769,7 @@ yydefault: var yyLOCAL tree.ComparisonOp //line mysql_sql.y:6717 { - yyLOCAL = tree.LESS_THAN_EQUAL + yyLOCAL = tree.GREAT_THAN } yyVAL.union = yyLOCAL case 1145: @@ -14763,7 +14777,7 @@ yydefault: var yyLOCAL tree.ComparisonOp //line mysql_sql.y:6721 { - yyLOCAL = tree.GREAT_THAN_EQUAL + yyLOCAL = tree.LESS_THAN_EQUAL } yyVAL.union = yyLOCAL case 1146: @@ -14771,7 +14785,7 @@ yydefault: var yyLOCAL tree.ComparisonOp //line mysql_sql.y:6725 { - yyLOCAL = tree.NOT_EQUAL + yyLOCAL = tree.GREAT_THAN_EQUAL } yyVAL.union = yyLOCAL case 1147: @@ -14779,15 +14793,15 @@ yydefault: var yyLOCAL tree.ComparisonOp //line mysql_sql.y:6729 { - yyLOCAL = tree.NULL_SAFE_EQUAL + yyLOCAL = tree.NOT_EQUAL } yyVAL.union = yyLOCAL case 1148: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL tree.ColumnAttribute -//line mysql_sql.y:6735 + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL tree.ComparisonOp +//line mysql_sql.y:6733 { - yyLOCAL = tree.NewAttributePrimaryKey() + yyLOCAL = tree.NULL_SAFE_EQUAL } yyVAL.union = yyLOCAL case 1149: @@ -14795,15 +14809,15 @@ yydefault: var yyLOCAL tree.ColumnAttribute //line mysql_sql.y:6739 { - yyLOCAL = tree.NewAttributeUniqueKey() + yyLOCAL = tree.NewAttributePrimaryKey() } yyVAL.union = yyLOCAL case 1150: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.ColumnAttribute //line mysql_sql.y:6743 { - yyLOCAL = tree.NewAttributeUnique() + yyLOCAL = tree.NewAttributeUniqueKey() } yyVAL.union = yyLOCAL case 1151: @@ -14811,21 +14825,29 @@ yydefault: var yyLOCAL tree.ColumnAttribute //line mysql_sql.y:6747 { - yyLOCAL = tree.NewAttributeKey() + yyLOCAL = tree.NewAttributeUnique() } yyVAL.union = yyLOCAL case 1152: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL tree.Expr -//line mysql_sql.y:6753 + var yyLOCAL tree.ColumnAttribute +//line mysql_sql.y:6751 { - yyLOCAL = tree.NewNumValWithType(constant.MakeString(yyDollar[1].str), yyDollar[1].str, false, tree.P_char) + yyLOCAL = tree.NewAttributeKey() } yyVAL.union = yyLOCAL case 1153: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr //line mysql_sql.y:6757 + { + yyLOCAL = tree.NewNumValWithType(constant.MakeString(yyDollar[1].str), yyDollar[1].str, false, tree.P_char) + } + yyVAL.union = yyLOCAL + case 1154: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL tree.Expr +//line mysql_sql.y:6761 { str := fmt.Sprintf("%v", yyDollar[1].item) switch v := yyDollar[1].item.(type) { @@ -14839,29 +14861,21 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1154: + case 1155: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6770 +//line mysql_sql.y:6774 { fval := yyDollar[1].item.(float64) yyLOCAL = tree.NewNumValWithType(constant.MakeFloat64(fval), yylex.(*Lexer).scanner.LastToken, false, tree.P_float64) } yyVAL.union = yyLOCAL - case 1155: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL tree.Expr -//line mysql_sql.y:6775 - { - yyLOCAL = tree.NewNumValWithType(constant.MakeBool(true), "true", false, tree.P_bool) - } - yyVAL.union = yyLOCAL case 1156: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr //line mysql_sql.y:6779 { - yyLOCAL = tree.NewNumValWithType(constant.MakeBool(false), "false", false, tree.P_bool) + yyLOCAL = tree.NewNumValWithType(constant.MakeBool(true), "true", false, tree.P_bool) } yyVAL.union = yyLOCAL case 1157: @@ -14869,7 +14883,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:6783 { - yyLOCAL = tree.NewNumValWithType(constant.MakeUnknown(), "null", false, tree.P_null) + yyLOCAL = tree.NewNumValWithType(constant.MakeBool(false), "false", false, tree.P_bool) } yyVAL.union = yyLOCAL case 1158: @@ -14877,7 +14891,7 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:6787 { - yyLOCAL = tree.NewNumValWithType(constant.MakeString(yyDollar[1].str), yyDollar[1].str, false, tree.P_hexnum) + yyLOCAL = tree.NewNumValWithType(constant.MakeUnknown(), "null", false, tree.P_null) } yyVAL.union = yyLOCAL case 1159: @@ -14885,13 +14899,21 @@ yydefault: var yyLOCAL tree.Expr //line mysql_sql.y:6791 { - yyLOCAL = tree.NewNumValWithType(constant.MakeString(yyDollar[1].str), yyDollar[1].str, false, tree.P_decimal) + yyLOCAL = tree.NewNumValWithType(constant.MakeString(yyDollar[1].str), yyDollar[1].str, false, tree.P_hexnum) } yyVAL.union = yyLOCAL case 1160: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr //line mysql_sql.y:6795 + { + yyLOCAL = tree.NewNumValWithType(constant.MakeString(yyDollar[1].str), yyDollar[1].str, false, tree.P_decimal) + } + yyVAL.union = yyLOCAL + case 1161: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL tree.Expr +//line mysql_sql.y:6799 { switch v := yyDollar[1].item.(type) { case uint64: @@ -14906,45 +14928,45 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1161: + case 1162: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL tree.Expr -//line mysql_sql.y:6809 +//line mysql_sql.y:6813 { yyLOCAL = tree.NewParamExpr(yylex.(*Lexer).GetParamIndex()) } yyVAL.union = yyLOCAL - case 1162: + case 1163: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6815 +//line mysql_sql.y:6819 { yyLOCAL = yyDollar[1].columnTypeUnion() yyLOCAL.InternalType.Unsigned = yyDollar[2].unsignedOptUnion() yyLOCAL.InternalType.Zerofill = yyDollar[3].zeroFillOptUnion() } yyVAL.union = yyLOCAL - case 1166: + case 1167: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6826 +//line mysql_sql.y:6830 { yyLOCAL = yyDollar[1].columnTypeUnion() yyLOCAL.InternalType.DisplayWith = yyDollar[2].lengthOptUnion() } yyVAL.union = yyLOCAL - case 1167: + case 1168: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6831 +//line mysql_sql.y:6835 { yyLOCAL = yyDollar[1].columnTypeUnion() } yyVAL.union = yyLOCAL - case 1168: + case 1169: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6837 +//line mysql_sql.y:6841 { locale := "" yyLOCAL = &tree.T{ @@ -14957,10 +14979,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1169: + case 1170: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6849 +//line mysql_sql.y:6853 { locale := "" yyLOCAL = &tree.T{ @@ -14973,10 +14995,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1170: + case 1171: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6861 +//line mysql_sql.y:6865 { locale := "" yyLOCAL = &tree.T{ @@ -14989,10 +15011,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1171: + case 1172: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6873 +//line mysql_sql.y:6877 { locale := "" yyLOCAL = &tree.T{ @@ -15006,10 +15028,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1172: + case 1173: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6886 +//line mysql_sql.y:6890 { locale := "" yyLOCAL = &tree.T{ @@ -15023,10 +15045,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1173: + case 1174: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6899 +//line mysql_sql.y:6903 { locale := "" yyLOCAL = &tree.T{ @@ -15040,10 +15062,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1174: + case 1175: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6912 +//line mysql_sql.y:6916 { locale := "" yyLOCAL = &tree.T{ @@ -15057,10 +15079,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1175: + case 1176: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6925 +//line mysql_sql.y:6929 { locale := "" yyLOCAL = &tree.T{ @@ -15074,10 +15096,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1176: + case 1177: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6938 +//line mysql_sql.y:6942 { locale := "" yyLOCAL = &tree.T{ @@ -15091,10 +15113,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1177: + case 1178: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6951 +//line mysql_sql.y:6955 { locale := "" yyLOCAL = &tree.T{ @@ -15108,10 +15130,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1178: + case 1179: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6964 +//line mysql_sql.y:6968 { locale := "" yyLOCAL = &tree.T{ @@ -15125,10 +15147,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1179: + case 1180: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6977 +//line mysql_sql.y:6981 { locale := "" yyLOCAL = &tree.T{ @@ -15142,10 +15164,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1180: + case 1181: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:6990 +//line mysql_sql.y:6994 { locale := "" yyLOCAL = &tree.T{ @@ -15159,10 +15181,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1181: + case 1182: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7003 +//line mysql_sql.y:7007 { locale := "" yyLOCAL = &tree.T{ @@ -15176,10 +15198,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1182: + case 1183: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7018 +//line mysql_sql.y:7022 { locale := "" if yyDollar[2].lengthScaleOptUnion().DisplayWith > 255 { @@ -15203,10 +15225,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1183: + case 1184: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7041 +//line mysql_sql.y:7045 { locale := "" if yyDollar[2].lengthScaleOptUnion().Precision != tree.NotDefineDec && yyDollar[2].lengthScaleOptUnion().Precision > yyDollar[2].lengthScaleOptUnion().DisplayWith { @@ -15240,10 +15262,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1184: + case 1185: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7075 +//line mysql_sql.y:7079 { locale := "" if yyDollar[2].lengthScaleOptUnion().Precision != tree.NotDefineDec && yyDollar[2].lengthScaleOptUnion().Precision > yyDollar[2].lengthScaleOptUnion().DisplayWith { @@ -15280,10 +15302,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1185: + case 1186: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7123 +//line mysql_sql.y:7127 { locale := "" yyLOCAL = &tree.T{ @@ -15299,10 +15321,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1186: + case 1187: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7140 +//line mysql_sql.y:7144 { locale := "" yyLOCAL = &tree.T{ @@ -15315,10 +15337,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1187: + case 1188: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7152 +//line mysql_sql.y:7156 { locale := "" if yyDollar[2].lengthOptUnion() < 0 || yyDollar[2].lengthOptUnion() > 6 { @@ -15339,10 +15361,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1188: + case 1189: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7172 +//line mysql_sql.y:7176 { locale := "" if yyDollar[2].lengthOptUnion() < 0 || yyDollar[2].lengthOptUnion() > 6 { @@ -15363,10 +15385,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1189: + case 1190: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7192 +//line mysql_sql.y:7196 { locale := "" if yyDollar[2].lengthOptUnion() < 0 || yyDollar[2].lengthOptUnion() > 6 { @@ -15387,10 +15409,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1190: + case 1191: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7212 +//line mysql_sql.y:7216 { locale := "" yyLOCAL = &tree.T{ @@ -15405,10 +15427,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1191: + case 1192: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7228 +//line mysql_sql.y:7232 { locale := "" yyLOCAL = &tree.T{ @@ -15422,10 +15444,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1192: + case 1193: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7241 +//line mysql_sql.y:7245 { locale := "" yyLOCAL = &tree.T{ @@ -15439,10 +15461,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1193: + case 1194: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7254 +//line mysql_sql.y:7258 { locale := "" yyLOCAL = &tree.T{ @@ -15456,10 +15478,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1194: + case 1195: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7267 +//line mysql_sql.y:7271 { locale := "" yyLOCAL = &tree.T{ @@ -15473,10 +15495,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1195: + case 1196: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7280 +//line mysql_sql.y:7284 { locale := "" yyLOCAL = &tree.T{ @@ -15489,10 +15511,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1196: + case 1197: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7292 +//line mysql_sql.y:7296 { locale := "" yyLOCAL = &tree.T{ @@ -15505,10 +15527,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1197: + case 1198: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7304 +//line mysql_sql.y:7308 { locale := "" yyLOCAL = &tree.T{ @@ -15521,10 +15543,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1198: + case 1199: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7316 +//line mysql_sql.y:7320 { locale := "" yyLOCAL = &tree.T{ @@ -15537,10 +15559,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1199: + case 1200: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7328 +//line mysql_sql.y:7332 { locale := "" yyLOCAL = &tree.T{ @@ -15553,10 +15575,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1200: + case 1201: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7340 +//line mysql_sql.y:7344 { locale := "" yyLOCAL = &tree.T{ @@ -15569,10 +15591,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1201: + case 1202: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7352 +//line mysql_sql.y:7356 { locale := "" yyLOCAL = &tree.T{ @@ -15585,10 +15607,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1202: + case 1203: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7364 +//line mysql_sql.y:7368 { locale := "" yyLOCAL = &tree.T{ @@ -15601,10 +15623,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1203: + case 1204: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7376 +//line mysql_sql.y:7380 { locale := "" yyLOCAL = &tree.T{ @@ -15617,10 +15639,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1204: + case 1205: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7388 +//line mysql_sql.y:7392 { locale := "" yyLOCAL = &tree.T{ @@ -15634,10 +15656,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1205: + case 1206: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7401 +//line mysql_sql.y:7405 { locale := "" yyLOCAL = &tree.T{ @@ -15651,10 +15673,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1206: + case 1207: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7414 +//line mysql_sql.y:7418 { locale := "" yyLOCAL = &tree.T{ @@ -15668,20 +15690,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1207: + case 1208: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL tree.Statement -//line mysql_sql.y:7429 +//line mysql_sql.y:7433 { yyLOCAL = &tree.Do{ Exprs: yyDollar[2].exprsUnion(), } } yyVAL.union = yyLOCAL - case 1208: + case 1209: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.Statement -//line mysql_sql.y:7437 +//line mysql_sql.y:7441 { yyLOCAL = &tree.Declare{ Variables: yyDollar[2].strsUnion(), @@ -15690,10 +15712,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1209: + case 1210: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL tree.Statement -//line mysql_sql.y:7446 +//line mysql_sql.y:7450 { yyLOCAL = &tree.Declare{ Variables: yyDollar[2].strsUnion(), @@ -15702,10 +15724,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1210: + case 1211: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *tree.T -//line mysql_sql.y:7456 +//line mysql_sql.y:7460 { locale := "" yyLOCAL = &tree.T{ @@ -15718,75 +15740,75 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1211: + case 1212: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []string -//line mysql_sql.y:7479 +//line mysql_sql.y:7483 { yyLOCAL = make([]string, 0, 4) yyLOCAL = append(yyLOCAL, yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1212: + case 1213: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []string -//line mysql_sql.y:7484 +//line mysql_sql.y:7488 { yyLOCAL = append(yyDollar[1].strsUnion(), yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1213: + case 1214: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int32 -//line mysql_sql.y:7490 +//line mysql_sql.y:7494 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 1215: + case 1216: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int32 -//line mysql_sql.y:7497 +//line mysql_sql.y:7501 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 1216: + case 1217: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int32 -//line mysql_sql.y:7501 +//line mysql_sql.y:7505 { yyLOCAL = int32(yyDollar[2].item.(int64)) } yyVAL.union = yyLOCAL - case 1217: + case 1218: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int32 -//line mysql_sql.y:7506 +//line mysql_sql.y:7510 { yyLOCAL = int32(-1) } yyVAL.union = yyLOCAL - case 1218: + case 1219: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int32 -//line mysql_sql.y:7510 +//line mysql_sql.y:7514 { yyLOCAL = int32(yyDollar[2].item.(int64)) } yyVAL.union = yyLOCAL - case 1219: + case 1220: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int32 -//line mysql_sql.y:7516 +//line mysql_sql.y:7520 { yyLOCAL = tree.GetDisplayWith(int32(yyDollar[2].item.(int64))) } yyVAL.union = yyLOCAL - case 1220: + case 1221: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL tree.LengthScaleOpt -//line mysql_sql.y:7522 +//line mysql_sql.y:7526 { yyLOCAL = tree.LengthScaleOpt{ DisplayWith: tree.NotDefineDisplayWidth, @@ -15794,10 +15816,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1221: + case 1222: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.LengthScaleOpt -//line mysql_sql.y:7529 +//line mysql_sql.y:7533 { yyLOCAL = tree.LengthScaleOpt{ DisplayWith: tree.GetDisplayWith(int32(yyDollar[2].item.(int64))), @@ -15805,10 +15827,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1222: + case 1223: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL tree.LengthScaleOpt -//line mysql_sql.y:7536 +//line mysql_sql.y:7540 { yyLOCAL = tree.LengthScaleOpt{ DisplayWith: tree.GetDisplayWith(int32(yyDollar[2].item.(int64))), @@ -15816,10 +15838,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1223: + case 1224: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL tree.LengthScaleOpt -//line mysql_sql.y:7545 +//line mysql_sql.y:7549 { yyLOCAL = tree.LengthScaleOpt{ DisplayWith: 34, // this is the default precision for decimal @@ -15827,10 +15849,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1224: + case 1225: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL tree.LengthScaleOpt -//line mysql_sql.y:7552 +//line mysql_sql.y:7556 { yyLOCAL = tree.LengthScaleOpt{ DisplayWith: tree.GetDisplayWith(int32(yyDollar[2].item.(int64))), @@ -15838,10 +15860,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1225: + case 1226: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL tree.LengthScaleOpt -//line mysql_sql.y:7559 +//line mysql_sql.y:7563 { yyLOCAL = tree.LengthScaleOpt{ DisplayWith: tree.GetDisplayWith(int32(yyDollar[2].item.(int64))), @@ -15849,52 +15871,52 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1226: + case 1227: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line mysql_sql.y:7568 +//line mysql_sql.y:7572 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1227: + case 1228: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line mysql_sql.y:7572 +//line mysql_sql.y:7576 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1228: + case 1229: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line mysql_sql.y:7576 +//line mysql_sql.y:7580 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1229: + case 1230: yyDollar = yyS[yypt-0 : yypt+1] -//line mysql_sql.y:7582 +//line mysql_sql.y:7586 { } - case 1230: + case 1231: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line mysql_sql.y:7584 +//line mysql_sql.y:7588 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1234: + case 1235: yyDollar = yyS[yypt-0 : yypt+1] -//line mysql_sql.y:7594 +//line mysql_sql.y:7598 { yyVAL.str = "" } - case 1235: + case 1236: yyDollar = yyS[yypt-1 : yypt+1] -//line mysql_sql.y:7598 +//line mysql_sql.y:7602 { yyVAL.str = string(yyDollar[1].str) } diff --git a/pkg/sql/parsers/dialect/mysql/mysql_sql.y b/pkg/sql/parsers/dialect/mysql/mysql_sql.y index fb3fa7174..c68a60d79 100644 --- a/pkg/sql/parsers/dialect/mysql/mysql_sql.y +++ b/pkg/sql/parsers/dialect/mysql/mysql_sql.y @@ -279,7 +279,7 @@ import ( %token <str> SLAVE CLIENT USAGE RELOAD FILE TEMPORARY ROUTINE EVENT SHUTDOWN // Type Modifiers -%token <str> NULLX AUTO_INCREMENT APPROXNUM SIGNED UNSIGNED ZEROFILL ENGINES +%token <str> NULLX AUTO_INCREMENT APPROXNUM SIGNED UNSIGNED ZEROFILL ENGINES LOW_CARDINALITY // Account %token <str> ADMIN_NAME RANDOM SUSPEND ATTRIBUTE HISTORY REUSE CURRENT OPTIONAL FAILED_LOGIN_ATTEMPTS PASSWORD_LOCK_TIME UNBOUNDED SECONDARY @@ -5460,6 +5460,10 @@ column_attribute_elem: } $$ = tree.NewAttributeOnUpdate(expr) } +| LOW_CARDINALITY + { + $$ = tree.NewAttributeLowCardinality() + } enforce: ENFORCED @@ -7953,7 +7957,8 @@ non_reserved_keyword: | HASH | ENGINES | TRIGGERS -| HISTORY +| HISTORY +| LOW_CARDINALITY func_not_keyword: DATE_ADD diff --git a/pkg/sql/parsers/dialect/mysql/mysql_sql_test.go b/pkg/sql/parsers/dialect/mysql/mysql_sql_test.go index 5a1e55e0b..f8f2c560d 100644 --- a/pkg/sql/parsers/dialect/mysql/mysql_sql_test.go +++ b/pkg/sql/parsers/dialect/mysql/mysql_sql_test.go @@ -1625,6 +1625,10 @@ var ( input: `select * from generate_series(1, 10, 1) as g`, output: `select * from generate_series(1, 10, 1) as g`, }, + { + input: `create table t1 (a int low_cardinality, b int not null low_cardinality)`, + output: `create table t1 (a int low_cardinality, b int not null low_cardinality)`, + }, { input: `modump database t into 'a.sql'`, output: `modump database t into a.sql`, diff --git a/pkg/sql/parsers/tree/create.go b/pkg/sql/parsers/tree/create.go index df9bb6ce1..b4de48f12 100644 --- a/pkg/sql/parsers/tree/create.go +++ b/pkg/sql/parsers/tree/create.go @@ -469,6 +469,18 @@ func NewAttributeGeneratedAlways(e Expr, s bool) *AttributeGeneratedAlways { } } +type AttributeLowCardinality struct { + columnAttributeImpl +} + +func (node *AttributeLowCardinality) Format(ctx *FmtCtx) { + ctx.WriteString("low_cardinality") +} + +func NewAttributeLowCardinality() *AttributeLowCardinality { + return &AttributeLowCardinality{} +} + type KeyPart struct { columnAttributeImpl ColName *UnresolvedName diff --git a/pkg/testutil/util_make.go b/pkg/testutil/util_make.go index f07988dd7..793f3c619 100644 --- a/pkg/testutil/util_make.go +++ b/pkg/testutil/util_make.go @@ -16,6 +16,7 @@ package testutil import ( "fmt" + "math/rand" "time" "github.com/matrixorigin/matrixone/pkg/common/mpool" @@ -375,3 +376,32 @@ func MakeDecimal128ArrByFloat64Arr(input []float64) []types.Decimal128 { return ret } + +func MakeRandomStrings(cardinality, targetRows int) []string { + chars := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()" + charsLen := len(chars) + + // mock random strings + dataset := make([][]byte, cardinality) + for i := range dataset { + randLen := rand.Intn(charsLen) + 1 + dataset[i] = make([]byte, randLen) + for j := range dataset[i] { + dataset[i][j] = chars[rand.Intn(charsLen)] + } + } + + data := make([]string, 0) + for { + for i := range dataset { + n := rand.Intn(10) + 1 + for j := 0; j < n; j++ { + data = append(data, string(append([]byte{}, dataset[i]...))) + } + } + if len(data) >= targetRows { + break + } + } + return data +} diff --git a/proto/plan.proto b/proto/plan.proto index eb223c65d..e7d2dc080 100644 --- a/proto/plan.proto +++ b/proto/plan.proto @@ -201,6 +201,7 @@ message ColDef { string comment = 7; bool is_cPkey = 8; OnUpdate on_update = 9; + bool low_cardinality = 10; } message Default { -- GitLab