diff --git a/.golangci.yml b/.golangci.yml index 288bef136f..5c85a92e08 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -7,6 +7,14 @@ run: - docs - scripts - internal/core + - internal/mysqld/parser/antlrparser/parser + - internal/planparserv2/generated + skip-files: + # The worst lint rule of golang. + - internal/mysqld/parser/antlrparser/ast_builder.go + - internal/mysqld/parser/antlrparser/node_ret.go + - internal/mysqld/planner/sql_statement.go + - internal/mysqld/planner/sql_statements.go linters: disable-all: true diff --git a/configs/milvus.yaml b/configs/milvus.yaml index 1b51675ca2..707e1b64d2 100644 --- a/configs/milvus.yaml +++ b/configs/milvus.yaml @@ -522,3 +522,7 @@ trace: sampleFraction: 0 jaeger: url: # when exporter is jaeger should set the jaeger's URL + +mysqld: + tcpPort: 3306 + # TODO: support socket. diff --git a/go.mod b/go.mod index a4db7a3dc9..3de5c06503 100644 --- a/go.mod +++ b/go.mod @@ -3,22 +3,28 @@ module github.com/milvus-io/milvus go 1.18 require ( + github.com/99designs/keyring v1.2.1 // indirect + github.com/BurntSushi/toml v1.0.0 // indirect github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/aliyun/credentials-go v1.2.6 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e github.com/antonmedv/expr v1.8.9 github.com/apache/arrow/go/v8 v8.0.0-20220322092137-778b1772fd20 github.com/apache/pulsar-client-go v0.6.1-0.20210728062540-29414db801a7 + github.com/apache/thrift v0.15.0 // indirect + github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b github.com/bits-and-blooms/bloom/v3 v3.0.1 github.com/blang/semver/v4 v4.0.0 github.com/casbin/casbin/v2 v2.44.2 github.com/casbin/json-adapter/v2 v2.0.0 github.com/cockroachdb/errors v1.9.1 github.com/confluentinc/confluent-kafka-go v1.9.1 + github.com/containerd/cgroups v1.0.4 github.com/gin-gonic/gin v1.7.7 github.com/gofrs/flock v0.8.1 github.com/golang/protobuf v1.5.3 github.com/klauspost/compress v1.14.4 + github.com/lingdor/stackerror v0.0.0-20191119040541-976d8885ed76 github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d github.com/milvus-io/milvus-proto/go-api v0.0.0-20230411174625-2c86533465fb github.com/milvus-io/milvus/pkg v0.0.0-00010101000000-000000000000 @@ -28,8 +34,13 @@ require ( github.com/quasilyte/go-ruleguard/dsl v0.3.21 github.com/samber/lo v1.27.0 github.com/sbinet/npyio v0.6.0 + github.com/shirou/gopsutil/v3 v3.22.9 + github.com/spaolacci/murmur3 v1.1.0 + github.com/spf13/cast v1.3.1 github.com/spf13/viper v1.8.1 + github.com/streamnative/pulsarctl v0.5.0 github.com/stretchr/testify v1.8.1 + github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c go.etcd.io/etcd/api/v3 v3.5.5 go.etcd.io/etcd/client/v3 v3.5.5 go.etcd.io/etcd/server/v3 v3.5.5 @@ -76,6 +87,7 @@ require ( github.com/ardielle/ardielle-go v1.5.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.2.0 // indirect + github.com/blang/semver/v4 v4.0.0 github.com/campoy/embedmd v1.0.0 // indirect github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect @@ -203,6 +215,39 @@ require ( sigs.k8s.io/yaml v1.2.0 // indirect ) +require github.com/ianlancetaylor/cgosymbolizer v0.0.0-20221217025313-27d3c9f66b6a // indirect + +require ( + github.com/aliyun/credentials-go v1.2.6 + github.com/cockroachdb/errors v1.9.1 + github.com/uber/jaeger-client-go v2.30.0+incompatible + go.opentelemetry.io/otel/exporters/jaeger v1.11.2 + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.11.2 +) + +require ( + github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect + github.com/alibabacloud-go/tea v1.1.8 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect + github.com/cockroachdb/redact v1.1.3 // indirect + github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect + github.com/getsentry/sentry-go v0.12.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang-jwt/jwt v3.2.2+incompatible // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect + github.com/kr/pretty v0.3.0 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/rogpeppe/go-internal v1.8.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 // indirect + go.opentelemetry.io/otel/metric v0.34.0 // indirect +) + replace ( github.com/apache/pulsar-client-go => github.com/milvus-io/pulsar-client-go v0.6.10 github.com/bketelsen/crypt => github.com/bketelsen/crypt v0.0.4 // Fix security alert for core-os/etcd @@ -210,6 +255,7 @@ replace ( github.com/milvus-io/milvus/pkg => ./pkg github.com/streamnative/pulsarctl => github.com/xiaofan-luan/pulsarctl v0.5.1 github.com/tecbot/gorocksdb => github.com/milvus-io/gorocksdb v0.0.0-20220624081344-8c5f4212846b // indirect + github.com/xelabs/go-mysqlstack => github.com/longjiquan/go-mysqlstack v0.0.0-20210512092920-666657c8bdb5 ) exclude github.com/apache/pulsar-client-go/oauth2 v0.0.0-20211108044248-fe3b7c4e445b diff --git a/go.sum b/go.sum index b19947332f..dea64de035 100644 --- a/go.sum +++ b/go.sum @@ -17,6 +17,7 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= @@ -134,6 +135,7 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -342,6 +344,7 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= @@ -477,6 +480,7 @@ github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= @@ -532,6 +536,7 @@ github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lingdor/stackerror v0.0.0-20191119040541-976d8885ed76 h1:IVlcvV0CjvfBYYod5ePe89l+3LBAl//6n9kJ9Vr2i0k= +github.com/lingdor/stackerror v0.0.0-20191119040541-976d8885ed76/go.mod h1:Iu9BHUvTh8/KpbuSoKx/CaJEdJvFxSverxIy7I+nq7s= github.com/linkedin/goavro v2.1.0+incompatible/go.mod h1:bBCwI2eGYpUI/4820s67MElg9tdeLbINjLjiM2xZFYM= github.com/linkedin/goavro/v2 v2.9.8/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= github.com/linkedin/goavro/v2 v2.10.0/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= @@ -561,7 +566,10 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0= github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -603,6 +611,7 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= @@ -615,6 +624,7 @@ github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5Vgl github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nrwiersma/avro-benchmarks v0.0.0-20210913175520-21aec48c8f76/go.mod h1:iKyFMidsk/sVYONJRE372sJuX/QTRPacU7imPqqsu7g= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -622,6 +632,7 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= @@ -669,12 +680,14 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= @@ -682,6 +695,7 @@ github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7q github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= @@ -689,6 +703,7 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= @@ -715,6 +730,8 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samber/lo v1.27.0 h1:GOyDWxsblvqYobqsmUuMddPa2/mMzkKyojlXol4+LaQ= github.com/samber/lo v1.27.0/go.mod h1:it33p9UtPMS7z72fP4gw/EIfQB2eI8ke7GR2wc6+Rhg= +github.com/sandertv/go-formula/v2 v2.0.0-alpha.7 h1:j6ZnqcpnlGG9oBdhfiGgQ4aQAHEKsMlePvOfD+y5O6s= +github.com/sandertv/go-formula/v2 v2.0.0-alpha.7/go.mod h1:Ag4V2fiOHWXct3SraXNN3dFzFtyu9vqBfrjfYWMGLhE= github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4= github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= github.com/sbinet/npyio v0.6.0 h1:IyqqQIzRjDym9xnIXsToCKei/qCzxDP+Y74KoMlMgXo= @@ -890,6 +907,7 @@ go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJP go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= @@ -1232,6 +1250,7 @@ golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= @@ -1320,6 +1339,7 @@ google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxH google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29 h1:DJUvgAPiJWeMBiT+RzBVcJGQN7bAEWS5UEoMshES9xs= google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633 h1:0BOZf6qNozI3pkN3fJLwNubheHJYHhMh91GRFOWWK08= google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= @@ -1376,6 +1396,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/errgo.v1 v1.0.0/go.mod h1:CxwszS/Xz1C49Ucd2i6Zil5UToP1EmyrFhKaMVbg1mk= diff --git a/internal/distributed/proxy/service.go b/internal/distributed/proxy/service.go index 6dd6b50c73..21bf180732 100644 --- a/internal/distributed/proxy/service.go +++ b/internal/distributed/proxy/service.go @@ -30,6 +30,10 @@ import ( "sync" "time" + "go.uber.org/zap/zapcore" + + "github.com/milvus-io/milvus/internal/mysqld" + "github.com/milvus-io/milvus/internal/proxy/accesslog" "github.com/milvus-io/milvus/internal/util/componentutil" "github.com/milvus-io/milvus/internal/util/dependency" @@ -87,6 +91,8 @@ type Server struct { rootCoordClient types.RootCoord dataCoordClient types.DataCoord queryCoordClient types.QueryCoord + + mysqlServer *mysqld.Server } // NewServer create a Proxy server. @@ -280,6 +286,37 @@ func (s *Server) startInternalGrpc(grpcPort int, errChan chan error) { } } +func getLogLevel() zapcore.Level { + level := zapcore.InfoLevel + cfg := paramtable.Get().LogCfg + _ = level.UnmarshalText([]byte(cfg.Level.GetValue())) + return level +} + +func getMysqlTCPPort() int { + cfg := paramtable.Get().MysqldConfig + return cfg.TCPPort.GetAsInt() +} + +func (s *Server) startMySQLServer() error { + port := getMysqlTCPPort() + level := getLogLevel() + mysqlServer, err := mysqld.NewServer(s.proxy, port, level) + if err != nil { + return err + } + + s.mysqlServer = mysqlServer + + if err := s.mysqlServer.Start(); err != nil { + return err + } + + log.Info("start mysql server", zap.Int("tcpPort", port), zap.String("level", level.String())) + + return nil +} + // Start start the Proxy Server func (s *Server) Run() error { log.Debug("init Proxy server") @@ -469,6 +506,11 @@ func (s *Server) start() error { return err } + if err := s.startMySQLServer(); err != nil { + log.Warn("failed to start mysql server", zap.Error(err)) + return err + } + return nil } @@ -505,6 +547,10 @@ func (s *Server) Stop() error { return err } + if s.mysqlServer != nil { + return s.mysqlServer.Close() + } + return nil } diff --git a/internal/mocks/mock_proxy.go b/internal/mocks/mock_proxy.go new file mode 100644 index 0000000000..10fb12b6eb --- /dev/null +++ b/internal/mocks/mock_proxy.go @@ -0,0 +1,3992 @@ +// Code generated by mockery v2.16.0. DO NOT EDIT. + +package mocks + +import ( + context "context" + + commonpb "github.com/milvus-io/milvus-proto/go-api/commonpb" + clientv3 "go.etcd.io/etcd/client/v3" + + internalpb "github.com/milvus-io/milvus/internal/proto/internalpb" + + milvuspb "github.com/milvus-io/milvus-proto/go-api/milvuspb" + + mock "github.com/stretchr/testify/mock" + + proxypb "github.com/milvus-io/milvus/internal/proto/proxypb" + + types "github.com/milvus-io/milvus/internal/types" +) + +// ProxyComponent is an autogenerated mock type for the ProxyComponent type +type ProxyComponent struct { + mock.Mock +} + +type ProxyComponent_Expecter struct { + mock *mock.Mock +} + +func (_m *ProxyComponent) EXPECT() *ProxyComponent_Expecter { + return &ProxyComponent_Expecter{mock: &_m.Mock} +} + +// AlterAlias provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) AlterAlias(ctx context.Context, request *milvuspb.AlterAliasRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.AlterAliasRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.AlterAliasRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_AlterAlias_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AlterAlias' +type ProxyComponent_AlterAlias_Call struct { + *mock.Call +} + +// AlterAlias is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.AlterAliasRequest +func (_e *ProxyComponent_Expecter) AlterAlias(ctx interface{}, request interface{}) *ProxyComponent_AlterAlias_Call { + return &ProxyComponent_AlterAlias_Call{Call: _e.mock.On("AlterAlias", ctx, request)} +} + +func (_c *ProxyComponent_AlterAlias_Call) Run(run func(ctx context.Context, request *milvuspb.AlterAliasRequest)) *ProxyComponent_AlterAlias_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.AlterAliasRequest)) + }) + return _c +} + +func (_c *ProxyComponent_AlterAlias_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_AlterAlias_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// AlterCollection provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) AlterCollection(ctx context.Context, request *milvuspb.AlterCollectionRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.AlterCollectionRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.AlterCollectionRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_AlterCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AlterCollection' +type ProxyComponent_AlterCollection_Call struct { + *mock.Call +} + +// AlterCollection is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.AlterCollectionRequest +func (_e *ProxyComponent_Expecter) AlterCollection(ctx interface{}, request interface{}) *ProxyComponent_AlterCollection_Call { + return &ProxyComponent_AlterCollection_Call{Call: _e.mock.On("AlterCollection", ctx, request)} +} + +func (_c *ProxyComponent_AlterCollection_Call) Run(run func(ctx context.Context, request *milvuspb.AlterCollectionRequest)) *ProxyComponent_AlterCollection_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.AlterCollectionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_AlterCollection_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_AlterCollection_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// CalcDistance provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) CalcDistance(ctx context.Context, request *milvuspb.CalcDistanceRequest) (*milvuspb.CalcDistanceResults, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.CalcDistanceResults + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.CalcDistanceRequest) *milvuspb.CalcDistanceResults); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.CalcDistanceResults) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.CalcDistanceRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_CalcDistance_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CalcDistance' +type ProxyComponent_CalcDistance_Call struct { + *mock.Call +} + +// CalcDistance is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.CalcDistanceRequest +func (_e *ProxyComponent_Expecter) CalcDistance(ctx interface{}, request interface{}) *ProxyComponent_CalcDistance_Call { + return &ProxyComponent_CalcDistance_Call{Call: _e.mock.On("CalcDistance", ctx, request)} +} + +func (_c *ProxyComponent_CalcDistance_Call) Run(run func(ctx context.Context, request *milvuspb.CalcDistanceRequest)) *ProxyComponent_CalcDistance_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.CalcDistanceRequest)) + }) + return _c +} + +func (_c *ProxyComponent_CalcDistance_Call) Return(_a0 *milvuspb.CalcDistanceResults, _a1 error) *ProxyComponent_CalcDistance_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// CheckHealth provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) CheckHealth(ctx context.Context, req *milvuspb.CheckHealthRequest) (*milvuspb.CheckHealthResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.CheckHealthResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.CheckHealthRequest) *milvuspb.CheckHealthResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.CheckHealthResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.CheckHealthRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_CheckHealth_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CheckHealth' +type ProxyComponent_CheckHealth_Call struct { + *mock.Call +} + +// CheckHealth is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.CheckHealthRequest +func (_e *ProxyComponent_Expecter) CheckHealth(ctx interface{}, req interface{}) *ProxyComponent_CheckHealth_Call { + return &ProxyComponent_CheckHealth_Call{Call: _e.mock.On("CheckHealth", ctx, req)} +} + +func (_c *ProxyComponent_CheckHealth_Call) Run(run func(ctx context.Context, req *milvuspb.CheckHealthRequest)) *ProxyComponent_CheckHealth_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.CheckHealthRequest)) + }) + return _c +} + +func (_c *ProxyComponent_CheckHealth_Call) Return(_a0 *milvuspb.CheckHealthResponse, _a1 error) *ProxyComponent_CheckHealth_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// CreateAlias provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) CreateAlias(ctx context.Context, request *milvuspb.CreateAliasRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.CreateAliasRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.CreateAliasRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_CreateAlias_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateAlias' +type ProxyComponent_CreateAlias_Call struct { + *mock.Call +} + +// CreateAlias is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.CreateAliasRequest +func (_e *ProxyComponent_Expecter) CreateAlias(ctx interface{}, request interface{}) *ProxyComponent_CreateAlias_Call { + return &ProxyComponent_CreateAlias_Call{Call: _e.mock.On("CreateAlias", ctx, request)} +} + +func (_c *ProxyComponent_CreateAlias_Call) Run(run func(ctx context.Context, request *milvuspb.CreateAliasRequest)) *ProxyComponent_CreateAlias_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.CreateAliasRequest)) + }) + return _c +} + +func (_c *ProxyComponent_CreateAlias_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_CreateAlias_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// CreateCollection provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) CreateCollection(ctx context.Context, request *milvuspb.CreateCollectionRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.CreateCollectionRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.CreateCollectionRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_CreateCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateCollection' +type ProxyComponent_CreateCollection_Call struct { + *mock.Call +} + +// CreateCollection is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.CreateCollectionRequest +func (_e *ProxyComponent_Expecter) CreateCollection(ctx interface{}, request interface{}) *ProxyComponent_CreateCollection_Call { + return &ProxyComponent_CreateCollection_Call{Call: _e.mock.On("CreateCollection", ctx, request)} +} + +func (_c *ProxyComponent_CreateCollection_Call) Run(run func(ctx context.Context, request *milvuspb.CreateCollectionRequest)) *ProxyComponent_CreateCollection_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.CreateCollectionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_CreateCollection_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_CreateCollection_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// CreateCredential provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) CreateCredential(ctx context.Context, req *milvuspb.CreateCredentialRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.CreateCredentialRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.CreateCredentialRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_CreateCredential_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateCredential' +type ProxyComponent_CreateCredential_Call struct { + *mock.Call +} + +// CreateCredential is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.CreateCredentialRequest +func (_e *ProxyComponent_Expecter) CreateCredential(ctx interface{}, req interface{}) *ProxyComponent_CreateCredential_Call { + return &ProxyComponent_CreateCredential_Call{Call: _e.mock.On("CreateCredential", ctx, req)} +} + +func (_c *ProxyComponent_CreateCredential_Call) Run(run func(ctx context.Context, req *milvuspb.CreateCredentialRequest)) *ProxyComponent_CreateCredential_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.CreateCredentialRequest)) + }) + return _c +} + +func (_c *ProxyComponent_CreateCredential_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_CreateCredential_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// CreateIndex provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) CreateIndex(ctx context.Context, request *milvuspb.CreateIndexRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.CreateIndexRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.CreateIndexRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_CreateIndex_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateIndex' +type ProxyComponent_CreateIndex_Call struct { + *mock.Call +} + +// CreateIndex is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.CreateIndexRequest +func (_e *ProxyComponent_Expecter) CreateIndex(ctx interface{}, request interface{}) *ProxyComponent_CreateIndex_Call { + return &ProxyComponent_CreateIndex_Call{Call: _e.mock.On("CreateIndex", ctx, request)} +} + +func (_c *ProxyComponent_CreateIndex_Call) Run(run func(ctx context.Context, request *milvuspb.CreateIndexRequest)) *ProxyComponent_CreateIndex_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.CreateIndexRequest)) + }) + return _c +} + +func (_c *ProxyComponent_CreateIndex_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_CreateIndex_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// CreatePartition provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) CreatePartition(ctx context.Context, request *milvuspb.CreatePartitionRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.CreatePartitionRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.CreatePartitionRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_CreatePartition_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreatePartition' +type ProxyComponent_CreatePartition_Call struct { + *mock.Call +} + +// CreatePartition is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.CreatePartitionRequest +func (_e *ProxyComponent_Expecter) CreatePartition(ctx interface{}, request interface{}) *ProxyComponent_CreatePartition_Call { + return &ProxyComponent_CreatePartition_Call{Call: _e.mock.On("CreatePartition", ctx, request)} +} + +func (_c *ProxyComponent_CreatePartition_Call) Run(run func(ctx context.Context, request *milvuspb.CreatePartitionRequest)) *ProxyComponent_CreatePartition_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.CreatePartitionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_CreatePartition_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_CreatePartition_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// CreateResourceGroup provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) CreateResourceGroup(ctx context.Context, req *milvuspb.CreateResourceGroupRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.CreateResourceGroupRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.CreateResourceGroupRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_CreateResourceGroup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateResourceGroup' +type ProxyComponent_CreateResourceGroup_Call struct { + *mock.Call +} + +// CreateResourceGroup is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.CreateResourceGroupRequest +func (_e *ProxyComponent_Expecter) CreateResourceGroup(ctx interface{}, req interface{}) *ProxyComponent_CreateResourceGroup_Call { + return &ProxyComponent_CreateResourceGroup_Call{Call: _e.mock.On("CreateResourceGroup", ctx, req)} +} + +func (_c *ProxyComponent_CreateResourceGroup_Call) Run(run func(ctx context.Context, req *milvuspb.CreateResourceGroupRequest)) *ProxyComponent_CreateResourceGroup_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.CreateResourceGroupRequest)) + }) + return _c +} + +func (_c *ProxyComponent_CreateResourceGroup_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_CreateResourceGroup_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// CreateRole provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) CreateRole(ctx context.Context, req *milvuspb.CreateRoleRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.CreateRoleRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.CreateRoleRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_CreateRole_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateRole' +type ProxyComponent_CreateRole_Call struct { + *mock.Call +} + +// CreateRole is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.CreateRoleRequest +func (_e *ProxyComponent_Expecter) CreateRole(ctx interface{}, req interface{}) *ProxyComponent_CreateRole_Call { + return &ProxyComponent_CreateRole_Call{Call: _e.mock.On("CreateRole", ctx, req)} +} + +func (_c *ProxyComponent_CreateRole_Call) Run(run func(ctx context.Context, req *milvuspb.CreateRoleRequest)) *ProxyComponent_CreateRole_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.CreateRoleRequest)) + }) + return _c +} + +func (_c *ProxyComponent_CreateRole_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_CreateRole_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// Delete provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) Delete(ctx context.Context, request *milvuspb.DeleteRequest) (*milvuspb.MutationResult, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.MutationResult + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DeleteRequest) *milvuspb.MutationResult); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.MutationResult) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DeleteRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_Delete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Delete' +type ProxyComponent_Delete_Call struct { + *mock.Call +} + +// Delete is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.DeleteRequest +func (_e *ProxyComponent_Expecter) Delete(ctx interface{}, request interface{}) *ProxyComponent_Delete_Call { + return &ProxyComponent_Delete_Call{Call: _e.mock.On("Delete", ctx, request)} +} + +func (_c *ProxyComponent_Delete_Call) Run(run func(ctx context.Context, request *milvuspb.DeleteRequest)) *ProxyComponent_Delete_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DeleteRequest)) + }) + return _c +} + +func (_c *ProxyComponent_Delete_Call) Return(_a0 *milvuspb.MutationResult, _a1 error) *ProxyComponent_Delete_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DeleteCredential provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) DeleteCredential(ctx context.Context, req *milvuspb.DeleteCredentialRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DeleteCredentialRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DeleteCredentialRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_DeleteCredential_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeleteCredential' +type ProxyComponent_DeleteCredential_Call struct { + *mock.Call +} + +// DeleteCredential is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.DeleteCredentialRequest +func (_e *ProxyComponent_Expecter) DeleteCredential(ctx interface{}, req interface{}) *ProxyComponent_DeleteCredential_Call { + return &ProxyComponent_DeleteCredential_Call{Call: _e.mock.On("DeleteCredential", ctx, req)} +} + +func (_c *ProxyComponent_DeleteCredential_Call) Run(run func(ctx context.Context, req *milvuspb.DeleteCredentialRequest)) *ProxyComponent_DeleteCredential_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DeleteCredentialRequest)) + }) + return _c +} + +func (_c *ProxyComponent_DeleteCredential_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_DeleteCredential_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DescribeCollection provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) DescribeCollection(ctx context.Context, request *milvuspb.DescribeCollectionRequest) (*milvuspb.DescribeCollectionResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.DescribeCollectionResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DescribeCollectionRequest) *milvuspb.DescribeCollectionResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.DescribeCollectionResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DescribeCollectionRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_DescribeCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DescribeCollection' +type ProxyComponent_DescribeCollection_Call struct { + *mock.Call +} + +// DescribeCollection is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.DescribeCollectionRequest +func (_e *ProxyComponent_Expecter) DescribeCollection(ctx interface{}, request interface{}) *ProxyComponent_DescribeCollection_Call { + return &ProxyComponent_DescribeCollection_Call{Call: _e.mock.On("DescribeCollection", ctx, request)} +} + +func (_c *ProxyComponent_DescribeCollection_Call) Run(run func(ctx context.Context, request *milvuspb.DescribeCollectionRequest)) *ProxyComponent_DescribeCollection_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DescribeCollectionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_DescribeCollection_Call) Return(_a0 *milvuspb.DescribeCollectionResponse, _a1 error) *ProxyComponent_DescribeCollection_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DescribeIndex provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) DescribeIndex(ctx context.Context, request *milvuspb.DescribeIndexRequest) (*milvuspb.DescribeIndexResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.DescribeIndexResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DescribeIndexRequest) *milvuspb.DescribeIndexResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.DescribeIndexResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DescribeIndexRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_DescribeIndex_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DescribeIndex' +type ProxyComponent_DescribeIndex_Call struct { + *mock.Call +} + +// DescribeIndex is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.DescribeIndexRequest +func (_e *ProxyComponent_Expecter) DescribeIndex(ctx interface{}, request interface{}) *ProxyComponent_DescribeIndex_Call { + return &ProxyComponent_DescribeIndex_Call{Call: _e.mock.On("DescribeIndex", ctx, request)} +} + +func (_c *ProxyComponent_DescribeIndex_Call) Run(run func(ctx context.Context, request *milvuspb.DescribeIndexRequest)) *ProxyComponent_DescribeIndex_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DescribeIndexRequest)) + }) + return _c +} + +func (_c *ProxyComponent_DescribeIndex_Call) Return(_a0 *milvuspb.DescribeIndexResponse, _a1 error) *ProxyComponent_DescribeIndex_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DescribeResourceGroup provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) DescribeResourceGroup(ctx context.Context, req *milvuspb.DescribeResourceGroupRequest) (*milvuspb.DescribeResourceGroupResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.DescribeResourceGroupResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DescribeResourceGroupRequest) *milvuspb.DescribeResourceGroupResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.DescribeResourceGroupResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DescribeResourceGroupRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_DescribeResourceGroup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DescribeResourceGroup' +type ProxyComponent_DescribeResourceGroup_Call struct { + *mock.Call +} + +// DescribeResourceGroup is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.DescribeResourceGroupRequest +func (_e *ProxyComponent_Expecter) DescribeResourceGroup(ctx interface{}, req interface{}) *ProxyComponent_DescribeResourceGroup_Call { + return &ProxyComponent_DescribeResourceGroup_Call{Call: _e.mock.On("DescribeResourceGroup", ctx, req)} +} + +func (_c *ProxyComponent_DescribeResourceGroup_Call) Run(run func(ctx context.Context, req *milvuspb.DescribeResourceGroupRequest)) *ProxyComponent_DescribeResourceGroup_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DescribeResourceGroupRequest)) + }) + return _c +} + +func (_c *ProxyComponent_DescribeResourceGroup_Call) Return(_a0 *milvuspb.DescribeResourceGroupResponse, _a1 error) *ProxyComponent_DescribeResourceGroup_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DropAlias provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) DropAlias(ctx context.Context, request *milvuspb.DropAliasRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DropAliasRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DropAliasRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_DropAlias_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DropAlias' +type ProxyComponent_DropAlias_Call struct { + *mock.Call +} + +// DropAlias is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.DropAliasRequest +func (_e *ProxyComponent_Expecter) DropAlias(ctx interface{}, request interface{}) *ProxyComponent_DropAlias_Call { + return &ProxyComponent_DropAlias_Call{Call: _e.mock.On("DropAlias", ctx, request)} +} + +func (_c *ProxyComponent_DropAlias_Call) Run(run func(ctx context.Context, request *milvuspb.DropAliasRequest)) *ProxyComponent_DropAlias_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DropAliasRequest)) + }) + return _c +} + +func (_c *ProxyComponent_DropAlias_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_DropAlias_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DropCollection provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) DropCollection(ctx context.Context, request *milvuspb.DropCollectionRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DropCollectionRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DropCollectionRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_DropCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DropCollection' +type ProxyComponent_DropCollection_Call struct { + *mock.Call +} + +// DropCollection is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.DropCollectionRequest +func (_e *ProxyComponent_Expecter) DropCollection(ctx interface{}, request interface{}) *ProxyComponent_DropCollection_Call { + return &ProxyComponent_DropCollection_Call{Call: _e.mock.On("DropCollection", ctx, request)} +} + +func (_c *ProxyComponent_DropCollection_Call) Run(run func(ctx context.Context, request *milvuspb.DropCollectionRequest)) *ProxyComponent_DropCollection_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DropCollectionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_DropCollection_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_DropCollection_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DropIndex provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) DropIndex(ctx context.Context, request *milvuspb.DropIndexRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DropIndexRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DropIndexRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_DropIndex_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DropIndex' +type ProxyComponent_DropIndex_Call struct { + *mock.Call +} + +// DropIndex is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.DropIndexRequest +func (_e *ProxyComponent_Expecter) DropIndex(ctx interface{}, request interface{}) *ProxyComponent_DropIndex_Call { + return &ProxyComponent_DropIndex_Call{Call: _e.mock.On("DropIndex", ctx, request)} +} + +func (_c *ProxyComponent_DropIndex_Call) Run(run func(ctx context.Context, request *milvuspb.DropIndexRequest)) *ProxyComponent_DropIndex_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DropIndexRequest)) + }) + return _c +} + +func (_c *ProxyComponent_DropIndex_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_DropIndex_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DropPartition provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) DropPartition(ctx context.Context, request *milvuspb.DropPartitionRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DropPartitionRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DropPartitionRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_DropPartition_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DropPartition' +type ProxyComponent_DropPartition_Call struct { + *mock.Call +} + +// DropPartition is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.DropPartitionRequest +func (_e *ProxyComponent_Expecter) DropPartition(ctx interface{}, request interface{}) *ProxyComponent_DropPartition_Call { + return &ProxyComponent_DropPartition_Call{Call: _e.mock.On("DropPartition", ctx, request)} +} + +func (_c *ProxyComponent_DropPartition_Call) Run(run func(ctx context.Context, request *milvuspb.DropPartitionRequest)) *ProxyComponent_DropPartition_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DropPartitionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_DropPartition_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_DropPartition_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DropResourceGroup provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) DropResourceGroup(ctx context.Context, req *milvuspb.DropResourceGroupRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DropResourceGroupRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DropResourceGroupRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_DropResourceGroup_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DropResourceGroup' +type ProxyComponent_DropResourceGroup_Call struct { + *mock.Call +} + +// DropResourceGroup is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.DropResourceGroupRequest +func (_e *ProxyComponent_Expecter) DropResourceGroup(ctx interface{}, req interface{}) *ProxyComponent_DropResourceGroup_Call { + return &ProxyComponent_DropResourceGroup_Call{Call: _e.mock.On("DropResourceGroup", ctx, req)} +} + +func (_c *ProxyComponent_DropResourceGroup_Call) Run(run func(ctx context.Context, req *milvuspb.DropResourceGroupRequest)) *ProxyComponent_DropResourceGroup_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DropResourceGroupRequest)) + }) + return _c +} + +func (_c *ProxyComponent_DropResourceGroup_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_DropResourceGroup_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DropRole provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) DropRole(ctx context.Context, req *milvuspb.DropRoleRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DropRoleRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DropRoleRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_DropRole_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DropRole' +type ProxyComponent_DropRole_Call struct { + *mock.Call +} + +// DropRole is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.DropRoleRequest +func (_e *ProxyComponent_Expecter) DropRole(ctx interface{}, req interface{}) *ProxyComponent_DropRole_Call { + return &ProxyComponent_DropRole_Call{Call: _e.mock.On("DropRole", ctx, req)} +} + +func (_c *ProxyComponent_DropRole_Call) Run(run func(ctx context.Context, req *milvuspb.DropRoleRequest)) *ProxyComponent_DropRole_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DropRoleRequest)) + }) + return _c +} + +func (_c *ProxyComponent_DropRole_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_DropRole_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// Dummy provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) Dummy(ctx context.Context, request *milvuspb.DummyRequest) (*milvuspb.DummyResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.DummyResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DummyRequest) *milvuspb.DummyResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.DummyResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DummyRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_Dummy_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Dummy' +type ProxyComponent_Dummy_Call struct { + *mock.Call +} + +// Dummy is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.DummyRequest +func (_e *ProxyComponent_Expecter) Dummy(ctx interface{}, request interface{}) *ProxyComponent_Dummy_Call { + return &ProxyComponent_Dummy_Call{Call: _e.mock.On("Dummy", ctx, request)} +} + +func (_c *ProxyComponent_Dummy_Call) Run(run func(ctx context.Context, request *milvuspb.DummyRequest)) *ProxyComponent_Dummy_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.DummyRequest)) + }) + return _c +} + +func (_c *ProxyComponent_Dummy_Call) Return(_a0 *milvuspb.DummyResponse, _a1 error) *ProxyComponent_Dummy_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// Flush provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) Flush(ctx context.Context, request *milvuspb.FlushRequest) (*milvuspb.FlushResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.FlushResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.FlushRequest) *milvuspb.FlushResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.FlushResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.FlushRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_Flush_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Flush' +type ProxyComponent_Flush_Call struct { + *mock.Call +} + +// Flush is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.FlushRequest +func (_e *ProxyComponent_Expecter) Flush(ctx interface{}, request interface{}) *ProxyComponent_Flush_Call { + return &ProxyComponent_Flush_Call{Call: _e.mock.On("Flush", ctx, request)} +} + +func (_c *ProxyComponent_Flush_Call) Run(run func(ctx context.Context, request *milvuspb.FlushRequest)) *ProxyComponent_Flush_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.FlushRequest)) + }) + return _c +} + +func (_c *ProxyComponent_Flush_Call) Return(_a0 *milvuspb.FlushResponse, _a1 error) *ProxyComponent_Flush_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetAddress provides a mock function with given fields: +func (_m *ProxyComponent) GetAddress() string { + ret := _m.Called() + + var r0 string + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + return r0 +} + +// ProxyComponent_GetAddress_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetAddress' +type ProxyComponent_GetAddress_Call struct { + *mock.Call +} + +// GetAddress is a helper method to define mock.On call +func (_e *ProxyComponent_Expecter) GetAddress() *ProxyComponent_GetAddress_Call { + return &ProxyComponent_GetAddress_Call{Call: _e.mock.On("GetAddress")} +} + +func (_c *ProxyComponent_GetAddress_Call) Run(run func()) *ProxyComponent_GetAddress_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ProxyComponent_GetAddress_Call) Return(_a0 string) *ProxyComponent_GetAddress_Call { + _c.Call.Return(_a0) + return _c +} + +// GetCollectionStatistics provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetCollectionStatistics(ctx context.Context, request *milvuspb.GetCollectionStatisticsRequest) (*milvuspb.GetCollectionStatisticsResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.GetCollectionStatisticsResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetCollectionStatisticsRequest) *milvuspb.GetCollectionStatisticsResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetCollectionStatisticsResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetCollectionStatisticsRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetCollectionStatistics_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetCollectionStatistics' +type ProxyComponent_GetCollectionStatistics_Call struct { + *mock.Call +} + +// GetCollectionStatistics is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.GetCollectionStatisticsRequest +func (_e *ProxyComponent_Expecter) GetCollectionStatistics(ctx interface{}, request interface{}) *ProxyComponent_GetCollectionStatistics_Call { + return &ProxyComponent_GetCollectionStatistics_Call{Call: _e.mock.On("GetCollectionStatistics", ctx, request)} +} + +func (_c *ProxyComponent_GetCollectionStatistics_Call) Run(run func(ctx context.Context, request *milvuspb.GetCollectionStatisticsRequest)) *ProxyComponent_GetCollectionStatistics_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetCollectionStatisticsRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetCollectionStatistics_Call) Return(_a0 *milvuspb.GetCollectionStatisticsResponse, _a1 error) *ProxyComponent_GetCollectionStatistics_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetCompactionState provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) GetCompactionState(ctx context.Context, req *milvuspb.GetCompactionStateRequest) (*milvuspb.GetCompactionStateResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.GetCompactionStateResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetCompactionStateRequest) *milvuspb.GetCompactionStateResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetCompactionStateResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetCompactionStateRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetCompactionState_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetCompactionState' +type ProxyComponent_GetCompactionState_Call struct { + *mock.Call +} + +// GetCompactionState is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.GetCompactionStateRequest +func (_e *ProxyComponent_Expecter) GetCompactionState(ctx interface{}, req interface{}) *ProxyComponent_GetCompactionState_Call { + return &ProxyComponent_GetCompactionState_Call{Call: _e.mock.On("GetCompactionState", ctx, req)} +} + +func (_c *ProxyComponent_GetCompactionState_Call) Run(run func(ctx context.Context, req *milvuspb.GetCompactionStateRequest)) *ProxyComponent_GetCompactionState_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetCompactionStateRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetCompactionState_Call) Return(_a0 *milvuspb.GetCompactionStateResponse, _a1 error) *ProxyComponent_GetCompactionState_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetCompactionStateWithPlans provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) GetCompactionStateWithPlans(ctx context.Context, req *milvuspb.GetCompactionPlansRequest) (*milvuspb.GetCompactionPlansResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.GetCompactionPlansResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetCompactionPlansRequest) *milvuspb.GetCompactionPlansResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetCompactionPlansResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetCompactionPlansRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetCompactionStateWithPlans_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetCompactionStateWithPlans' +type ProxyComponent_GetCompactionStateWithPlans_Call struct { + *mock.Call +} + +// GetCompactionStateWithPlans is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.GetCompactionPlansRequest +func (_e *ProxyComponent_Expecter) GetCompactionStateWithPlans(ctx interface{}, req interface{}) *ProxyComponent_GetCompactionStateWithPlans_Call { + return &ProxyComponent_GetCompactionStateWithPlans_Call{Call: _e.mock.On("GetCompactionStateWithPlans", ctx, req)} +} + +func (_c *ProxyComponent_GetCompactionStateWithPlans_Call) Run(run func(ctx context.Context, req *milvuspb.GetCompactionPlansRequest)) *ProxyComponent_GetCompactionStateWithPlans_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetCompactionPlansRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetCompactionStateWithPlans_Call) Return(_a0 *milvuspb.GetCompactionPlansResponse, _a1 error) *ProxyComponent_GetCompactionStateWithPlans_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetComponentStates provides a mock function with given fields: ctx +func (_m *ProxyComponent) GetComponentStates(ctx context.Context) (*milvuspb.ComponentStates, error) { + ret := _m.Called(ctx) + + var r0 *milvuspb.ComponentStates + if rf, ok := ret.Get(0).(func(context.Context) *milvuspb.ComponentStates); ok { + r0 = rf(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.ComponentStates) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(ctx) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetComponentStates_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetComponentStates' +type ProxyComponent_GetComponentStates_Call struct { + *mock.Call +} + +// GetComponentStates is a helper method to define mock.On call +// - ctx context.Context +func (_e *ProxyComponent_Expecter) GetComponentStates(ctx interface{}) *ProxyComponent_GetComponentStates_Call { + return &ProxyComponent_GetComponentStates_Call{Call: _e.mock.On("GetComponentStates", ctx)} +} + +func (_c *ProxyComponent_GetComponentStates_Call) Run(run func(ctx context.Context)) *ProxyComponent_GetComponentStates_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context)) + }) + return _c +} + +func (_c *ProxyComponent_GetComponentStates_Call) Return(_a0 *milvuspb.ComponentStates, _a1 error) *ProxyComponent_GetComponentStates_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetDdChannel provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetDdChannel(ctx context.Context, request *internalpb.GetDdChannelRequest) (*milvuspb.StringResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.StringResponse + if rf, ok := ret.Get(0).(func(context.Context, *internalpb.GetDdChannelRequest) *milvuspb.StringResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.StringResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *internalpb.GetDdChannelRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetDdChannel_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetDdChannel' +type ProxyComponent_GetDdChannel_Call struct { + *mock.Call +} + +// GetDdChannel is a helper method to define mock.On call +// - ctx context.Context +// - request *internalpb.GetDdChannelRequest +func (_e *ProxyComponent_Expecter) GetDdChannel(ctx interface{}, request interface{}) *ProxyComponent_GetDdChannel_Call { + return &ProxyComponent_GetDdChannel_Call{Call: _e.mock.On("GetDdChannel", ctx, request)} +} + +func (_c *ProxyComponent_GetDdChannel_Call) Run(run func(ctx context.Context, request *internalpb.GetDdChannelRequest)) *ProxyComponent_GetDdChannel_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*internalpb.GetDdChannelRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetDdChannel_Call) Return(_a0 *milvuspb.StringResponse, _a1 error) *ProxyComponent_GetDdChannel_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetFlushState provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) GetFlushState(ctx context.Context, req *milvuspb.GetFlushStateRequest) (*milvuspb.GetFlushStateResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.GetFlushStateResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetFlushStateRequest) *milvuspb.GetFlushStateResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetFlushStateResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetFlushStateRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetFlushState_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetFlushState' +type ProxyComponent_GetFlushState_Call struct { + *mock.Call +} + +// GetFlushState is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.GetFlushStateRequest +func (_e *ProxyComponent_Expecter) GetFlushState(ctx interface{}, req interface{}) *ProxyComponent_GetFlushState_Call { + return &ProxyComponent_GetFlushState_Call{Call: _e.mock.On("GetFlushState", ctx, req)} +} + +func (_c *ProxyComponent_GetFlushState_Call) Run(run func(ctx context.Context, req *milvuspb.GetFlushStateRequest)) *ProxyComponent_GetFlushState_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetFlushStateRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetFlushState_Call) Return(_a0 *milvuspb.GetFlushStateResponse, _a1 error) *ProxyComponent_GetFlushState_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetImportState provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.GetImportStateResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetImportStateRequest) *milvuspb.GetImportStateResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetImportStateResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetImportStateRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetImportState_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetImportState' +type ProxyComponent_GetImportState_Call struct { + *mock.Call +} + +// GetImportState is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.GetImportStateRequest +func (_e *ProxyComponent_Expecter) GetImportState(ctx interface{}, req interface{}) *ProxyComponent_GetImportState_Call { + return &ProxyComponent_GetImportState_Call{Call: _e.mock.On("GetImportState", ctx, req)} +} + +func (_c *ProxyComponent_GetImportState_Call) Run(run func(ctx context.Context, req *milvuspb.GetImportStateRequest)) *ProxyComponent_GetImportState_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetImportStateRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetImportState_Call) Return(_a0 *milvuspb.GetImportStateResponse, _a1 error) *ProxyComponent_GetImportState_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetIndexBuildProgress provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetIndexBuildProgress(ctx context.Context, request *milvuspb.GetIndexBuildProgressRequest) (*milvuspb.GetIndexBuildProgressResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.GetIndexBuildProgressResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetIndexBuildProgressRequest) *milvuspb.GetIndexBuildProgressResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetIndexBuildProgressResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetIndexBuildProgressRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetIndexBuildProgress_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetIndexBuildProgress' +type ProxyComponent_GetIndexBuildProgress_Call struct { + *mock.Call +} + +// GetIndexBuildProgress is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.GetIndexBuildProgressRequest +func (_e *ProxyComponent_Expecter) GetIndexBuildProgress(ctx interface{}, request interface{}) *ProxyComponent_GetIndexBuildProgress_Call { + return &ProxyComponent_GetIndexBuildProgress_Call{Call: _e.mock.On("GetIndexBuildProgress", ctx, request)} +} + +func (_c *ProxyComponent_GetIndexBuildProgress_Call) Run(run func(ctx context.Context, request *milvuspb.GetIndexBuildProgressRequest)) *ProxyComponent_GetIndexBuildProgress_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetIndexBuildProgressRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetIndexBuildProgress_Call) Return(_a0 *milvuspb.GetIndexBuildProgressResponse, _a1 error) *ProxyComponent_GetIndexBuildProgress_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetIndexState provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetIndexState(ctx context.Context, request *milvuspb.GetIndexStateRequest) (*milvuspb.GetIndexStateResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.GetIndexStateResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetIndexStateRequest) *milvuspb.GetIndexStateResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetIndexStateResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetIndexStateRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetIndexState_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetIndexState' +type ProxyComponent_GetIndexState_Call struct { + *mock.Call +} + +// GetIndexState is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.GetIndexStateRequest +func (_e *ProxyComponent_Expecter) GetIndexState(ctx interface{}, request interface{}) *ProxyComponent_GetIndexState_Call { + return &ProxyComponent_GetIndexState_Call{Call: _e.mock.On("GetIndexState", ctx, request)} +} + +func (_c *ProxyComponent_GetIndexState_Call) Run(run func(ctx context.Context, request *milvuspb.GetIndexStateRequest)) *ProxyComponent_GetIndexState_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetIndexStateRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetIndexState_Call) Return(_a0 *milvuspb.GetIndexStateResponse, _a1 error) *ProxyComponent_GetIndexState_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetLoadState provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetLoadState(ctx context.Context, request *milvuspb.GetLoadStateRequest) (*milvuspb.GetLoadStateResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.GetLoadStateResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetLoadStateRequest) *milvuspb.GetLoadStateResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetLoadStateResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetLoadStateRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetLoadState_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetLoadState' +type ProxyComponent_GetLoadState_Call struct { + *mock.Call +} + +// GetLoadState is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.GetLoadStateRequest +func (_e *ProxyComponent_Expecter) GetLoadState(ctx interface{}, request interface{}) *ProxyComponent_GetLoadState_Call { + return &ProxyComponent_GetLoadState_Call{Call: _e.mock.On("GetLoadState", ctx, request)} +} + +func (_c *ProxyComponent_GetLoadState_Call) Run(run func(ctx context.Context, request *milvuspb.GetLoadStateRequest)) *ProxyComponent_GetLoadState_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetLoadStateRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetLoadState_Call) Return(_a0 *milvuspb.GetLoadStateResponse, _a1 error) *ProxyComponent_GetLoadState_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetLoadingProgress provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetLoadingProgress(ctx context.Context, request *milvuspb.GetLoadingProgressRequest) (*milvuspb.GetLoadingProgressResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.GetLoadingProgressResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetLoadingProgressRequest) *milvuspb.GetLoadingProgressResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetLoadingProgressResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetLoadingProgressRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetLoadingProgress_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetLoadingProgress' +type ProxyComponent_GetLoadingProgress_Call struct { + *mock.Call +} + +// GetLoadingProgress is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.GetLoadingProgressRequest +func (_e *ProxyComponent_Expecter) GetLoadingProgress(ctx interface{}, request interface{}) *ProxyComponent_GetLoadingProgress_Call { + return &ProxyComponent_GetLoadingProgress_Call{Call: _e.mock.On("GetLoadingProgress", ctx, request)} +} + +func (_c *ProxyComponent_GetLoadingProgress_Call) Run(run func(ctx context.Context, request *milvuspb.GetLoadingProgressRequest)) *ProxyComponent_GetLoadingProgress_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetLoadingProgressRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetLoadingProgress_Call) Return(_a0 *milvuspb.GetLoadingProgressResponse, _a1 error) *ProxyComponent_GetLoadingProgress_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetMetrics provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetMetrics(ctx context.Context, request *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.GetMetricsResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetMetricsRequest) *milvuspb.GetMetricsResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetMetricsResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetMetricsRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetMetrics_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetMetrics' +type ProxyComponent_GetMetrics_Call struct { + *mock.Call +} + +// GetMetrics is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.GetMetricsRequest +func (_e *ProxyComponent_Expecter) GetMetrics(ctx interface{}, request interface{}) *ProxyComponent_GetMetrics_Call { + return &ProxyComponent_GetMetrics_Call{Call: _e.mock.On("GetMetrics", ctx, request)} +} + +func (_c *ProxyComponent_GetMetrics_Call) Run(run func(ctx context.Context, request *milvuspb.GetMetricsRequest)) *ProxyComponent_GetMetrics_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetMetricsRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetMetrics_Call) Return(_a0 *milvuspb.GetMetricsResponse, _a1 error) *ProxyComponent_GetMetrics_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetPartitionStatistics provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetPartitionStatistics(ctx context.Context, request *milvuspb.GetPartitionStatisticsRequest) (*milvuspb.GetPartitionStatisticsResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.GetPartitionStatisticsResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetPartitionStatisticsRequest) *milvuspb.GetPartitionStatisticsResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetPartitionStatisticsResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetPartitionStatisticsRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetPartitionStatistics_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetPartitionStatistics' +type ProxyComponent_GetPartitionStatistics_Call struct { + *mock.Call +} + +// GetPartitionStatistics is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.GetPartitionStatisticsRequest +func (_e *ProxyComponent_Expecter) GetPartitionStatistics(ctx interface{}, request interface{}) *ProxyComponent_GetPartitionStatistics_Call { + return &ProxyComponent_GetPartitionStatistics_Call{Call: _e.mock.On("GetPartitionStatistics", ctx, request)} +} + +func (_c *ProxyComponent_GetPartitionStatistics_Call) Run(run func(ctx context.Context, request *milvuspb.GetPartitionStatisticsRequest)) *ProxyComponent_GetPartitionStatistics_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetPartitionStatisticsRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetPartitionStatistics_Call) Return(_a0 *milvuspb.GetPartitionStatisticsResponse, _a1 error) *ProxyComponent_GetPartitionStatistics_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetPersistentSegmentInfo provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetPersistentSegmentInfo(ctx context.Context, request *milvuspb.GetPersistentSegmentInfoRequest) (*milvuspb.GetPersistentSegmentInfoResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.GetPersistentSegmentInfoResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetPersistentSegmentInfoRequest) *milvuspb.GetPersistentSegmentInfoResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetPersistentSegmentInfoResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetPersistentSegmentInfoRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetPersistentSegmentInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetPersistentSegmentInfo' +type ProxyComponent_GetPersistentSegmentInfo_Call struct { + *mock.Call +} + +// GetPersistentSegmentInfo is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.GetPersistentSegmentInfoRequest +func (_e *ProxyComponent_Expecter) GetPersistentSegmentInfo(ctx interface{}, request interface{}) *ProxyComponent_GetPersistentSegmentInfo_Call { + return &ProxyComponent_GetPersistentSegmentInfo_Call{Call: _e.mock.On("GetPersistentSegmentInfo", ctx, request)} +} + +func (_c *ProxyComponent_GetPersistentSegmentInfo_Call) Run(run func(ctx context.Context, request *milvuspb.GetPersistentSegmentInfoRequest)) *ProxyComponent_GetPersistentSegmentInfo_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetPersistentSegmentInfoRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetPersistentSegmentInfo_Call) Return(_a0 *milvuspb.GetPersistentSegmentInfoResponse, _a1 error) *ProxyComponent_GetPersistentSegmentInfo_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetProxyMetrics provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetProxyMetrics(ctx context.Context, request *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.GetMetricsResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetMetricsRequest) *milvuspb.GetMetricsResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetMetricsResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetMetricsRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetProxyMetrics_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetProxyMetrics' +type ProxyComponent_GetProxyMetrics_Call struct { + *mock.Call +} + +// GetProxyMetrics is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.GetMetricsRequest +func (_e *ProxyComponent_Expecter) GetProxyMetrics(ctx interface{}, request interface{}) *ProxyComponent_GetProxyMetrics_Call { + return &ProxyComponent_GetProxyMetrics_Call{Call: _e.mock.On("GetProxyMetrics", ctx, request)} +} + +func (_c *ProxyComponent_GetProxyMetrics_Call) Run(run func(ctx context.Context, request *milvuspb.GetMetricsRequest)) *ProxyComponent_GetProxyMetrics_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetMetricsRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetProxyMetrics_Call) Return(_a0 *milvuspb.GetMetricsResponse, _a1 error) *ProxyComponent_GetProxyMetrics_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetQuerySegmentInfo provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) GetQuerySegmentInfo(ctx context.Context, request *milvuspb.GetQuerySegmentInfoRequest) (*milvuspb.GetQuerySegmentInfoResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.GetQuerySegmentInfoResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetQuerySegmentInfoRequest) *milvuspb.GetQuerySegmentInfoResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetQuerySegmentInfoResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetQuerySegmentInfoRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetQuerySegmentInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetQuerySegmentInfo' +type ProxyComponent_GetQuerySegmentInfo_Call struct { + *mock.Call +} + +// GetQuerySegmentInfo is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.GetQuerySegmentInfoRequest +func (_e *ProxyComponent_Expecter) GetQuerySegmentInfo(ctx interface{}, request interface{}) *ProxyComponent_GetQuerySegmentInfo_Call { + return &ProxyComponent_GetQuerySegmentInfo_Call{Call: _e.mock.On("GetQuerySegmentInfo", ctx, request)} +} + +func (_c *ProxyComponent_GetQuerySegmentInfo_Call) Run(run func(ctx context.Context, request *milvuspb.GetQuerySegmentInfoRequest)) *ProxyComponent_GetQuerySegmentInfo_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetQuerySegmentInfoRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetQuerySegmentInfo_Call) Return(_a0 *milvuspb.GetQuerySegmentInfoResponse, _a1 error) *ProxyComponent_GetQuerySegmentInfo_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetRateLimiter provides a mock function with given fields: +func (_m *ProxyComponent) GetRateLimiter() (types.Limiter, error) { + ret := _m.Called() + + var r0 types.Limiter + if rf, ok := ret.Get(0).(func() types.Limiter); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(types.Limiter) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetRateLimiter_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetRateLimiter' +type ProxyComponent_GetRateLimiter_Call struct { + *mock.Call +} + +// GetRateLimiter is a helper method to define mock.On call +func (_e *ProxyComponent_Expecter) GetRateLimiter() *ProxyComponent_GetRateLimiter_Call { + return &ProxyComponent_GetRateLimiter_Call{Call: _e.mock.On("GetRateLimiter")} +} + +func (_c *ProxyComponent_GetRateLimiter_Call) Run(run func()) *ProxyComponent_GetRateLimiter_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ProxyComponent_GetRateLimiter_Call) Return(_a0 types.Limiter, _a1 error) *ProxyComponent_GetRateLimiter_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetReplicas provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.GetReplicasResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.GetReplicasRequest) *milvuspb.GetReplicasResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.GetReplicasResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.GetReplicasRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetReplicas_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetReplicas' +type ProxyComponent_GetReplicas_Call struct { + *mock.Call +} + +// GetReplicas is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.GetReplicasRequest +func (_e *ProxyComponent_Expecter) GetReplicas(ctx interface{}, req interface{}) *ProxyComponent_GetReplicas_Call { + return &ProxyComponent_GetReplicas_Call{Call: _e.mock.On("GetReplicas", ctx, req)} +} + +func (_c *ProxyComponent_GetReplicas_Call) Run(run func(ctx context.Context, req *milvuspb.GetReplicasRequest)) *ProxyComponent_GetReplicas_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.GetReplicasRequest)) + }) + return _c +} + +func (_c *ProxyComponent_GetReplicas_Call) Return(_a0 *milvuspb.GetReplicasResponse, _a1 error) *ProxyComponent_GetReplicas_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetStatisticsChannel provides a mock function with given fields: ctx +func (_m *ProxyComponent) GetStatisticsChannel(ctx context.Context) (*milvuspb.StringResponse, error) { + ret := _m.Called(ctx) + + var r0 *milvuspb.StringResponse + if rf, ok := ret.Get(0).(func(context.Context) *milvuspb.StringResponse); ok { + r0 = rf(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.StringResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(ctx) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_GetStatisticsChannel_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetStatisticsChannel' +type ProxyComponent_GetStatisticsChannel_Call struct { + *mock.Call +} + +// GetStatisticsChannel is a helper method to define mock.On call +// - ctx context.Context +func (_e *ProxyComponent_Expecter) GetStatisticsChannel(ctx interface{}) *ProxyComponent_GetStatisticsChannel_Call { + return &ProxyComponent_GetStatisticsChannel_Call{Call: _e.mock.On("GetStatisticsChannel", ctx)} +} + +func (_c *ProxyComponent_GetStatisticsChannel_Call) Run(run func(ctx context.Context)) *ProxyComponent_GetStatisticsChannel_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context)) + }) + return _c +} + +func (_c *ProxyComponent_GetStatisticsChannel_Call) Return(_a0 *milvuspb.StringResponse, _a1 error) *ProxyComponent_GetStatisticsChannel_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// HasCollection provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) HasCollection(ctx context.Context, request *milvuspb.HasCollectionRequest) (*milvuspb.BoolResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.BoolResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.HasCollectionRequest) *milvuspb.BoolResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.BoolResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.HasCollectionRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_HasCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'HasCollection' +type ProxyComponent_HasCollection_Call struct { + *mock.Call +} + +// HasCollection is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.HasCollectionRequest +func (_e *ProxyComponent_Expecter) HasCollection(ctx interface{}, request interface{}) *ProxyComponent_HasCollection_Call { + return &ProxyComponent_HasCollection_Call{Call: _e.mock.On("HasCollection", ctx, request)} +} + +func (_c *ProxyComponent_HasCollection_Call) Run(run func(ctx context.Context, request *milvuspb.HasCollectionRequest)) *ProxyComponent_HasCollection_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.HasCollectionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_HasCollection_Call) Return(_a0 *milvuspb.BoolResponse, _a1 error) *ProxyComponent_HasCollection_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// HasPartition provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) HasPartition(ctx context.Context, request *milvuspb.HasPartitionRequest) (*milvuspb.BoolResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.BoolResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.HasPartitionRequest) *milvuspb.BoolResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.BoolResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.HasPartitionRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_HasPartition_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'HasPartition' +type ProxyComponent_HasPartition_Call struct { + *mock.Call +} + +// HasPartition is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.HasPartitionRequest +func (_e *ProxyComponent_Expecter) HasPartition(ctx interface{}, request interface{}) *ProxyComponent_HasPartition_Call { + return &ProxyComponent_HasPartition_Call{Call: _e.mock.On("HasPartition", ctx, request)} +} + +func (_c *ProxyComponent_HasPartition_Call) Run(run func(ctx context.Context, request *milvuspb.HasPartitionRequest)) *ProxyComponent_HasPartition_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.HasPartitionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_HasPartition_Call) Return(_a0 *milvuspb.BoolResponse, _a1 error) *ProxyComponent_HasPartition_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// Import provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.ImportResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.ImportRequest) *milvuspb.ImportResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.ImportResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.ImportRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_Import_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Import' +type ProxyComponent_Import_Call struct { + *mock.Call +} + +// Import is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.ImportRequest +func (_e *ProxyComponent_Expecter) Import(ctx interface{}, req interface{}) *ProxyComponent_Import_Call { + return &ProxyComponent_Import_Call{Call: _e.mock.On("Import", ctx, req)} +} + +func (_c *ProxyComponent_Import_Call) Run(run func(ctx context.Context, req *milvuspb.ImportRequest)) *ProxyComponent_Import_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.ImportRequest)) + }) + return _c +} + +func (_c *ProxyComponent_Import_Call) Return(_a0 *milvuspb.ImportResponse, _a1 error) *ProxyComponent_Import_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// Init provides a mock function with given fields: +func (_m *ProxyComponent) Init() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ProxyComponent_Init_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Init' +type ProxyComponent_Init_Call struct { + *mock.Call +} + +// Init is a helper method to define mock.On call +func (_e *ProxyComponent_Expecter) Init() *ProxyComponent_Init_Call { + return &ProxyComponent_Init_Call{Call: _e.mock.On("Init")} +} + +func (_c *ProxyComponent_Init_Call) Run(run func()) *ProxyComponent_Init_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ProxyComponent_Init_Call) Return(_a0 error) *ProxyComponent_Init_Call { + _c.Call.Return(_a0) + return _c +} + +// Insert provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) Insert(ctx context.Context, request *milvuspb.InsertRequest) (*milvuspb.MutationResult, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.MutationResult + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.InsertRequest) *milvuspb.MutationResult); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.MutationResult) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.InsertRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_Insert_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Insert' +type ProxyComponent_Insert_Call struct { + *mock.Call +} + +// Insert is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.InsertRequest +func (_e *ProxyComponent_Expecter) Insert(ctx interface{}, request interface{}) *ProxyComponent_Insert_Call { + return &ProxyComponent_Insert_Call{Call: _e.mock.On("Insert", ctx, request)} +} + +func (_c *ProxyComponent_Insert_Call) Run(run func(ctx context.Context, request *milvuspb.InsertRequest)) *ProxyComponent_Insert_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.InsertRequest)) + }) + return _c +} + +func (_c *ProxyComponent_Insert_Call) Return(_a0 *milvuspb.MutationResult, _a1 error) *ProxyComponent_Insert_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// InvalidateCollectionMetaCache provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) InvalidateCollectionMetaCache(ctx context.Context, request *proxypb.InvalidateCollMetaCacheRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *proxypb.InvalidateCollMetaCacheRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *proxypb.InvalidateCollMetaCacheRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_InvalidateCollectionMetaCache_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'InvalidateCollectionMetaCache' +type ProxyComponent_InvalidateCollectionMetaCache_Call struct { + *mock.Call +} + +// InvalidateCollectionMetaCache is a helper method to define mock.On call +// - ctx context.Context +// - request *proxypb.InvalidateCollMetaCacheRequest +func (_e *ProxyComponent_Expecter) InvalidateCollectionMetaCache(ctx interface{}, request interface{}) *ProxyComponent_InvalidateCollectionMetaCache_Call { + return &ProxyComponent_InvalidateCollectionMetaCache_Call{Call: _e.mock.On("InvalidateCollectionMetaCache", ctx, request)} +} + +func (_c *ProxyComponent_InvalidateCollectionMetaCache_Call) Run(run func(ctx context.Context, request *proxypb.InvalidateCollMetaCacheRequest)) *ProxyComponent_InvalidateCollectionMetaCache_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*proxypb.InvalidateCollMetaCacheRequest)) + }) + return _c +} + +func (_c *ProxyComponent_InvalidateCollectionMetaCache_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_InvalidateCollectionMetaCache_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// InvalidateCredentialCache provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) InvalidateCredentialCache(ctx context.Context, request *proxypb.InvalidateCredCacheRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *proxypb.InvalidateCredCacheRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *proxypb.InvalidateCredCacheRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_InvalidateCredentialCache_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'InvalidateCredentialCache' +type ProxyComponent_InvalidateCredentialCache_Call struct { + *mock.Call +} + +// InvalidateCredentialCache is a helper method to define mock.On call +// - ctx context.Context +// - request *proxypb.InvalidateCredCacheRequest +func (_e *ProxyComponent_Expecter) InvalidateCredentialCache(ctx interface{}, request interface{}) *ProxyComponent_InvalidateCredentialCache_Call { + return &ProxyComponent_InvalidateCredentialCache_Call{Call: _e.mock.On("InvalidateCredentialCache", ctx, request)} +} + +func (_c *ProxyComponent_InvalidateCredentialCache_Call) Run(run func(ctx context.Context, request *proxypb.InvalidateCredCacheRequest)) *ProxyComponent_InvalidateCredentialCache_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*proxypb.InvalidateCredCacheRequest)) + }) + return _c +} + +func (_c *ProxyComponent_InvalidateCredentialCache_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_InvalidateCredentialCache_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ListCredUsers provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) ListCredUsers(ctx context.Context, req *milvuspb.ListCredUsersRequest) (*milvuspb.ListCredUsersResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.ListCredUsersResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.ListCredUsersRequest) *milvuspb.ListCredUsersResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.ListCredUsersResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.ListCredUsersRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_ListCredUsers_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListCredUsers' +type ProxyComponent_ListCredUsers_Call struct { + *mock.Call +} + +// ListCredUsers is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.ListCredUsersRequest +func (_e *ProxyComponent_Expecter) ListCredUsers(ctx interface{}, req interface{}) *ProxyComponent_ListCredUsers_Call { + return &ProxyComponent_ListCredUsers_Call{Call: _e.mock.On("ListCredUsers", ctx, req)} +} + +func (_c *ProxyComponent_ListCredUsers_Call) Run(run func(ctx context.Context, req *milvuspb.ListCredUsersRequest)) *ProxyComponent_ListCredUsers_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.ListCredUsersRequest)) + }) + return _c +} + +func (_c *ProxyComponent_ListCredUsers_Call) Return(_a0 *milvuspb.ListCredUsersResponse, _a1 error) *ProxyComponent_ListCredUsers_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ListImportTasks provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) ListImportTasks(ctx context.Context, req *milvuspb.ListImportTasksRequest) (*milvuspb.ListImportTasksResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.ListImportTasksResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.ListImportTasksRequest) *milvuspb.ListImportTasksResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.ListImportTasksResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.ListImportTasksRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_ListImportTasks_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListImportTasks' +type ProxyComponent_ListImportTasks_Call struct { + *mock.Call +} + +// ListImportTasks is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.ListImportTasksRequest +func (_e *ProxyComponent_Expecter) ListImportTasks(ctx interface{}, req interface{}) *ProxyComponent_ListImportTasks_Call { + return &ProxyComponent_ListImportTasks_Call{Call: _e.mock.On("ListImportTasks", ctx, req)} +} + +func (_c *ProxyComponent_ListImportTasks_Call) Run(run func(ctx context.Context, req *milvuspb.ListImportTasksRequest)) *ProxyComponent_ListImportTasks_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.ListImportTasksRequest)) + }) + return _c +} + +func (_c *ProxyComponent_ListImportTasks_Call) Return(_a0 *milvuspb.ListImportTasksResponse, _a1 error) *ProxyComponent_ListImportTasks_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ListResourceGroups provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) ListResourceGroups(ctx context.Context, req *milvuspb.ListResourceGroupsRequest) (*milvuspb.ListResourceGroupsResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.ListResourceGroupsResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.ListResourceGroupsRequest) *milvuspb.ListResourceGroupsResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.ListResourceGroupsResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.ListResourceGroupsRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_ListResourceGroups_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListResourceGroups' +type ProxyComponent_ListResourceGroups_Call struct { + *mock.Call +} + +// ListResourceGroups is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.ListResourceGroupsRequest +func (_e *ProxyComponent_Expecter) ListResourceGroups(ctx interface{}, req interface{}) *ProxyComponent_ListResourceGroups_Call { + return &ProxyComponent_ListResourceGroups_Call{Call: _e.mock.On("ListResourceGroups", ctx, req)} +} + +func (_c *ProxyComponent_ListResourceGroups_Call) Run(run func(ctx context.Context, req *milvuspb.ListResourceGroupsRequest)) *ProxyComponent_ListResourceGroups_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.ListResourceGroupsRequest)) + }) + return _c +} + +func (_c *ProxyComponent_ListResourceGroups_Call) Return(_a0 *milvuspb.ListResourceGroupsResponse, _a1 error) *ProxyComponent_ListResourceGroups_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// LoadBalance provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) LoadBalance(ctx context.Context, request *milvuspb.LoadBalanceRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.LoadBalanceRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.LoadBalanceRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_LoadBalance_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'LoadBalance' +type ProxyComponent_LoadBalance_Call struct { + *mock.Call +} + +// LoadBalance is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.LoadBalanceRequest +func (_e *ProxyComponent_Expecter) LoadBalance(ctx interface{}, request interface{}) *ProxyComponent_LoadBalance_Call { + return &ProxyComponent_LoadBalance_Call{Call: _e.mock.On("LoadBalance", ctx, request)} +} + +func (_c *ProxyComponent_LoadBalance_Call) Run(run func(ctx context.Context, request *milvuspb.LoadBalanceRequest)) *ProxyComponent_LoadBalance_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.LoadBalanceRequest)) + }) + return _c +} + +func (_c *ProxyComponent_LoadBalance_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_LoadBalance_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// LoadCollection provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) LoadCollection(ctx context.Context, request *milvuspb.LoadCollectionRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.LoadCollectionRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.LoadCollectionRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_LoadCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'LoadCollection' +type ProxyComponent_LoadCollection_Call struct { + *mock.Call +} + +// LoadCollection is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.LoadCollectionRequest +func (_e *ProxyComponent_Expecter) LoadCollection(ctx interface{}, request interface{}) *ProxyComponent_LoadCollection_Call { + return &ProxyComponent_LoadCollection_Call{Call: _e.mock.On("LoadCollection", ctx, request)} +} + +func (_c *ProxyComponent_LoadCollection_Call) Run(run func(ctx context.Context, request *milvuspb.LoadCollectionRequest)) *ProxyComponent_LoadCollection_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.LoadCollectionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_LoadCollection_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_LoadCollection_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// LoadPartitions provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) LoadPartitions(ctx context.Context, request *milvuspb.LoadPartitionsRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.LoadPartitionsRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.LoadPartitionsRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_LoadPartitions_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'LoadPartitions' +type ProxyComponent_LoadPartitions_Call struct { + *mock.Call +} + +// LoadPartitions is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.LoadPartitionsRequest +func (_e *ProxyComponent_Expecter) LoadPartitions(ctx interface{}, request interface{}) *ProxyComponent_LoadPartitions_Call { + return &ProxyComponent_LoadPartitions_Call{Call: _e.mock.On("LoadPartitions", ctx, request)} +} + +func (_c *ProxyComponent_LoadPartitions_Call) Run(run func(ctx context.Context, request *milvuspb.LoadPartitionsRequest)) *ProxyComponent_LoadPartitions_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.LoadPartitionsRequest)) + }) + return _c +} + +func (_c *ProxyComponent_LoadPartitions_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_LoadPartitions_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ManualCompaction provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) ManualCompaction(ctx context.Context, req *milvuspb.ManualCompactionRequest) (*milvuspb.ManualCompactionResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.ManualCompactionResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.ManualCompactionRequest) *milvuspb.ManualCompactionResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.ManualCompactionResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.ManualCompactionRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_ManualCompaction_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ManualCompaction' +type ProxyComponent_ManualCompaction_Call struct { + *mock.Call +} + +// ManualCompaction is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.ManualCompactionRequest +func (_e *ProxyComponent_Expecter) ManualCompaction(ctx interface{}, req interface{}) *ProxyComponent_ManualCompaction_Call { + return &ProxyComponent_ManualCompaction_Call{Call: _e.mock.On("ManualCompaction", ctx, req)} +} + +func (_c *ProxyComponent_ManualCompaction_Call) Run(run func(ctx context.Context, req *milvuspb.ManualCompactionRequest)) *ProxyComponent_ManualCompaction_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.ManualCompactionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_ManualCompaction_Call) Return(_a0 *milvuspb.ManualCompactionResponse, _a1 error) *ProxyComponent_ManualCompaction_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// OperatePrivilege provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) OperatePrivilege(ctx context.Context, req *milvuspb.OperatePrivilegeRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.OperatePrivilegeRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.OperatePrivilegeRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_OperatePrivilege_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'OperatePrivilege' +type ProxyComponent_OperatePrivilege_Call struct { + *mock.Call +} + +// OperatePrivilege is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.OperatePrivilegeRequest +func (_e *ProxyComponent_Expecter) OperatePrivilege(ctx interface{}, req interface{}) *ProxyComponent_OperatePrivilege_Call { + return &ProxyComponent_OperatePrivilege_Call{Call: _e.mock.On("OperatePrivilege", ctx, req)} +} + +func (_c *ProxyComponent_OperatePrivilege_Call) Run(run func(ctx context.Context, req *milvuspb.OperatePrivilegeRequest)) *ProxyComponent_OperatePrivilege_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.OperatePrivilegeRequest)) + }) + return _c +} + +func (_c *ProxyComponent_OperatePrivilege_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_OperatePrivilege_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// OperateUserRole provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) OperateUserRole(ctx context.Context, req *milvuspb.OperateUserRoleRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.OperateUserRoleRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.OperateUserRoleRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_OperateUserRole_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'OperateUserRole' +type ProxyComponent_OperateUserRole_Call struct { + *mock.Call +} + +// OperateUserRole is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.OperateUserRoleRequest +func (_e *ProxyComponent_Expecter) OperateUserRole(ctx interface{}, req interface{}) *ProxyComponent_OperateUserRole_Call { + return &ProxyComponent_OperateUserRole_Call{Call: _e.mock.On("OperateUserRole", ctx, req)} +} + +func (_c *ProxyComponent_OperateUserRole_Call) Run(run func(ctx context.Context, req *milvuspb.OperateUserRoleRequest)) *ProxyComponent_OperateUserRole_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.OperateUserRoleRequest)) + }) + return _c +} + +func (_c *ProxyComponent_OperateUserRole_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_OperateUserRole_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// Query provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) Query(ctx context.Context, request *milvuspb.QueryRequest) (*milvuspb.QueryResults, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.QueryResults + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.QueryRequest) *milvuspb.QueryResults); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.QueryResults) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.QueryRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_Query_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Query' +type ProxyComponent_Query_Call struct { + *mock.Call +} + +// Query is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.QueryRequest +func (_e *ProxyComponent_Expecter) Query(ctx interface{}, request interface{}) *ProxyComponent_Query_Call { + return &ProxyComponent_Query_Call{Call: _e.mock.On("Query", ctx, request)} +} + +func (_c *ProxyComponent_Query_Call) Run(run func(ctx context.Context, request *milvuspb.QueryRequest)) *ProxyComponent_Query_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.QueryRequest)) + }) + return _c +} + +func (_c *ProxyComponent_Query_Call) Return(_a0 *milvuspb.QueryResults, _a1 error) *ProxyComponent_Query_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// RefreshPolicyInfoCache provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) RefreshPolicyInfoCache(ctx context.Context, req *proxypb.RefreshPolicyInfoCacheRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *proxypb.RefreshPolicyInfoCacheRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *proxypb.RefreshPolicyInfoCacheRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_RefreshPolicyInfoCache_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RefreshPolicyInfoCache' +type ProxyComponent_RefreshPolicyInfoCache_Call struct { + *mock.Call +} + +// RefreshPolicyInfoCache is a helper method to define mock.On call +// - ctx context.Context +// - req *proxypb.RefreshPolicyInfoCacheRequest +func (_e *ProxyComponent_Expecter) RefreshPolicyInfoCache(ctx interface{}, req interface{}) *ProxyComponent_RefreshPolicyInfoCache_Call { + return &ProxyComponent_RefreshPolicyInfoCache_Call{Call: _e.mock.On("RefreshPolicyInfoCache", ctx, req)} +} + +func (_c *ProxyComponent_RefreshPolicyInfoCache_Call) Run(run func(ctx context.Context, req *proxypb.RefreshPolicyInfoCacheRequest)) *ProxyComponent_RefreshPolicyInfoCache_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*proxypb.RefreshPolicyInfoCacheRequest)) + }) + return _c +} + +func (_c *ProxyComponent_RefreshPolicyInfoCache_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_RefreshPolicyInfoCache_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// Register provides a mock function with given fields: +func (_m *ProxyComponent) Register() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ProxyComponent_Register_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Register' +type ProxyComponent_Register_Call struct { + *mock.Call +} + +// Register is a helper method to define mock.On call +func (_e *ProxyComponent_Expecter) Register() *ProxyComponent_Register_Call { + return &ProxyComponent_Register_Call{Call: _e.mock.On("Register")} +} + +func (_c *ProxyComponent_Register_Call) Run(run func()) *ProxyComponent_Register_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ProxyComponent_Register_Call) Return(_a0 error) *ProxyComponent_Register_Call { + _c.Call.Return(_a0) + return _c +} + +// RegisterLink provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) RegisterLink(ctx context.Context, request *milvuspb.RegisterLinkRequest) (*milvuspb.RegisterLinkResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.RegisterLinkResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.RegisterLinkRequest) *milvuspb.RegisterLinkResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.RegisterLinkResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.RegisterLinkRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_RegisterLink_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterLink' +type ProxyComponent_RegisterLink_Call struct { + *mock.Call +} + +// RegisterLink is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.RegisterLinkRequest +func (_e *ProxyComponent_Expecter) RegisterLink(ctx interface{}, request interface{}) *ProxyComponent_RegisterLink_Call { + return &ProxyComponent_RegisterLink_Call{Call: _e.mock.On("RegisterLink", ctx, request)} +} + +func (_c *ProxyComponent_RegisterLink_Call) Run(run func(ctx context.Context, request *milvuspb.RegisterLinkRequest)) *ProxyComponent_RegisterLink_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.RegisterLinkRequest)) + }) + return _c +} + +func (_c *ProxyComponent_RegisterLink_Call) Return(_a0 *milvuspb.RegisterLinkResponse, _a1 error) *ProxyComponent_RegisterLink_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ReleaseCollection provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) ReleaseCollection(ctx context.Context, request *milvuspb.ReleaseCollectionRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.ReleaseCollectionRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.ReleaseCollectionRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_ReleaseCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ReleaseCollection' +type ProxyComponent_ReleaseCollection_Call struct { + *mock.Call +} + +// ReleaseCollection is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.ReleaseCollectionRequest +func (_e *ProxyComponent_Expecter) ReleaseCollection(ctx interface{}, request interface{}) *ProxyComponent_ReleaseCollection_Call { + return &ProxyComponent_ReleaseCollection_Call{Call: _e.mock.On("ReleaseCollection", ctx, request)} +} + +func (_c *ProxyComponent_ReleaseCollection_Call) Run(run func(ctx context.Context, request *milvuspb.ReleaseCollectionRequest)) *ProxyComponent_ReleaseCollection_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.ReleaseCollectionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_ReleaseCollection_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_ReleaseCollection_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ReleasePartitions provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) ReleasePartitions(ctx context.Context, request *milvuspb.ReleasePartitionsRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.ReleasePartitionsRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.ReleasePartitionsRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_ReleasePartitions_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ReleasePartitions' +type ProxyComponent_ReleasePartitions_Call struct { + *mock.Call +} + +// ReleasePartitions is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.ReleasePartitionsRequest +func (_e *ProxyComponent_Expecter) ReleasePartitions(ctx interface{}, request interface{}) *ProxyComponent_ReleasePartitions_Call { + return &ProxyComponent_ReleasePartitions_Call{Call: _e.mock.On("ReleasePartitions", ctx, request)} +} + +func (_c *ProxyComponent_ReleasePartitions_Call) Run(run func(ctx context.Context, request *milvuspb.ReleasePartitionsRequest)) *ProxyComponent_ReleasePartitions_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.ReleasePartitionsRequest)) + }) + return _c +} + +func (_c *ProxyComponent_ReleasePartitions_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_ReleasePartitions_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// RenameCollection provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) RenameCollection(ctx context.Context, req *milvuspb.RenameCollectionRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.RenameCollectionRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.RenameCollectionRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_RenameCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RenameCollection' +type ProxyComponent_RenameCollection_Call struct { + *mock.Call +} + +// RenameCollection is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.RenameCollectionRequest +func (_e *ProxyComponent_Expecter) RenameCollection(ctx interface{}, req interface{}) *ProxyComponent_RenameCollection_Call { + return &ProxyComponent_RenameCollection_Call{Call: _e.mock.On("RenameCollection", ctx, req)} +} + +func (_c *ProxyComponent_RenameCollection_Call) Run(run func(ctx context.Context, req *milvuspb.RenameCollectionRequest)) *ProxyComponent_RenameCollection_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.RenameCollectionRequest)) + }) + return _c +} + +func (_c *ProxyComponent_RenameCollection_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_RenameCollection_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// Search provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) Search(ctx context.Context, request *milvuspb.SearchRequest) (*milvuspb.SearchResults, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.SearchResults + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.SearchRequest) *milvuspb.SearchResults); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.SearchResults) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.SearchRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_Search_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Search' +type ProxyComponent_Search_Call struct { + *mock.Call +} + +// Search is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.SearchRequest +func (_e *ProxyComponent_Expecter) Search(ctx interface{}, request interface{}) *ProxyComponent_Search_Call { + return &ProxyComponent_Search_Call{Call: _e.mock.On("Search", ctx, request)} +} + +func (_c *ProxyComponent_Search_Call) Run(run func(ctx context.Context, request *milvuspb.SearchRequest)) *ProxyComponent_Search_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.SearchRequest)) + }) + return _c +} + +func (_c *ProxyComponent_Search_Call) Return(_a0 *milvuspb.SearchResults, _a1 error) *ProxyComponent_Search_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// SelectGrant provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) SelectGrant(ctx context.Context, req *milvuspb.SelectGrantRequest) (*milvuspb.SelectGrantResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.SelectGrantResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.SelectGrantRequest) *milvuspb.SelectGrantResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.SelectGrantResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.SelectGrantRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_SelectGrant_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SelectGrant' +type ProxyComponent_SelectGrant_Call struct { + *mock.Call +} + +// SelectGrant is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.SelectGrantRequest +func (_e *ProxyComponent_Expecter) SelectGrant(ctx interface{}, req interface{}) *ProxyComponent_SelectGrant_Call { + return &ProxyComponent_SelectGrant_Call{Call: _e.mock.On("SelectGrant", ctx, req)} +} + +func (_c *ProxyComponent_SelectGrant_Call) Run(run func(ctx context.Context, req *milvuspb.SelectGrantRequest)) *ProxyComponent_SelectGrant_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.SelectGrantRequest)) + }) + return _c +} + +func (_c *ProxyComponent_SelectGrant_Call) Return(_a0 *milvuspb.SelectGrantResponse, _a1 error) *ProxyComponent_SelectGrant_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// SelectRole provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) SelectRole(ctx context.Context, req *milvuspb.SelectRoleRequest) (*milvuspb.SelectRoleResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.SelectRoleResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.SelectRoleRequest) *milvuspb.SelectRoleResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.SelectRoleResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.SelectRoleRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_SelectRole_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SelectRole' +type ProxyComponent_SelectRole_Call struct { + *mock.Call +} + +// SelectRole is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.SelectRoleRequest +func (_e *ProxyComponent_Expecter) SelectRole(ctx interface{}, req interface{}) *ProxyComponent_SelectRole_Call { + return &ProxyComponent_SelectRole_Call{Call: _e.mock.On("SelectRole", ctx, req)} +} + +func (_c *ProxyComponent_SelectRole_Call) Run(run func(ctx context.Context, req *milvuspb.SelectRoleRequest)) *ProxyComponent_SelectRole_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.SelectRoleRequest)) + }) + return _c +} + +func (_c *ProxyComponent_SelectRole_Call) Return(_a0 *milvuspb.SelectRoleResponse, _a1 error) *ProxyComponent_SelectRole_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// SelectUser provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) SelectUser(ctx context.Context, req *milvuspb.SelectUserRequest) (*milvuspb.SelectUserResponse, error) { + ret := _m.Called(ctx, req) + + var r0 *milvuspb.SelectUserResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.SelectUserRequest) *milvuspb.SelectUserResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.SelectUserResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.SelectUserRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_SelectUser_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SelectUser' +type ProxyComponent_SelectUser_Call struct { + *mock.Call +} + +// SelectUser is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.SelectUserRequest +func (_e *ProxyComponent_Expecter) SelectUser(ctx interface{}, req interface{}) *ProxyComponent_SelectUser_Call { + return &ProxyComponent_SelectUser_Call{Call: _e.mock.On("SelectUser", ctx, req)} +} + +func (_c *ProxyComponent_SelectUser_Call) Run(run func(ctx context.Context, req *milvuspb.SelectUserRequest)) *ProxyComponent_SelectUser_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.SelectUserRequest)) + }) + return _c +} + +func (_c *ProxyComponent_SelectUser_Call) Return(_a0 *milvuspb.SelectUserResponse, _a1 error) *ProxyComponent_SelectUser_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// SetAddress provides a mock function with given fields: address +func (_m *ProxyComponent) SetAddress(address string) { + _m.Called(address) +} + +// ProxyComponent_SetAddress_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetAddress' +type ProxyComponent_SetAddress_Call struct { + *mock.Call +} + +// SetAddress is a helper method to define mock.On call +// - address string +func (_e *ProxyComponent_Expecter) SetAddress(address interface{}) *ProxyComponent_SetAddress_Call { + return &ProxyComponent_SetAddress_Call{Call: _e.mock.On("SetAddress", address)} +} + +func (_c *ProxyComponent_SetAddress_Call) Run(run func(address string)) *ProxyComponent_SetAddress_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string)) + }) + return _c +} + +func (_c *ProxyComponent_SetAddress_Call) Return() *ProxyComponent_SetAddress_Call { + _c.Call.Return() + return _c +} + +// SetDataCoordClient provides a mock function with given fields: dataCoord +func (_m *ProxyComponent) SetDataCoordClient(dataCoord types.DataCoord) { + _m.Called(dataCoord) +} + +// ProxyComponent_SetDataCoordClient_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetDataCoordClient' +type ProxyComponent_SetDataCoordClient_Call struct { + *mock.Call +} + +// SetDataCoordClient is a helper method to define mock.On call +// - dataCoord types.DataCoord +func (_e *ProxyComponent_Expecter) SetDataCoordClient(dataCoord interface{}) *ProxyComponent_SetDataCoordClient_Call { + return &ProxyComponent_SetDataCoordClient_Call{Call: _e.mock.On("SetDataCoordClient", dataCoord)} +} + +func (_c *ProxyComponent_SetDataCoordClient_Call) Run(run func(dataCoord types.DataCoord)) *ProxyComponent_SetDataCoordClient_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(types.DataCoord)) + }) + return _c +} + +func (_c *ProxyComponent_SetDataCoordClient_Call) Return() *ProxyComponent_SetDataCoordClient_Call { + _c.Call.Return() + return _c +} + +// SetEtcdClient provides a mock function with given fields: etcdClient +func (_m *ProxyComponent) SetEtcdClient(etcdClient *clientv3.Client) { + _m.Called(etcdClient) +} + +// ProxyComponent_SetEtcdClient_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetEtcdClient' +type ProxyComponent_SetEtcdClient_Call struct { + *mock.Call +} + +// SetEtcdClient is a helper method to define mock.On call +// - etcdClient *clientv3.Client +func (_e *ProxyComponent_Expecter) SetEtcdClient(etcdClient interface{}) *ProxyComponent_SetEtcdClient_Call { + return &ProxyComponent_SetEtcdClient_Call{Call: _e.mock.On("SetEtcdClient", etcdClient)} +} + +func (_c *ProxyComponent_SetEtcdClient_Call) Run(run func(etcdClient *clientv3.Client)) *ProxyComponent_SetEtcdClient_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(*clientv3.Client)) + }) + return _c +} + +func (_c *ProxyComponent_SetEtcdClient_Call) Return() *ProxyComponent_SetEtcdClient_Call { + _c.Call.Return() + return _c +} + +// SetQueryCoordClient provides a mock function with given fields: queryCoord +func (_m *ProxyComponent) SetQueryCoordClient(queryCoord types.QueryCoord) { + _m.Called(queryCoord) +} + +// ProxyComponent_SetQueryCoordClient_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetQueryCoordClient' +type ProxyComponent_SetQueryCoordClient_Call struct { + *mock.Call +} + +// SetQueryCoordClient is a helper method to define mock.On call +// - queryCoord types.QueryCoord +func (_e *ProxyComponent_Expecter) SetQueryCoordClient(queryCoord interface{}) *ProxyComponent_SetQueryCoordClient_Call { + return &ProxyComponent_SetQueryCoordClient_Call{Call: _e.mock.On("SetQueryCoordClient", queryCoord)} +} + +func (_c *ProxyComponent_SetQueryCoordClient_Call) Run(run func(queryCoord types.QueryCoord)) *ProxyComponent_SetQueryCoordClient_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(types.QueryCoord)) + }) + return _c +} + +func (_c *ProxyComponent_SetQueryCoordClient_Call) Return() *ProxyComponent_SetQueryCoordClient_Call { + _c.Call.Return() + return _c +} + +// SetQueryNodeCreator provides a mock function with given fields: _a0 +func (_m *ProxyComponent) SetQueryNodeCreator(_a0 func(context.Context, string) (types.QueryNode, error)) { + _m.Called(_a0) +} + +// ProxyComponent_SetQueryNodeCreator_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetQueryNodeCreator' +type ProxyComponent_SetQueryNodeCreator_Call struct { + *mock.Call +} + +// SetQueryNodeCreator is a helper method to define mock.On call +// - _a0 func(context.Context , string)(types.QueryNode , error) +func (_e *ProxyComponent_Expecter) SetQueryNodeCreator(_a0 interface{}) *ProxyComponent_SetQueryNodeCreator_Call { + return &ProxyComponent_SetQueryNodeCreator_Call{Call: _e.mock.On("SetQueryNodeCreator", _a0)} +} + +func (_c *ProxyComponent_SetQueryNodeCreator_Call) Run(run func(_a0 func(context.Context, string) (types.QueryNode, error))) *ProxyComponent_SetQueryNodeCreator_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(func(context.Context, string) (types.QueryNode, error))) + }) + return _c +} + +func (_c *ProxyComponent_SetQueryNodeCreator_Call) Return() *ProxyComponent_SetQueryNodeCreator_Call { + _c.Call.Return() + return _c +} + +// SetRates provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) SetRates(ctx context.Context, req *proxypb.SetRatesRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *proxypb.SetRatesRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *proxypb.SetRatesRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_SetRates_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetRates' +type ProxyComponent_SetRates_Call struct { + *mock.Call +} + +// SetRates is a helper method to define mock.On call +// - ctx context.Context +// - req *proxypb.SetRatesRequest +func (_e *ProxyComponent_Expecter) SetRates(ctx interface{}, req interface{}) *ProxyComponent_SetRates_Call { + return &ProxyComponent_SetRates_Call{Call: _e.mock.On("SetRates", ctx, req)} +} + +func (_c *ProxyComponent_SetRates_Call) Run(run func(ctx context.Context, req *proxypb.SetRatesRequest)) *ProxyComponent_SetRates_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*proxypb.SetRatesRequest)) + }) + return _c +} + +func (_c *ProxyComponent_SetRates_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_SetRates_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// SetRootCoordClient provides a mock function with given fields: rootCoord +func (_m *ProxyComponent) SetRootCoordClient(rootCoord types.RootCoord) { + _m.Called(rootCoord) +} + +// ProxyComponent_SetRootCoordClient_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetRootCoordClient' +type ProxyComponent_SetRootCoordClient_Call struct { + *mock.Call +} + +// SetRootCoordClient is a helper method to define mock.On call +// - rootCoord types.RootCoord +func (_e *ProxyComponent_Expecter) SetRootCoordClient(rootCoord interface{}) *ProxyComponent_SetRootCoordClient_Call { + return &ProxyComponent_SetRootCoordClient_Call{Call: _e.mock.On("SetRootCoordClient", rootCoord)} +} + +func (_c *ProxyComponent_SetRootCoordClient_Call) Run(run func(rootCoord types.RootCoord)) *ProxyComponent_SetRootCoordClient_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(types.RootCoord)) + }) + return _c +} + +func (_c *ProxyComponent_SetRootCoordClient_Call) Return() *ProxyComponent_SetRootCoordClient_Call { + _c.Call.Return() + return _c +} + +// ShowCollections provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) ShowCollections(ctx context.Context, request *milvuspb.ShowCollectionsRequest) (*milvuspb.ShowCollectionsResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.ShowCollectionsResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.ShowCollectionsRequest) *milvuspb.ShowCollectionsResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.ShowCollectionsResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.ShowCollectionsRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_ShowCollections_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ShowCollections' +type ProxyComponent_ShowCollections_Call struct { + *mock.Call +} + +// ShowCollections is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.ShowCollectionsRequest +func (_e *ProxyComponent_Expecter) ShowCollections(ctx interface{}, request interface{}) *ProxyComponent_ShowCollections_Call { + return &ProxyComponent_ShowCollections_Call{Call: _e.mock.On("ShowCollections", ctx, request)} +} + +func (_c *ProxyComponent_ShowCollections_Call) Run(run func(ctx context.Context, request *milvuspb.ShowCollectionsRequest)) *ProxyComponent_ShowCollections_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.ShowCollectionsRequest)) + }) + return _c +} + +func (_c *ProxyComponent_ShowCollections_Call) Return(_a0 *milvuspb.ShowCollectionsResponse, _a1 error) *ProxyComponent_ShowCollections_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ShowPartitions provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) ShowPartitions(ctx context.Context, request *milvuspb.ShowPartitionsRequest) (*milvuspb.ShowPartitionsResponse, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.ShowPartitionsResponse + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.ShowPartitionsRequest) *milvuspb.ShowPartitionsResponse); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.ShowPartitionsResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.ShowPartitionsRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_ShowPartitions_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ShowPartitions' +type ProxyComponent_ShowPartitions_Call struct { + *mock.Call +} + +// ShowPartitions is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.ShowPartitionsRequest +func (_e *ProxyComponent_Expecter) ShowPartitions(ctx interface{}, request interface{}) *ProxyComponent_ShowPartitions_Call { + return &ProxyComponent_ShowPartitions_Call{Call: _e.mock.On("ShowPartitions", ctx, request)} +} + +func (_c *ProxyComponent_ShowPartitions_Call) Run(run func(ctx context.Context, request *milvuspb.ShowPartitionsRequest)) *ProxyComponent_ShowPartitions_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.ShowPartitionsRequest)) + }) + return _c +} + +func (_c *ProxyComponent_ShowPartitions_Call) Return(_a0 *milvuspb.ShowPartitionsResponse, _a1 error) *ProxyComponent_ShowPartitions_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// Start provides a mock function with given fields: +func (_m *ProxyComponent) Start() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ProxyComponent_Start_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Start' +type ProxyComponent_Start_Call struct { + *mock.Call +} + +// Start is a helper method to define mock.On call +func (_e *ProxyComponent_Expecter) Start() *ProxyComponent_Start_Call { + return &ProxyComponent_Start_Call{Call: _e.mock.On("Start")} +} + +func (_c *ProxyComponent_Start_Call) Run(run func()) *ProxyComponent_Start_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ProxyComponent_Start_Call) Return(_a0 error) *ProxyComponent_Start_Call { + _c.Call.Return(_a0) + return _c +} + +// Stop provides a mock function with given fields: +func (_m *ProxyComponent) Stop() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ProxyComponent_Stop_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Stop' +type ProxyComponent_Stop_Call struct { + *mock.Call +} + +// Stop is a helper method to define mock.On call +func (_e *ProxyComponent_Expecter) Stop() *ProxyComponent_Stop_Call { + return &ProxyComponent_Stop_Call{Call: _e.mock.On("Stop")} +} + +func (_c *ProxyComponent_Stop_Call) Run(run func()) *ProxyComponent_Stop_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ProxyComponent_Stop_Call) Return(_a0 error) *ProxyComponent_Stop_Call { + _c.Call.Return(_a0) + return _c +} + +// TransferNode provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) TransferNode(ctx context.Context, req *milvuspb.TransferNodeRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.TransferNodeRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.TransferNodeRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_TransferNode_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TransferNode' +type ProxyComponent_TransferNode_Call struct { + *mock.Call +} + +// TransferNode is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.TransferNodeRequest +func (_e *ProxyComponent_Expecter) TransferNode(ctx interface{}, req interface{}) *ProxyComponent_TransferNode_Call { + return &ProxyComponent_TransferNode_Call{Call: _e.mock.On("TransferNode", ctx, req)} +} + +func (_c *ProxyComponent_TransferNode_Call) Run(run func(ctx context.Context, req *milvuspb.TransferNodeRequest)) *ProxyComponent_TransferNode_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.TransferNodeRequest)) + }) + return _c +} + +func (_c *ProxyComponent_TransferNode_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_TransferNode_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// TransferReplica provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) TransferReplica(ctx context.Context, req *milvuspb.TransferReplicaRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.TransferReplicaRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.TransferReplicaRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_TransferReplica_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TransferReplica' +type ProxyComponent_TransferReplica_Call struct { + *mock.Call +} + +// TransferReplica is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.TransferReplicaRequest +func (_e *ProxyComponent_Expecter) TransferReplica(ctx interface{}, req interface{}) *ProxyComponent_TransferReplica_Call { + return &ProxyComponent_TransferReplica_Call{Call: _e.mock.On("TransferReplica", ctx, req)} +} + +func (_c *ProxyComponent_TransferReplica_Call) Run(run func(ctx context.Context, req *milvuspb.TransferReplicaRequest)) *ProxyComponent_TransferReplica_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.TransferReplicaRequest)) + }) + return _c +} + +func (_c *ProxyComponent_TransferReplica_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_TransferReplica_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// UpdateCredential provides a mock function with given fields: ctx, req +func (_m *ProxyComponent) UpdateCredential(ctx context.Context, req *milvuspb.UpdateCredentialRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, req) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.UpdateCredentialRequest) *commonpb.Status); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.UpdateCredentialRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_UpdateCredential_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateCredential' +type ProxyComponent_UpdateCredential_Call struct { + *mock.Call +} + +// UpdateCredential is a helper method to define mock.On call +// - ctx context.Context +// - req *milvuspb.UpdateCredentialRequest +func (_e *ProxyComponent_Expecter) UpdateCredential(ctx interface{}, req interface{}) *ProxyComponent_UpdateCredential_Call { + return &ProxyComponent_UpdateCredential_Call{Call: _e.mock.On("UpdateCredential", ctx, req)} +} + +func (_c *ProxyComponent_UpdateCredential_Call) Run(run func(ctx context.Context, req *milvuspb.UpdateCredentialRequest)) *ProxyComponent_UpdateCredential_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.UpdateCredentialRequest)) + }) + return _c +} + +func (_c *ProxyComponent_UpdateCredential_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_UpdateCredential_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// UpdateCredentialCache provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) UpdateCredentialCache(ctx context.Context, request *proxypb.UpdateCredCacheRequest) (*commonpb.Status, error) { + ret := _m.Called(ctx, request) + + var r0 *commonpb.Status + if rf, ok := ret.Get(0).(func(context.Context, *proxypb.UpdateCredCacheRequest) *commonpb.Status); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *proxypb.UpdateCredCacheRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_UpdateCredentialCache_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateCredentialCache' +type ProxyComponent_UpdateCredentialCache_Call struct { + *mock.Call +} + +// UpdateCredentialCache is a helper method to define mock.On call +// - ctx context.Context +// - request *proxypb.UpdateCredCacheRequest +func (_e *ProxyComponent_Expecter) UpdateCredentialCache(ctx interface{}, request interface{}) *ProxyComponent_UpdateCredentialCache_Call { + return &ProxyComponent_UpdateCredentialCache_Call{Call: _e.mock.On("UpdateCredentialCache", ctx, request)} +} + +func (_c *ProxyComponent_UpdateCredentialCache_Call) Run(run func(ctx context.Context, request *proxypb.UpdateCredCacheRequest)) *ProxyComponent_UpdateCredentialCache_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*proxypb.UpdateCredCacheRequest)) + }) + return _c +} + +func (_c *ProxyComponent_UpdateCredentialCache_Call) Return(_a0 *commonpb.Status, _a1 error) *ProxyComponent_UpdateCredentialCache_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// UpdateStateCode provides a mock function with given fields: stateCode +func (_m *ProxyComponent) UpdateStateCode(stateCode commonpb.StateCode) { + _m.Called(stateCode) +} + +// ProxyComponent_UpdateStateCode_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateStateCode' +type ProxyComponent_UpdateStateCode_Call struct { + *mock.Call +} + +// UpdateStateCode is a helper method to define mock.On call +// - stateCode commonpb.StateCode +func (_e *ProxyComponent_Expecter) UpdateStateCode(stateCode interface{}) *ProxyComponent_UpdateStateCode_Call { + return &ProxyComponent_UpdateStateCode_Call{Call: _e.mock.On("UpdateStateCode", stateCode)} +} + +func (_c *ProxyComponent_UpdateStateCode_Call) Run(run func(stateCode commonpb.StateCode)) *ProxyComponent_UpdateStateCode_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(commonpb.StateCode)) + }) + return _c +} + +func (_c *ProxyComponent_UpdateStateCode_Call) Return() *ProxyComponent_UpdateStateCode_Call { + _c.Call.Return() + return _c +} + +// Upsert provides a mock function with given fields: ctx, request +func (_m *ProxyComponent) Upsert(ctx context.Context, request *milvuspb.UpsertRequest) (*milvuspb.MutationResult, error) { + ret := _m.Called(ctx, request) + + var r0 *milvuspb.MutationResult + if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.UpsertRequest) *milvuspb.MutationResult); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*milvuspb.MutationResult) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.UpsertRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProxyComponent_Upsert_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Upsert' +type ProxyComponent_Upsert_Call struct { + *mock.Call +} + +// Upsert is a helper method to define mock.On call +// - ctx context.Context +// - request *milvuspb.UpsertRequest +func (_e *ProxyComponent_Expecter) Upsert(ctx interface{}, request interface{}) *ProxyComponent_Upsert_Call { + return &ProxyComponent_Upsert_Call{Call: _e.mock.On("Upsert", ctx, request)} +} + +func (_c *ProxyComponent_Upsert_Call) Run(run func(ctx context.Context, request *milvuspb.UpsertRequest)) *ProxyComponent_Upsert_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*milvuspb.UpsertRequest)) + }) + return _c +} + +func (_c *ProxyComponent_Upsert_Call) Return(_a0 *milvuspb.MutationResult, _a1 error) *ProxyComponent_Upsert_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +type mockConstructorTestingTNewProxyComponent interface { + mock.TestingT + Cleanup(func()) +} + +// NewProxyComponent creates a new instance of ProxyComponent. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewProxyComponent(t mockConstructorTestingTNewProxyComponent) *ProxyComponent { + mock := &ProxyComponent{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/internal/mysqld/executor/compiler.go b/internal/mysqld/executor/compiler.go new file mode 100644 index 0000000000..8e489b8b2a --- /dev/null +++ b/internal/mysqld/executor/compiler.go @@ -0,0 +1,17 @@ +package executor + +import "github.com/milvus-io/milvus/internal/mysqld/planner" + +type Compiler interface { + Compile(plan *planner.LogicalPlan) (*planner.PhysicalPlan, error) +} + +type defaultCompiler struct{} + +func (c defaultCompiler) Compile(plan *planner.LogicalPlan) (*planner.PhysicalPlan, error) { + return &planner.PhysicalPlan{Node: plan.Node}, nil +} + +func NewDefaultCompiler() Compiler { + return &defaultCompiler{} +} diff --git a/internal/mysqld/executor/compiler_test.go b/internal/mysqld/executor/compiler_test.go new file mode 100644 index 0000000000..661ca4f45d --- /dev/null +++ b/internal/mysqld/executor/compiler_test.go @@ -0,0 +1,19 @@ +package executor + +import ( + "testing" + + "github.com/milvus-io/milvus/internal/mysqld/planner" + "github.com/stretchr/testify/assert" +) + +func Test_defaultCompiler_Compile(t *testing.T) { + plan := &planner.LogicalPlan{ + Node: planner.NewNodeConstant("20230306", planner.WithStringLiteral("20230306")), + } + c := NewDefaultCompiler() + physicalPlan, err := c.Compile(plan) + assert.NoError(t, err) + constant := physicalPlan.Node.(*planner.NodeConstant) + assert.Equal(t, "20230306", constant.StringLiteral.Unwrap()) +} diff --git a/internal/mysqld/executor/executor.go b/internal/mysqld/executor/executor.go new file mode 100644 index 0000000000..e58f04a172 --- /dev/null +++ b/internal/mysqld/executor/executor.go @@ -0,0 +1,354 @@ +package executor + +import ( + "context" + "fmt" + "strconv" + + "github.com/cockroachdb/errors" + + "github.com/milvus-io/milvus/internal/mysqld/parser/antlrparser" + + "github.com/milvus-io/milvus/internal/util/typeutil" + + "github.com/milvus-io/milvus-proto/go-api/schemapb" + + "github.com/milvus-io/milvus-proto/go-api/commonpb" + "github.com/milvus-io/milvus-proto/go-api/milvuspb" + "github.com/milvus-io/milvus/internal/util/commonpbutil" + querypb "github.com/xelabs/go-mysqlstack/sqlparser/depends/query" + + "github.com/milvus-io/milvus/internal/mysqld/planner" + "github.com/milvus-io/milvus/internal/types" + "github.com/xelabs/go-mysqlstack/sqlparser/depends/sqltypes" +) + +type Executor interface { + Run(ctx context.Context, plan *planner.PhysicalPlan) (*sqltypes.Result, error) +} + +// defaultExecutor only translates sql to rpc. TODO: Better to use vacalno model or batch model. +type defaultExecutor struct { + s types.ProxyComponent +} + +func (e *defaultExecutor) Run(ctx context.Context, plan *planner.PhysicalPlan) (*sqltypes.Result, error) { + statements := antlrparser.GetSqlStatements(plan.Node) + if statements == nil { + return nil, fmt.Errorf("invalid node, sql should be parsed to statements") + } + l := len(statements.Statements) + if l != 1 { + return nil, fmt.Errorf("only one statement is supported") + } + return e.dispatch(ctx, statements.Statements[0]) +} + +func (e *defaultExecutor) dispatch(ctx context.Context, n *planner.NodeSqlStatement) (*sqltypes.Result, error) { + if n.DmlStatement.IsSome() { + return e.dispatchDmlStatement(ctx, n.DmlStatement.Unwrap()) + } + return nil, fmt.Errorf("invalid sql statement, only dml statement is supported") +} + +func (e *defaultExecutor) dispatchDmlStatement(ctx context.Context, n *planner.NodeDmlStatement) (*sqltypes.Result, error) { + if n.SelectStatement.IsSome() { + return e.execSelect(ctx, n.SelectStatement.Unwrap()) + } + return nil, fmt.Errorf("invalid dml statement, only select statement is supported") +} + +func (e *defaultExecutor) execSelect(ctx context.Context, n *planner.NodeSelectStatement) (*sqltypes.Result, error) { + if !n.SimpleSelect.IsSome() { + return nil, fmt.Errorf("invalid select statement, only simple select is supported") + } + + stmt := n.SimpleSelect.Unwrap() + + if stmt.LockClause.IsSome() { + return nil, fmt.Errorf("invalid simple select statement, lock clause is not supported") + } + + if !stmt.Query.IsSome() { + return nil, fmt.Errorf("invalid simple select statement, only query is supported") + } + + q := stmt.Query.Unwrap() + + if q.Limit.IsSome() { + // TODO: use pagination. + return nil, fmt.Errorf("invalid query statement, limit/offset is not supported") + } + + if len(q.SelectSpecs) != 0 { + return nil, fmt.Errorf("invalid query statement, select spec is not supported") + } + + if !q.From.IsSome() { + return nil, fmt.Errorf("invalid query statement, table source is not specified") + } + + from := q.From.Unwrap() + if len(from.TableSources) != 1 { + return nil, fmt.Errorf("invalid query statement, only one table source is supported") + } + + tableName := from.TableSources[0].TableName.Unwrap() + + outputFields, match, err := getOutputFieldsOrMatchCountRule(q.SelectElements) + if err != nil { + return nil, err + } + + if match && !from.Where.IsSome() { // count without filter. + rowCnt, err := e.execCountWithoutFilter(ctx, tableName) + if err != nil { + return nil, err + } + + result1 := wrapCountResult(rowCnt, "count(*)") + return result1, nil + } + + if match && from.Where.IsSome() { // count with filter. + filter := planner.NewExprTextRestorer().RestoreExprText(from.Where.Unwrap()) + return e.execCountWithFilter(ctx, tableName, filter) + } + + // `match` is false. + + if !from.Where.IsSome() { // query without filter. + return nil, fmt.Errorf("query without filter is not supported") + } + + filter := planner.NewExprTextRestorer().RestoreExprText(from.Where.Unwrap()) + res, err := e.execQuery(ctx, tableName, filter, outputFields) + if err != nil { + return nil, err + } + return wrapQueryResults(res), nil +} + +func getOutputFieldsOrMatchCountRule(fields []*planner.NodeSelectElement) (outputFields []string, match bool, err error) { + match = false + l := len(fields) + + if l == 1 { + entry := fields[0] + match = entry.FunctionCall.IsSome() && + entry.FunctionCall.Unwrap().Agg.IsSome() && + entry.FunctionCall.Unwrap().Agg.Unwrap().AggCount.IsSome() + } + + if match { + return nil, match, nil + } + + outputFields = make([]string, 0, l) + for _, entry := range fields { + if entry.Star.IsSome() { + // TODO: support `select *`. + return nil, match, fmt.Errorf("* is not supported") + } + + if entry.FunctionCall.IsSome() { + return nil, match, fmt.Errorf("combined select elements is not supported") + } + + if entry.FullColumnName.IsSome() { + c := entry.FullColumnName.Unwrap() + if c.Alias.IsSome() { + return nil, match, fmt.Errorf("alias for select elements is not supported") + } + outputFields = append(outputFields, c.Name) + } + } + + return outputFields, false, nil +} + +func (e *defaultExecutor) execCountWithFilter(ctx context.Context, tableName string, filter string) (*sqltypes.Result, error) { + // TODO: check if `*` match vector field. + outputs := []string{"*"} + + res, err := e.execQuery(ctx, tableName, filter, outputs) + if err != nil { + return nil, err + } + + nColumn := len(res.GetFieldsData()) + nRow := 0 + if nColumn > 0 { + nRow = typeutil.GetRowCount(res.GetFieldsData()[0]) + } + + return wrapCountResult(nRow, "count(*)"), nil +} + +func (e *defaultExecutor) execCountWithoutFilter(ctx context.Context, tableName string) (int, error) { + req := &milvuspb.GetCollectionStatisticsRequest{ + Base: commonpbutil.NewMsgBase(), + CollectionName: tableName, + } + resp, err := e.s.GetCollectionStatistics(ctx, req) + if err != nil { + return 0, err + } + if resp.GetStatus().GetErrorCode() != commonpb.ErrorCode_Success { + return 0, errors.New(resp.GetStatus().GetReason()) + } + rowCnt, err := strconv.Atoi(resp.GetStats()[0].GetValue()) + if err != nil { + return 0, err + } + return rowCnt, nil +} + +func (e *defaultExecutor) execQuery(ctx context.Context, tableName string, filter string, outputs []string) (*milvuspb.QueryResults, error) { + req := &milvuspb.QueryRequest{ + Base: commonpbutil.NewMsgBase(), + DbName: "", + CollectionName: tableName, + Expr: filter, + OutputFields: outputs, + PartitionNames: nil, + TravelTimestamp: 0, + GuaranteeTimestamp: 0, + QueryParams: nil, + } + + resp, err := e.s.Query(ctx, req) + if err != nil { + return nil, err + } + + if resp.GetStatus().GetErrorCode() != commonpb.ErrorCode_Success { + return nil, errors.New(resp.GetStatus().GetReason()) + } + + return resp, nil +} + +func wrapCountResult(rowCnt int, column string) *sqltypes.Result { + result1 := &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: column, + Type: querypb.Type_INT64, + }, + }, + Rows: [][]sqltypes.Value{ + { + sqltypes.NewInt64(int64(rowCnt)), + }, + }, + } + return result1 +} + +func wrapQueryResults(res *milvuspb.QueryResults) *sqltypes.Result { + fieldsData := res.GetFieldsData() + nColumn := len(fieldsData) + fields := make([]*querypb.Field, 0, nColumn) + + if nColumn <= 0 { + return &sqltypes.Result{} + } + + for i := 0; i < nColumn; i++ { + fields = append(fields, getSQLField(res.GetCollectionName(), fieldsData[i])) + } + + nRow := typeutil.GetRowCount(fieldsData[0]) + rows := make([][]sqltypes.Value, 0, nRow) + for i := 0; i < nRow; i++ { + row := make([]sqltypes.Value, 0, nColumn) + for j := 0; j < nColumn; j++ { + row = append(row, getDataSingle(fieldsData[j], i)) + } + rows = append(rows, row) + } + + return &sqltypes.Result{ + Fields: fields, + Rows: rows, + } +} + +func getSQLField(tableName string, fieldData *schemapb.FieldData) *querypb.Field { + return &querypb.Field{ + Name: fieldData.GetFieldName(), + Type: toSQLType(fieldData.GetType()), + Table: tableName, + OrgTable: "", + Database: "", + OrgName: "", + ColumnLength: 0, + Charset: 0, + Decimals: 0, + Flags: 0, + } +} + +func toSQLType(t schemapb.DataType) querypb.Type { + switch t { + case schemapb.DataType_Bool: + // TODO: tinyint + return querypb.Type_UINT8 + case schemapb.DataType_Int8: + return querypb.Type_INT8 + case schemapb.DataType_Int16: + return querypb.Type_INT16 + case schemapb.DataType_Int32: + return querypb.Type_INT32 + case schemapb.DataType_Int64: + return querypb.Type_INT64 + case schemapb.DataType_Float: + return querypb.Type_FLOAT32 + case schemapb.DataType_Double: + return querypb.Type_FLOAT64 + case schemapb.DataType_VarChar: + return querypb.Type_VARCHAR + // TODO: vector. + default: + return querypb.Type_NULL_TYPE + } +} + +func getDataSingle(fieldData *schemapb.FieldData, idx int) sqltypes.Value { + switch fieldData.GetType() { + case schemapb.DataType_Bool: + // TODO: tinyint + return sqltypes.NewInt32(1) + case schemapb.DataType_Int8: + v := fieldData.Field.(*schemapb.FieldData_Scalars).Scalars.Data.(*schemapb.ScalarField_IntData).IntData.GetData()[idx] + return sqltypes.MakeTrusted(sqltypes.Int8, strconv.AppendInt(nil, int64(v), 10)) + case schemapb.DataType_Int16: + v := fieldData.Field.(*schemapb.FieldData_Scalars).Scalars.Data.(*schemapb.ScalarField_IntData).IntData.GetData()[idx] + return sqltypes.MakeTrusted(sqltypes.Int16, strconv.AppendInt(nil, int64(v), 10)) + case schemapb.DataType_Int32: + v := fieldData.Field.(*schemapb.FieldData_Scalars).Scalars.Data.(*schemapb.ScalarField_IntData).IntData.GetData()[idx] + return sqltypes.MakeTrusted(sqltypes.Int32, strconv.AppendInt(nil, int64(v), 10)) + case schemapb.DataType_Int64: + v := fieldData.Field.(*schemapb.FieldData_Scalars).Scalars.Data.(*schemapb.ScalarField_LongData).LongData.GetData()[idx] + return sqltypes.MakeTrusted(sqltypes.Int64, strconv.AppendInt(nil, v, 10)) + case schemapb.DataType_Float: + v := fieldData.Field.(*schemapb.FieldData_Scalars).Scalars.Data.(*schemapb.ScalarField_FloatData).FloatData.GetData()[idx] + return sqltypes.MakeTrusted(sqltypes.Float32, strconv.AppendFloat(nil, float64(v), 'f', -1, 64)) + case schemapb.DataType_Double: + v := fieldData.Field.(*schemapb.FieldData_Scalars).Scalars.Data.(*schemapb.ScalarField_DoubleData).DoubleData.GetData()[idx] + return sqltypes.MakeTrusted(sqltypes.Float64, strconv.AppendFloat(nil, v, 'g', -1, 64)) + case schemapb.DataType_VarChar: + v := fieldData.Field.(*schemapb.FieldData_Scalars).Scalars.Data.(*schemapb.ScalarField_StringData).StringData.GetData()[idx] + return sqltypes.NewVarChar(v) + + // TODO: vector. + default: + // TODO: should raise error here. + return sqltypes.NewInt32(1) + } +} + +func NewDefaultExecutor(s types.ProxyComponent) Executor { + return &defaultExecutor{s: s} +} diff --git a/internal/mysqld/executor/executor_test.go b/internal/mysqld/executor/executor_test.go new file mode 100644 index 0000000000..27e0f65dbf --- /dev/null +++ b/internal/mysqld/executor/executor_test.go @@ -0,0 +1,503 @@ +package executor + +import ( + "context" + "testing" + + "github.com/cockroachdb/errors" + + "github.com/milvus-io/milvus-proto/go-api/schemapb" + + "github.com/milvus-io/milvus-proto/go-api/commonpb" + "github.com/milvus-io/milvus-proto/go-api/milvuspb" + + "github.com/milvus-io/milvus/internal/mocks" + "github.com/stretchr/testify/mock" + + "github.com/stretchr/testify/assert" + + "github.com/milvus-io/milvus/internal/mysqld/planner" + querypb "github.com/xelabs/go-mysqlstack/sqlparser/depends/query" +) + +func Test_defaultExecutor_Run(t *testing.T) { + t.Run("not sql statements", func(t *testing.T) { + e := NewDefaultExecutor(nil) + plan := &planner.PhysicalPlan{ + Node: planner.NewNodeConstant("20230306", planner.WithStringLiteral("20230306")), + } + _, err := e.Run(context.TODO(), plan) + assert.Error(t, err) + }) + + t.Run("multiple statements", func(t *testing.T) { + e := NewDefaultExecutor(nil) + stmts := []*planner.NodeSqlStatement{ + planner.NewNodeSqlStatement("sql1"), + planner.NewNodeSqlStatement("sql2"), + } + plan := &planner.PhysicalPlan{ + Node: planner.NewNodeSqlStatements(stmts, "sql1; sql2"), + } + _, err := e.Run(context.TODO(), plan) + assert.Error(t, err) + }) + + t.Run("normal case", func(t *testing.T) { + s := mocks.NewProxyComponent(t) + res := &milvuspb.QueryResults{ + Status: &commonpb.Status{}, + FieldsData: []*schemapb.FieldData{ + { + Type: schemapb.DataType_Int64, + FieldName: "field", + Field: &schemapb.FieldData_Scalars{ + Scalars: &schemapb.ScalarField{ + Data: &schemapb.ScalarField_LongData{ + LongData: &schemapb.LongArray{ + Data: []int64{1, 2, 3, 4}, + }, + }, + }, + }, + }, + }, + CollectionName: "test", + } + s.On("Query", + mock.Anything, // context.Context + mock.Anything, // *milvuspb.QueryRequest + ).Return(res, nil) + e := NewDefaultExecutor(s) + stmts := []*planner.NodeSqlStatement{ + planner.NewNodeSqlStatement("", planner.WithDmlStatement( + planner.NewNodeDmlStatement("", planner.WithSelectStatement( + planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFullColumnName( + planner.NewNodeFullColumnName("", "field"))), + }, planner.WithFrom(planner.NewNodeFromClause("", + []*planner.NodeTableSource{ + planner.NewNodeTableSource("", planner.WithTableName("test")), + }, + planner.WithWhere(planner.NewNodeExpression("", planner.WithPredicate( + planner.NewNodePredicate("", planner.WithNodeBinaryComparisonPredicate( + planner.NewNodeBinaryComparisonPredicate("", + planner.NewNodePredicate("", planner.WithNodeExpressionAtomPredicate( + planner.NewNodeExpressionAtomPredicate("", + planner.NewNodeExpressionAtom("", planner.ExpressionAtomWithFullColumnName( + planner.NewNodeFullColumnName("", "field")))))), + planner.NewNodePredicate("", planner.WithNodeExpressionAtomPredicate( + planner.NewNodeExpressionAtomPredicate("", + planner.NewNodeExpressionAtom("", planner.ExpressionAtomWithFullColumnName( + planner.NewNodeFullColumnName("", "field")))))), + planner.ComparisonOperatorEqual), + ), + )), + ), + ), + ), + ), + ), + )), + )), + )), + )), + } + plan := &planner.PhysicalPlan{ + Node: planner.NewNodeSqlStatements(stmts, ""), + } + sqlRes, err := e.Run(context.TODO(), plan) + assert.NoError(t, err) + assert.Equal(t, 1, len(sqlRes.Fields)) + assert.Equal(t, 4, len(sqlRes.Rows)) + assert.Equal(t, "field", sqlRes.Fields[0].Name) + assert.Equal(t, querypb.Type_INT64, sqlRes.Fields[0].Type) + assert.Equal(t, 1, len(sqlRes.Rows[0])) + assert.Equal(t, querypb.Type_INT64, sqlRes.Rows[0][0].Type()) + }) +} + +func Test_defaultExecutor_dispatch(t *testing.T) { + t.Run("not dml", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeSqlStatement("") + _, err := e.dispatch(context.TODO(), n) + assert.Error(t, err) + }) +} + +func Test_defaultExecutor_dispatchDmlStatement(t *testing.T) { + t.Run("not select", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeDmlStatement("") + _, err := e.dispatchDmlStatement(context.TODO(), n) + assert.Error(t, err) + }) +} + +func Test_defaultExecutor_execSelect(t *testing.T) { + t.Run("not simple select", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeSelectStatement("") + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("lock clause, not supported", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithLockClause( + planner.NewNodeLockClause("", planner.LockClauseOptionForUpdate))))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("not query", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect(""))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("pagination, not supported", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + nil, + planner.WithLimit(planner.NewNodeLimitClause("", 1, 2))))))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("select specs, not supported", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + []*planner.NodeSelectSpec{ + planner.NewNodeSelectSpec(""), + }, + nil))))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("no from clause", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + nil))))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("no table source", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + nil, + planner.WithFrom(planner.NewNodeFromClause("", nil))))))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("multiple table source", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + nil, + planner.WithFrom(planner.NewNodeFromClause("", + []*planner.NodeTableSource{ + planner.NewNodeTableSource(""), + planner.NewNodeTableSource(""), + }))))))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("target entry as alias, not supported", func(t *testing.T) { + e := NewDefaultExecutor(nil).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFullColumnName( + planner.NewNodeFullColumnName("", "field", planner.FullColumnNameWithAlias("alias")))), + }, + planner.WithFrom(planner.NewNodeFromClause("", + []*planner.NodeTableSource{ + planner.NewNodeTableSource("", planner.WithTableName("test")), + }))))))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("failed to execute count", func(t *testing.T) { + s := mocks.NewProxyComponent(t) + s.On("GetCollectionStatistics", + mock.Anything, // context.Context + mock.Anything, // *milvuspb.GetCollectionStatisticsRequest + ).Return(nil, errors.New("error mock GetCollectionStatistics")) + e := NewDefaultExecutor(s).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFunctionCall( + planner.NewNodeFunctionCall("", planner.WithAgg( + planner.NewNodeAggregateWindowedFunction("", planner.WithAggCount( + planner.NewNodeCount(""))))))), + }, + planner.WithFrom(planner.NewNodeFromClause("", + []*planner.NodeTableSource{ + planner.NewNodeTableSource("", planner.WithTableName("test")), + }))))))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("count without filter", func(t *testing.T) { + s := mocks.NewProxyComponent(t) + s.On("GetCollectionStatistics", + mock.Anything, // context.Context + mock.Anything, // *milvuspb.GetCollectionStatisticsRequest + ).Return(&milvuspb.GetCollectionStatisticsResponse{ + Status: &commonpb.Status{}, + Stats: []*commonpb.KeyValuePair{{Value: "2"}}, + }, nil) + e := NewDefaultExecutor(s).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFunctionCall( + planner.NewNodeFunctionCall("", planner.WithAgg( + planner.NewNodeAggregateWindowedFunction("", planner.WithAggCount( + planner.NewNodeCount(""))))))), + }, + planner.WithFrom(planner.NewNodeFromClause("", + []*planner.NodeTableSource{ + planner.NewNodeTableSource("", planner.WithTableName("test")), + }))))))) + res, err := e.execSelect(context.TODO(), n) + assert.NoError(t, err) + assert.Equal(t, 1, len(res.Fields)) + assert.Equal(t, "count(*)", res.Fields[0].Name) + assert.Equal(t, querypb.Type_INT64, res.Fields[0].Type) + assert.Equal(t, 1, len(res.Rows)) + assert.Equal(t, 1, len(res.Rows[0])) + assert.Equal(t, querypb.Type_INT64, res.Rows[0][0].Type()) + }) + + t.Run("count with filter", func(t *testing.T) { + s := mocks.NewProxyComponent(t) + s.On("Query", + mock.Anything, // context.Context + mock.Anything, // *milvuspb.QueryRequest + ).Return(&milvuspb.QueryResults{ + Status: &commonpb.Status{}, + FieldsData: []*schemapb.FieldData{ + { + Field: &schemapb.FieldData_Scalars{ + Scalars: &schemapb.ScalarField{ + Data: &schemapb.ScalarField_LongData{ + LongData: &schemapb.LongArray{ + Data: []int64{1, 2, 3, 4}, + }, + }, + }, + }, + }, + }, + }, nil) + e := NewDefaultExecutor(s).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFunctionCall( + planner.NewNodeFunctionCall("", planner.WithAgg( + planner.NewNodeAggregateWindowedFunction("", planner.WithAggCount( + planner.NewNodeCount(""))))))), + }, + planner.WithFrom(planner.NewNodeFromClause("", + []*planner.NodeTableSource{ + planner.NewNodeTableSource("", planner.WithTableName("test")), + }, + planner.WithWhere(GenNodeExpression("field", 1, planner.ComparisonOperatorGreaterEqual))))))))) + res, err := e.execSelect(context.TODO(), n) + assert.NoError(t, err) + assert.Equal(t, 1, len(res.Fields)) + assert.Equal(t, "count(*)", res.Fields[0].Name) + assert.Equal(t, querypb.Type_INT64, res.Fields[0].Type) + assert.Equal(t, 1, len(res.Rows)) + assert.Equal(t, 1, len(res.Rows[0])) + assert.Equal(t, querypb.Type_INT64, res.Rows[0][0].Type()) + }) + + t.Run("query without filter", func(t *testing.T) { + s := mocks.NewProxyComponent(t) + e := NewDefaultExecutor(s).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFullColumnName( + planner.NewNodeFullColumnName("", "field"))), + }, + planner.WithFrom(planner.NewNodeFromClause("", + []*planner.NodeTableSource{ + planner.NewNodeTableSource("", planner.WithTableName("test")), + }))))))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("failed to query with filter", func(t *testing.T) { + s := mocks.NewProxyComponent(t) + s.On("Query", + mock.Anything, // context.Context + mock.Anything, // *milvuspb.QueryRequest + ).Return(nil, errors.New("error mock Query")) + e := NewDefaultExecutor(s).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFullColumnName( + planner.NewNodeFullColumnName("", "field"))), + }, + planner.WithFrom(planner.NewNodeFromClause("", + []*planner.NodeTableSource{ + planner.NewNodeTableSource("", planner.WithTableName("test")), + }, + planner.WithWhere(GenNodeExpression("field", 100, planner.ComparisonOperatorEqual))))))))) + _, err := e.execSelect(context.TODO(), n) + assert.Error(t, err) + }) + + t.Run("query with filter", func(t *testing.T) { + s := mocks.NewProxyComponent(t) + res := &milvuspb.QueryResults{ + Status: &commonpb.Status{}, + FieldsData: []*schemapb.FieldData{ + { + Type: schemapb.DataType_Int64, + FieldName: "field", + Field: &schemapb.FieldData_Scalars{ + Scalars: &schemapb.ScalarField{ + Data: &schemapb.ScalarField_LongData{ + LongData: &schemapb.LongArray{ + Data: []int64{1, 2, 3, 4}, + }, + }, + }, + }, + }, + }, + CollectionName: "test", + } + s.On("Query", + mock.Anything, // context.Context + mock.Anything, // *milvuspb.QueryRequest + ).Return(res, nil) + e := NewDefaultExecutor(s).(*defaultExecutor) + n := planner.NewNodeSelectStatement("", planner.WithSimpleSelect( + planner.NewNodeSimpleSelect("", planner.WithQuery( + planner.NewNodeQuerySpecification("", + nil, + []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFullColumnName( + planner.NewNodeFullColumnName("", "field"))), + }, + planner.WithFrom(planner.NewNodeFromClause("", + []*planner.NodeTableSource{ + planner.NewNodeTableSource("", planner.WithTableName("test")), + }, + planner.WithWhere(GenNodeExpression("field", 100, planner.ComparisonOperatorEqual))))))))) + sqlRes, err := e.execSelect(context.TODO(), n) + assert.NoError(t, err) + assert.Equal(t, 1, len(sqlRes.Fields)) + assert.Equal(t, 4, len(sqlRes.Rows)) + assert.Equal(t, "field", sqlRes.Fields[0].Name) + assert.Equal(t, querypb.Type_INT64, sqlRes.Fields[0].Type) + assert.Equal(t, 1, len(sqlRes.Rows[0])) + assert.Equal(t, querypb.Type_INT64, sqlRes.Rows[0][0].Type()) + }) +} + +func Test_getOutputFieldsOrMatchCountRule(t *testing.T) { + t.Run("match count rule", func(t *testing.T) { + fl := []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFunctionCall( + planner.NewNodeFunctionCall("", planner.WithAgg( + planner.NewNodeAggregateWindowedFunction("", planner.WithAggCount( + planner.NewNodeCount(""))))))), + } + _, match, err := getOutputFieldsOrMatchCountRule(fl) + assert.NoError(t, err) + assert.True(t, match) + }) + + t.Run("star *, not supported", func(t *testing.T) { + fl := []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithStar()), + } + _, _, err := getOutputFieldsOrMatchCountRule(fl) + assert.Error(t, err) + }) + + t.Run("combined", func(t *testing.T) { + fl := []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFunctionCall( + planner.NewNodeFunctionCall("", planner.WithAgg( + planner.NewNodeAggregateWindowedFunction("", planner.WithAggCount( + planner.NewNodeCount(""))))))), + planner.NewNodeSelectElement("", planner.WithFullColumnName( + planner.NewNodeFullColumnName("", "field"))), + } + _, _, err := getOutputFieldsOrMatchCountRule(fl) + assert.Error(t, err) + }) + + t.Run("alias, not supported", func(t *testing.T) { + fl := []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFullColumnName( + planner.NewNodeFullColumnName("", "field", planner.FullColumnNameWithAlias("alias")))), + } + _, _, err := getOutputFieldsOrMatchCountRule(fl) + assert.Error(t, err) + }) + + t.Run("normal case", func(t *testing.T) { + fl := []*planner.NodeSelectElement{ + planner.NewNodeSelectElement("", planner.WithFullColumnName( + planner.NewNodeFullColumnName("", "field1"))), + planner.NewNodeSelectElement("", planner.WithFullColumnName( + planner.NewNodeFullColumnName("", "field2"))), + } + outputFields, match, err := getOutputFieldsOrMatchCountRule(fl) + assert.NoError(t, err) + assert.False(t, match) + assert.ElementsMatch(t, []string{"field1", "field2"}, outputFields) + }) +} diff --git a/internal/mysqld/executor/utils_test.go b/internal/mysqld/executor/utils_test.go new file mode 100644 index 0000000000..aae3d863af --- /dev/null +++ b/internal/mysqld/executor/utils_test.go @@ -0,0 +1,22 @@ +package executor + +import "github.com/milvus-io/milvus/internal/mysqld/planner" + +func GenNodeExpression(field string, c int64, op planner.ComparisonOperator) *planner.NodeExpression { + n := planner.NewNodeExpression("", planner.WithPredicate( + planner.NewNodePredicate("", planner.WithNodeBinaryComparisonPredicate( + planner.NewNodeBinaryComparisonPredicate("", + planner.NewNodePredicate("", planner.WithNodeExpressionAtomPredicate( + planner.NewNodeExpressionAtomPredicate("", + planner.NewNodeExpressionAtom("", planner.ExpressionAtomWithFullColumnName( + planner.NewNodeFullColumnName("", field)))))), + planner.NewNodePredicate("", planner.WithNodeExpressionAtomPredicate( + planner.NewNodeExpressionAtomPredicate("", + planner.NewNodeExpressionAtom("", planner.ExpressionAtomWithConstant( + planner.NewNodeConstant("", planner.WithDecimalLiteral(c))))))), + op), + ), + )), + ) + return n +} diff --git a/internal/mysqld/factory.go b/internal/mysqld/factory.go new file mode 100644 index 0000000000..869f7776b2 --- /dev/null +++ b/internal/mysqld/factory.go @@ -0,0 +1,40 @@ +package mysqld + +import ( + "github.com/milvus-io/milvus/internal/mysqld/executor" + "github.com/milvus-io/milvus/internal/mysqld/optimizer" + parserimpl "github.com/milvus-io/milvus/internal/mysqld/parser" + "github.com/milvus-io/milvus/internal/mysqld/parser/antlrparser" + "github.com/milvus-io/milvus/internal/types" +) + +type sqlFactory interface { + NewParser() parserimpl.Parser + NewOptimizer() (optimizer.RuleBasedOptimizer, optimizer.CostBasedOptimizer) + NewCompiler() executor.Compiler + NewExecutor() executor.Executor +} + +type defaultFactory struct { + s types.ProxyComponent +} + +func (f defaultFactory) NewParser() parserimpl.Parser { + return antlrparser.NewAntlrParser() +} + +func (f defaultFactory) NewOptimizer() (optimizer.RuleBasedOptimizer, optimizer.CostBasedOptimizer) { + return optimizer.NewDefaultRBO(), optimizer.NewDefaultCBO() +} + +func (f defaultFactory) NewCompiler() executor.Compiler { + return executor.NewDefaultCompiler() +} + +func (f defaultFactory) NewExecutor() executor.Executor { + return executor.NewDefaultExecutor(f.s) +} + +func newDefaultFactory(s types.ProxyComponent) sqlFactory { + return &defaultFactory{s: s} +} diff --git a/internal/mysqld/handler.go b/internal/mysqld/handler.go new file mode 100644 index 0000000000..08670d3460 --- /dev/null +++ b/internal/mysqld/handler.go @@ -0,0 +1,122 @@ +package mysqld + +import ( + "context" + "fmt" + "strings" + + "github.com/milvus-io/milvus/internal/log" + "github.com/milvus-io/milvus/internal/types" + "github.com/xelabs/go-mysqlstack/driver" + "github.com/xelabs/go-mysqlstack/sqlparser/depends/query" + querypb "github.com/xelabs/go-mysqlstack/sqlparser/depends/query" + "github.com/xelabs/go-mysqlstack/sqlparser/depends/sqltypes" +) + +type handler struct { + s types.ProxyComponent +} + +func (h *handler) ServerVersion() string { + return "Milvus" +} + +func (h *handler) SetServerVersion() { +} + +func (h *handler) NewSession(session *driver.Session) { +} + +func (h *handler) SessionInc(session *driver.Session) { +} + +func (h *handler) SessionDec(session *driver.Session) { +} + +func (h *handler) SessionClosed(session *driver.Session) { +} + +func (h *handler) SessionCheck(session *driver.Session) error { + return nil +} + +func (h *handler) AuthCheck(session *driver.Session) error { + return nil +} + +func (h *handler) ComInitDB(session *driver.Session, database string) error { + return nil +} + +// ComQuery TODO: investigate how bindVariables work. +func (h *handler) ComQuery(session *driver.Session, query string, bindVariables map[string]*query.BindVariable, callback func(*sqltypes.Result) error) error { + if err := h.handleSpecialQuery(session, query, bindVariables, callback); err == nil { + return nil + } + + f := newDefaultFactory(h.s) + + parser := f.NewParser() + logicalPlan, warns, err := parser.Parse(query) + if err != nil { + return err + } + logWarns(warns) + + rbo, cbo := f.NewOptimizer() + optimizedLogicalPlan := rbo.Optimize(logicalPlan) + + compiler := f.NewCompiler() + physicalPlan, err := compiler.Compile(optimizedLogicalPlan) + if err != nil { + return err + } + + optimizedPhysicalPlan := cbo.Optimize(physicalPlan) + + e := f.NewExecutor() + res, err := e.Run(context.TODO(), optimizedPhysicalPlan) + if err != nil { + return err + } + return callback(res) +} + +func (h *handler) handleSpecialQuery(session *driver.Session, query string, bindVariables map[string]*query.BindVariable, callback func(*sqltypes.Result) error) error { + words := strings.Fields(query) + + // select @@version_comment limit 1 + if len(words) == 4 && + strings.ToLower(words[0]) == "select" && + strings.ToLower(words[1]) == "@@version_comment" && + strings.ToLower(words[2]) == "limit" && + strings.ToLower(words[3]) == "1" { + res := &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "@@version_comment", + Type: querypb.Type_VARCHAR, + }, + }, + Rows: [][]sqltypes.Value{ + { + sqltypes.NewVarChar("TODO"), + }, + }, + } + return callback(res) + } + + return fmt.Errorf("unsupported sql: %s", query) +} + +func logWarns(warns []error) { + for _, warn := range warns { + log.Info(warn.Error()) + } +} + +func newHandler(s types.ProxyComponent) driver.Handler { + h := &handler{s: s} + return h +} diff --git a/internal/mysqld/optimizer/cbo.go b/internal/mysqld/optimizer/cbo.go new file mode 100644 index 0000000000..07fe144271 --- /dev/null +++ b/internal/mysqld/optimizer/cbo.go @@ -0,0 +1,17 @@ +package optimizer + +import "github.com/milvus-io/milvus/internal/mysqld/planner" + +type CostBasedOptimizer interface { + Optimize(plan *planner.PhysicalPlan) *planner.PhysicalPlan +} + +type defaultCBO struct{} + +func (o defaultCBO) Optimize(plan *planner.PhysicalPlan) *planner.PhysicalPlan { + return plan +} + +func NewDefaultCBO() CostBasedOptimizer { + return &defaultCBO{} +} diff --git a/internal/mysqld/optimizer/rbo.go b/internal/mysqld/optimizer/rbo.go new file mode 100644 index 0000000000..fe193ef82b --- /dev/null +++ b/internal/mysqld/optimizer/rbo.go @@ -0,0 +1,19 @@ +package optimizer + +import ( + "github.com/milvus-io/milvus/internal/mysqld/planner" +) + +type RuleBasedOptimizer interface { + Optimize(plan *planner.LogicalPlan) *planner.LogicalPlan +} + +type defaultRBO struct{} + +func (o defaultRBO) Optimize(plan *planner.LogicalPlan) *planner.LogicalPlan { + return plan +} + +func NewDefaultRBO() RuleBasedOptimizer { + return &defaultRBO{} +} diff --git a/internal/mysqld/parser/antlrparser/ast_builder.go b/internal/mysqld/parser/antlrparser/ast_builder.go new file mode 100644 index 0000000000..7974fc621b --- /dev/null +++ b/internal/mysqld/parser/antlrparser/ast_builder.go @@ -0,0 +1,832 @@ +package antlrparser + +import ( + "fmt" + "strconv" + + "github.com/milvus-io/milvus/internal/mysqld/planner" + + "github.com/antlr/antlr4/runtime/Go/antlr/v4" + parsergen "github.com/milvus-io/milvus/internal/mysqld/parser/antlrparser/parser" +) + +type AstBuilder struct { + parsergen.BaseMySqlParserVisitor +} + +type AstBuilderOption func(*AstBuilder) + +func (v *AstBuilder) apply(opts ...AstBuilderOption) { + for _, opt := range opts { + opt(v) + } +} + +func (v *AstBuilder) VisitRoot(ctx *parsergen.RootContext) interface{} { + return ctx.SqlStatements().Accept(v) +} + +func (v *AstBuilder) VisitSqlStatements(ctx *parsergen.SqlStatementsContext) interface{} { + allSqlStatementsCtx := ctx.AllSqlStatement() + sqlStatements := make([]*planner.NodeSqlStatement, 0, len(allSqlStatementsCtx)) + for _, sqlStatementCtx := range allSqlStatementsCtx { + r := sqlStatementCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + n := GetSqlStatement(r) + if n == nil { + return fmt.Errorf("failed to parse sql statement: %s", sqlStatementCtx.GetText()) + } + sqlStatements = append(sqlStatements, n) + } + return planner.NewNodeSqlStatements(sqlStatements, GetOriginalText(ctx)) +} + +func (v *AstBuilder) VisitSqlStatement(ctx *parsergen.SqlStatementContext) interface{} { + dmlStatement := ctx.DmlStatement() + if dmlStatement == nil { + return fmt.Errorf("sql statement only support dml statement now: %s", GetOriginalText(ctx)) + } + r := dmlStatement.Accept(v) + if err := GetError(r); err != nil { + return err + } + n := GetDmlStatement(r) + if n == nil { + return fmt.Errorf("failed to parse dml statement: %s", dmlStatement.GetText()) + } + return planner.NewNodeSqlStatement(GetOriginalText(ctx), planner.WithDmlStatement(n)) +} + +func (v *AstBuilder) VisitEmptyStatement_(ctx *parsergen.EmptyStatement_Context) interface{} { + // Should not be visited. + return nil +} + +func (v *AstBuilder) VisitDmlStatement(ctx *parsergen.DmlStatementContext) interface{} { + selectStatement := ctx.SelectStatement() + if selectStatement == nil { + return fmt.Errorf("dml statement only support select statement now: %s", GetOriginalText(ctx)) + } + r := selectStatement.Accept(v) + if err := GetError(r); err != nil { + return err + } + n := GetSelectStatement(r) + if n == nil { + return fmt.Errorf("failed to parse select statement: %s", selectStatement.GetText()) + } + return planner.NewNodeDmlStatement(GetOriginalText(ctx), planner.WithSelectStatement(n)) +} + +func (v *AstBuilder) VisitSimpleSelect(ctx *parsergen.SimpleSelectContext) interface{} { + var opts []planner.NodeSimpleSelectOption + + querySpecificationCtx := ctx.QuerySpecification() + if querySpecificationCtx == nil { + return fmt.Errorf("simple select only support query specification now: %s", GetOriginalText(ctx)) + } + + r := querySpecificationCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + + n := GetQuerySpecification(r) + if n == nil { + return fmt.Errorf("failed to parse query specification: %s", GetOriginalText(querySpecificationCtx)) + } + + opts = append(opts, planner.WithQuery(n)) + + lockClauseCtx := ctx.LockClause() + if lockClauseCtx != nil { + r := lockClauseCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + + if n := GetLockClause(r); n != nil { + opts = append(opts, planner.WithLockClause(n)) + } + } + + text := GetOriginalText(ctx) + nodeSimpleSelect := planner.NewNodeSimpleSelect(text, opts...) + return planner.NewNodeSelectStatement(text, planner.WithSimpleSelect(nodeSimpleSelect)) +} + +func (v *AstBuilder) VisitLockClause(ctx *parsergen.LockClauseContext) interface{} { + //o := planner.LockClauseOptionUnknown + //text := GetOriginalText(ctx) + //if CaseInsensitiveEqual(text, planner.LockClauseOption_ForUpdate_Str) { + // o = planner.LockClauseOptionForUpdate + //} else if CaseInsensitiveEqual(text, planner.LockClauseOption_LockInShareMode_Str) { + // o = planner.LockClauseOptionLockInShareMode + //} + //return planner.NewNodeLockClause(text, o) + return fmt.Errorf("lock clause is not supported: %s", GetOriginalText(ctx)) +} + +func (v *AstBuilder) VisitQuerySpecification(ctx *parsergen.QuerySpecificationContext) interface{} { + allSelectSpecCtx := ctx.AllSelectSpec() + selectSpecs := make([]*planner.NodeSelectSpec, 0, len(allSelectSpecCtx)) + for _, selectSpecCtx := range allSelectSpecCtx { + r := selectSpecCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + if n := GetSelectSpec(r); n != nil { + selectSpecs = append(selectSpecs, n) + } + } + + selectElementsCtx := ctx.SelectElements() + allSelectElementsCtx := selectElementsCtx.(*parsergen.SelectElementsContext).AllSelectElement() + selectElements := make([]*planner.NodeSelectElement, 0, len(allSelectElementsCtx)) + if star := selectElementsCtx.GetStar(); star != nil { + selectElements = append(selectElements, planner.NewNodeSelectElement(star.GetText(), planner.WithStar())) + } + + for _, selectElementCtx := range allSelectElementsCtx { + r := selectElementCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + if n := GetSelectElement(r); n != nil { + selectElements = append(selectElements, n) + } + } + + var opts []planner.NodeQuerySpecificationOption + + fromCtx := ctx.FromClause() + if fromCtx != nil { + r := fromCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + if n := GetFromClause(r); n != nil { + opts = append(opts, planner.WithFrom(n)) + } + } + + limitCtx := ctx.LimitClause() + if limitCtx != nil { + r := limitCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + if n := GetLimitClause(r); n != nil { + opts = append(opts, planner.WithLimit(n)) + } + } + + return planner.NewNodeQuerySpecification(GetOriginalText(ctx), selectSpecs, selectElements, opts...) +} + +func (v *AstBuilder) VisitSelectSpec(ctx *parsergen.SelectSpecContext) interface{} { + return fmt.Errorf("select spec is not supported: %s", GetOriginalText(ctx)) +} + +func (v *AstBuilder) VisitSelectElements(ctx *parsergen.SelectElementsContext) interface{} { + // Should not be visited. + return nil +} + +func (v *AstBuilder) VisitSelectColumnElement(ctx *parsergen.SelectColumnElementContext) interface{} { + var opts []planner.NodeFullColumnNameOption + + asCtx := ctx.AS() + uidCtx := ctx.Uid() + + if asCtx != nil && uidCtx != nil { + r := uidCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + if alias, ok := r.(string); ok { + opts = append(opts, planner.FullColumnNameWithAlias(alias)) + } + } + + if asCtx == nil && uidCtx != nil { + return fmt.Errorf("invalid alias of column: %s", GetOriginalText(ctx)) + } + + r := ctx.FullColumnName().Accept(v) + if err := GetError(r); err != nil { + return err + } + s := r.(string) + text := GetOriginalText(ctx) + n := planner.NewNodeFullColumnName(text, s, opts...) + return planner.NewNodeSelectElement(text, planner.WithFullColumnName(n)) +} + +func (v *AstBuilder) VisitSelectFunctionElement(ctx *parsergen.SelectFunctionElementContext) interface{} { + var opts []planner.NodeFunctionCallOption + + asCtx := ctx.AS() + uidCtx := ctx.Uid() + + if asCtx != nil && uidCtx != nil { + r := uidCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + if alias, ok := r.(string); ok { + opts = append(opts, planner.FunctionCallWithAlias(alias)) + } + } + + if asCtx == nil && uidCtx != nil { + return fmt.Errorf("invalid alias of function call: %s", ctx.GetText()) + } + + r := ctx.FunctionCall().Accept(v) + if err := GetError(r); err != nil { + return err + } + if n := GetAggregateWindowedFunction(r); n != nil { + opts = append(opts, planner.WithAgg(n)) + } + text := GetOriginalText(ctx) + + n := planner.NewNodeFunctionCall(text, opts...) + return planner.NewNodeSelectElement(text, planner.WithFunctionCall(n)) +} + +func (v *AstBuilder) VisitFromClause(ctx *parsergen.FromClauseContext) interface{} { + text := GetOriginalText(ctx) + + tableSourcesCtx := ctx.TableSources().(*parsergen.TableSourcesContext) + allTableSourcesCtx := tableSourcesCtx.AllTableSource() + tableSources := make([]*planner.NodeTableSource, 0, len(allTableSourcesCtx)) + for _, tableSourceCtx := range allTableSourcesCtx { + r := tableSourceCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + if n := GetTableSource(r); n != nil { + tableSources = append(tableSources, n) + } + } + + var opts []planner.NodeFromClauseOption + + whereCtx := ctx.Expression() + if whereCtx != nil { + r := whereCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + if n := GetExpression(r); n != nil { + opts = append(opts, planner.WithWhere(n)) + } + } + + return planner.NewNodeFromClause(text, tableSources, opts...) +} + +func (v *AstBuilder) VisitTableSources(ctx *parsergen.TableSourcesContext) interface{} { + // Should not be visited. + return nil +} + +func (v *AstBuilder) VisitTableSourceBase(ctx *parsergen.TableSourceBaseContext) interface{} { + text := GetOriginalText(ctx) + + tableNameCtx := ctx.TableName() + r := tableNameCtx.Accept(v) + + if err := GetError(r); err != nil { + return err + } + + s, ok := r.(string) + if !ok { + return fmt.Errorf("not supported table source: %s", text) + } + + return planner.NewNodeTableSource(text, planner.WithTableName(s)) +} + +func (v *AstBuilder) VisitLimitClause(ctx *parsergen.LimitClauseContext) interface{} { + text := GetOriginalText(ctx) + offset, limit := int64(0), int64(0) + + getInt := func(tree antlr.ParseTree) (int64, error) { + r := tree.Accept(v) + if err := GetError(r); err != nil { + return 0, err + } + return r.(int64), nil + } + + offsetCtx := ctx.GetOffset() + if offsetCtx != nil { + i, err := getInt(offsetCtx) + if err != nil { + return err + } + offset = i + } + + limitCtx := ctx.GetLimit() + i, err := getInt(limitCtx) + if err != nil { + return err + } + limit = i + + return planner.NewNodeLimitClause(text, limit, offset) +} + +func (v *AstBuilder) VisitLimitClauseAtom(ctx *parsergen.LimitClauseAtomContext) interface{} { + text := GetOriginalText(ctx) + + decimalLiteralCtx := ctx.DecimalLiteral() + if decimalLiteralCtx == nil { + return fmt.Errorf("limit only support literal now: %s", text) + } + + return decimalLiteralCtx.Accept(v) +} + +func (v *AstBuilder) VisitFullId(ctx *parsergen.FullIdContext) interface{} { + return GetOriginalText(ctx) +} + +func (v *AstBuilder) VisitTableName(ctx *parsergen.TableNameContext) interface{} { + return GetOriginalText(ctx) +} + +func (v *AstBuilder) VisitFullColumnName(ctx *parsergen.FullColumnNameContext) interface{} { + return GetOriginalText(ctx) +} + +func (v *AstBuilder) VisitCollationName(ctx *parsergen.CollationNameContext) interface{} { + return GetOriginalText(ctx) +} + +func (v *AstBuilder) VisitUid(ctx *parsergen.UidContext) interface{} { + return GetOriginalText(ctx) +} + +func (v *AstBuilder) VisitSimpleId(ctx *parsergen.SimpleIdContext) interface{} { + return GetOriginalText(ctx) +} + +func (v *AstBuilder) VisitDottedId(ctx *parsergen.DottedIdContext) interface{} { + return GetOriginalText(ctx) +} + +func (v *AstBuilder) VisitDecimalLiteral(ctx *parsergen.DecimalLiteralContext) interface{} { + if decimalCtx := ctx.DECIMAL_LITERAL(); decimalCtx != nil { + i, err := strconv.Atoi(decimalCtx.GetText()) + if err != nil { + return err + } + return int64(i) + } + + if zeroCtx := ctx.ZERO_DECIMAL(); zeroCtx != nil { + return int64(0) + } + + if oneCtx := ctx.ONE_DECIMAL(); oneCtx != nil { + return int64(1) + } + + if twoCtx := ctx.TWO_DECIMAL(); twoCtx != nil { + return int64(2) + } + + if realCtx := ctx.REAL_LITERAL(); realCtx != nil { + f, err := processRealCtx(realCtx) + if err != nil { + return err + } + return f + } + + return nil +} + +func processRealCtx(n antlr.TerminalNode) (float64, error) { + f, err := strconv.ParseFloat(n.GetText(), 64) + if err != nil { + return 0.0, err + } + return f, nil +} + +func (v *AstBuilder) VisitStringLiteral(ctx *parsergen.StringLiteralContext) interface{} { + return GetOriginalText(ctx) +} + +func (v *AstBuilder) VisitBooleanLiteral(ctx *parsergen.BooleanLiteralContext) interface{} { + return ctx.TRUE() != nil +} + +func (v *AstBuilder) VisitHexadecimalLiteral(ctx *parsergen.HexadecimalLiteralContext) interface{} { + text := GetOriginalText(ctx) + i, err := strconv.ParseInt(text, 16, 64) + if err != nil { + return err + } + return i +} + +func (v *AstBuilder) VisitConstant(ctx *parsergen.ConstantContext) interface{} { + if stringLiteralCtx := ctx.StringLiteral(); stringLiteralCtx != nil { + return stringLiteralCtx.Accept(v) + } + + if decimalLiteralCtx := ctx.DecimalLiteral(); decimalLiteralCtx != nil { + decimal := decimalLiteralCtx.Accept(v) + if err := GetError(decimal); err != nil { + return err + } + if ctx.MINUS() != nil { + switch realType := decimal.(type) { + case int: + return -realType + case int32: + return -realType + case int64: + return -realType + case float32: + return -realType + case float64: + return -realType + default: + return fmt.Errorf("invalid data type: %s", decimalLiteralCtx.GetText()) + } + } + return decimal + } + + if hexadecimalLiteralCtx := ctx.HexadecimalLiteral(); hexadecimalLiteralCtx != nil { + return hexadecimalLiteralCtx.Accept(v) + } + + if realCtx := ctx.REAL_LITERAL(); realCtx != nil { + f, err := processRealCtx(realCtx) + if err != nil { + return err + } + return f + } + + return nil +} + +func (v *AstBuilder) VisitExpressions(ctx *parsergen.ExpressionsContext) interface{} { + text := GetOriginalText(ctx) + expressionsCtx := ctx.AllExpression() + expressions := make([]*planner.NodeExpression, 0, len(expressionsCtx)) + for _, expressionCtx := range expressionsCtx { + n, err := v.getExpression(expressionCtx) + if err != nil { + return err + } + if n == nil { + return fmt.Errorf("failed to parse expression: %s", GetOriginalText(expressionCtx)) + } + expressions = append(expressions, n) + } + return planner.NewNodeExpressions(text, expressions) +} + +func (v *AstBuilder) VisitAggregateFunctionCall(ctx *parsergen.AggregateFunctionCallContext) interface{} { + r := ctx.AggregateWindowedFunction().Accept(v) + if err := GetError(r); err != nil { + return err + } + if n := GetCount(r); n != nil { + return planner.NewNodeAggregateWindowedFunction(GetOriginalText(ctx), planner.WithAggCount(n)) + } + return nil +} + +func (v *AstBuilder) VisitAggregateWindowedFunction(ctx *parsergen.AggregateWindowedFunctionContext) interface{} { + text := GetOriginalText(ctx) + return planner.NewNodeCount(text) +} + +func (v *AstBuilder) getPredicate(tree antlr.ParseTree) (*planner.NodePredicate, error) { + r := tree.Accept(v) + if err := GetError(r); err != nil { + return nil, err + } + return GetPredicate(r), nil +} + +func (v *AstBuilder) VisitIsExpression(ctx *parsergen.IsExpressionContext) interface{} { + text := GetOriginalText(ctx) + + testValue := planner.TestValueUnknown + if ctx.TRUE() != nil { + testValue = planner.TestValueTrue + } + if ctx.FALSE() != nil { + testValue = planner.TestValueFalse + } + + op := planner.IsOperatorIs + if ctx.NOT() != nil { + op = planner.IsOperatorIsNot + } + + n, err := v.getPredicate(ctx.Predicate()) + + if err != nil { + return err + } + + if n == nil { + return fmt.Errorf("failed to parse [is expression]: %s", text) + } + + isExpr := planner.NewNodeIsExpression(text, n, testValue, op) + return planner.NewNodeExpression(text, planner.WithIsExpr(isExpr)) +} + +func (v *AstBuilder) getExpression(tree antlr.ParseTree) (*planner.NodeExpression, error) { + r := tree.Accept(v) + if err := GetError(r); err != nil { + return nil, err + } + return GetExpression(r), nil +} + +func (v *AstBuilder) VisitNotExpression(ctx *parsergen.NotExpressionContext) interface{} { + text := GetOriginalText(ctx) + expressionCtx := ctx.Expression() + n, err := v.getExpression(expressionCtx) + if err != nil { + return err + } + if n == nil { + return fmt.Errorf("failed to parse [not expression]: %s", text) + } + notExpr := planner.NewNodeNotExpression(text, n) + return planner.NewNodeExpression(text, planner.WithNotExpr(notExpr)) +} + +func (v *AstBuilder) VisitLogicalExpression(ctx *parsergen.LogicalExpressionContext) interface{} { + text := GetOriginalText(ctx) + op := ctx.LogicalOperator().Accept(v).(planner.LogicalOperator) + left, right := ctx.Expression(0), ctx.Expression(1) + + leftExpr, err := v.getExpression(left) + if err != nil { + return err + } + + if leftExpr == nil { + return fmt.Errorf("failed to parse left expr: %s", left.GetText()) + } + + rightExpr, err := v.getExpression(right) + if err != nil { + return err + } + + if rightExpr == nil { + return fmt.Errorf("failed to parse right expr: %s", right.GetText()) + } + + logicalExpr := planner.NewNodeLogicalExpression(text, leftExpr, rightExpr, op) + return planner.NewNodeExpression(text, planner.WithLogicalExpr(logicalExpr)) +} + +func (v *AstBuilder) VisitPredicateExpression(ctx *parsergen.PredicateExpressionContext) interface{} { + text := GetOriginalText(ctx) + predicateCtx := ctx.Predicate() + predicate, err := v.getPredicate(predicateCtx) + if err != nil { + return err + } + if predicate == nil { + return fmt.Errorf("failed to parse predicate expression: %s", GetOriginalText(predicateCtx)) + } + return planner.NewNodeExpression(text, planner.WithPredicate(predicate)) +} + +func (v *AstBuilder) getExpressionAtom(tree antlr.ParseTree) (*planner.NodeExpressionAtom, error) { + r := tree.Accept(v) + if err := GetError(r); err != nil { + return nil, err + } + return GetExpressionAtom(r), nil +} + +func (v *AstBuilder) VisitExpressionAtomPredicate(ctx *parsergen.ExpressionAtomPredicateContext) interface{} { + text := GetOriginalText(ctx) + if ctx.LOCAL_ID() != nil || ctx.VAR_ASSIGN() != nil { + return fmt.Errorf("assignment not supported: %s", text) + } + n, err := v.getExpressionAtom(ctx.ExpressionAtom()) + if err != nil { + return err + } + if n == nil { + return fmt.Errorf("failed to parse expression atom predicate: %s", text) + } + expr := planner.NewNodeExpressionAtomPredicate(text, n) + return planner.NewNodePredicate(text, planner.WithNodeExpressionAtomPredicate(expr)) +} + +func (v *AstBuilder) VisitBinaryComparisonPredicate(ctx *parsergen.BinaryComparisonPredicateContext) interface{} { + text := GetOriginalText(ctx) + + op := ctx.ComparisonOperator().Accept(v).(planner.ComparisonOperator) + + leftCtx, rightCtx := ctx.GetLeft(), ctx.GetRight() + + left, err := v.getPredicate(leftCtx) + if err != nil { + return err + } + if left == nil { + return fmt.Errorf("failed to parse left predicate: %s", GetOriginalText(leftCtx)) + } + + right, err := v.getPredicate(rightCtx) + if err != nil { + return err + } + if right == nil { + return fmt.Errorf("failed to parse right predicate: %s", GetOriginalText(rightCtx)) + } + + expr := planner.NewNodeBinaryComparisonPredicate(text, left, right, op) + return planner.NewNodePredicate(text, planner.WithNodeBinaryComparisonPredicate(expr)) +} + +func (v *AstBuilder) VisitInPredicate(ctx *parsergen.InPredicateContext) interface{} { + text := GetOriginalText(ctx) + + op := planner.InOperatorIn + if ctx.NOT() != nil { + op = planner.InOperatorNotIn + } + + predicateCtx := ctx.Predicate() + n, err := v.getPredicate(predicateCtx) + if err != nil { + return err + } + if n == nil { + return fmt.Errorf("failed to parse left in predicate: %s", GetOriginalText(predicateCtx)) + } + + expressionsCtx := ctx.Expressions() + r := expressionsCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + exprs := GetExpressions(r) + if exprs == nil { + return fmt.Errorf("failed to parse in expressions: %s", GetOriginalText(expressionsCtx)) + } + + expr := planner.NewNodeInPredicate(text, n, exprs, op) + return planner.NewNodePredicate(text, planner.WithInPredicate(expr)) +} + +func (v *AstBuilder) VisitConstantExpressionAtom(ctx *parsergen.ConstantExpressionAtomContext) interface{} { + text := GetOriginalText(ctx) + constantCtx := ctx.Constant().(*parsergen.ConstantContext) + r := constantCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + var opts []planner.NodeConstantOption + switch t := r.(type) { + case int64: + opts = append(opts, planner.WithDecimalLiteral(t)) + case string: + opts = append(opts, planner.WithStringLiteral(t)) + case float64: + opts = append(opts, planner.WithRealLiteral(t)) + case bool: + opts = append(opts, planner.WithBooleanLiteral(t)) + } + c := planner.NewNodeConstant(GetOriginalText(constantCtx), opts...) + return planner.NewNodeExpressionAtom(text, planner.ExpressionAtomWithConstant(c)) +} + +func (v *AstBuilder) VisitFullColumnNameExpressionAtom(ctx *parsergen.FullColumnNameExpressionAtomContext) interface{} { + text := GetOriginalText(ctx) + fullColumnNameCtx := ctx.FullColumnName() + r := fullColumnNameCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + n := planner.NewNodeFullColumnName(GetOriginalText(fullColumnNameCtx), r.(string)) + return planner.NewNodeExpressionAtom(text, planner.ExpressionAtomWithFullColumnName(n)) +} + +func (v *AstBuilder) VisitUnaryExpressionAtom(ctx *parsergen.UnaryExpressionAtomContext) interface{} { + text := GetOriginalText(ctx) + op := ctx.UnaryOperator().Accept(v).(planner.UnaryOperator) + expressionAtomCtx := ctx.ExpressionAtom() + r := expressionAtomCtx.Accept(v) + if err := GetError(r); err != nil { + return err + } + n := GetExpressionAtom(r) + expr := planner.NewNodeUnaryExpressionAtom(GetOriginalText(expressionAtomCtx), n, op) + return planner.NewNodeExpressionAtom(text, planner.ExpressionAtomWithUnaryExpr(expr)) +} + +func (v *AstBuilder) VisitNestedExpressionAtom(ctx *parsergen.NestedExpressionAtomContext) interface{} { + text := GetOriginalText(ctx) + expressionsCtx := ctx.AllExpression() + expressions := make([]*planner.NodeExpression, 0, len(expressionsCtx)) + for _, expressionCtx := range expressionsCtx { + n, err := v.getExpression(expressionCtx) + if err != nil { + return err + } + expressions = append(expressions, n) + } + expr := planner.NewNodeNestedExpressionAtom(text, expressions) + return planner.NewNodeExpressionAtom(text, planner.ExpressionAtomWithNestedExpr(expr)) +} + +func (v *AstBuilder) VisitUnaryOperator(ctx *parsergen.UnaryOperatorContext) interface{} { + op := planner.UnaryOperatorUnknown + if ctx.EXCLAMATION_SYMBOL() != nil { + op = planner.UnaryOperatorExclamationSymbol + } + if ctx.BIT_NOT_OP() != nil { + op = planner.UnaryOperatorTilde + } + if ctx.PLUS() != nil { + op = planner.UnaryOperatorPositive + } + if ctx.MINUS() != nil { + op = planner.UnaryOperatorNegative + } + if ctx.NOT() != nil { + op = planner.UnaryOperatorNot + } + return op +} + +func (v *AstBuilder) VisitComparisonOperator(ctx *parsergen.ComparisonOperatorContext) interface{} { + op := planner.ComparisonOperatorUnknown + if ctx.EXCLAMATION_SYMBOL() != nil { + op = planner.ComparisonOperatorNotEqual + } + if ctx.EQUAL_SYMBOL() != nil { + op |= planner.ComparisonOperatorEqual + } + if ctx.LESS_SYMBOL() != nil { + op |= planner.ComparisonOperatorLessThan + } + if ctx.GREATER_SYMBOL() != nil { + op |= planner.ComparisonOperatorGreaterThan + } + return op +} + +func (v *AstBuilder) VisitLogicalOperator(ctx *parsergen.LogicalOperatorContext) interface{} { + op := planner.LogicalOperatorUnknown + if ctx.AND() != nil { + op = planner.LogicalOperatorAnd + } + if len(ctx.AllBIT_AND_OP()) != 0 { + op = planner.LogicalOperatorAnd + } + if ctx.OR() != nil { + op = planner.LogicalOperatorOr + } + if len(ctx.AllBIT_OR_OP()) != 0 { + op = planner.LogicalOperatorOr + } + return op +} + +func (v *AstBuilder) Build(ctx antlr.ParserRuleContext) (planner.Node, error) { + r := ctx.Accept(v) + if err := GetError(r); err != nil { + return nil, err + } + if n := GetNode(r); n != nil { + return n, nil + } + return nil, fmt.Errorf("failed to parse ast tree: %s", GetOriginalText(ctx)) +} + +func NewAstBuilder(opts ...AstBuilderOption) *AstBuilder { + v := &AstBuilder{} + v.apply(opts...) + return v +} diff --git a/internal/mysqld/parser/antlrparser/error_listeners.go b/internal/mysqld/parser/antlrparser/error_listeners.go new file mode 100644 index 0000000000..49f8b4f0d5 --- /dev/null +++ b/internal/mysqld/parser/antlrparser/error_listeners.go @@ -0,0 +1,17 @@ +package antlrparser + +import ( + "fmt" + "strconv" + + "github.com/antlr/antlr4/runtime/Go/antlr/v4" +) + +type ErrorListener struct { + *antlr.DefaultErrorListener + err error +} + +func (l *ErrorListener) SyntaxError(recognizer antlr.Recognizer, offendingSymbol interface{}, line, column int, msg string, e antlr.RecognitionException) { + l.err = fmt.Errorf("line " + strconv.Itoa(line) + ":" + strconv.Itoa(column) + " " + msg) +} diff --git a/internal/mysqld/parser/antlrparser/node_ret.go b/internal/mysqld/parser/antlrparser/node_ret.go new file mode 100644 index 0000000000..cf5dda4d8e --- /dev/null +++ b/internal/mysqld/parser/antlrparser/node_ret.go @@ -0,0 +1,158 @@ +package antlrparser + +import ( + "github.com/milvus-io/milvus/internal/mysqld/planner" +) + +func GetError(obj interface{}) error { + err, ok := obj.(error) + if !ok { + // obj is not an error. + return nil + } + return err +} + +func GetNode(obj interface{}) planner.Node { + n, ok := obj.(planner.Node) + if !ok { + return nil + } + return n +} + +func GetSqlStatements(obj interface{}) *planner.NodeSqlStatements { + n, ok := obj.(*planner.NodeSqlStatements) + if !ok { + return nil + } + return n +} + +func GetSqlStatement(obj interface{}) *planner.NodeSqlStatement { + n, ok := obj.(*planner.NodeSqlStatement) + if !ok { + return nil + } + return n +} + +func GetDmlStatement(obj interface{}) *planner.NodeDmlStatement { + n, ok := obj.(*planner.NodeDmlStatement) + if !ok { + return nil + } + return n +} + +func GetSelectStatement(obj interface{}) *planner.NodeSelectStatement { + n, ok := obj.(*planner.NodeSelectStatement) + if !ok { + return nil + } + return n +} + +func GetQuerySpecification(obj interface{}) *planner.NodeQuerySpecification { + n, ok := obj.(*planner.NodeQuerySpecification) + if !ok { + return nil + } + return n +} + +func GetLockClause(obj interface{}) *planner.NodeLockClause { + n, ok := obj.(*planner.NodeLockClause) + if !ok { + return nil + } + return n +} + +func GetSelectSpec(obj interface{}) *planner.NodeSelectSpec { + n, ok := obj.(*planner.NodeSelectSpec) + if !ok { + return nil + } + return n +} + +func GetSelectElement(obj interface{}) *planner.NodeSelectElement { + n, ok := obj.(*planner.NodeSelectElement) + if !ok { + return nil + } + return n +} + +func GetFromClause(obj interface{}) *planner.NodeFromClause { + n, ok := obj.(*planner.NodeFromClause) + if !ok { + return nil + } + return n +} + +func GetLimitClause(obj interface{}) *planner.NodeLimitClause { + n, ok := obj.(*planner.NodeLimitClause) + if !ok { + return nil + } + return n +} + +func GetAggregateWindowedFunction(obj interface{}) *planner.NodeAggregateWindowedFunction { + n, ok := obj.(*planner.NodeAggregateWindowedFunction) + if !ok { + return nil + } + return n +} + +func GetCount(obj interface{}) *planner.NodeCount { + n, ok := obj.(*planner.NodeCount) + if !ok { + return nil + } + return n +} + +func GetTableSource(obj interface{}) *planner.NodeTableSource { + n, ok := obj.(*planner.NodeTableSource) + if !ok { + return nil + } + return n +} + +func GetExpression(obj interface{}) *planner.NodeExpression { + n, ok := obj.(*planner.NodeExpression) + if !ok { + return nil + } + return n +} + +func GetPredicate(obj interface{}) *planner.NodePredicate { + n, ok := obj.(*planner.NodePredicate) + if !ok { + return nil + } + return n +} + +func GetExpressionAtom(obj interface{}) *planner.NodeExpressionAtom { + n, ok := obj.(*planner.NodeExpressionAtom) + if !ok { + return nil + } + return n +} + +func GetExpressions(obj interface{}) *planner.NodeExpressions { + n, ok := obj.(*planner.NodeExpressions) + if !ok { + return nil + } + return n +} diff --git a/internal/mysqld/parser/antlrparser/parser.go b/internal/mysqld/parser/antlrparser/parser.go new file mode 100644 index 0000000000..f72f6e37ec --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser.go @@ -0,0 +1,42 @@ +package antlrparser + +import ( + "github.com/antlr/antlr4/runtime/Go/antlr/v4" + "github.com/milvus-io/milvus/internal/mysqld/parser" + "github.com/milvus-io/milvus/internal/mysqld/planner" +) + +type antlrParser struct{} + +func (p antlrParser) Parse(sql string, opts ...parser.Option) (*planner.LogicalPlan, []error, error) { + el := &ErrorListener{} + + inputStream := antlr.NewInputStream(sql) + lexer := getLexer(inputStream, el) + defer putLexer(lexer) + + if el.err != nil { + return nil, nil, el.err + } + + parserFromPool := getParser(lexer, el) + defer putParser(parserFromPool) + + if el.err != nil { + return nil, nil, el.err + } + + ast := parserFromPool.Root() + n, err := NewAstBuilder().Build(ast) + if err != nil { + return nil, nil, err + } + + return &planner.LogicalPlan{ + Node: n, + }, nil, nil +} + +func NewAntlrParser() parser.Parser { + return &antlrParser{} +} diff --git a/internal/mysqld/parser/antlrparser/parser/MySqlLexer.g4 b/internal/mysqld/parser/antlrparser/parser/MySqlLexer.g4 new file mode 100644 index 0000000000..28a999400f --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/MySqlLexer.g4 @@ -0,0 +1,1357 @@ +/* +MySQL (Positive Technologies) grammar +The MIT License (MIT). +Copyright (c) 2015-2017, Ivan Kochurkin (kvanttt@gmail.com), Positive Technologies. +Copyright (c) 2017, Ivan Khudyashev (IHudyashov@ptsecurity.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +lexer grammar MySqlLexer; + +options { caseInsensitive = true; } + +channels { MYSQLCOMMENT, ERRORCHANNEL } + +// SKIP + +SPACE: [ \t\r\n]+ -> channel(HIDDEN); +SPEC_MYSQL_COMMENT: '/*!' .+? '*/' -> channel(MYSQLCOMMENT); +COMMENT_INPUT: '/*' .*? '*/' -> channel(HIDDEN); +LINE_COMMENT: ( + ('--' [ \t]* | '#') ~[\r\n]* ('\r'? '\n' | EOF) + | '--' ('\r'? '\n' | EOF) + ) -> channel(HIDDEN); + + +// Keywords +// Common Keywords + +ADD: 'ADD'; +ALL: 'ALL'; +ALTER: 'ALTER'; +ALWAYS: 'ALWAYS'; +ANALYZE: 'ANALYZE'; +AND: 'AND'; +ARRAY: 'ARRAY'; +AS: 'AS'; +ASC: 'ASC'; +ATTRIBUTE: 'ATTRIBUTE'; +BEFORE: 'BEFORE'; +BETWEEN: 'BETWEEN'; +BOTH: 'BOTH'; +BUCKETS: 'BUCKETS'; +BY: 'BY'; +CALL: 'CALL'; +CASCADE: 'CASCADE'; +CASE: 'CASE'; +CAST: 'CAST'; +CHANGE: 'CHANGE'; +CHARACTER: 'CHARACTER'; +CHECK: 'CHECK'; +COLLATE: 'COLLATE'; +COLUMN: 'COLUMN'; +CONDITION: 'CONDITION'; +CONSTRAINT: 'CONSTRAINT'; +CONTINUE: 'CONTINUE'; +CONVERT: 'CONVERT'; +CREATE: 'CREATE'; +CROSS: 'CROSS'; +CURRENT: 'CURRENT'; +CURRENT_ROLE: 'CURRENT_ROLE'; +CURRENT_USER: 'CURRENT_USER'; +CURSOR: 'CURSOR'; +DATABASE: 'DATABASE'; +DATABASES: 'DATABASES'; +DECLARE: 'DECLARE'; +DEFAULT: 'DEFAULT'; +DELAYED: 'DELAYED'; +DELETE: 'DELETE'; +DESC: 'DESC'; +DESCRIBE: 'DESCRIBE'; +DETERMINISTIC: 'DETERMINISTIC'; +DIAGNOSTICS: 'DIAGNOSTICS'; +DISTINCT: 'DISTINCT'; +DISTINCTROW: 'DISTINCTROW'; +DROP: 'DROP'; +EACH: 'EACH'; +ELSE: 'ELSE'; +ELSEIF: 'ELSEIF'; +EMPTY: 'EMPTY'; +ENCLOSED: 'ENCLOSED'; +ESCAPED: 'ESCAPED'; +EXCEPT: 'EXCEPT'; +EXISTS: 'EXISTS'; +EXIT: 'EXIT'; +EXPLAIN: 'EXPLAIN'; +FALSE: 'FALSE'; +FETCH: 'FETCH'; +FOR: 'FOR'; +FORCE: 'FORCE'; +FOREIGN: 'FOREIGN'; +FROM: 'FROM'; +FULLTEXT: 'FULLTEXT'; +GENERATED: 'GENERATED'; +GET: 'GET'; +GRANT: 'GRANT'; +GROUP: 'GROUP'; +HAVING: 'HAVING'; +HIGH_PRIORITY: 'HIGH_PRIORITY'; +HISTOGRAM: 'HISTOGRAM'; +IF: 'IF'; +IGNORE: 'IGNORE'; +IGNORED: 'IGNORED'; +IN: 'IN'; +INDEX: 'INDEX'; +INFILE: 'INFILE'; +INNER: 'INNER'; +INOUT: 'INOUT'; +INSERT: 'INSERT'; +INTERVAL: 'INTERVAL'; +INTO: 'INTO'; +IS: 'IS'; +ITERATE: 'ITERATE'; +JOIN: 'JOIN'; +KEY: 'KEY'; +KEYS: 'KEYS'; +KILL: 'KILL'; +LATERAL: 'LATERAL'; +LEADING: 'LEADING'; +LEAVE: 'LEAVE'; +LEFT: 'LEFT'; +LIKE: 'LIKE'; +LIMIT: 'LIMIT'; +LINEAR: 'LINEAR'; +LINES: 'LINES'; +LOAD: 'LOAD'; +LOCK: 'LOCK'; +LOCKED: 'LOCKED'; +LOOP: 'LOOP'; +LOW_PRIORITY: 'LOW_PRIORITY'; +MASTER_BIND: 'MASTER_BIND'; +MASTER_SSL_VERIFY_SERVER_CERT: 'MASTER_SSL_VERIFY_SERVER_CERT'; +MATCH: 'MATCH'; +MAXVALUE: 'MAXVALUE'; +MINVALUE: 'MINVALUE'; +MODIFIES: 'MODIFIES'; +NATURAL: 'NATURAL'; +NOT: 'NOT'; +NO_WRITE_TO_BINLOG: 'NO_WRITE_TO_BINLOG'; +NULL_LITERAL: 'NULL'; +NUMBER: 'NUMBER'; +ON: 'ON'; +OPTIMIZE: 'OPTIMIZE'; +OPTION: 'OPTION'; +OPTIONAL: 'OPTIONAL'; +OPTIONALLY: 'OPTIONALLY'; +OR: 'OR'; +ORDER: 'ORDER'; +OUT: 'OUT'; +OUTER: 'OUTER'; +OUTFILE: 'OUTFILE'; +OVER: 'OVER'; +PARTITION: 'PARTITION'; +PRIMARY: 'PRIMARY'; +PROCEDURE: 'PROCEDURE'; +PURGE: 'PURGE'; +RANGE: 'RANGE'; +READ: 'READ'; +READS: 'READS'; +REFERENCES: 'REFERENCES'; +REGEXP: 'REGEXP'; +RELEASE: 'RELEASE'; +RENAME: 'RENAME'; +REPEAT: 'REPEAT'; +REPLACE: 'REPLACE'; +REQUIRE: 'REQUIRE'; +RESIGNAL: 'RESIGNAL'; +RESTRICT: 'RESTRICT'; +RETAIN: 'RETAIN'; +RETURN: 'RETURN'; +REVOKE: 'REVOKE'; +RIGHT: 'RIGHT'; +RLIKE: 'RLIKE'; +SCHEMA: 'SCHEMA'; +SCHEMAS: 'SCHEMAS'; +SELECT: 'SELECT'; +SET: 'SET'; +SEPARATOR: 'SEPARATOR'; +SHOW: 'SHOW'; +SIGNAL: 'SIGNAL'; +SKIP_: 'SKIP'; +SPATIAL: 'SPATIAL'; +SQL: 'SQL'; +SQLEXCEPTION: 'SQLEXCEPTION'; +SQLSTATE: 'SQLSTATE'; +SQLWARNING: 'SQLWARNING'; +SQL_BIG_RESULT: 'SQL_BIG_RESULT'; +SQL_CALC_FOUND_ROWS: 'SQL_CALC_FOUND_ROWS'; +SQL_SMALL_RESULT: 'SQL_SMALL_RESULT'; +SSL: 'SSL'; +STACKED: 'STACKED'; +STARTING: 'STARTING'; +STATEMENT: 'STATEMENT'; +STRAIGHT_JOIN: 'STRAIGHT_JOIN'; +TABLE: 'TABLE'; +TERMINATED: 'TERMINATED'; +THEN: 'THEN'; +TO: 'TO'; +TRAILING: 'TRAILING'; +TRIGGER: 'TRIGGER'; +TRUE: 'TRUE'; +UNDO: 'UNDO'; +UNION: 'UNION'; +UNIQUE: 'UNIQUE'; +UNLOCK: 'UNLOCK'; +UNSIGNED: 'UNSIGNED'; +UPDATE: 'UPDATE'; +USAGE: 'USAGE'; +USE: 'USE'; +USING: 'USING'; +VALUES: 'VALUES'; +WHEN: 'WHEN'; +WHERE: 'WHERE'; +WHILE: 'WHILE'; +WITH: 'WITH'; +WRITE: 'WRITE'; +XOR: 'XOR'; +ZEROFILL: 'ZEROFILL'; + +// DATA TYPE Keywords + +TINYINT: 'TINYINT'; +SMALLINT: 'SMALLINT'; +MEDIUMINT: 'MEDIUMINT'; +MIDDLEINT: 'MIDDLEINT'; +INT: 'INT'; +INT1: 'INT1'; +INT2: 'INT2'; +INT3: 'INT3'; +INT4: 'INT4'; +INT8: 'INT8'; +INTEGER: 'INTEGER'; +BIGINT: 'BIGINT'; +REAL: 'REAL'; +DOUBLE: 'DOUBLE'; +PRECISION: 'PRECISION'; +FLOAT: 'FLOAT'; +FLOAT4: 'FLOAT4'; +FLOAT8: 'FLOAT8'; +DECIMAL: 'DECIMAL'; +DEC: 'DEC'; +NUMERIC: 'NUMERIC'; +DATE: 'DATE'; +TIME: 'TIME'; +TIMESTAMP: 'TIMESTAMP'; +DATETIME: 'DATETIME'; +YEAR: 'YEAR'; +CHAR: 'CHAR'; +VARCHAR: 'VARCHAR'; +NVARCHAR: 'NVARCHAR'; +NATIONAL: 'NATIONAL'; +BINARY: 'BINARY'; +VARBINARY: 'VARBINARY'; +TINYBLOB: 'TINYBLOB'; +BLOB: 'BLOB'; +MEDIUMBLOB: 'MEDIUMBLOB'; +LONG: 'LONG'; +LONGBLOB: 'LONGBLOB'; +TINYTEXT: 'TINYTEXT'; +TEXT: 'TEXT'; +MEDIUMTEXT: 'MEDIUMTEXT'; +LONGTEXT: 'LONGTEXT'; +ENUM: 'ENUM'; +VARYING: 'VARYING'; +SERIAL: 'SERIAL'; + + +// Interval type Keywords + +YEAR_MONTH: 'YEAR_MONTH'; +DAY_HOUR: 'DAY_HOUR'; +DAY_MINUTE: 'DAY_MINUTE'; +DAY_SECOND: 'DAY_SECOND'; +HOUR_MINUTE: 'HOUR_MINUTE'; +HOUR_SECOND: 'HOUR_SECOND'; +MINUTE_SECOND: 'MINUTE_SECOND'; +SECOND_MICROSECOND: 'SECOND_MICROSECOND'; +MINUTE_MICROSECOND: 'MINUTE_MICROSECOND'; +HOUR_MICROSECOND: 'HOUR_MICROSECOND'; +DAY_MICROSECOND: 'DAY_MICROSECOND'; + +// JSON keywords +JSON_ARRAY: 'JSON_ARRAY'; +JSON_ARRAYAGG: 'JSON_ARRAYAGG'; +JSON_ARRAY_APPEND: 'JSON_ARRAY_APPEND'; +JSON_ARRAY_INSERT: 'JSON_ARRAY_INSERT'; +JSON_CONTAINS: 'JSON_CONTAINS'; +JSON_CONTAINS_PATH: 'JSON_CONTAINS_PATH'; +JSON_DEPTH: 'JSON_DEPTH'; +JSON_EXTRACT: 'JSON_EXTRACT'; +JSON_INSERT: 'JSON_INSERT'; +JSON_KEYS: 'JSON_KEYS'; +JSON_LENGTH: 'JSON_LENGTH'; +JSON_MERGE: 'JSON_MERGE'; +JSON_MERGE_PATCH: 'JSON_MERGE_PATCH'; +JSON_MERGE_PRESERVE: 'JSON_MERGE_PRESERVE'; +JSON_OBJECT: 'JSON_OBJECT'; +JSON_OBJECTAGG: 'JSON_OBJECTAGG'; +JSON_OVERLAPS: 'JSON_OVERLAPS'; +JSON_PRETTY: 'JSON_PRETTY'; +JSON_QUOTE: 'JSON_QUOTE'; +JSON_REMOVE: 'JSON_REMOVE'; +JSON_REPLACE: 'JSON_REPLACE'; +JSON_SCHEMA_VALID: 'JSON_SCHEMA_VALID'; +JSON_SCHEMA_VALIDATION_REPORT: 'JSON_SCHEMA_VALIDATION_REPORT'; +JSON_SEARCH: 'JSON_SEARCH'; +JSON_SET: 'JSON_SET'; +JSON_STORAGE_FREE: 'JSON_STORAGE_FREE'; +JSON_STORAGE_SIZE: 'JSON_STORAGE_SIZE'; +JSON_TABLE: 'JSON_TABLE'; +JSON_TYPE: 'JSON_TYPE'; +JSON_UNQUOTE: 'JSON_UNQUOTE'; +JSON_VALID: 'JSON_VALID'; +JSON_VALUE: 'JSON_VALUE'; +NESTED: 'NESTED'; +ORDINALITY: 'ORDINALITY'; +PATH: 'PATH'; + +// Group function Keywords + +AVG: 'AVG'; +BIT_AND: 'BIT_AND'; +BIT_OR: 'BIT_OR'; +BIT_XOR: 'BIT_XOR'; +COUNT: 'COUNT'; +CUME_DIST: 'CUME_DIST'; +DENSE_RANK: 'DENSE_RANK'; +FIRST_VALUE: 'FIRST_VALUE'; +GROUP_CONCAT: 'GROUP_CONCAT'; +LAG: 'LAG'; +LAST_VALUE: 'LAST_VALUE'; +LEAD: 'LEAD'; +MAX: 'MAX'; +MIN: 'MIN'; +NTILE: 'NTILE'; +NTH_VALUE: 'NTH_VALUE'; +PERCENT_RANK: 'PERCENT_RANK'; +RANK: 'RANK'; +ROW_NUMBER: 'ROW_NUMBER'; +STD: 'STD'; +STDDEV: 'STDDEV'; +STDDEV_POP: 'STDDEV_POP'; +STDDEV_SAMP: 'STDDEV_SAMP'; +SUM: 'SUM'; +VAR_POP: 'VAR_POP'; +VAR_SAMP: 'VAR_SAMP'; +VARIANCE: 'VARIANCE'; + +// Common function Keywords + +CURRENT_DATE: 'CURRENT_DATE'; +CURRENT_TIME: 'CURRENT_TIME'; +CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'; +LOCALTIME: 'LOCALTIME'; +CURDATE: 'CURDATE'; +CURTIME: 'CURTIME'; +DATE_ADD: 'DATE_ADD'; +DATE_SUB: 'DATE_SUB'; +EXTRACT: 'EXTRACT'; +LOCALTIMESTAMP: 'LOCALTIMESTAMP'; +NOW: 'NOW'; +POSITION: 'POSITION'; +SUBSTR: 'SUBSTR'; +SUBSTRING: 'SUBSTRING'; +SYSDATE: 'SYSDATE'; +TRIM: 'TRIM'; +UTC_DATE: 'UTC_DATE'; +UTC_TIME: 'UTC_TIME'; +UTC_TIMESTAMP: 'UTC_TIMESTAMP'; + +// Keywords, but can be ID +// Common Keywords, but can be ID + +ACCOUNT: 'ACCOUNT'; +ACTION: 'ACTION'; +AFTER: 'AFTER'; +AGGREGATE: 'AGGREGATE'; +ALGORITHM: 'ALGORITHM'; +ANY: 'ANY'; +AT: 'AT'; +AUTHORS: 'AUTHORS'; +AUTOCOMMIT: 'AUTOCOMMIT'; +AUTOEXTEND_SIZE: 'AUTOEXTEND_SIZE'; +AUTO_INCREMENT: 'AUTO_INCREMENT'; +AVG_ROW_LENGTH: 'AVG_ROW_LENGTH'; +BEGIN: 'BEGIN'; +BINLOG: 'BINLOG'; +BIT: 'BIT'; +BLOCK: 'BLOCK'; +BOOL: 'BOOL'; +BOOLEAN: 'BOOLEAN'; +BTREE: 'BTREE'; +CACHE: 'CACHE'; +CASCADED: 'CASCADED'; +CHAIN: 'CHAIN'; +CHANGED: 'CHANGED'; +CHANNEL: 'CHANNEL'; +CHECKSUM: 'CHECKSUM'; +PAGE_CHECKSUM: 'PAGE_CHECKSUM'; +CIPHER: 'CIPHER'; +CLASS_ORIGIN: 'CLASS_ORIGIN'; +CLIENT: 'CLIENT'; +CLOSE: 'CLOSE'; +CLUSTERING: 'CLUSTERING'; +COALESCE: 'COALESCE'; +CODE: 'CODE'; +COLUMNS: 'COLUMNS'; +COLUMN_FORMAT: 'COLUMN_FORMAT'; +COLUMN_NAME: 'COLUMN_NAME'; +COMMENT: 'COMMENT'; +COMMIT: 'COMMIT'; +COMPACT: 'COMPACT'; +COMPLETION: 'COMPLETION'; +COMPRESSED: 'COMPRESSED'; +COMPRESSION: 'COMPRESSION' | QUOTE_SYMB? 'COMPRESSION' QUOTE_SYMB?; +CONCURRENT: 'CONCURRENT'; +CONNECT: 'CONNECT'; +CONNECTION: 'CONNECTION'; +CONSISTENT: 'CONSISTENT'; +CONSTRAINT_CATALOG: 'CONSTRAINT_CATALOG'; +CONSTRAINT_SCHEMA: 'CONSTRAINT_SCHEMA'; +CONSTRAINT_NAME: 'CONSTRAINT_NAME'; +CONTAINS: 'CONTAINS'; +CONTEXT: 'CONTEXT'; +CONTRIBUTORS: 'CONTRIBUTORS'; +COPY: 'COPY'; +CPU: 'CPU'; +CYCLE: 'CYCLE'; +CURSOR_NAME: 'CURSOR_NAME'; +DATA: 'DATA'; +DATAFILE: 'DATAFILE'; +DEALLOCATE: 'DEALLOCATE'; +DEFAULT_AUTH: 'DEFAULT_AUTH'; +DEFINER: 'DEFINER'; +DELAY_KEY_WRITE: 'DELAY_KEY_WRITE'; +DES_KEY_FILE: 'DES_KEY_FILE'; +DIRECTORY: 'DIRECTORY'; +DISABLE: 'DISABLE'; +DISCARD: 'DISCARD'; +DISK: 'DISK'; +DO: 'DO'; +DUMPFILE: 'DUMPFILE'; +DUPLICATE: 'DUPLICATE'; +DYNAMIC: 'DYNAMIC'; +ENABLE: 'ENABLE'; +ENCRYPTED: 'ENCRYPTED'; +ENCRYPTION: 'ENCRYPTION'; +ENCRYPTION_KEY_ID: 'ENCRYPTION_KEY_ID'; +END: 'END'; +ENDS: 'ENDS'; +ENGINE: 'ENGINE'; +ENGINES: 'ENGINES'; +ERROR: 'ERROR'; +ERRORS: 'ERRORS'; +ESCAPE: 'ESCAPE'; +EVEN: 'EVEN'; +EVENT: 'EVENT'; +EVENTS: 'EVENTS'; +EVERY: 'EVERY'; +EXCHANGE: 'EXCHANGE'; +EXCLUSIVE: 'EXCLUSIVE'; +EXPIRE: 'EXPIRE'; +EXPORT: 'EXPORT'; +EXTENDED: 'EXTENDED'; +EXTENT_SIZE: 'EXTENT_SIZE'; +FAILED_LOGIN_ATTEMPTS: 'FAILED_LOGIN_ATTEMPTS'; +FAST: 'FAST'; +FAULTS: 'FAULTS'; +FIELDS: 'FIELDS'; +FILE_BLOCK_SIZE: 'FILE_BLOCK_SIZE'; +FILTER: 'FILTER'; +FIRST: 'FIRST'; +FIXED: 'FIXED'; +FLUSH: 'FLUSH'; +FOLLOWING: 'FOLLOWING'; +FOLLOWS: 'FOLLOWS'; +FOUND: 'FOUND'; +FULL: 'FULL'; +FUNCTION: 'FUNCTION'; +GENERAL: 'GENERAL'; +GLOBAL: 'GLOBAL'; +GRANTS: 'GRANTS'; +GROUP_REPLICATION: 'GROUP_REPLICATION'; +HANDLER: 'HANDLER'; +HASH: 'HASH'; +HELP: 'HELP'; +HISTORY: 'HISTORY'; +HOST: 'HOST'; +HOSTS: 'HOSTS'; +IDENTIFIED: 'IDENTIFIED'; +IGNORE_SERVER_IDS: 'IGNORE_SERVER_IDS'; +IMPORT: 'IMPORT'; +INCREMENT: 'INCREMENT'; +INDEXES: 'INDEXES'; +INITIAL_SIZE: 'INITIAL_SIZE'; +INPLACE: 'INPLACE'; +INSERT_METHOD: 'INSERT_METHOD'; +INSTALL: 'INSTALL'; +INSTANCE: 'INSTANCE'; +INSTANT: 'INSTANT'; +INVISIBLE: 'INVISIBLE'; +INVOKER: 'INVOKER'; +IO: 'IO'; +IO_THREAD: 'IO_THREAD'; +IPC: 'IPC'; +ISOLATION: 'ISOLATION'; +ISSUER: 'ISSUER'; +JSON: 'JSON'; +KEY_BLOCK_SIZE: 'KEY_BLOCK_SIZE'; +LANGUAGE: 'LANGUAGE'; +LAST: 'LAST'; +LEAVES: 'LEAVES'; +LESS: 'LESS'; +LEVEL: 'LEVEL'; +LIST: 'LIST'; +LOCAL: 'LOCAL'; +LOGFILE: 'LOGFILE'; +LOGS: 'LOGS'; +MASTER: 'MASTER'; +MASTER_AUTO_POSITION: 'MASTER_AUTO_POSITION'; +MASTER_CONNECT_RETRY: 'MASTER_CONNECT_RETRY'; +MASTER_DELAY: 'MASTER_DELAY'; +MASTER_HEARTBEAT_PERIOD: 'MASTER_HEARTBEAT_PERIOD'; +MASTER_HOST: 'MASTER_HOST'; +MASTER_LOG_FILE: 'MASTER_LOG_FILE'; +MASTER_LOG_POS: 'MASTER_LOG_POS'; +MASTER_PASSWORD: 'MASTER_PASSWORD'; +MASTER_PORT: 'MASTER_PORT'; +MASTER_RETRY_COUNT: 'MASTER_RETRY_COUNT'; +MASTER_SSL: 'MASTER_SSL'; +MASTER_SSL_CA: 'MASTER_SSL_CA'; +MASTER_SSL_CAPATH: 'MASTER_SSL_CAPATH'; +MASTER_SSL_CERT: 'MASTER_SSL_CERT'; +MASTER_SSL_CIPHER: 'MASTER_SSL_CIPHER'; +MASTER_SSL_CRL: 'MASTER_SSL_CRL'; +MASTER_SSL_CRLPATH: 'MASTER_SSL_CRLPATH'; +MASTER_SSL_KEY: 'MASTER_SSL_KEY'; +MASTER_TLS_VERSION: 'MASTER_TLS_VERSION'; +MASTER_USER: 'MASTER_USER'; +MAX_CONNECTIONS_PER_HOUR: 'MAX_CONNECTIONS_PER_HOUR'; +MAX_QUERIES_PER_HOUR: 'MAX_QUERIES_PER_HOUR'; +MAX_ROWS: 'MAX_ROWS'; +MAX_SIZE: 'MAX_SIZE'; +MAX_UPDATES_PER_HOUR: 'MAX_UPDATES_PER_HOUR'; +MAX_USER_CONNECTIONS: 'MAX_USER_CONNECTIONS'; +MEDIUM: 'MEDIUM'; +MEMBER: 'MEMBER'; +MERGE: 'MERGE'; +MESSAGE_TEXT: 'MESSAGE_TEXT'; +MID: 'MID'; +MIGRATE: 'MIGRATE'; +MIN_ROWS: 'MIN_ROWS'; +MODE: 'MODE'; +MODIFY: 'MODIFY'; +MUTEX: 'MUTEX'; +MYSQL: 'MYSQL'; +MYSQL_ERRNO: 'MYSQL_ERRNO'; +NAME: 'NAME'; +NAMES: 'NAMES'; +NCHAR: 'NCHAR'; +NEVER: 'NEVER'; +NEXT: 'NEXT'; +NO: 'NO'; +NOCACHE: 'NOCACHE'; +NOCOPY: 'NOCOPY'; +NOCYCLE: 'NOCYCLE'; +NOMAXVALUE: 'NOMAXVALUE'; +NOMINVALUE: 'NOMINVALUE'; +NOWAIT: 'NOWAIT'; +NODEGROUP: 'NODEGROUP'; +NONE: 'NONE'; +ODBC: 'ODBC'; +OFFLINE: 'OFFLINE'; +OFFSET: 'OFFSET'; +OF: 'OF'; +OJ: 'OJ'; +OLD_PASSWORD: 'OLD_PASSWORD'; +ONE: 'ONE'; +ONLINE: 'ONLINE'; +ONLY: 'ONLY'; +OPEN: 'OPEN'; +OPTIMIZER_COSTS: 'OPTIMIZER_COSTS'; +OPTIONS: 'OPTIONS'; +OWNER: 'OWNER'; +PACK_KEYS: 'PACK_KEYS'; +PAGE: 'PAGE'; +PAGE_COMPRESSED: 'PAGE_COMPRESSED'; +PAGE_COMPRESSION_LEVEL: 'PAGE_COMPRESSION_LEVEL'; +PARSER: 'PARSER'; +PARTIAL: 'PARTIAL'; +PARTITIONING: 'PARTITIONING'; +PARTITIONS: 'PARTITIONS'; +PASSWORD: 'PASSWORD'; +PASSWORD_LOCK_TIME: 'PASSWORD_LOCK_TIME'; +PHASE: 'PHASE'; +PLUGIN: 'PLUGIN'; +PLUGIN_DIR: 'PLUGIN_DIR'; +PLUGINS: 'PLUGINS'; +PORT: 'PORT'; +PRECEDES: 'PRECEDES'; +PRECEDING: 'PRECEDING'; +PREPARE: 'PREPARE'; +PRESERVE: 'PRESERVE'; +PREV: 'PREV'; +PROCESSLIST: 'PROCESSLIST'; +PROFILE: 'PROFILE'; +PROFILES: 'PROFILES'; +PROXY: 'PROXY'; +QUERY: 'QUERY'; +QUICK: 'QUICK'; +REBUILD: 'REBUILD'; +RECOVER: 'RECOVER'; +RECURSIVE: 'RECURSIVE'; +REDO_BUFFER_SIZE: 'REDO_BUFFER_SIZE'; +REDUNDANT: 'REDUNDANT'; +RELAY: 'RELAY'; +RELAY_LOG_FILE: 'RELAY_LOG_FILE'; +RELAY_LOG_POS: 'RELAY_LOG_POS'; +RELAYLOG: 'RELAYLOG'; +REMOVE: 'REMOVE'; +REORGANIZE: 'REORGANIZE'; +REPAIR: 'REPAIR'; +REPLICATE_DO_DB: 'REPLICATE_DO_DB'; +REPLICATE_DO_TABLE: 'REPLICATE_DO_TABLE'; +REPLICATE_IGNORE_DB: 'REPLICATE_IGNORE_DB'; +REPLICATE_IGNORE_TABLE: 'REPLICATE_IGNORE_TABLE'; +REPLICATE_REWRITE_DB: 'REPLICATE_REWRITE_DB'; +REPLICATE_WILD_DO_TABLE: 'REPLICATE_WILD_DO_TABLE'; +REPLICATE_WILD_IGNORE_TABLE: 'REPLICATE_WILD_IGNORE_TABLE'; +REPLICATION: 'REPLICATION'; +RESET: 'RESET'; +RESTART: 'RESTART'; +RESUME: 'RESUME'; +RETURNED_SQLSTATE: 'RETURNED_SQLSTATE'; +RETURNING: 'RETURNING'; +RETURNS: 'RETURNS'; +REUSE: 'REUSE'; +ROLE: 'ROLE'; +ROLLBACK: 'ROLLBACK'; +ROLLUP: 'ROLLUP'; +ROTATE: 'ROTATE'; +ROW: 'ROW'; +ROWS: 'ROWS'; +ROW_FORMAT: 'ROW_FORMAT'; +RTREE: 'RTREE'; +SAVEPOINT: 'SAVEPOINT'; +SCHEDULE: 'SCHEDULE'; +SECURITY: 'SECURITY'; +SEQUENCE: 'SEQUENCE'; +SERVER: 'SERVER'; +SESSION: 'SESSION'; +SHARE: 'SHARE'; +SHARED: 'SHARED'; +SIGNED: 'SIGNED'; +SIMPLE: 'SIMPLE'; +SLAVE: 'SLAVE'; +SLOW: 'SLOW'; +SNAPSHOT: 'SNAPSHOT'; +SOCKET: 'SOCKET'; +SOME: 'SOME'; +SONAME: 'SONAME'; +SOUNDS: 'SOUNDS'; +SOURCE: 'SOURCE'; +SQL_AFTER_GTIDS: 'SQL_AFTER_GTIDS'; +SQL_AFTER_MTS_GAPS: 'SQL_AFTER_MTS_GAPS'; +SQL_BEFORE_GTIDS: 'SQL_BEFORE_GTIDS'; +SQL_BUFFER_RESULT: 'SQL_BUFFER_RESULT'; +SQL_CACHE: 'SQL_CACHE'; +SQL_NO_CACHE: 'SQL_NO_CACHE'; +SQL_THREAD: 'SQL_THREAD'; +START: 'START'; +STARTS: 'STARTS'; +STATS_AUTO_RECALC: 'STATS_AUTO_RECALC'; +STATS_PERSISTENT: 'STATS_PERSISTENT'; +STATS_SAMPLE_PAGES: 'STATS_SAMPLE_PAGES'; +STATUS: 'STATUS'; +STOP: 'STOP'; +STORAGE: 'STORAGE'; +STORED: 'STORED'; +STRING: 'STRING'; +SUBCLASS_ORIGIN: 'SUBCLASS_ORIGIN'; +SUBJECT: 'SUBJECT'; +SUBPARTITION: 'SUBPARTITION'; +SUBPARTITIONS: 'SUBPARTITIONS'; +SUSPEND: 'SUSPEND'; +SWAPS: 'SWAPS'; +SWITCHES: 'SWITCHES'; +TABLE_NAME: 'TABLE_NAME'; +TABLESPACE: 'TABLESPACE'; +TABLE_TYPE: 'TABLE_TYPE'; +TEMPORARY: 'TEMPORARY'; +TEMPTABLE: 'TEMPTABLE'; +THAN: 'THAN'; +TRADITIONAL: 'TRADITIONAL'; +TRANSACTION: 'TRANSACTION'; +TRANSACTIONAL: 'TRANSACTIONAL'; +TRIGGERS: 'TRIGGERS'; +TRUNCATE: 'TRUNCATE'; +UNBOUNDED: 'UNBOUNDED'; +UNDEFINED: 'UNDEFINED'; +UNDOFILE: 'UNDOFILE'; +UNDO_BUFFER_SIZE: 'UNDO_BUFFER_SIZE'; +UNINSTALL: 'UNINSTALL'; +UNKNOWN: 'UNKNOWN'; +UNTIL: 'UNTIL'; +UPGRADE: 'UPGRADE'; +USER: 'USER'; +USE_FRM: 'USE_FRM'; +USER_RESOURCES: 'USER_RESOURCES'; +VALIDATION: 'VALIDATION'; +VALUE: 'VALUE'; +VARIABLES: 'VARIABLES'; +VIEW: 'VIEW'; +VIRTUAL: 'VIRTUAL'; +VISIBLE: 'VISIBLE'; +WAIT: 'WAIT'; +WARNINGS: 'WARNINGS'; +WINDOW: 'WINDOW'; +WITHOUT: 'WITHOUT'; +WORK: 'WORK'; +WRAPPER: 'WRAPPER'; +X509: 'X509'; +XA: 'XA'; +XML: 'XML'; +YES: 'YES'; + +// Date format Keywords + +EUR: 'EUR'; +USA: 'USA'; +JIS: 'JIS'; +ISO: 'ISO'; +INTERNAL: 'INTERNAL'; + + +// Interval type Keywords + +QUARTER: 'QUARTER'; +MONTH: 'MONTH'; +DAY: 'DAY'; +HOUR: 'HOUR'; +MINUTE: 'MINUTE'; +WEEK: 'WEEK'; +SECOND: 'SECOND'; +MICROSECOND: 'MICROSECOND'; + + +// PRIVILEGES + +ADMIN: 'ADMIN'; +APPLICATION_PASSWORD_ADMIN: 'APPLICATION_PASSWORD_ADMIN'; +AUDIT_ADMIN: 'AUDIT_ADMIN'; +BACKUP_ADMIN: 'BACKUP_ADMIN'; +BINLOG_ADMIN: 'BINLOG_ADMIN'; +BINLOG_ENCRYPTION_ADMIN: 'BINLOG_ENCRYPTION_ADMIN'; +CLONE_ADMIN: 'CLONE_ADMIN'; +CONNECTION_ADMIN: 'CONNECTION_ADMIN'; +ENCRYPTION_KEY_ADMIN: 'ENCRYPTION_KEY_ADMIN'; +EXECUTE: 'EXECUTE'; +FILE: 'FILE'; +FIREWALL_ADMIN: 'FIREWALL_ADMIN'; +FIREWALL_USER: 'FIREWALL_USER'; +FLUSH_OPTIMIZER_COSTS: 'FLUSH_OPTIMIZER_COSTS'; +FLUSH_STATUS: 'FLUSH_STATUS'; +FLUSH_TABLES: 'FLUSH_TABLES'; +FLUSH_USER_RESOURCES: 'FLUSH_USER_RESOURCES'; +GROUP_REPLICATION_ADMIN: 'GROUP_REPLICATION_ADMIN'; +INNODB_REDO_LOG_ARCHIVE: 'INNODB_REDO_LOG_ARCHIVE'; +INNODB_REDO_LOG_ENABLE: 'INNODB_REDO_LOG_ENABLE'; +INVOKE: 'INVOKE'; +LAMBDA: 'LAMBDA'; +NDB_STORED_USER: 'NDB_STORED_USER'; +PASSWORDLESS_USER_ADMIN: 'PASSWORDLESS_USER_ADMIN'; +PERSIST_RO_VARIABLES_ADMIN: 'PERSIST_RO_VARIABLES_ADMIN'; +PRIVILEGES: 'PRIVILEGES'; +PROCESS: 'PROCESS'; +RELOAD: 'RELOAD'; +REPLICATION_APPLIER: 'REPLICATION_APPLIER'; +REPLICATION_SLAVE_ADMIN: 'REPLICATION_SLAVE_ADMIN'; +RESOURCE_GROUP_ADMIN: 'RESOURCE_GROUP_ADMIN'; +RESOURCE_GROUP_USER: 'RESOURCE_GROUP_USER'; +ROLE_ADMIN: 'ROLE_ADMIN'; +ROUTINE: 'ROUTINE'; +S3: 'S3'; +SERVICE_CONNECTION_ADMIN: 'SERVICE_CONNECTION_ADMIN'; +SESSION_VARIABLES_ADMIN: QUOTE_SYMB? 'SESSION_VARIABLES_ADMIN' QUOTE_SYMB?; +SET_USER_ID: 'SET_USER_ID'; +SHOW_ROUTINE: 'SHOW_ROUTINE'; +SHUTDOWN: 'SHUTDOWN'; +SUPER: 'SUPER'; +SYSTEM_VARIABLES_ADMIN: 'SYSTEM_VARIABLES_ADMIN'; +TABLES: 'TABLES'; +TABLE_ENCRYPTION_ADMIN: 'TABLE_ENCRYPTION_ADMIN'; +VERSION_TOKEN_ADMIN: 'VERSION_TOKEN_ADMIN'; +XA_RECOVER_ADMIN: 'XA_RECOVER_ADMIN'; + + +// Charsets + +ARMSCII8: 'ARMSCII8'; +ASCII: 'ASCII'; +BIG5: 'BIG5'; +CP1250: 'CP1250'; +CP1251: 'CP1251'; +CP1256: 'CP1256'; +CP1257: 'CP1257'; +CP850: 'CP850'; +CP852: 'CP852'; +CP866: 'CP866'; +CP932: 'CP932'; +DEC8: 'DEC8'; +EUCJPMS: 'EUCJPMS'; +EUCKR: 'EUCKR'; +GB18030: 'GB18030'; +GB2312: 'GB2312'; +GBK: 'GBK'; +GEOSTD8: 'GEOSTD8'; +GREEK: 'GREEK'; +HEBREW: 'HEBREW'; +HP8: 'HP8'; +KEYBCS2: 'KEYBCS2'; +KOI8R: 'KOI8R'; +KOI8U: 'KOI8U'; +LATIN1: 'LATIN1'; +LATIN2: 'LATIN2'; +LATIN5: 'LATIN5'; +LATIN7: 'LATIN7'; +MACCE: 'MACCE'; +MACROMAN: 'MACROMAN'; +SJIS: 'SJIS'; +SWE7: 'SWE7'; +TIS620: 'TIS620'; +UCS2: 'UCS2'; +UJIS: 'UJIS'; +UTF16: 'UTF16'; +UTF16LE: 'UTF16LE'; +UTF32: 'UTF32'; +UTF8: 'UTF8'; +UTF8MB3: 'UTF8MB3'; +UTF8MB4: 'UTF8MB4'; + + +// DB Engines + +ARCHIVE: 'ARCHIVE'; +BLACKHOLE: 'BLACKHOLE'; +CSV: 'CSV'; +FEDERATED: 'FEDERATED'; +INNODB: 'INNODB'; +MEMORY: 'MEMORY'; +MRG_MYISAM: 'MRG_MYISAM'; +MYISAM: 'MYISAM'; +NDB: 'NDB'; +NDBCLUSTER: 'NDBCLUSTER'; +PERFORMANCE_SCHEMA: 'PERFORMANCE_SCHEMA'; +TOKUDB: 'TOKUDB'; + + +// Transaction Levels + +REPEATABLE: 'REPEATABLE'; +COMMITTED: 'COMMITTED'; +UNCOMMITTED: 'UNCOMMITTED'; +SERIALIZABLE: 'SERIALIZABLE'; + + +// Spatial data types + +GEOMETRYCOLLECTION: 'GEOMETRYCOLLECTION'; +GEOMCOLLECTION: 'GEOMCOLLECTION'; +GEOMETRY: 'GEOMETRY'; +LINESTRING: 'LINESTRING'; +MULTILINESTRING: 'MULTILINESTRING'; +MULTIPOINT: 'MULTIPOINT'; +MULTIPOLYGON: 'MULTIPOLYGON'; +POINT: 'POINT'; +POLYGON: 'POLYGON'; + + +// Common function names + +ABS: 'ABS'; +ACOS: 'ACOS'; +ADDDATE: 'ADDDATE'; +ADDTIME: 'ADDTIME'; +AES_DECRYPT: 'AES_DECRYPT'; +AES_ENCRYPT: 'AES_ENCRYPT'; +AREA: 'AREA'; +ASBINARY: 'ASBINARY'; +ASIN: 'ASIN'; +ASTEXT: 'ASTEXT'; +ASWKB: 'ASWKB'; +ASWKT: 'ASWKT'; +ASYMMETRIC_DECRYPT: 'ASYMMETRIC_DECRYPT'; +ASYMMETRIC_DERIVE: 'ASYMMETRIC_DERIVE'; +ASYMMETRIC_ENCRYPT: 'ASYMMETRIC_ENCRYPT'; +ASYMMETRIC_SIGN: 'ASYMMETRIC_SIGN'; +ASYMMETRIC_VERIFY: 'ASYMMETRIC_VERIFY'; +ATAN: 'ATAN'; +ATAN2: 'ATAN2'; +BENCHMARK: 'BENCHMARK'; +BIN: 'BIN'; +BIT_COUNT: 'BIT_COUNT'; +BIT_LENGTH: 'BIT_LENGTH'; +BUFFER: 'BUFFER'; +CATALOG_NAME: 'CATALOG_NAME'; +CEIL: 'CEIL'; +CEILING: 'CEILING'; +CENTROID: 'CENTROID'; +CHARACTER_LENGTH: 'CHARACTER_LENGTH'; +CHARSET: 'CHARSET'; +CHAR_LENGTH: 'CHAR_LENGTH'; +COERCIBILITY: 'COERCIBILITY'; +COLLATION: 'COLLATION'; +COMPRESS: 'COMPRESS'; +CONCAT: 'CONCAT'; +CONCAT_WS: 'CONCAT_WS'; +CONNECTION_ID: 'CONNECTION_ID'; +CONV: 'CONV'; +CONVERT_TZ: 'CONVERT_TZ'; +COS: 'COS'; +COT: 'COT'; +CRC32: 'CRC32'; +CREATE_ASYMMETRIC_PRIV_KEY: 'CREATE_ASYMMETRIC_PRIV_KEY'; +CREATE_ASYMMETRIC_PUB_KEY: 'CREATE_ASYMMETRIC_PUB_KEY'; +CREATE_DH_PARAMETERS: 'CREATE_DH_PARAMETERS'; +CREATE_DIGEST: 'CREATE_DIGEST'; +CROSSES: 'CROSSES'; +DATEDIFF: 'DATEDIFF'; +DATE_FORMAT: 'DATE_FORMAT'; +DAYNAME: 'DAYNAME'; +DAYOFMONTH: 'DAYOFMONTH'; +DAYOFWEEK: 'DAYOFWEEK'; +DAYOFYEAR: 'DAYOFYEAR'; +DECODE: 'DECODE'; +DEGREES: 'DEGREES'; +DES_DECRYPT: 'DES_DECRYPT'; +DES_ENCRYPT: 'DES_ENCRYPT'; +DIMENSION: 'DIMENSION'; +DISJOINT: 'DISJOINT'; +ELT: 'ELT'; +ENCODE: 'ENCODE'; +ENCRYPT: 'ENCRYPT'; +ENDPOINT: 'ENDPOINT'; +ENGINE_ATTRIBUTE: 'ENGINE_ATTRIBUTE'; +ENVELOPE: 'ENVELOPE'; +EQUALS: 'EQUALS'; +EXP: 'EXP'; +EXPORT_SET: 'EXPORT_SET'; +EXTERIORRING: 'EXTERIORRING'; +EXTRACTVALUE: 'EXTRACTVALUE'; +FIELD: 'FIELD'; +FIND_IN_SET: 'FIND_IN_SET'; +FLOOR: 'FLOOR'; +FORMAT: 'FORMAT'; +FOUND_ROWS: 'FOUND_ROWS'; +FROM_BASE64: 'FROM_BASE64'; +FROM_DAYS: 'FROM_DAYS'; +FROM_UNIXTIME: 'FROM_UNIXTIME'; +GEOMCOLLFROMTEXT: 'GEOMCOLLFROMTEXT'; +GEOMCOLLFROMWKB: 'GEOMCOLLFROMWKB'; +GEOMETRYCOLLECTIONFROMTEXT: 'GEOMETRYCOLLECTIONFROMTEXT'; +GEOMETRYCOLLECTIONFROMWKB: 'GEOMETRYCOLLECTIONFROMWKB'; +GEOMETRYFROMTEXT: 'GEOMETRYFROMTEXT'; +GEOMETRYFROMWKB: 'GEOMETRYFROMWKB'; +GEOMETRYN: 'GEOMETRYN'; +GEOMETRYTYPE: 'GEOMETRYTYPE'; +GEOMFROMTEXT: 'GEOMFROMTEXT'; +GEOMFROMWKB: 'GEOMFROMWKB'; +GET_FORMAT: 'GET_FORMAT'; +GET_LOCK: 'GET_LOCK'; +GLENGTH: 'GLENGTH'; +GREATEST: 'GREATEST'; +GTID_SUBSET: 'GTID_SUBSET'; +GTID_SUBTRACT: 'GTID_SUBTRACT'; +HEX: 'HEX'; +IFNULL: 'IFNULL'; +INET6_ATON: 'INET6_ATON'; +INET6_NTOA: 'INET6_NTOA'; +INET_ATON: 'INET_ATON'; +INET_NTOA: 'INET_NTOA'; +INSTR: 'INSTR'; +INTERIORRINGN: 'INTERIORRINGN'; +INTERSECTS: 'INTERSECTS'; +ISCLOSED: 'ISCLOSED'; +ISEMPTY: 'ISEMPTY'; +ISNULL: 'ISNULL'; +ISSIMPLE: 'ISSIMPLE'; +IS_FREE_LOCK: 'IS_FREE_LOCK'; +IS_IPV4: 'IS_IPV4'; +IS_IPV4_COMPAT: 'IS_IPV4_COMPAT'; +IS_IPV4_MAPPED: 'IS_IPV4_MAPPED'; +IS_IPV6: 'IS_IPV6'; +IS_USED_LOCK: 'IS_USED_LOCK'; +LAST_INSERT_ID: 'LAST_INSERT_ID'; +LCASE: 'LCASE'; +LEAST: 'LEAST'; +LENGTH: 'LENGTH'; +LINEFROMTEXT: 'LINEFROMTEXT'; +LINEFROMWKB: 'LINEFROMWKB'; +LINESTRINGFROMTEXT: 'LINESTRINGFROMTEXT'; +LINESTRINGFROMWKB: 'LINESTRINGFROMWKB'; +LN: 'LN'; +LOAD_FILE: 'LOAD_FILE'; +LOCATE: 'LOCATE'; +LOG: 'LOG'; +LOG10: 'LOG10'; +LOG2: 'LOG2'; +LOWER: 'LOWER'; +LPAD: 'LPAD'; +LTRIM: 'LTRIM'; +MAKEDATE: 'MAKEDATE'; +MAKETIME: 'MAKETIME'; +MAKE_SET: 'MAKE_SET'; +MASTER_POS_WAIT: 'MASTER_POS_WAIT'; +MBRCONTAINS: 'MBRCONTAINS'; +MBRDISJOINT: 'MBRDISJOINT'; +MBREQUAL: 'MBREQUAL'; +MBRINTERSECTS: 'MBRINTERSECTS'; +MBROVERLAPS: 'MBROVERLAPS'; +MBRTOUCHES: 'MBRTOUCHES'; +MBRWITHIN: 'MBRWITHIN'; +MD5: 'MD5'; +MLINEFROMTEXT: 'MLINEFROMTEXT'; +MLINEFROMWKB: 'MLINEFROMWKB'; +MONTHNAME: 'MONTHNAME'; +MPOINTFROMTEXT: 'MPOINTFROMTEXT'; +MPOINTFROMWKB: 'MPOINTFROMWKB'; +MPOLYFROMTEXT: 'MPOLYFROMTEXT'; +MPOLYFROMWKB: 'MPOLYFROMWKB'; +MULTILINESTRINGFROMTEXT: 'MULTILINESTRINGFROMTEXT'; +MULTILINESTRINGFROMWKB: 'MULTILINESTRINGFROMWKB'; +MULTIPOINTFROMTEXT: 'MULTIPOINTFROMTEXT'; +MULTIPOINTFROMWKB: 'MULTIPOINTFROMWKB'; +MULTIPOLYGONFROMTEXT: 'MULTIPOLYGONFROMTEXT'; +MULTIPOLYGONFROMWKB: 'MULTIPOLYGONFROMWKB'; +NAME_CONST: 'NAME_CONST'; +NULLIF: 'NULLIF'; +NUMGEOMETRIES: 'NUMGEOMETRIES'; +NUMINTERIORRINGS: 'NUMINTERIORRINGS'; +NUMPOINTS: 'NUMPOINTS'; +OCT: 'OCT'; +OCTET_LENGTH: 'OCTET_LENGTH'; +ORD: 'ORD'; +OVERLAPS: 'OVERLAPS'; +PERIOD_ADD: 'PERIOD_ADD'; +PERIOD_DIFF: 'PERIOD_DIFF'; +PI: 'PI'; +POINTFROMTEXT: 'POINTFROMTEXT'; +POINTFROMWKB: 'POINTFROMWKB'; +POINTN: 'POINTN'; +POLYFROMTEXT: 'POLYFROMTEXT'; +POLYFROMWKB: 'POLYFROMWKB'; +POLYGONFROMTEXT: 'POLYGONFROMTEXT'; +POLYGONFROMWKB: 'POLYGONFROMWKB'; +POW: 'POW'; +POWER: 'POWER'; +QUOTE: 'QUOTE'; +RADIANS: 'RADIANS'; +RAND: 'RAND'; +RANDOM_BYTES: 'RANDOM_BYTES'; +RELEASE_LOCK: 'RELEASE_LOCK'; +REVERSE: 'REVERSE'; +ROUND: 'ROUND'; +ROW_COUNT: 'ROW_COUNT'; +RPAD: 'RPAD'; +RTRIM: 'RTRIM'; +SEC_TO_TIME: 'SEC_TO_TIME'; +SECONDARY_ENGINE_ATTRIBUTE: 'SECONDARY_ENGINE_ATTRIBUTE'; +SESSION_USER: 'SESSION_USER'; +SHA: 'SHA'; +SHA1: 'SHA1'; +SHA2: 'SHA2'; +SCHEMA_NAME: 'SCHEMA_NAME'; +SIGN: 'SIGN'; +SIN: 'SIN'; +SLEEP: 'SLEEP'; +SOUNDEX: 'SOUNDEX'; +SQL_THREAD_WAIT_AFTER_GTIDS: 'SQL_THREAD_WAIT_AFTER_GTIDS'; +SQRT: 'SQRT'; +SRID: 'SRID'; +STARTPOINT: 'STARTPOINT'; +STRCMP: 'STRCMP'; +STR_TO_DATE: 'STR_TO_DATE'; +ST_AREA: 'ST_AREA'; +ST_ASBINARY: 'ST_ASBINARY'; +ST_ASTEXT: 'ST_ASTEXT'; +ST_ASWKB: 'ST_ASWKB'; +ST_ASWKT: 'ST_ASWKT'; +ST_BUFFER: 'ST_BUFFER'; +ST_CENTROID: 'ST_CENTROID'; +ST_CONTAINS: 'ST_CONTAINS'; +ST_CROSSES: 'ST_CROSSES'; +ST_DIFFERENCE: 'ST_DIFFERENCE'; +ST_DIMENSION: 'ST_DIMENSION'; +ST_DISJOINT: 'ST_DISJOINT'; +ST_DISTANCE: 'ST_DISTANCE'; +ST_ENDPOINT: 'ST_ENDPOINT'; +ST_ENVELOPE: 'ST_ENVELOPE'; +ST_EQUALS: 'ST_EQUALS'; +ST_EXTERIORRING: 'ST_EXTERIORRING'; +ST_GEOMCOLLFROMTEXT: 'ST_GEOMCOLLFROMTEXT'; +ST_GEOMCOLLFROMTXT: 'ST_GEOMCOLLFROMTXT'; +ST_GEOMCOLLFROMWKB: 'ST_GEOMCOLLFROMWKB'; +ST_GEOMETRYCOLLECTIONFROMTEXT: 'ST_GEOMETRYCOLLECTIONFROMTEXT'; +ST_GEOMETRYCOLLECTIONFROMWKB: 'ST_GEOMETRYCOLLECTIONFROMWKB'; +ST_GEOMETRYFROMTEXT: 'ST_GEOMETRYFROMTEXT'; +ST_GEOMETRYFROMWKB: 'ST_GEOMETRYFROMWKB'; +ST_GEOMETRYN: 'ST_GEOMETRYN'; +ST_GEOMETRYTYPE: 'ST_GEOMETRYTYPE'; +ST_GEOMFROMTEXT: 'ST_GEOMFROMTEXT'; +ST_GEOMFROMWKB: 'ST_GEOMFROMWKB'; +ST_INTERIORRINGN: 'ST_INTERIORRINGN'; +ST_INTERSECTION: 'ST_INTERSECTION'; +ST_INTERSECTS: 'ST_INTERSECTS'; +ST_ISCLOSED: 'ST_ISCLOSED'; +ST_ISEMPTY: 'ST_ISEMPTY'; +ST_ISSIMPLE: 'ST_ISSIMPLE'; +ST_LINEFROMTEXT: 'ST_LINEFROMTEXT'; +ST_LINEFROMWKB: 'ST_LINEFROMWKB'; +ST_LINESTRINGFROMTEXT: 'ST_LINESTRINGFROMTEXT'; +ST_LINESTRINGFROMWKB: 'ST_LINESTRINGFROMWKB'; +ST_NUMGEOMETRIES: 'ST_NUMGEOMETRIES'; +ST_NUMINTERIORRING: 'ST_NUMINTERIORRING'; +ST_NUMINTERIORRINGS: 'ST_NUMINTERIORRINGS'; +ST_NUMPOINTS: 'ST_NUMPOINTS'; +ST_OVERLAPS: 'ST_OVERLAPS'; +ST_POINTFROMTEXT: 'ST_POINTFROMTEXT'; +ST_POINTFROMWKB: 'ST_POINTFROMWKB'; +ST_POINTN: 'ST_POINTN'; +ST_POLYFROMTEXT: 'ST_POLYFROMTEXT'; +ST_POLYFROMWKB: 'ST_POLYFROMWKB'; +ST_POLYGONFROMTEXT: 'ST_POLYGONFROMTEXT'; +ST_POLYGONFROMWKB: 'ST_POLYGONFROMWKB'; +ST_SRID: 'ST_SRID'; +ST_STARTPOINT: 'ST_STARTPOINT'; +ST_SYMDIFFERENCE: 'ST_SYMDIFFERENCE'; +ST_TOUCHES: 'ST_TOUCHES'; +ST_UNION: 'ST_UNION'; +ST_WITHIN: 'ST_WITHIN'; +ST_X: 'ST_X'; +ST_Y: 'ST_Y'; +SUBDATE: 'SUBDATE'; +SUBSTRING_INDEX: 'SUBSTRING_INDEX'; +SUBTIME: 'SUBTIME'; +SYSTEM_USER: 'SYSTEM_USER'; +TAN: 'TAN'; +TIMEDIFF: 'TIMEDIFF'; +TIMESTAMPADD: 'TIMESTAMPADD'; +TIMESTAMPDIFF: 'TIMESTAMPDIFF'; +TIME_FORMAT: 'TIME_FORMAT'; +TIME_TO_SEC: 'TIME_TO_SEC'; +TOUCHES: 'TOUCHES'; +TO_BASE64: 'TO_BASE64'; +TO_DAYS: 'TO_DAYS'; +TO_SECONDS: 'TO_SECONDS'; +UCASE: 'UCASE'; +UNCOMPRESS: 'UNCOMPRESS'; +UNCOMPRESSED_LENGTH: 'UNCOMPRESSED_LENGTH'; +UNHEX: 'UNHEX'; +UNIX_TIMESTAMP: 'UNIX_TIMESTAMP'; +UPDATEXML: 'UPDATEXML'; +UPPER: 'UPPER'; +UUID: 'UUID'; +UUID_SHORT: 'UUID_SHORT'; +VALIDATE_PASSWORD_STRENGTH: 'VALIDATE_PASSWORD_STRENGTH'; +VERSION: 'VERSION'; +WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS: 'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS'; +WEEKDAY: 'WEEKDAY'; +WEEKOFYEAR: 'WEEKOFYEAR'; +WEIGHT_STRING: 'WEIGHT_STRING'; +WITHIN: 'WITHIN'; +YEARWEEK: 'YEARWEEK'; +Y_FUNCTION: 'Y'; +X_FUNCTION: 'X'; + + + + +// Operators +// Operators. Assigns + +VAR_ASSIGN: ':='; +PLUS_ASSIGN: '+='; +MINUS_ASSIGN: '-='; +MULT_ASSIGN: '*='; +DIV_ASSIGN: '/='; +MOD_ASSIGN: '%='; +AND_ASSIGN: '&='; +XOR_ASSIGN: '^='; +OR_ASSIGN: '|='; + + +// Operators. Arithmetics + +STAR: '*'; +DIVIDE: '/'; +MODULE: '%'; +PLUS: '+'; +MINUS: '-'; +DIV: 'DIV'; +MOD: 'MOD'; + + +// Operators. Comparation + +EQUAL_SYMBOL: '='; +GREATER_SYMBOL: '>'; +LESS_SYMBOL: '<'; +EXCLAMATION_SYMBOL: '!'; + + +// Operators. Bit + +BIT_NOT_OP: '~'; +BIT_OR_OP: '|'; +BIT_AND_OP: '&'; +BIT_XOR_OP: '^'; + + +// Constructors symbols + +DOT: '.'; +LR_BRACKET: '('; +RR_BRACKET: ')'; +COMMA: ','; +SEMI: ';'; +AT_SIGN: '@'; +ZERO_DECIMAL: '0'; +ONE_DECIMAL: '1'; +TWO_DECIMAL: '2'; +SINGLE_QUOTE_SYMB: '\''; +DOUBLE_QUOTE_SYMB: '"'; +REVERSE_QUOTE_SYMB: '`'; +COLON_SYMB: ':'; + +fragment QUOTE_SYMB + : SINGLE_QUOTE_SYMB | DOUBLE_QUOTE_SYMB | REVERSE_QUOTE_SYMB + ; + + + +// Charsets + +CHARSET_REVERSE_QOUTE_STRING: '`' CHARSET_NAME '`'; + + + +// File's sizes + + +FILESIZE_LITERAL: DEC_DIGIT+ ('K'|'M'|'G'|'T'); + + + +// Literal Primitives + + +START_NATIONAL_STRING_LITERAL: 'N' SQUOTA_STRING; +STRING_LITERAL: DQUOTA_STRING | SQUOTA_STRING | BQUOTA_STRING; +DECIMAL_LITERAL: DEC_DIGIT+; +HEXADECIMAL_LITERAL: 'X' '\'' (HEX_DIGIT HEX_DIGIT)+ '\'' + | '0X' HEX_DIGIT+; + +REAL_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+ + | DEC_DIGIT+ '.' EXPONENT_NUM_PART + | (DEC_DIGIT+)? '.' (DEC_DIGIT+ EXPONENT_NUM_PART) + | DEC_DIGIT+ EXPONENT_NUM_PART; +NULL_SPEC_LITERAL: '\\' 'N'; +BIT_STRING: BIT_STRING_L; +STRING_CHARSET_NAME: '_' CHARSET_NAME; + + + + +// Hack for dotID +// Prevent recognize string: .123somelatin AS ((.123), FLOAT_LITERAL), ((somelatin), ID) +// it must recoginze: .123somelatin AS ((.), DOT), (123somelatin, ID) + +DOT_ID: '.' ID_LITERAL; + + + +// Identifiers + +ID: ID_LITERAL; +// DOUBLE_QUOTE_ID: '"' ~'"'+ '"'; +REVERSE_QUOTE_ID: '`' ~'`'+ '`'; +STRING_USER_NAME: ( + SQUOTA_STRING | DQUOTA_STRING + | BQUOTA_STRING | ID_LITERAL + ) '@' + ( + SQUOTA_STRING | DQUOTA_STRING + | BQUOTA_STRING | ID_LITERAL + | IP_ADDRESS + ); +IP_ADDRESS: ( + [0-9]+ '.' [0-9.]+ + | [0-9A-F:]+ ':' [0-9A-F:]+ + ); +LOCAL_ID: '@' + ( + [A-Z0-9._$]+ + | SQUOTA_STRING + | DQUOTA_STRING + | BQUOTA_STRING + ); +GLOBAL_ID: '@' '@' + ( + [A-Z0-9._$]+ + | BQUOTA_STRING + ); + + +// Fragments for Literal primitives + +fragment CHARSET_NAME: ARMSCII8 | ASCII | BIG5 | BINARY | CP1250 + | CP1251 | CP1256 | CP1257 | CP850 + | CP852 | CP866 | CP932 | DEC8 | EUCJPMS + | EUCKR | GB2312 | GBK | GEOSTD8 | GREEK + | HEBREW | HP8 | KEYBCS2 | KOI8R | KOI8U + | LATIN1 | LATIN2 | LATIN5 | LATIN7 + | MACCE | MACROMAN | SJIS | SWE7 | TIS620 + | UCS2 | UJIS | UTF16 | UTF16LE | UTF32 + | UTF8 | UTF8MB3 | UTF8MB4; + +fragment EXPONENT_NUM_PART: 'E' [-+]? DEC_DIGIT+; +fragment ID_LITERAL: [A-Z_$0-9\u0080-\uFFFF]*?[A-Z_$\u0080-\uFFFF]+?[A-Z_$0-9\u0080-\uFFFF]*; +fragment DQUOTA_STRING: '"' ( '\\'. | '""' | ~('"'| '\\') )* '"'; +fragment SQUOTA_STRING: '\'' ('\\'. | '\'\'' | ~('\'' | '\\'))* '\''; +fragment BQUOTA_STRING: '`' ( '\\'. | '``' | ~('`'|'\\'))* '`'; +fragment HEX_DIGIT: [0-9A-F]; +fragment DEC_DIGIT: [0-9]; +fragment BIT_STRING_L: 'B' '\'' [01]+ '\''; + + + +// Last tokens must generate Errors + +ERROR_RECONGNIGION: . -> channel(ERRORCHANNEL); diff --git a/internal/mysqld/parser/antlrparser/parser/MySqlLexer.interp b/internal/mysqld/parser/antlrparser/parser/MySqlLexer.interp new file mode 100644 index 0000000000..d43c2455aa --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/MySqlLexer.interp @@ -0,0 +1,3496 @@ +token literal names: +null +null +null +null +null +'ADD' +'ALL' +'ALTER' +'ALWAYS' +'ANALYZE' +'AND' +'ARRAY' +'AS' +'ASC' +'ATTRIBUTE' +'BEFORE' +'BETWEEN' +'BOTH' +'BUCKETS' +'BY' +'CALL' +'CASCADE' +'CASE' +'CAST' +'CHANGE' +'CHARACTER' +'CHECK' +'COLLATE' +'COLUMN' +'CONDITION' +'CONSTRAINT' +'CONTINUE' +'CONVERT' +'CREATE' +'CROSS' +'CURRENT' +'CURRENT_ROLE' +'CURRENT_USER' +'CURSOR' +'DATABASE' +'DATABASES' +'DECLARE' +'DEFAULT' +'DELAYED' +'DELETE' +'DESC' +'DESCRIBE' +'DETERMINISTIC' +'DIAGNOSTICS' +'DISTINCT' +'DISTINCTROW' +'DROP' +'EACH' +'ELSE' +'ELSEIF' +'EMPTY' +'ENCLOSED' +'ESCAPED' +'EXCEPT' +'EXISTS' +'EXIT' +'EXPLAIN' +'FALSE' +'FETCH' +'FOR' +'FORCE' +'FOREIGN' +'FROM' +'FULLTEXT' +'GENERATED' +'GET' +'GRANT' +'GROUP' +'HAVING' +'HIGH_PRIORITY' +'HISTOGRAM' +'IF' +'IGNORE' +'IGNORED' +'IN' +'INDEX' +'INFILE' +'INNER' +'INOUT' +'INSERT' +'INTERVAL' +'INTO' +'IS' +'ITERATE' +'JOIN' +'KEY' +'KEYS' +'KILL' +'LATERAL' +'LEADING' +'LEAVE' +'LEFT' +'LIKE' +'LIMIT' +'LINEAR' +'LINES' +'LOAD' +'LOCK' +'LOCKED' +'LOOP' +'LOW_PRIORITY' +'MASTER_BIND' +'MASTER_SSL_VERIFY_SERVER_CERT' +'MATCH' +'MAXVALUE' +'MINVALUE' +'MODIFIES' +'NATURAL' +'NOT' +'NO_WRITE_TO_BINLOG' +'NULL' +'NUMBER' +'ON' +'OPTIMIZE' +'OPTION' +'OPTIONAL' +'OPTIONALLY' +'OR' +'ORDER' +'OUT' +'OUTER' +'OUTFILE' +'OVER' +'PARTITION' +'PRIMARY' +'PROCEDURE' +'PURGE' +'RANGE' +'READ' +'READS' +'REFERENCES' +'REGEXP' +'RELEASE' +'RENAME' +'REPEAT' +'REPLACE' +'REQUIRE' +'RESIGNAL' +'RESTRICT' +'RETAIN' +'RETURN' +'REVOKE' +'RIGHT' +'RLIKE' +'SCHEMA' +'SCHEMAS' +'SELECT' +'SET' +'SEPARATOR' +'SHOW' +'SIGNAL' +'SKIP' +'SPATIAL' +'SQL' +'SQLEXCEPTION' +'SQLSTATE' +'SQLWARNING' +'SQL_BIG_RESULT' +'SQL_CALC_FOUND_ROWS' +'SQL_SMALL_RESULT' +'SSL' +'STACKED' +'STARTING' +'STATEMENT' +'STRAIGHT_JOIN' +'TABLE' +'TERMINATED' +'THEN' +'TO' +'TRAILING' +'TRIGGER' +'TRUE' +'UNDO' +'UNION' +'UNIQUE' +'UNLOCK' +'UNSIGNED' +'UPDATE' +'USAGE' +'USE' +'USING' +'VALUES' +'WHEN' +'WHERE' +'WHILE' +'WITH' +'WRITE' +'XOR' +'ZEROFILL' +'TINYINT' +'SMALLINT' +'MEDIUMINT' +'MIDDLEINT' +'INT' +'INT1' +'INT2' +'INT3' +'INT4' +'INT8' +'INTEGER' +'BIGINT' +'REAL' +'DOUBLE' +'PRECISION' +'FLOAT' +'FLOAT4' +'FLOAT8' +'DECIMAL' +'DEC' +'NUMERIC' +'DATE' +'TIME' +'TIMESTAMP' +'DATETIME' +'YEAR' +'CHAR' +'VARCHAR' +'NVARCHAR' +'NATIONAL' +'BINARY' +'VARBINARY' +'TINYBLOB' +'BLOB' +'MEDIUMBLOB' +'LONG' +'LONGBLOB' +'TINYTEXT' +'TEXT' +'MEDIUMTEXT' +'LONGTEXT' +'ENUM' +'VARYING' +'SERIAL' +'YEAR_MONTH' +'DAY_HOUR' +'DAY_MINUTE' +'DAY_SECOND' +'HOUR_MINUTE' +'HOUR_SECOND' +'MINUTE_SECOND' +'SECOND_MICROSECOND' +'MINUTE_MICROSECOND' +'HOUR_MICROSECOND' +'DAY_MICROSECOND' +'JSON_ARRAY' +'JSON_ARRAYAGG' +'JSON_ARRAY_APPEND' +'JSON_ARRAY_INSERT' +'JSON_CONTAINS' +'JSON_CONTAINS_PATH' +'JSON_DEPTH' +'JSON_EXTRACT' +'JSON_INSERT' +'JSON_KEYS' +'JSON_LENGTH' +'JSON_MERGE' +'JSON_MERGE_PATCH' +'JSON_MERGE_PRESERVE' +'JSON_OBJECT' +'JSON_OBJECTAGG' +'JSON_OVERLAPS' +'JSON_PRETTY' +'JSON_QUOTE' +'JSON_REMOVE' +'JSON_REPLACE' +'JSON_SCHEMA_VALID' +'JSON_SCHEMA_VALIDATION_REPORT' +'JSON_SEARCH' +'JSON_SET' +'JSON_STORAGE_FREE' +'JSON_STORAGE_SIZE' +'JSON_TABLE' +'JSON_TYPE' +'JSON_UNQUOTE' +'JSON_VALID' +'JSON_VALUE' +'NESTED' +'ORDINALITY' +'PATH' +'AVG' +'BIT_AND' +'BIT_OR' +'BIT_XOR' +'COUNT' +'CUME_DIST' +'DENSE_RANK' +'FIRST_VALUE' +'GROUP_CONCAT' +'LAG' +'LAST_VALUE' +'LEAD' +'MAX' +'MIN' +'NTILE' +'NTH_VALUE' +'PERCENT_RANK' +'RANK' +'ROW_NUMBER' +'STD' +'STDDEV' +'STDDEV_POP' +'STDDEV_SAMP' +'SUM' +'VAR_POP' +'VAR_SAMP' +'VARIANCE' +'CURRENT_DATE' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'LOCALTIME' +'CURDATE' +'CURTIME' +'DATE_ADD' +'DATE_SUB' +'EXTRACT' +'LOCALTIMESTAMP' +'NOW' +'POSITION' +'SUBSTR' +'SUBSTRING' +'SYSDATE' +'TRIM' +'UTC_DATE' +'UTC_TIME' +'UTC_TIMESTAMP' +'ACCOUNT' +'ACTION' +'AFTER' +'AGGREGATE' +'ALGORITHM' +'ANY' +'AT' +'AUTHORS' +'AUTOCOMMIT' +'AUTOEXTEND_SIZE' +'AUTO_INCREMENT' +'AVG_ROW_LENGTH' +'BEGIN' +'BINLOG' +'BIT' +'BLOCK' +'BOOL' +'BOOLEAN' +'BTREE' +'CACHE' +'CASCADED' +'CHAIN' +'CHANGED' +'CHANNEL' +'CHECKSUM' +'PAGE_CHECKSUM' +'CIPHER' +'CLASS_ORIGIN' +'CLIENT' +'CLOSE' +'CLUSTERING' +'COALESCE' +'CODE' +'COLUMNS' +'COLUMN_FORMAT' +'COLUMN_NAME' +'COMMENT' +'COMMIT' +'COMPACT' +'COMPLETION' +'COMPRESSED' +null +'CONCURRENT' +'CONNECT' +'CONNECTION' +'CONSISTENT' +'CONSTRAINT_CATALOG' +'CONSTRAINT_SCHEMA' +'CONSTRAINT_NAME' +'CONTAINS' +'CONTEXT' +'CONTRIBUTORS' +'COPY' +'CPU' +'CYCLE' +'CURSOR_NAME' +'DATA' +'DATAFILE' +'DEALLOCATE' +'DEFAULT_AUTH' +'DEFINER' +'DELAY_KEY_WRITE' +'DES_KEY_FILE' +'DIRECTORY' +'DISABLE' +'DISCARD' +'DISK' +'DO' +'DUMPFILE' +'DUPLICATE' +'DYNAMIC' +'ENABLE' +'ENCRYPTED' +'ENCRYPTION' +'ENCRYPTION_KEY_ID' +'END' +'ENDS' +'ENGINE' +'ENGINES' +'ERROR' +'ERRORS' +'ESCAPE' +'EVEN' +'EVENT' +'EVENTS' +'EVERY' +'EXCHANGE' +'EXCLUSIVE' +'EXPIRE' +'EXPORT' +'EXTENDED' +'EXTENT_SIZE' +'FAILED_LOGIN_ATTEMPTS' +'FAST' +'FAULTS' +'FIELDS' +'FILE_BLOCK_SIZE' +'FILTER' +'FIRST' +'FIXED' +'FLUSH' +'FOLLOWING' +'FOLLOWS' +'FOUND' +'FULL' +'FUNCTION' +'GENERAL' +'GLOBAL' +'GRANTS' +'GROUP_REPLICATION' +'HANDLER' +'HASH' +'HELP' +'HISTORY' +'HOST' +'HOSTS' +'IDENTIFIED' +'IGNORE_SERVER_IDS' +'IMPORT' +'INCREMENT' +'INDEXES' +'INITIAL_SIZE' +'INPLACE' +'INSERT_METHOD' +'INSTALL' +'INSTANCE' +'INSTANT' +'INVISIBLE' +'INVOKER' +'IO' +'IO_THREAD' +'IPC' +'ISOLATION' +'ISSUER' +'JSON' +'KEY_BLOCK_SIZE' +'LANGUAGE' +'LAST' +'LEAVES' +'LESS' +'LEVEL' +'LIST' +'LOCAL' +'LOGFILE' +'LOGS' +'MASTER' +'MASTER_AUTO_POSITION' +'MASTER_CONNECT_RETRY' +'MASTER_DELAY' +'MASTER_HEARTBEAT_PERIOD' +'MASTER_HOST' +'MASTER_LOG_FILE' +'MASTER_LOG_POS' +'MASTER_PASSWORD' +'MASTER_PORT' +'MASTER_RETRY_COUNT' +'MASTER_SSL' +'MASTER_SSL_CA' +'MASTER_SSL_CAPATH' +'MASTER_SSL_CERT' +'MASTER_SSL_CIPHER' +'MASTER_SSL_CRL' +'MASTER_SSL_CRLPATH' +'MASTER_SSL_KEY' +'MASTER_TLS_VERSION' +'MASTER_USER' +'MAX_CONNECTIONS_PER_HOUR' +'MAX_QUERIES_PER_HOUR' +'MAX_ROWS' +'MAX_SIZE' +'MAX_UPDATES_PER_HOUR' +'MAX_USER_CONNECTIONS' +'MEDIUM' +'MEMBER' +'MERGE' +'MESSAGE_TEXT' +'MID' +'MIGRATE' +'MIN_ROWS' +'MODE' +'MODIFY' +'MUTEX' +'MYSQL' +'MYSQL_ERRNO' +'NAME' +'NAMES' +'NCHAR' +'NEVER' +'NEXT' +'NO' +'NOCACHE' +'NOCOPY' +'NOCYCLE' +'NOMAXVALUE' +'NOMINVALUE' +'NOWAIT' +'NODEGROUP' +'NONE' +'ODBC' +'OFFLINE' +'OFFSET' +'OF' +'OJ' +'OLD_PASSWORD' +'ONE' +'ONLINE' +'ONLY' +'OPEN' +'OPTIMIZER_COSTS' +'OPTIONS' +'OWNER' +'PACK_KEYS' +'PAGE' +'PAGE_COMPRESSED' +'PAGE_COMPRESSION_LEVEL' +'PARSER' +'PARTIAL' +'PARTITIONING' +'PARTITIONS' +'PASSWORD' +'PASSWORD_LOCK_TIME' +'PHASE' +'PLUGIN' +'PLUGIN_DIR' +'PLUGINS' +'PORT' +'PRECEDES' +'PRECEDING' +'PREPARE' +'PRESERVE' +'PREV' +'PROCESSLIST' +'PROFILE' +'PROFILES' +'PROXY' +'QUERY' +'QUICK' +'REBUILD' +'RECOVER' +'RECURSIVE' +'REDO_BUFFER_SIZE' +'REDUNDANT' +'RELAY' +'RELAY_LOG_FILE' +'RELAY_LOG_POS' +'RELAYLOG' +'REMOVE' +'REORGANIZE' +'REPAIR' +'REPLICATE_DO_DB' +'REPLICATE_DO_TABLE' +'REPLICATE_IGNORE_DB' +'REPLICATE_IGNORE_TABLE' +'REPLICATE_REWRITE_DB' +'REPLICATE_WILD_DO_TABLE' +'REPLICATE_WILD_IGNORE_TABLE' +'REPLICATION' +'RESET' +'RESTART' +'RESUME' +'RETURNED_SQLSTATE' +'RETURNING' +'RETURNS' +'REUSE' +'ROLE' +'ROLLBACK' +'ROLLUP' +'ROTATE' +'ROW' +'ROWS' +'ROW_FORMAT' +'RTREE' +'SAVEPOINT' +'SCHEDULE' +'SECURITY' +'SEQUENCE' +'SERVER' +'SESSION' +'SHARE' +'SHARED' +'SIGNED' +'SIMPLE' +'SLAVE' +'SLOW' +'SNAPSHOT' +'SOCKET' +'SOME' +'SONAME' +'SOUNDS' +'SOURCE' +'SQL_AFTER_GTIDS' +'SQL_AFTER_MTS_GAPS' +'SQL_BEFORE_GTIDS' +'SQL_BUFFER_RESULT' +'SQL_CACHE' +'SQL_NO_CACHE' +'SQL_THREAD' +'START' +'STARTS' +'STATS_AUTO_RECALC' +'STATS_PERSISTENT' +'STATS_SAMPLE_PAGES' +'STATUS' +'STOP' +'STORAGE' +'STORED' +'STRING' +'SUBCLASS_ORIGIN' +'SUBJECT' +'SUBPARTITION' +'SUBPARTITIONS' +'SUSPEND' +'SWAPS' +'SWITCHES' +'TABLE_NAME' +'TABLESPACE' +'TABLE_TYPE' +'TEMPORARY' +'TEMPTABLE' +'THAN' +'TRADITIONAL' +'TRANSACTION' +'TRANSACTIONAL' +'TRIGGERS' +'TRUNCATE' +'UNBOUNDED' +'UNDEFINED' +'UNDOFILE' +'UNDO_BUFFER_SIZE' +'UNINSTALL' +'UNKNOWN' +'UNTIL' +'UPGRADE' +'USER' +'USE_FRM' +'USER_RESOURCES' +'VALIDATION' +'VALUE' +'VARIABLES' +'VIEW' +'VIRTUAL' +'VISIBLE' +'WAIT' +'WARNINGS' +'WINDOW' +'WITHOUT' +'WORK' +'WRAPPER' +'X509' +'XA' +'XML' +'YES' +'EUR' +'USA' +'JIS' +'ISO' +'INTERNAL' +'QUARTER' +'MONTH' +'DAY' +'HOUR' +'MINUTE' +'WEEK' +'SECOND' +'MICROSECOND' +'ADMIN' +'APPLICATION_PASSWORD_ADMIN' +'AUDIT_ADMIN' +'BACKUP_ADMIN' +'BINLOG_ADMIN' +'BINLOG_ENCRYPTION_ADMIN' +'CLONE_ADMIN' +'CONNECTION_ADMIN' +'ENCRYPTION_KEY_ADMIN' +'EXECUTE' +'FILE' +'FIREWALL_ADMIN' +'FIREWALL_USER' +'FLUSH_OPTIMIZER_COSTS' +'FLUSH_STATUS' +'FLUSH_TABLES' +'FLUSH_USER_RESOURCES' +'GROUP_REPLICATION_ADMIN' +'INNODB_REDO_LOG_ARCHIVE' +'INNODB_REDO_LOG_ENABLE' +'INVOKE' +'LAMBDA' +'NDB_STORED_USER' +'PASSWORDLESS_USER_ADMIN' +'PERSIST_RO_VARIABLES_ADMIN' +'PRIVILEGES' +'PROCESS' +'RELOAD' +'REPLICATION_APPLIER' +'REPLICATION_SLAVE_ADMIN' +'RESOURCE_GROUP_ADMIN' +'RESOURCE_GROUP_USER' +'ROLE_ADMIN' +'ROUTINE' +'S3' +'SERVICE_CONNECTION_ADMIN' +null +'SET_USER_ID' +'SHOW_ROUTINE' +'SHUTDOWN' +'SUPER' +'SYSTEM_VARIABLES_ADMIN' +'TABLES' +'TABLE_ENCRYPTION_ADMIN' +'VERSION_TOKEN_ADMIN' +'XA_RECOVER_ADMIN' +'ARMSCII8' +'ASCII' +'BIG5' +'CP1250' +'CP1251' +'CP1256' +'CP1257' +'CP850' +'CP852' +'CP866' +'CP932' +'DEC8' +'EUCJPMS' +'EUCKR' +'GB18030' +'GB2312' +'GBK' +'GEOSTD8' +'GREEK' +'HEBREW' +'HP8' +'KEYBCS2' +'KOI8R' +'KOI8U' +'LATIN1' +'LATIN2' +'LATIN5' +'LATIN7' +'MACCE' +'MACROMAN' +'SJIS' +'SWE7' +'TIS620' +'UCS2' +'UJIS' +'UTF16' +'UTF16LE' +'UTF32' +'UTF8' +'UTF8MB3' +'UTF8MB4' +'ARCHIVE' +'BLACKHOLE' +'CSV' +'FEDERATED' +'INNODB' +'MEMORY' +'MRG_MYISAM' +'MYISAM' +'NDB' +'NDBCLUSTER' +'PERFORMANCE_SCHEMA' +'TOKUDB' +'REPEATABLE' +'COMMITTED' +'UNCOMMITTED' +'SERIALIZABLE' +'GEOMETRYCOLLECTION' +'GEOMCOLLECTION' +'GEOMETRY' +'LINESTRING' +'MULTILINESTRING' +'MULTIPOINT' +'MULTIPOLYGON' +'POINT' +'POLYGON' +'ABS' +'ACOS' +'ADDDATE' +'ADDTIME' +'AES_DECRYPT' +'AES_ENCRYPT' +'AREA' +'ASBINARY' +'ASIN' +'ASTEXT' +'ASWKB' +'ASWKT' +'ASYMMETRIC_DECRYPT' +'ASYMMETRIC_DERIVE' +'ASYMMETRIC_ENCRYPT' +'ASYMMETRIC_SIGN' +'ASYMMETRIC_VERIFY' +'ATAN' +'ATAN2' +'BENCHMARK' +'BIN' +'BIT_COUNT' +'BIT_LENGTH' +'BUFFER' +'CATALOG_NAME' +'CEIL' +'CEILING' +'CENTROID' +'CHARACTER_LENGTH' +'CHARSET' +'CHAR_LENGTH' +'COERCIBILITY' +'COLLATION' +'COMPRESS' +'CONCAT' +'CONCAT_WS' +'CONNECTION_ID' +'CONV' +'CONVERT_TZ' +'COS' +'COT' +'CRC32' +'CREATE_ASYMMETRIC_PRIV_KEY' +'CREATE_ASYMMETRIC_PUB_KEY' +'CREATE_DH_PARAMETERS' +'CREATE_DIGEST' +'CROSSES' +'DATEDIFF' +'DATE_FORMAT' +'DAYNAME' +'DAYOFMONTH' +'DAYOFWEEK' +'DAYOFYEAR' +'DECODE' +'DEGREES' +'DES_DECRYPT' +'DES_ENCRYPT' +'DIMENSION' +'DISJOINT' +'ELT' +'ENCODE' +'ENCRYPT' +'ENDPOINT' +'ENGINE_ATTRIBUTE' +'ENVELOPE' +'EQUALS' +'EXP' +'EXPORT_SET' +'EXTERIORRING' +'EXTRACTVALUE' +'FIELD' +'FIND_IN_SET' +'FLOOR' +'FORMAT' +'FOUND_ROWS' +'FROM_BASE64' +'FROM_DAYS' +'FROM_UNIXTIME' +'GEOMCOLLFROMTEXT' +'GEOMCOLLFROMWKB' +'GEOMETRYCOLLECTIONFROMTEXT' +'GEOMETRYCOLLECTIONFROMWKB' +'GEOMETRYFROMTEXT' +'GEOMETRYFROMWKB' +'GEOMETRYN' +'GEOMETRYTYPE' +'GEOMFROMTEXT' +'GEOMFROMWKB' +'GET_FORMAT' +'GET_LOCK' +'GLENGTH' +'GREATEST' +'GTID_SUBSET' +'GTID_SUBTRACT' +'HEX' +'IFNULL' +'INET6_ATON' +'INET6_NTOA' +'INET_ATON' +'INET_NTOA' +'INSTR' +'INTERIORRINGN' +'INTERSECTS' +'ISCLOSED' +'ISEMPTY' +'ISNULL' +'ISSIMPLE' +'IS_FREE_LOCK' +'IS_IPV4' +'IS_IPV4_COMPAT' +'IS_IPV4_MAPPED' +'IS_IPV6' +'IS_USED_LOCK' +'LAST_INSERT_ID' +'LCASE' +'LEAST' +'LENGTH' +'LINEFROMTEXT' +'LINEFROMWKB' +'LINESTRINGFROMTEXT' +'LINESTRINGFROMWKB' +'LN' +'LOAD_FILE' +'LOCATE' +'LOG' +'LOG10' +'LOG2' +'LOWER' +'LPAD' +'LTRIM' +'MAKEDATE' +'MAKETIME' +'MAKE_SET' +'MASTER_POS_WAIT' +'MBRCONTAINS' +'MBRDISJOINT' +'MBREQUAL' +'MBRINTERSECTS' +'MBROVERLAPS' +'MBRTOUCHES' +'MBRWITHIN' +'MD5' +'MLINEFROMTEXT' +'MLINEFROMWKB' +'MONTHNAME' +'MPOINTFROMTEXT' +'MPOINTFROMWKB' +'MPOLYFROMTEXT' +'MPOLYFROMWKB' +'MULTILINESTRINGFROMTEXT' +'MULTILINESTRINGFROMWKB' +'MULTIPOINTFROMTEXT' +'MULTIPOINTFROMWKB' +'MULTIPOLYGONFROMTEXT' +'MULTIPOLYGONFROMWKB' +'NAME_CONST' +'NULLIF' +'NUMGEOMETRIES' +'NUMINTERIORRINGS' +'NUMPOINTS' +'OCT' +'OCTET_LENGTH' +'ORD' +'OVERLAPS' +'PERIOD_ADD' +'PERIOD_DIFF' +'PI' +'POINTFROMTEXT' +'POINTFROMWKB' +'POINTN' +'POLYFROMTEXT' +'POLYFROMWKB' +'POLYGONFROMTEXT' +'POLYGONFROMWKB' +'POW' +'POWER' +'QUOTE' +'RADIANS' +'RAND' +'RANDOM_BYTES' +'RELEASE_LOCK' +'REVERSE' +'ROUND' +'ROW_COUNT' +'RPAD' +'RTRIM' +'SEC_TO_TIME' +'SECONDARY_ENGINE_ATTRIBUTE' +'SESSION_USER' +'SHA' +'SHA1' +'SHA2' +'SCHEMA_NAME' +'SIGN' +'SIN' +'SLEEP' +'SOUNDEX' +'SQL_THREAD_WAIT_AFTER_GTIDS' +'SQRT' +'SRID' +'STARTPOINT' +'STRCMP' +'STR_TO_DATE' +'ST_AREA' +'ST_ASBINARY' +'ST_ASTEXT' +'ST_ASWKB' +'ST_ASWKT' +'ST_BUFFER' +'ST_CENTROID' +'ST_CONTAINS' +'ST_CROSSES' +'ST_DIFFERENCE' +'ST_DIMENSION' +'ST_DISJOINT' +'ST_DISTANCE' +'ST_ENDPOINT' +'ST_ENVELOPE' +'ST_EQUALS' +'ST_EXTERIORRING' +'ST_GEOMCOLLFROMTEXT' +'ST_GEOMCOLLFROMTXT' +'ST_GEOMCOLLFROMWKB' +'ST_GEOMETRYCOLLECTIONFROMTEXT' +'ST_GEOMETRYCOLLECTIONFROMWKB' +'ST_GEOMETRYFROMTEXT' +'ST_GEOMETRYFROMWKB' +'ST_GEOMETRYN' +'ST_GEOMETRYTYPE' +'ST_GEOMFROMTEXT' +'ST_GEOMFROMWKB' +'ST_INTERIORRINGN' +'ST_INTERSECTION' +'ST_INTERSECTS' +'ST_ISCLOSED' +'ST_ISEMPTY' +'ST_ISSIMPLE' +'ST_LINEFROMTEXT' +'ST_LINEFROMWKB' +'ST_LINESTRINGFROMTEXT' +'ST_LINESTRINGFROMWKB' +'ST_NUMGEOMETRIES' +'ST_NUMINTERIORRING' +'ST_NUMINTERIORRINGS' +'ST_NUMPOINTS' +'ST_OVERLAPS' +'ST_POINTFROMTEXT' +'ST_POINTFROMWKB' +'ST_POINTN' +'ST_POLYFROMTEXT' +'ST_POLYFROMWKB' +'ST_POLYGONFROMTEXT' +'ST_POLYGONFROMWKB' +'ST_SRID' +'ST_STARTPOINT' +'ST_SYMDIFFERENCE' +'ST_TOUCHES' +'ST_UNION' +'ST_WITHIN' +'ST_X' +'ST_Y' +'SUBDATE' +'SUBSTRING_INDEX' +'SUBTIME' +'SYSTEM_USER' +'TAN' +'TIMEDIFF' +'TIMESTAMPADD' +'TIMESTAMPDIFF' +'TIME_FORMAT' +'TIME_TO_SEC' +'TOUCHES' +'TO_BASE64' +'TO_DAYS' +'TO_SECONDS' +'UCASE' +'UNCOMPRESS' +'UNCOMPRESSED_LENGTH' +'UNHEX' +'UNIX_TIMESTAMP' +'UPDATEXML' +'UPPER' +'UUID' +'UUID_SHORT' +'VALIDATE_PASSWORD_STRENGTH' +'VERSION' +'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS' +'WEEKDAY' +'WEEKOFYEAR' +'WEIGHT_STRING' +'WITHIN' +'YEARWEEK' +'Y' +'X' +':=' +'+=' +'-=' +'*=' +'/=' +'%=' +'&=' +'^=' +'|=' +'*' +'/' +'%' +'+' +'-' +'DIV' +'MOD' +'=' +'>' +'<' +'!' +'~' +'|' +'&' +'^' +'.' +'(' +')' +',' +';' +'@' +'0' +'1' +'2' +'\'' +'"' +'`' +':' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +SPACE +SPEC_MYSQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ADD +ALL +ALTER +ALWAYS +ANALYZE +AND +ARRAY +AS +ASC +ATTRIBUTE +BEFORE +BETWEEN +BOTH +BUCKETS +BY +CALL +CASCADE +CASE +CAST +CHANGE +CHARACTER +CHECK +COLLATE +COLUMN +CONDITION +CONSTRAINT +CONTINUE +CONVERT +CREATE +CROSS +CURRENT +CURRENT_ROLE +CURRENT_USER +CURSOR +DATABASE +DATABASES +DECLARE +DEFAULT +DELAYED +DELETE +DESC +DESCRIBE +DETERMINISTIC +DIAGNOSTICS +DISTINCT +DISTINCTROW +DROP +EACH +ELSE +ELSEIF +EMPTY +ENCLOSED +ESCAPED +EXCEPT +EXISTS +EXIT +EXPLAIN +FALSE +FETCH +FOR +FORCE +FOREIGN +FROM +FULLTEXT +GENERATED +GET +GRANT +GROUP +HAVING +HIGH_PRIORITY +HISTOGRAM +IF +IGNORE +IGNORED +IN +INDEX +INFILE +INNER +INOUT +INSERT +INTERVAL +INTO +IS +ITERATE +JOIN +KEY +KEYS +KILL +LATERAL +LEADING +LEAVE +LEFT +LIKE +LIMIT +LINEAR +LINES +LOAD +LOCK +LOCKED +LOOP +LOW_PRIORITY +MASTER_BIND +MASTER_SSL_VERIFY_SERVER_CERT +MATCH +MAXVALUE +MINVALUE +MODIFIES +NATURAL +NOT +NO_WRITE_TO_BINLOG +NULL_LITERAL +NUMBER +ON +OPTIMIZE +OPTION +OPTIONAL +OPTIONALLY +OR +ORDER +OUT +OUTER +OUTFILE +OVER +PARTITION +PRIMARY +PROCEDURE +PURGE +RANGE +READ +READS +REFERENCES +REGEXP +RELEASE +RENAME +REPEAT +REPLACE +REQUIRE +RESIGNAL +RESTRICT +RETAIN +RETURN +REVOKE +RIGHT +RLIKE +SCHEMA +SCHEMAS +SELECT +SET +SEPARATOR +SHOW +SIGNAL +SKIP_ +SPATIAL +SQL +SQLEXCEPTION +SQLSTATE +SQLWARNING +SQL_BIG_RESULT +SQL_CALC_FOUND_ROWS +SQL_SMALL_RESULT +SSL +STACKED +STARTING +STATEMENT +STRAIGHT_JOIN +TABLE +TERMINATED +THEN +TO +TRAILING +TRIGGER +TRUE +UNDO +UNION +UNIQUE +UNLOCK +UNSIGNED +UPDATE +USAGE +USE +USING +VALUES +WHEN +WHERE +WHILE +WITH +WRITE +XOR +ZEROFILL +TINYINT +SMALLINT +MEDIUMINT +MIDDLEINT +INT +INT1 +INT2 +INT3 +INT4 +INT8 +INTEGER +BIGINT +REAL +DOUBLE +PRECISION +FLOAT +FLOAT4 +FLOAT8 +DECIMAL +DEC +NUMERIC +DATE +TIME +TIMESTAMP +DATETIME +YEAR +CHAR +VARCHAR +NVARCHAR +NATIONAL +BINARY +VARBINARY +TINYBLOB +BLOB +MEDIUMBLOB +LONG +LONGBLOB +TINYTEXT +TEXT +MEDIUMTEXT +LONGTEXT +ENUM +VARYING +SERIAL +YEAR_MONTH +DAY_HOUR +DAY_MINUTE +DAY_SECOND +HOUR_MINUTE +HOUR_SECOND +MINUTE_SECOND +SECOND_MICROSECOND +MINUTE_MICROSECOND +HOUR_MICROSECOND +DAY_MICROSECOND +JSON_ARRAY +JSON_ARRAYAGG +JSON_ARRAY_APPEND +JSON_ARRAY_INSERT +JSON_CONTAINS +JSON_CONTAINS_PATH +JSON_DEPTH +JSON_EXTRACT +JSON_INSERT +JSON_KEYS +JSON_LENGTH +JSON_MERGE +JSON_MERGE_PATCH +JSON_MERGE_PRESERVE +JSON_OBJECT +JSON_OBJECTAGG +JSON_OVERLAPS +JSON_PRETTY +JSON_QUOTE +JSON_REMOVE +JSON_REPLACE +JSON_SCHEMA_VALID +JSON_SCHEMA_VALIDATION_REPORT +JSON_SEARCH +JSON_SET +JSON_STORAGE_FREE +JSON_STORAGE_SIZE +JSON_TABLE +JSON_TYPE +JSON_UNQUOTE +JSON_VALID +JSON_VALUE +NESTED +ORDINALITY +PATH +AVG +BIT_AND +BIT_OR +BIT_XOR +COUNT +CUME_DIST +DENSE_RANK +FIRST_VALUE +GROUP_CONCAT +LAG +LAST_VALUE +LEAD +MAX +MIN +NTILE +NTH_VALUE +PERCENT_RANK +RANK +ROW_NUMBER +STD +STDDEV +STDDEV_POP +STDDEV_SAMP +SUM +VAR_POP +VAR_SAMP +VARIANCE +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +LOCALTIME +CURDATE +CURTIME +DATE_ADD +DATE_SUB +EXTRACT +LOCALTIMESTAMP +NOW +POSITION +SUBSTR +SUBSTRING +SYSDATE +TRIM +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +ACCOUNT +ACTION +AFTER +AGGREGATE +ALGORITHM +ANY +AT +AUTHORS +AUTOCOMMIT +AUTOEXTEND_SIZE +AUTO_INCREMENT +AVG_ROW_LENGTH +BEGIN +BINLOG +BIT +BLOCK +BOOL +BOOLEAN +BTREE +CACHE +CASCADED +CHAIN +CHANGED +CHANNEL +CHECKSUM +PAGE_CHECKSUM +CIPHER +CLASS_ORIGIN +CLIENT +CLOSE +CLUSTERING +COALESCE +CODE +COLUMNS +COLUMN_FORMAT +COLUMN_NAME +COMMENT +COMMIT +COMPACT +COMPLETION +COMPRESSED +COMPRESSION +CONCURRENT +CONNECT +CONNECTION +CONSISTENT +CONSTRAINT_CATALOG +CONSTRAINT_SCHEMA +CONSTRAINT_NAME +CONTAINS +CONTEXT +CONTRIBUTORS +COPY +CPU +CYCLE +CURSOR_NAME +DATA +DATAFILE +DEALLOCATE +DEFAULT_AUTH +DEFINER +DELAY_KEY_WRITE +DES_KEY_FILE +DIRECTORY +DISABLE +DISCARD +DISK +DO +DUMPFILE +DUPLICATE +DYNAMIC +ENABLE +ENCRYPTED +ENCRYPTION +ENCRYPTION_KEY_ID +END +ENDS +ENGINE +ENGINES +ERROR +ERRORS +ESCAPE +EVEN +EVENT +EVENTS +EVERY +EXCHANGE +EXCLUSIVE +EXPIRE +EXPORT +EXTENDED +EXTENT_SIZE +FAILED_LOGIN_ATTEMPTS +FAST +FAULTS +FIELDS +FILE_BLOCK_SIZE +FILTER +FIRST +FIXED +FLUSH +FOLLOWING +FOLLOWS +FOUND +FULL +FUNCTION +GENERAL +GLOBAL +GRANTS +GROUP_REPLICATION +HANDLER +HASH +HELP +HISTORY +HOST +HOSTS +IDENTIFIED +IGNORE_SERVER_IDS +IMPORT +INCREMENT +INDEXES +INITIAL_SIZE +INPLACE +INSERT_METHOD +INSTALL +INSTANCE +INSTANT +INVISIBLE +INVOKER +IO +IO_THREAD +IPC +ISOLATION +ISSUER +JSON +KEY_BLOCK_SIZE +LANGUAGE +LAST +LEAVES +LESS +LEVEL +LIST +LOCAL +LOGFILE +LOGS +MASTER +MASTER_AUTO_POSITION +MASTER_CONNECT_RETRY +MASTER_DELAY +MASTER_HEARTBEAT_PERIOD +MASTER_HOST +MASTER_LOG_FILE +MASTER_LOG_POS +MASTER_PASSWORD +MASTER_PORT +MASTER_RETRY_COUNT +MASTER_SSL +MASTER_SSL_CA +MASTER_SSL_CAPATH +MASTER_SSL_CERT +MASTER_SSL_CIPHER +MASTER_SSL_CRL +MASTER_SSL_CRLPATH +MASTER_SSL_KEY +MASTER_TLS_VERSION +MASTER_USER +MAX_CONNECTIONS_PER_HOUR +MAX_QUERIES_PER_HOUR +MAX_ROWS +MAX_SIZE +MAX_UPDATES_PER_HOUR +MAX_USER_CONNECTIONS +MEDIUM +MEMBER +MERGE +MESSAGE_TEXT +MID +MIGRATE +MIN_ROWS +MODE +MODIFY +MUTEX +MYSQL +MYSQL_ERRNO +NAME +NAMES +NCHAR +NEVER +NEXT +NO +NOCACHE +NOCOPY +NOCYCLE +NOMAXVALUE +NOMINVALUE +NOWAIT +NODEGROUP +NONE +ODBC +OFFLINE +OFFSET +OF +OJ +OLD_PASSWORD +ONE +ONLINE +ONLY +OPEN +OPTIMIZER_COSTS +OPTIONS +OWNER +PACK_KEYS +PAGE +PAGE_COMPRESSED +PAGE_COMPRESSION_LEVEL +PARSER +PARTIAL +PARTITIONING +PARTITIONS +PASSWORD +PASSWORD_LOCK_TIME +PHASE +PLUGIN +PLUGIN_DIR +PLUGINS +PORT +PRECEDES +PRECEDING +PREPARE +PRESERVE +PREV +PROCESSLIST +PROFILE +PROFILES +PROXY +QUERY +QUICK +REBUILD +RECOVER +RECURSIVE +REDO_BUFFER_SIZE +REDUNDANT +RELAY +RELAY_LOG_FILE +RELAY_LOG_POS +RELAYLOG +REMOVE +REORGANIZE +REPAIR +REPLICATE_DO_DB +REPLICATE_DO_TABLE +REPLICATE_IGNORE_DB +REPLICATE_IGNORE_TABLE +REPLICATE_REWRITE_DB +REPLICATE_WILD_DO_TABLE +REPLICATE_WILD_IGNORE_TABLE +REPLICATION +RESET +RESTART +RESUME +RETURNED_SQLSTATE +RETURNING +RETURNS +REUSE +ROLE +ROLLBACK +ROLLUP +ROTATE +ROW +ROWS +ROW_FORMAT +RTREE +SAVEPOINT +SCHEDULE +SECURITY +SEQUENCE +SERVER +SESSION +SHARE +SHARED +SIGNED +SIMPLE +SLAVE +SLOW +SNAPSHOT +SOCKET +SOME +SONAME +SOUNDS +SOURCE +SQL_AFTER_GTIDS +SQL_AFTER_MTS_GAPS +SQL_BEFORE_GTIDS +SQL_BUFFER_RESULT +SQL_CACHE +SQL_NO_CACHE +SQL_THREAD +START +STARTS +STATS_AUTO_RECALC +STATS_PERSISTENT +STATS_SAMPLE_PAGES +STATUS +STOP +STORAGE +STORED +STRING +SUBCLASS_ORIGIN +SUBJECT +SUBPARTITION +SUBPARTITIONS +SUSPEND +SWAPS +SWITCHES +TABLE_NAME +TABLESPACE +TABLE_TYPE +TEMPORARY +TEMPTABLE +THAN +TRADITIONAL +TRANSACTION +TRANSACTIONAL +TRIGGERS +TRUNCATE +UNBOUNDED +UNDEFINED +UNDOFILE +UNDO_BUFFER_SIZE +UNINSTALL +UNKNOWN +UNTIL +UPGRADE +USER +USE_FRM +USER_RESOURCES +VALIDATION +VALUE +VARIABLES +VIEW +VIRTUAL +VISIBLE +WAIT +WARNINGS +WINDOW +WITHOUT +WORK +WRAPPER +X509 +XA +XML +YES +EUR +USA +JIS +ISO +INTERNAL +QUARTER +MONTH +DAY +HOUR +MINUTE +WEEK +SECOND +MICROSECOND +ADMIN +APPLICATION_PASSWORD_ADMIN +AUDIT_ADMIN +BACKUP_ADMIN +BINLOG_ADMIN +BINLOG_ENCRYPTION_ADMIN +CLONE_ADMIN +CONNECTION_ADMIN +ENCRYPTION_KEY_ADMIN +EXECUTE +FILE +FIREWALL_ADMIN +FIREWALL_USER +FLUSH_OPTIMIZER_COSTS +FLUSH_STATUS +FLUSH_TABLES +FLUSH_USER_RESOURCES +GROUP_REPLICATION_ADMIN +INNODB_REDO_LOG_ARCHIVE +INNODB_REDO_LOG_ENABLE +INVOKE +LAMBDA +NDB_STORED_USER +PASSWORDLESS_USER_ADMIN +PERSIST_RO_VARIABLES_ADMIN +PRIVILEGES +PROCESS +RELOAD +REPLICATION_APPLIER +REPLICATION_SLAVE_ADMIN +RESOURCE_GROUP_ADMIN +RESOURCE_GROUP_USER +ROLE_ADMIN +ROUTINE +S3 +SERVICE_CONNECTION_ADMIN +SESSION_VARIABLES_ADMIN +SET_USER_ID +SHOW_ROUTINE +SHUTDOWN +SUPER +SYSTEM_VARIABLES_ADMIN +TABLES +TABLE_ENCRYPTION_ADMIN +VERSION_TOKEN_ADMIN +XA_RECOVER_ADMIN +ARMSCII8 +ASCII +BIG5 +CP1250 +CP1251 +CP1256 +CP1257 +CP850 +CP852 +CP866 +CP932 +DEC8 +EUCJPMS +EUCKR +GB18030 +GB2312 +GBK +GEOSTD8 +GREEK +HEBREW +HP8 +KEYBCS2 +KOI8R +KOI8U +LATIN1 +LATIN2 +LATIN5 +LATIN7 +MACCE +MACROMAN +SJIS +SWE7 +TIS620 +UCS2 +UJIS +UTF16 +UTF16LE +UTF32 +UTF8 +UTF8MB3 +UTF8MB4 +ARCHIVE +BLACKHOLE +CSV +FEDERATED +INNODB +MEMORY +MRG_MYISAM +MYISAM +NDB +NDBCLUSTER +PERFORMANCE_SCHEMA +TOKUDB +REPEATABLE +COMMITTED +UNCOMMITTED +SERIALIZABLE +GEOMETRYCOLLECTION +GEOMCOLLECTION +GEOMETRY +LINESTRING +MULTILINESTRING +MULTIPOINT +MULTIPOLYGON +POINT +POLYGON +ABS +ACOS +ADDDATE +ADDTIME +AES_DECRYPT +AES_ENCRYPT +AREA +ASBINARY +ASIN +ASTEXT +ASWKB +ASWKT +ASYMMETRIC_DECRYPT +ASYMMETRIC_DERIVE +ASYMMETRIC_ENCRYPT +ASYMMETRIC_SIGN +ASYMMETRIC_VERIFY +ATAN +ATAN2 +BENCHMARK +BIN +BIT_COUNT +BIT_LENGTH +BUFFER +CATALOG_NAME +CEIL +CEILING +CENTROID +CHARACTER_LENGTH +CHARSET +CHAR_LENGTH +COERCIBILITY +COLLATION +COMPRESS +CONCAT +CONCAT_WS +CONNECTION_ID +CONV +CONVERT_TZ +COS +COT +CRC32 +CREATE_ASYMMETRIC_PRIV_KEY +CREATE_ASYMMETRIC_PUB_KEY +CREATE_DH_PARAMETERS +CREATE_DIGEST +CROSSES +DATEDIFF +DATE_FORMAT +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +DECODE +DEGREES +DES_DECRYPT +DES_ENCRYPT +DIMENSION +DISJOINT +ELT +ENCODE +ENCRYPT +ENDPOINT +ENGINE_ATTRIBUTE +ENVELOPE +EQUALS +EXP +EXPORT_SET +EXTERIORRING +EXTRACTVALUE +FIELD +FIND_IN_SET +FLOOR +FORMAT +FOUND_ROWS +FROM_BASE64 +FROM_DAYS +FROM_UNIXTIME +GEOMCOLLFROMTEXT +GEOMCOLLFROMWKB +GEOMETRYCOLLECTIONFROMTEXT +GEOMETRYCOLLECTIONFROMWKB +GEOMETRYFROMTEXT +GEOMETRYFROMWKB +GEOMETRYN +GEOMETRYTYPE +GEOMFROMTEXT +GEOMFROMWKB +GET_FORMAT +GET_LOCK +GLENGTH +GREATEST +GTID_SUBSET +GTID_SUBTRACT +HEX +IFNULL +INET6_ATON +INET6_NTOA +INET_ATON +INET_NTOA +INSTR +INTERIORRINGN +INTERSECTS +ISCLOSED +ISEMPTY +ISNULL +ISSIMPLE +IS_FREE_LOCK +IS_IPV4 +IS_IPV4_COMPAT +IS_IPV4_MAPPED +IS_IPV6 +IS_USED_LOCK +LAST_INSERT_ID +LCASE +LEAST +LENGTH +LINEFROMTEXT +LINEFROMWKB +LINESTRINGFROMTEXT +LINESTRINGFROMWKB +LN +LOAD_FILE +LOCATE +LOG +LOG10 +LOG2 +LOWER +LPAD +LTRIM +MAKEDATE +MAKETIME +MAKE_SET +MASTER_POS_WAIT +MBRCONTAINS +MBRDISJOINT +MBREQUAL +MBRINTERSECTS +MBROVERLAPS +MBRTOUCHES +MBRWITHIN +MD5 +MLINEFROMTEXT +MLINEFROMWKB +MONTHNAME +MPOINTFROMTEXT +MPOINTFROMWKB +MPOLYFROMTEXT +MPOLYFROMWKB +MULTILINESTRINGFROMTEXT +MULTILINESTRINGFROMWKB +MULTIPOINTFROMTEXT +MULTIPOINTFROMWKB +MULTIPOLYGONFROMTEXT +MULTIPOLYGONFROMWKB +NAME_CONST +NULLIF +NUMGEOMETRIES +NUMINTERIORRINGS +NUMPOINTS +OCT +OCTET_LENGTH +ORD +OVERLAPS +PERIOD_ADD +PERIOD_DIFF +PI +POINTFROMTEXT +POINTFROMWKB +POINTN +POLYFROMTEXT +POLYFROMWKB +POLYGONFROMTEXT +POLYGONFROMWKB +POW +POWER +QUOTE +RADIANS +RAND +RANDOM_BYTES +RELEASE_LOCK +REVERSE +ROUND +ROW_COUNT +RPAD +RTRIM +SEC_TO_TIME +SECONDARY_ENGINE_ATTRIBUTE +SESSION_USER +SHA +SHA1 +SHA2 +SCHEMA_NAME +SIGN +SIN +SLEEP +SOUNDEX +SQL_THREAD_WAIT_AFTER_GTIDS +SQRT +SRID +STARTPOINT +STRCMP +STR_TO_DATE +ST_AREA +ST_ASBINARY +ST_ASTEXT +ST_ASWKB +ST_ASWKT +ST_BUFFER +ST_CENTROID +ST_CONTAINS +ST_CROSSES +ST_DIFFERENCE +ST_DIMENSION +ST_DISJOINT +ST_DISTANCE +ST_ENDPOINT +ST_ENVELOPE +ST_EQUALS +ST_EXTERIORRING +ST_GEOMCOLLFROMTEXT +ST_GEOMCOLLFROMTXT +ST_GEOMCOLLFROMWKB +ST_GEOMETRYCOLLECTIONFROMTEXT +ST_GEOMETRYCOLLECTIONFROMWKB +ST_GEOMETRYFROMTEXT +ST_GEOMETRYFROMWKB +ST_GEOMETRYN +ST_GEOMETRYTYPE +ST_GEOMFROMTEXT +ST_GEOMFROMWKB +ST_INTERIORRINGN +ST_INTERSECTION +ST_INTERSECTS +ST_ISCLOSED +ST_ISEMPTY +ST_ISSIMPLE +ST_LINEFROMTEXT +ST_LINEFROMWKB +ST_LINESTRINGFROMTEXT +ST_LINESTRINGFROMWKB +ST_NUMGEOMETRIES +ST_NUMINTERIORRING +ST_NUMINTERIORRINGS +ST_NUMPOINTS +ST_OVERLAPS +ST_POINTFROMTEXT +ST_POINTFROMWKB +ST_POINTN +ST_POLYFROMTEXT +ST_POLYFROMWKB +ST_POLYGONFROMTEXT +ST_POLYGONFROMWKB +ST_SRID +ST_STARTPOINT +ST_SYMDIFFERENCE +ST_TOUCHES +ST_UNION +ST_WITHIN +ST_X +ST_Y +SUBDATE +SUBSTRING_INDEX +SUBTIME +SYSTEM_USER +TAN +TIMEDIFF +TIMESTAMPADD +TIMESTAMPDIFF +TIME_FORMAT +TIME_TO_SEC +TOUCHES +TO_BASE64 +TO_DAYS +TO_SECONDS +UCASE +UNCOMPRESS +UNCOMPRESSED_LENGTH +UNHEX +UNIX_TIMESTAMP +UPDATEXML +UPPER +UUID +UUID_SHORT +VALIDATE_PASSWORD_STRENGTH +VERSION +WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS +WEEKDAY +WEEKOFYEAR +WEIGHT_STRING +WITHIN +YEARWEEK +Y_FUNCTION +X_FUNCTION +VAR_ASSIGN +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIV_ASSIGN +MOD_ASSIGN +AND_ASSIGN +XOR_ASSIGN +OR_ASSIGN +STAR +DIVIDE +MODULE +PLUS +MINUS +DIV +MOD +EQUAL_SYMBOL +GREATER_SYMBOL +LESS_SYMBOL +EXCLAMATION_SYMBOL +BIT_NOT_OP +BIT_OR_OP +BIT_AND_OP +BIT_XOR_OP +DOT +LR_BRACKET +RR_BRACKET +COMMA +SEMI +AT_SIGN +ZERO_DECIMAL +ONE_DECIMAL +TWO_DECIMAL +SINGLE_QUOTE_SYMB +DOUBLE_QUOTE_SYMB +REVERSE_QUOTE_SYMB +COLON_SYMB +CHARSET_REVERSE_QOUTE_STRING +FILESIZE_LITERAL +START_NATIONAL_STRING_LITERAL +STRING_LITERAL +DECIMAL_LITERAL +HEXADECIMAL_LITERAL +REAL_LITERAL +NULL_SPEC_LITERAL +BIT_STRING +STRING_CHARSET_NAME +DOT_ID +ID +REVERSE_QUOTE_ID +STRING_USER_NAME +IP_ADDRESS +LOCAL_ID +GLOBAL_ID +ERROR_RECONGNIGION + +rule names: +SPACE +SPEC_MYSQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ADD +ALL +ALTER +ALWAYS +ANALYZE +AND +ARRAY +AS +ASC +ATTRIBUTE +BEFORE +BETWEEN +BOTH +BUCKETS +BY +CALL +CASCADE +CASE +CAST +CHANGE +CHARACTER +CHECK +COLLATE +COLUMN +CONDITION +CONSTRAINT +CONTINUE +CONVERT +CREATE +CROSS +CURRENT +CURRENT_ROLE +CURRENT_USER +CURSOR +DATABASE +DATABASES +DECLARE +DEFAULT +DELAYED +DELETE +DESC +DESCRIBE +DETERMINISTIC +DIAGNOSTICS +DISTINCT +DISTINCTROW +DROP +EACH +ELSE +ELSEIF +EMPTY +ENCLOSED +ESCAPED +EXCEPT +EXISTS +EXIT +EXPLAIN +FALSE +FETCH +FOR +FORCE +FOREIGN +FROM +FULLTEXT +GENERATED +GET +GRANT +GROUP +HAVING +HIGH_PRIORITY +HISTOGRAM +IF +IGNORE +IGNORED +IN +INDEX +INFILE +INNER +INOUT +INSERT +INTERVAL +INTO +IS +ITERATE +JOIN +KEY +KEYS +KILL +LATERAL +LEADING +LEAVE +LEFT +LIKE +LIMIT +LINEAR +LINES +LOAD +LOCK +LOCKED +LOOP +LOW_PRIORITY +MASTER_BIND +MASTER_SSL_VERIFY_SERVER_CERT +MATCH +MAXVALUE +MINVALUE +MODIFIES +NATURAL +NOT +NO_WRITE_TO_BINLOG +NULL_LITERAL +NUMBER +ON +OPTIMIZE +OPTION +OPTIONAL +OPTIONALLY +OR +ORDER +OUT +OUTER +OUTFILE +OVER +PARTITION +PRIMARY +PROCEDURE +PURGE +RANGE +READ +READS +REFERENCES +REGEXP +RELEASE +RENAME +REPEAT +REPLACE +REQUIRE +RESIGNAL +RESTRICT +RETAIN +RETURN +REVOKE +RIGHT +RLIKE +SCHEMA +SCHEMAS +SELECT +SET +SEPARATOR +SHOW +SIGNAL +SKIP_ +SPATIAL +SQL +SQLEXCEPTION +SQLSTATE +SQLWARNING +SQL_BIG_RESULT +SQL_CALC_FOUND_ROWS +SQL_SMALL_RESULT +SSL +STACKED +STARTING +STATEMENT +STRAIGHT_JOIN +TABLE +TERMINATED +THEN +TO +TRAILING +TRIGGER +TRUE +UNDO +UNION +UNIQUE +UNLOCK +UNSIGNED +UPDATE +USAGE +USE +USING +VALUES +WHEN +WHERE +WHILE +WITH +WRITE +XOR +ZEROFILL +TINYINT +SMALLINT +MEDIUMINT +MIDDLEINT +INT +INT1 +INT2 +INT3 +INT4 +INT8 +INTEGER +BIGINT +REAL +DOUBLE +PRECISION +FLOAT +FLOAT4 +FLOAT8 +DECIMAL +DEC +NUMERIC +DATE +TIME +TIMESTAMP +DATETIME +YEAR +CHAR +VARCHAR +NVARCHAR +NATIONAL +BINARY +VARBINARY +TINYBLOB +BLOB +MEDIUMBLOB +LONG +LONGBLOB +TINYTEXT +TEXT +MEDIUMTEXT +LONGTEXT +ENUM +VARYING +SERIAL +YEAR_MONTH +DAY_HOUR +DAY_MINUTE +DAY_SECOND +HOUR_MINUTE +HOUR_SECOND +MINUTE_SECOND +SECOND_MICROSECOND +MINUTE_MICROSECOND +HOUR_MICROSECOND +DAY_MICROSECOND +JSON_ARRAY +JSON_ARRAYAGG +JSON_ARRAY_APPEND +JSON_ARRAY_INSERT +JSON_CONTAINS +JSON_CONTAINS_PATH +JSON_DEPTH +JSON_EXTRACT +JSON_INSERT +JSON_KEYS +JSON_LENGTH +JSON_MERGE +JSON_MERGE_PATCH +JSON_MERGE_PRESERVE +JSON_OBJECT +JSON_OBJECTAGG +JSON_OVERLAPS +JSON_PRETTY +JSON_QUOTE +JSON_REMOVE +JSON_REPLACE +JSON_SCHEMA_VALID +JSON_SCHEMA_VALIDATION_REPORT +JSON_SEARCH +JSON_SET +JSON_STORAGE_FREE +JSON_STORAGE_SIZE +JSON_TABLE +JSON_TYPE +JSON_UNQUOTE +JSON_VALID +JSON_VALUE +NESTED +ORDINALITY +PATH +AVG +BIT_AND +BIT_OR +BIT_XOR +COUNT +CUME_DIST +DENSE_RANK +FIRST_VALUE +GROUP_CONCAT +LAG +LAST_VALUE +LEAD +MAX +MIN +NTILE +NTH_VALUE +PERCENT_RANK +RANK +ROW_NUMBER +STD +STDDEV +STDDEV_POP +STDDEV_SAMP +SUM +VAR_POP +VAR_SAMP +VARIANCE +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +LOCALTIME +CURDATE +CURTIME +DATE_ADD +DATE_SUB +EXTRACT +LOCALTIMESTAMP +NOW +POSITION +SUBSTR +SUBSTRING +SYSDATE +TRIM +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +ACCOUNT +ACTION +AFTER +AGGREGATE +ALGORITHM +ANY +AT +AUTHORS +AUTOCOMMIT +AUTOEXTEND_SIZE +AUTO_INCREMENT +AVG_ROW_LENGTH +BEGIN +BINLOG +BIT +BLOCK +BOOL +BOOLEAN +BTREE +CACHE +CASCADED +CHAIN +CHANGED +CHANNEL +CHECKSUM +PAGE_CHECKSUM +CIPHER +CLASS_ORIGIN +CLIENT +CLOSE +CLUSTERING +COALESCE +CODE +COLUMNS +COLUMN_FORMAT +COLUMN_NAME +COMMENT +COMMIT +COMPACT +COMPLETION +COMPRESSED +COMPRESSION +CONCURRENT +CONNECT +CONNECTION +CONSISTENT +CONSTRAINT_CATALOG +CONSTRAINT_SCHEMA +CONSTRAINT_NAME +CONTAINS +CONTEXT +CONTRIBUTORS +COPY +CPU +CYCLE +CURSOR_NAME +DATA +DATAFILE +DEALLOCATE +DEFAULT_AUTH +DEFINER +DELAY_KEY_WRITE +DES_KEY_FILE +DIRECTORY +DISABLE +DISCARD +DISK +DO +DUMPFILE +DUPLICATE +DYNAMIC +ENABLE +ENCRYPTED +ENCRYPTION +ENCRYPTION_KEY_ID +END +ENDS +ENGINE +ENGINES +ERROR +ERRORS +ESCAPE +EVEN +EVENT +EVENTS +EVERY +EXCHANGE +EXCLUSIVE +EXPIRE +EXPORT +EXTENDED +EXTENT_SIZE +FAILED_LOGIN_ATTEMPTS +FAST +FAULTS +FIELDS +FILE_BLOCK_SIZE +FILTER +FIRST +FIXED +FLUSH +FOLLOWING +FOLLOWS +FOUND +FULL +FUNCTION +GENERAL +GLOBAL +GRANTS +GROUP_REPLICATION +HANDLER +HASH +HELP +HISTORY +HOST +HOSTS +IDENTIFIED +IGNORE_SERVER_IDS +IMPORT +INCREMENT +INDEXES +INITIAL_SIZE +INPLACE +INSERT_METHOD +INSTALL +INSTANCE +INSTANT +INVISIBLE +INVOKER +IO +IO_THREAD +IPC +ISOLATION +ISSUER +JSON +KEY_BLOCK_SIZE +LANGUAGE +LAST +LEAVES +LESS +LEVEL +LIST +LOCAL +LOGFILE +LOGS +MASTER +MASTER_AUTO_POSITION +MASTER_CONNECT_RETRY +MASTER_DELAY +MASTER_HEARTBEAT_PERIOD +MASTER_HOST +MASTER_LOG_FILE +MASTER_LOG_POS +MASTER_PASSWORD +MASTER_PORT +MASTER_RETRY_COUNT +MASTER_SSL +MASTER_SSL_CA +MASTER_SSL_CAPATH +MASTER_SSL_CERT +MASTER_SSL_CIPHER +MASTER_SSL_CRL +MASTER_SSL_CRLPATH +MASTER_SSL_KEY +MASTER_TLS_VERSION +MASTER_USER +MAX_CONNECTIONS_PER_HOUR +MAX_QUERIES_PER_HOUR +MAX_ROWS +MAX_SIZE +MAX_UPDATES_PER_HOUR +MAX_USER_CONNECTIONS +MEDIUM +MEMBER +MERGE +MESSAGE_TEXT +MID +MIGRATE +MIN_ROWS +MODE +MODIFY +MUTEX +MYSQL +MYSQL_ERRNO +NAME +NAMES +NCHAR +NEVER +NEXT +NO +NOCACHE +NOCOPY +NOCYCLE +NOMAXVALUE +NOMINVALUE +NOWAIT +NODEGROUP +NONE +ODBC +OFFLINE +OFFSET +OF +OJ +OLD_PASSWORD +ONE +ONLINE +ONLY +OPEN +OPTIMIZER_COSTS +OPTIONS +OWNER +PACK_KEYS +PAGE +PAGE_COMPRESSED +PAGE_COMPRESSION_LEVEL +PARSER +PARTIAL +PARTITIONING +PARTITIONS +PASSWORD +PASSWORD_LOCK_TIME +PHASE +PLUGIN +PLUGIN_DIR +PLUGINS +PORT +PRECEDES +PRECEDING +PREPARE +PRESERVE +PREV +PROCESSLIST +PROFILE +PROFILES +PROXY +QUERY +QUICK +REBUILD +RECOVER +RECURSIVE +REDO_BUFFER_SIZE +REDUNDANT +RELAY +RELAY_LOG_FILE +RELAY_LOG_POS +RELAYLOG +REMOVE +REORGANIZE +REPAIR +REPLICATE_DO_DB +REPLICATE_DO_TABLE +REPLICATE_IGNORE_DB +REPLICATE_IGNORE_TABLE +REPLICATE_REWRITE_DB +REPLICATE_WILD_DO_TABLE +REPLICATE_WILD_IGNORE_TABLE +REPLICATION +RESET +RESTART +RESUME +RETURNED_SQLSTATE +RETURNING +RETURNS +REUSE +ROLE +ROLLBACK +ROLLUP +ROTATE +ROW +ROWS +ROW_FORMAT +RTREE +SAVEPOINT +SCHEDULE +SECURITY +SEQUENCE +SERVER +SESSION +SHARE +SHARED +SIGNED +SIMPLE +SLAVE +SLOW +SNAPSHOT +SOCKET +SOME +SONAME +SOUNDS +SOURCE +SQL_AFTER_GTIDS +SQL_AFTER_MTS_GAPS +SQL_BEFORE_GTIDS +SQL_BUFFER_RESULT +SQL_CACHE +SQL_NO_CACHE +SQL_THREAD +START +STARTS +STATS_AUTO_RECALC +STATS_PERSISTENT +STATS_SAMPLE_PAGES +STATUS +STOP +STORAGE +STORED +STRING +SUBCLASS_ORIGIN +SUBJECT +SUBPARTITION +SUBPARTITIONS +SUSPEND +SWAPS +SWITCHES +TABLE_NAME +TABLESPACE +TABLE_TYPE +TEMPORARY +TEMPTABLE +THAN +TRADITIONAL +TRANSACTION +TRANSACTIONAL +TRIGGERS +TRUNCATE +UNBOUNDED +UNDEFINED +UNDOFILE +UNDO_BUFFER_SIZE +UNINSTALL +UNKNOWN +UNTIL +UPGRADE +USER +USE_FRM +USER_RESOURCES +VALIDATION +VALUE +VARIABLES +VIEW +VIRTUAL +VISIBLE +WAIT +WARNINGS +WINDOW +WITHOUT +WORK +WRAPPER +X509 +XA +XML +YES +EUR +USA +JIS +ISO +INTERNAL +QUARTER +MONTH +DAY +HOUR +MINUTE +WEEK +SECOND +MICROSECOND +ADMIN +APPLICATION_PASSWORD_ADMIN +AUDIT_ADMIN +BACKUP_ADMIN +BINLOG_ADMIN +BINLOG_ENCRYPTION_ADMIN +CLONE_ADMIN +CONNECTION_ADMIN +ENCRYPTION_KEY_ADMIN +EXECUTE +FILE +FIREWALL_ADMIN +FIREWALL_USER +FLUSH_OPTIMIZER_COSTS +FLUSH_STATUS +FLUSH_TABLES +FLUSH_USER_RESOURCES +GROUP_REPLICATION_ADMIN +INNODB_REDO_LOG_ARCHIVE +INNODB_REDO_LOG_ENABLE +INVOKE +LAMBDA +NDB_STORED_USER +PASSWORDLESS_USER_ADMIN +PERSIST_RO_VARIABLES_ADMIN +PRIVILEGES +PROCESS +RELOAD +REPLICATION_APPLIER +REPLICATION_SLAVE_ADMIN +RESOURCE_GROUP_ADMIN +RESOURCE_GROUP_USER +ROLE_ADMIN +ROUTINE +S3 +SERVICE_CONNECTION_ADMIN +SESSION_VARIABLES_ADMIN +SET_USER_ID +SHOW_ROUTINE +SHUTDOWN +SUPER +SYSTEM_VARIABLES_ADMIN +TABLES +TABLE_ENCRYPTION_ADMIN +VERSION_TOKEN_ADMIN +XA_RECOVER_ADMIN +ARMSCII8 +ASCII +BIG5 +CP1250 +CP1251 +CP1256 +CP1257 +CP850 +CP852 +CP866 +CP932 +DEC8 +EUCJPMS +EUCKR +GB18030 +GB2312 +GBK +GEOSTD8 +GREEK +HEBREW +HP8 +KEYBCS2 +KOI8R +KOI8U +LATIN1 +LATIN2 +LATIN5 +LATIN7 +MACCE +MACROMAN +SJIS +SWE7 +TIS620 +UCS2 +UJIS +UTF16 +UTF16LE +UTF32 +UTF8 +UTF8MB3 +UTF8MB4 +ARCHIVE +BLACKHOLE +CSV +FEDERATED +INNODB +MEMORY +MRG_MYISAM +MYISAM +NDB +NDBCLUSTER +PERFORMANCE_SCHEMA +TOKUDB +REPEATABLE +COMMITTED +UNCOMMITTED +SERIALIZABLE +GEOMETRYCOLLECTION +GEOMCOLLECTION +GEOMETRY +LINESTRING +MULTILINESTRING +MULTIPOINT +MULTIPOLYGON +POINT +POLYGON +ABS +ACOS +ADDDATE +ADDTIME +AES_DECRYPT +AES_ENCRYPT +AREA +ASBINARY +ASIN +ASTEXT +ASWKB +ASWKT +ASYMMETRIC_DECRYPT +ASYMMETRIC_DERIVE +ASYMMETRIC_ENCRYPT +ASYMMETRIC_SIGN +ASYMMETRIC_VERIFY +ATAN +ATAN2 +BENCHMARK +BIN +BIT_COUNT +BIT_LENGTH +BUFFER +CATALOG_NAME +CEIL +CEILING +CENTROID +CHARACTER_LENGTH +CHARSET +CHAR_LENGTH +COERCIBILITY +COLLATION +COMPRESS +CONCAT +CONCAT_WS +CONNECTION_ID +CONV +CONVERT_TZ +COS +COT +CRC32 +CREATE_ASYMMETRIC_PRIV_KEY +CREATE_ASYMMETRIC_PUB_KEY +CREATE_DH_PARAMETERS +CREATE_DIGEST +CROSSES +DATEDIFF +DATE_FORMAT +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +DECODE +DEGREES +DES_DECRYPT +DES_ENCRYPT +DIMENSION +DISJOINT +ELT +ENCODE +ENCRYPT +ENDPOINT +ENGINE_ATTRIBUTE +ENVELOPE +EQUALS +EXP +EXPORT_SET +EXTERIORRING +EXTRACTVALUE +FIELD +FIND_IN_SET +FLOOR +FORMAT +FOUND_ROWS +FROM_BASE64 +FROM_DAYS +FROM_UNIXTIME +GEOMCOLLFROMTEXT +GEOMCOLLFROMWKB +GEOMETRYCOLLECTIONFROMTEXT +GEOMETRYCOLLECTIONFROMWKB +GEOMETRYFROMTEXT +GEOMETRYFROMWKB +GEOMETRYN +GEOMETRYTYPE +GEOMFROMTEXT +GEOMFROMWKB +GET_FORMAT +GET_LOCK +GLENGTH +GREATEST +GTID_SUBSET +GTID_SUBTRACT +HEX +IFNULL +INET6_ATON +INET6_NTOA +INET_ATON +INET_NTOA +INSTR +INTERIORRINGN +INTERSECTS +ISCLOSED +ISEMPTY +ISNULL +ISSIMPLE +IS_FREE_LOCK +IS_IPV4 +IS_IPV4_COMPAT +IS_IPV4_MAPPED +IS_IPV6 +IS_USED_LOCK +LAST_INSERT_ID +LCASE +LEAST +LENGTH +LINEFROMTEXT +LINEFROMWKB +LINESTRINGFROMTEXT +LINESTRINGFROMWKB +LN +LOAD_FILE +LOCATE +LOG +LOG10 +LOG2 +LOWER +LPAD +LTRIM +MAKEDATE +MAKETIME +MAKE_SET +MASTER_POS_WAIT +MBRCONTAINS +MBRDISJOINT +MBREQUAL +MBRINTERSECTS +MBROVERLAPS +MBRTOUCHES +MBRWITHIN +MD5 +MLINEFROMTEXT +MLINEFROMWKB +MONTHNAME +MPOINTFROMTEXT +MPOINTFROMWKB +MPOLYFROMTEXT +MPOLYFROMWKB +MULTILINESTRINGFROMTEXT +MULTILINESTRINGFROMWKB +MULTIPOINTFROMTEXT +MULTIPOINTFROMWKB +MULTIPOLYGONFROMTEXT +MULTIPOLYGONFROMWKB +NAME_CONST +NULLIF +NUMGEOMETRIES +NUMINTERIORRINGS +NUMPOINTS +OCT +OCTET_LENGTH +ORD +OVERLAPS +PERIOD_ADD +PERIOD_DIFF +PI +POINTFROMTEXT +POINTFROMWKB +POINTN +POLYFROMTEXT +POLYFROMWKB +POLYGONFROMTEXT +POLYGONFROMWKB +POW +POWER +QUOTE +RADIANS +RAND +RANDOM_BYTES +RELEASE_LOCK +REVERSE +ROUND +ROW_COUNT +RPAD +RTRIM +SEC_TO_TIME +SECONDARY_ENGINE_ATTRIBUTE +SESSION_USER +SHA +SHA1 +SHA2 +SCHEMA_NAME +SIGN +SIN +SLEEP +SOUNDEX +SQL_THREAD_WAIT_AFTER_GTIDS +SQRT +SRID +STARTPOINT +STRCMP +STR_TO_DATE +ST_AREA +ST_ASBINARY +ST_ASTEXT +ST_ASWKB +ST_ASWKT +ST_BUFFER +ST_CENTROID +ST_CONTAINS +ST_CROSSES +ST_DIFFERENCE +ST_DIMENSION +ST_DISJOINT +ST_DISTANCE +ST_ENDPOINT +ST_ENVELOPE +ST_EQUALS +ST_EXTERIORRING +ST_GEOMCOLLFROMTEXT +ST_GEOMCOLLFROMTXT +ST_GEOMCOLLFROMWKB +ST_GEOMETRYCOLLECTIONFROMTEXT +ST_GEOMETRYCOLLECTIONFROMWKB +ST_GEOMETRYFROMTEXT +ST_GEOMETRYFROMWKB +ST_GEOMETRYN +ST_GEOMETRYTYPE +ST_GEOMFROMTEXT +ST_GEOMFROMWKB +ST_INTERIORRINGN +ST_INTERSECTION +ST_INTERSECTS +ST_ISCLOSED +ST_ISEMPTY +ST_ISSIMPLE +ST_LINEFROMTEXT +ST_LINEFROMWKB +ST_LINESTRINGFROMTEXT +ST_LINESTRINGFROMWKB +ST_NUMGEOMETRIES +ST_NUMINTERIORRING +ST_NUMINTERIORRINGS +ST_NUMPOINTS +ST_OVERLAPS +ST_POINTFROMTEXT +ST_POINTFROMWKB +ST_POINTN +ST_POLYFROMTEXT +ST_POLYFROMWKB +ST_POLYGONFROMTEXT +ST_POLYGONFROMWKB +ST_SRID +ST_STARTPOINT +ST_SYMDIFFERENCE +ST_TOUCHES +ST_UNION +ST_WITHIN +ST_X +ST_Y +SUBDATE +SUBSTRING_INDEX +SUBTIME +SYSTEM_USER +TAN +TIMEDIFF +TIMESTAMPADD +TIMESTAMPDIFF +TIME_FORMAT +TIME_TO_SEC +TOUCHES +TO_BASE64 +TO_DAYS +TO_SECONDS +UCASE +UNCOMPRESS +UNCOMPRESSED_LENGTH +UNHEX +UNIX_TIMESTAMP +UPDATEXML +UPPER +UUID +UUID_SHORT +VALIDATE_PASSWORD_STRENGTH +VERSION +WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS +WEEKDAY +WEEKOFYEAR +WEIGHT_STRING +WITHIN +YEARWEEK +Y_FUNCTION +X_FUNCTION +VAR_ASSIGN +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIV_ASSIGN +MOD_ASSIGN +AND_ASSIGN +XOR_ASSIGN +OR_ASSIGN +STAR +DIVIDE +MODULE +PLUS +MINUS +DIV +MOD +EQUAL_SYMBOL +GREATER_SYMBOL +LESS_SYMBOL +EXCLAMATION_SYMBOL +BIT_NOT_OP +BIT_OR_OP +BIT_AND_OP +BIT_XOR_OP +DOT +LR_BRACKET +RR_BRACKET +COMMA +SEMI +AT_SIGN +ZERO_DECIMAL +ONE_DECIMAL +TWO_DECIMAL +SINGLE_QUOTE_SYMB +DOUBLE_QUOTE_SYMB +REVERSE_QUOTE_SYMB +COLON_SYMB +QUOTE_SYMB +CHARSET_REVERSE_QOUTE_STRING +FILESIZE_LITERAL +START_NATIONAL_STRING_LITERAL +STRING_LITERAL +DECIMAL_LITERAL +HEXADECIMAL_LITERAL +REAL_LITERAL +NULL_SPEC_LITERAL +BIT_STRING +STRING_CHARSET_NAME +DOT_ID +ID +REVERSE_QUOTE_ID +STRING_USER_NAME +IP_ADDRESS +LOCAL_ID +GLOBAL_ID +CHARSET_NAME +EXPONENT_NUM_PART +ID_LITERAL +DQUOTA_STRING +SQUOTA_STRING +BQUOTA_STRING +HEX_DIGIT +DEC_DIGIT +BIT_STRING_L +ERROR_RECONGNIGION + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN +null +null +MYSQLCOMMENT +ERRORCHANNEL + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 1155, 13605, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 2, 359, 7, 359, 2, 360, 7, 360, 2, 361, 7, 361, 2, 362, 7, 362, 2, 363, 7, 363, 2, 364, 7, 364, 2, 365, 7, 365, 2, 366, 7, 366, 2, 367, 7, 367, 2, 368, 7, 368, 2, 369, 7, 369, 2, 370, 7, 370, 2, 371, 7, 371, 2, 372, 7, 372, 2, 373, 7, 373, 2, 374, 7, 374, 2, 375, 7, 375, 2, 376, 7, 376, 2, 377, 7, 377, 2, 378, 7, 378, 2, 379, 7, 379, 2, 380, 7, 380, 2, 381, 7, 381, 2, 382, 7, 382, 2, 383, 7, 383, 2, 384, 7, 384, 2, 385, 7, 385, 2, 386, 7, 386, 2, 387, 7, 387, 2, 388, 7, 388, 2, 389, 7, 389, 2, 390, 7, 390, 2, 391, 7, 391, 2, 392, 7, 392, 2, 393, 7, 393, 2, 394, 7, 394, 2, 395, 7, 395, 2, 396, 7, 396, 2, 397, 7, 397, 2, 398, 7, 398, 2, 399, 7, 399, 2, 400, 7, 400, 2, 401, 7, 401, 2, 402, 7, 402, 2, 403, 7, 403, 2, 404, 7, 404, 2, 405, 7, 405, 2, 406, 7, 406, 2, 407, 7, 407, 2, 408, 7, 408, 2, 409, 7, 409, 2, 410, 7, 410, 2, 411, 7, 411, 2, 412, 7, 412, 2, 413, 7, 413, 2, 414, 7, 414, 2, 415, 7, 415, 2, 416, 7, 416, 2, 417, 7, 417, 2, 418, 7, 418, 2, 419, 7, 419, 2, 420, 7, 420, 2, 421, 7, 421, 2, 422, 7, 422, 2, 423, 7, 423, 2, 424, 7, 424, 2, 425, 7, 425, 2, 426, 7, 426, 2, 427, 7, 427, 2, 428, 7, 428, 2, 429, 7, 429, 2, 430, 7, 430, 2, 431, 7, 431, 2, 432, 7, 432, 2, 433, 7, 433, 2, 434, 7, 434, 2, 435, 7, 435, 2, 436, 7, 436, 2, 437, 7, 437, 2, 438, 7, 438, 2, 439, 7, 439, 2, 440, 7, 440, 2, 441, 7, 441, 2, 442, 7, 442, 2, 443, 7, 443, 2, 444, 7, 444, 2, 445, 7, 445, 2, 446, 7, 446, 2, 447, 7, 447, 2, 448, 7, 448, 2, 449, 7, 449, 2, 450, 7, 450, 2, 451, 7, 451, 2, 452, 7, 452, 2, 453, 7, 453, 2, 454, 7, 454, 2, 455, 7, 455, 2, 456, 7, 456, 2, 457, 7, 457, 2, 458, 7, 458, 2, 459, 7, 459, 2, 460, 7, 460, 2, 461, 7, 461, 2, 462, 7, 462, 2, 463, 7, 463, 2, 464, 7, 464, 2, 465, 7, 465, 2, 466, 7, 466, 2, 467, 7, 467, 2, 468, 7, 468, 2, 469, 7, 469, 2, 470, 7, 470, 2, 471, 7, 471, 2, 472, 7, 472, 2, 473, 7, 473, 2, 474, 7, 474, 2, 475, 7, 475, 2, 476, 7, 476, 2, 477, 7, 477, 2, 478, 7, 478, 2, 479, 7, 479, 2, 480, 7, 480, 2, 481, 7, 481, 2, 482, 7, 482, 2, 483, 7, 483, 2, 484, 7, 484, 2, 485, 7, 485, 2, 486, 7, 486, 2, 487, 7, 487, 2, 488, 7, 488, 2, 489, 7, 489, 2, 490, 7, 490, 2, 491, 7, 491, 2, 492, 7, 492, 2, 493, 7, 493, 2, 494, 7, 494, 2, 495, 7, 495, 2, 496, 7, 496, 2, 497, 7, 497, 2, 498, 7, 498, 2, 499, 7, 499, 2, 500, 7, 500, 2, 501, 7, 501, 2, 502, 7, 502, 2, 503, 7, 503, 2, 504, 7, 504, 2, 505, 7, 505, 2, 506, 7, 506, 2, 507, 7, 507, 2, 508, 7, 508, 2, 509, 7, 509, 2, 510, 7, 510, 2, 511, 7, 511, 2, 512, 7, 512, 2, 513, 7, 513, 2, 514, 7, 514, 2, 515, 7, 515, 2, 516, 7, 516, 2, 517, 7, 517, 2, 518, 7, 518, 2, 519, 7, 519, 2, 520, 7, 520, 2, 521, 7, 521, 2, 522, 7, 522, 2, 523, 7, 523, 2, 524, 7, 524, 2, 525, 7, 525, 2, 526, 7, 526, 2, 527, 7, 527, 2, 528, 7, 528, 2, 529, 7, 529, 2, 530, 7, 530, 2, 531, 7, 531, 2, 532, 7, 532, 2, 533, 7, 533, 2, 534, 7, 534, 2, 535, 7, 535, 2, 536, 7, 536, 2, 537, 7, 537, 2, 538, 7, 538, 2, 539, 7, 539, 2, 540, 7, 540, 2, 541, 7, 541, 2, 542, 7, 542, 2, 543, 7, 543, 2, 544, 7, 544, 2, 545, 7, 545, 2, 546, 7, 546, 2, 547, 7, 547, 2, 548, 7, 548, 2, 549, 7, 549, 2, 550, 7, 550, 2, 551, 7, 551, 2, 552, 7, 552, 2, 553, 7, 553, 2, 554, 7, 554, 2, 555, 7, 555, 2, 556, 7, 556, 2, 557, 7, 557, 2, 558, 7, 558, 2, 559, 7, 559, 2, 560, 7, 560, 2, 561, 7, 561, 2, 562, 7, 562, 2, 563, 7, 563, 2, 564, 7, 564, 2, 565, 7, 565, 2, 566, 7, 566, 2, 567, 7, 567, 2, 568, 7, 568, 2, 569, 7, 569, 2, 570, 7, 570, 2, 571, 7, 571, 2, 572, 7, 572, 2, 573, 7, 573, 2, 574, 7, 574, 2, 575, 7, 575, 2, 576, 7, 576, 2, 577, 7, 577, 2, 578, 7, 578, 2, 579, 7, 579, 2, 580, 7, 580, 2, 581, 7, 581, 2, 582, 7, 582, 2, 583, 7, 583, 2, 584, 7, 584, 2, 585, 7, 585, 2, 586, 7, 586, 2, 587, 7, 587, 2, 588, 7, 588, 2, 589, 7, 589, 2, 590, 7, 590, 2, 591, 7, 591, 2, 592, 7, 592, 2, 593, 7, 593, 2, 594, 7, 594, 2, 595, 7, 595, 2, 596, 7, 596, 2, 597, 7, 597, 2, 598, 7, 598, 2, 599, 7, 599, 2, 600, 7, 600, 2, 601, 7, 601, 2, 602, 7, 602, 2, 603, 7, 603, 2, 604, 7, 604, 2, 605, 7, 605, 2, 606, 7, 606, 2, 607, 7, 607, 2, 608, 7, 608, 2, 609, 7, 609, 2, 610, 7, 610, 2, 611, 7, 611, 2, 612, 7, 612, 2, 613, 7, 613, 2, 614, 7, 614, 2, 615, 7, 615, 2, 616, 7, 616, 2, 617, 7, 617, 2, 618, 7, 618, 2, 619, 7, 619, 2, 620, 7, 620, 2, 621, 7, 621, 2, 622, 7, 622, 2, 623, 7, 623, 2, 624, 7, 624, 2, 625, 7, 625, 2, 626, 7, 626, 2, 627, 7, 627, 2, 628, 7, 628, 2, 629, 7, 629, 2, 630, 7, 630, 2, 631, 7, 631, 2, 632, 7, 632, 2, 633, 7, 633, 2, 634, 7, 634, 2, 635, 7, 635, 2, 636, 7, 636, 2, 637, 7, 637, 2, 638, 7, 638, 2, 639, 7, 639, 2, 640, 7, 640, 2, 641, 7, 641, 2, 642, 7, 642, 2, 643, 7, 643, 2, 644, 7, 644, 2, 645, 7, 645, 2, 646, 7, 646, 2, 647, 7, 647, 2, 648, 7, 648, 2, 649, 7, 649, 2, 650, 7, 650, 2, 651, 7, 651, 2, 652, 7, 652, 2, 653, 7, 653, 2, 654, 7, 654, 2, 655, 7, 655, 2, 656, 7, 656, 2, 657, 7, 657, 2, 658, 7, 658, 2, 659, 7, 659, 2, 660, 7, 660, 2, 661, 7, 661, 2, 662, 7, 662, 2, 663, 7, 663, 2, 664, 7, 664, 2, 665, 7, 665, 2, 666, 7, 666, 2, 667, 7, 667, 2, 668, 7, 668, 2, 669, 7, 669, 2, 670, 7, 670, 2, 671, 7, 671, 2, 672, 7, 672, 2, 673, 7, 673, 2, 674, 7, 674, 2, 675, 7, 675, 2, 676, 7, 676, 2, 677, 7, 677, 2, 678, 7, 678, 2, 679, 7, 679, 2, 680, 7, 680, 2, 681, 7, 681, 2, 682, 7, 682, 2, 683, 7, 683, 2, 684, 7, 684, 2, 685, 7, 685, 2, 686, 7, 686, 2, 687, 7, 687, 2, 688, 7, 688, 2, 689, 7, 689, 2, 690, 7, 690, 2, 691, 7, 691, 2, 692, 7, 692, 2, 693, 7, 693, 2, 694, 7, 694, 2, 695, 7, 695, 2, 696, 7, 696, 2, 697, 7, 697, 2, 698, 7, 698, 2, 699, 7, 699, 2, 700, 7, 700, 2, 701, 7, 701, 2, 702, 7, 702, 2, 703, 7, 703, 2, 704, 7, 704, 2, 705, 7, 705, 2, 706, 7, 706, 2, 707, 7, 707, 2, 708, 7, 708, 2, 709, 7, 709, 2, 710, 7, 710, 2, 711, 7, 711, 2, 712, 7, 712, 2, 713, 7, 713, 2, 714, 7, 714, 2, 715, 7, 715, 2, 716, 7, 716, 2, 717, 7, 717, 2, 718, 7, 718, 2, 719, 7, 719, 2, 720, 7, 720, 2, 721, 7, 721, 2, 722, 7, 722, 2, 723, 7, 723, 2, 724, 7, 724, 2, 725, 7, 725, 2, 726, 7, 726, 2, 727, 7, 727, 2, 728, 7, 728, 2, 729, 7, 729, 2, 730, 7, 730, 2, 731, 7, 731, 2, 732, 7, 732, 2, 733, 7, 733, 2, 734, 7, 734, 2, 735, 7, 735, 2, 736, 7, 736, 2, 737, 7, 737, 2, 738, 7, 738, 2, 739, 7, 739, 2, 740, 7, 740, 2, 741, 7, 741, 2, 742, 7, 742, 2, 743, 7, 743, 2, 744, 7, 744, 2, 745, 7, 745, 2, 746, 7, 746, 2, 747, 7, 747, 2, 748, 7, 748, 2, 749, 7, 749, 2, 750, 7, 750, 2, 751, 7, 751, 2, 752, 7, 752, 2, 753, 7, 753, 2, 754, 7, 754, 2, 755, 7, 755, 2, 756, 7, 756, 2, 757, 7, 757, 2, 758, 7, 758, 2, 759, 7, 759, 2, 760, 7, 760, 2, 761, 7, 761, 2, 762, 7, 762, 2, 763, 7, 763, 2, 764, 7, 764, 2, 765, 7, 765, 2, 766, 7, 766, 2, 767, 7, 767, 2, 768, 7, 768, 2, 769, 7, 769, 2, 770, 7, 770, 2, 771, 7, 771, 2, 772, 7, 772, 2, 773, 7, 773, 2, 774, 7, 774, 2, 775, 7, 775, 2, 776, 7, 776, 2, 777, 7, 777, 2, 778, 7, 778, 2, 779, 7, 779, 2, 780, 7, 780, 2, 781, 7, 781, 2, 782, 7, 782, 2, 783, 7, 783, 2, 784, 7, 784, 2, 785, 7, 785, 2, 786, 7, 786, 2, 787, 7, 787, 2, 788, 7, 788, 2, 789, 7, 789, 2, 790, 7, 790, 2, 791, 7, 791, 2, 792, 7, 792, 2, 793, 7, 793, 2, 794, 7, 794, 2, 795, 7, 795, 2, 796, 7, 796, 2, 797, 7, 797, 2, 798, 7, 798, 2, 799, 7, 799, 2, 800, 7, 800, 2, 801, 7, 801, 2, 802, 7, 802, 2, 803, 7, 803, 2, 804, 7, 804, 2, 805, 7, 805, 2, 806, 7, 806, 2, 807, 7, 807, 2, 808, 7, 808, 2, 809, 7, 809, 2, 810, 7, 810, 2, 811, 7, 811, 2, 812, 7, 812, 2, 813, 7, 813, 2, 814, 7, 814, 2, 815, 7, 815, 2, 816, 7, 816, 2, 817, 7, 817, 2, 818, 7, 818, 2, 819, 7, 819, 2, 820, 7, 820, 2, 821, 7, 821, 2, 822, 7, 822, 2, 823, 7, 823, 2, 824, 7, 824, 2, 825, 7, 825, 2, 826, 7, 826, 2, 827, 7, 827, 2, 828, 7, 828, 2, 829, 7, 829, 2, 830, 7, 830, 2, 831, 7, 831, 2, 832, 7, 832, 2, 833, 7, 833, 2, 834, 7, 834, 2, 835, 7, 835, 2, 836, 7, 836, 2, 837, 7, 837, 2, 838, 7, 838, 2, 839, 7, 839, 2, 840, 7, 840, 2, 841, 7, 841, 2, 842, 7, 842, 2, 843, 7, 843, 2, 844, 7, 844, 2, 845, 7, 845, 2, 846, 7, 846, 2, 847, 7, 847, 2, 848, 7, 848, 2, 849, 7, 849, 2, 850, 7, 850, 2, 851, 7, 851, 2, 852, 7, 852, 2, 853, 7, 853, 2, 854, 7, 854, 2, 855, 7, 855, 2, 856, 7, 856, 2, 857, 7, 857, 2, 858, 7, 858, 2, 859, 7, 859, 2, 860, 7, 860, 2, 861, 7, 861, 2, 862, 7, 862, 2, 863, 7, 863, 2, 864, 7, 864, 2, 865, 7, 865, 2, 866, 7, 866, 2, 867, 7, 867, 2, 868, 7, 868, 2, 869, 7, 869, 2, 870, 7, 870, 2, 871, 7, 871, 2, 872, 7, 872, 2, 873, 7, 873, 2, 874, 7, 874, 2, 875, 7, 875, 2, 876, 7, 876, 2, 877, 7, 877, 2, 878, 7, 878, 2, 879, 7, 879, 2, 880, 7, 880, 2, 881, 7, 881, 2, 882, 7, 882, 2, 883, 7, 883, 2, 884, 7, 884, 2, 885, 7, 885, 2, 886, 7, 886, 2, 887, 7, 887, 2, 888, 7, 888, 2, 889, 7, 889, 2, 890, 7, 890, 2, 891, 7, 891, 2, 892, 7, 892, 2, 893, 7, 893, 2, 894, 7, 894, 2, 895, 7, 895, 2, 896, 7, 896, 2, 897, 7, 897, 2, 898, 7, 898, 2, 899, 7, 899, 2, 900, 7, 900, 2, 901, 7, 901, 2, 902, 7, 902, 2, 903, 7, 903, 2, 904, 7, 904, 2, 905, 7, 905, 2, 906, 7, 906, 2, 907, 7, 907, 2, 908, 7, 908, 2, 909, 7, 909, 2, 910, 7, 910, 2, 911, 7, 911, 2, 912, 7, 912, 2, 913, 7, 913, 2, 914, 7, 914, 2, 915, 7, 915, 2, 916, 7, 916, 2, 917, 7, 917, 2, 918, 7, 918, 2, 919, 7, 919, 2, 920, 7, 920, 2, 921, 7, 921, 2, 922, 7, 922, 2, 923, 7, 923, 2, 924, 7, 924, 2, 925, 7, 925, 2, 926, 7, 926, 2, 927, 7, 927, 2, 928, 7, 928, 2, 929, 7, 929, 2, 930, 7, 930, 2, 931, 7, 931, 2, 932, 7, 932, 2, 933, 7, 933, 2, 934, 7, 934, 2, 935, 7, 935, 2, 936, 7, 936, 2, 937, 7, 937, 2, 938, 7, 938, 2, 939, 7, 939, 2, 940, 7, 940, 2, 941, 7, 941, 2, 942, 7, 942, 2, 943, 7, 943, 2, 944, 7, 944, 2, 945, 7, 945, 2, 946, 7, 946, 2, 947, 7, 947, 2, 948, 7, 948, 2, 949, 7, 949, 2, 950, 7, 950, 2, 951, 7, 951, 2, 952, 7, 952, 2, 953, 7, 953, 2, 954, 7, 954, 2, 955, 7, 955, 2, 956, 7, 956, 2, 957, 7, 957, 2, 958, 7, 958, 2, 959, 7, 959, 2, 960, 7, 960, 2, 961, 7, 961, 2, 962, 7, 962, 2, 963, 7, 963, 2, 964, 7, 964, 2, 965, 7, 965, 2, 966, 7, 966, 2, 967, 7, 967, 2, 968, 7, 968, 2, 969, 7, 969, 2, 970, 7, 970, 2, 971, 7, 971, 2, 972, 7, 972, 2, 973, 7, 973, 2, 974, 7, 974, 2, 975, 7, 975, 2, 976, 7, 976, 2, 977, 7, 977, 2, 978, 7, 978, 2, 979, 7, 979, 2, 980, 7, 980, 2, 981, 7, 981, 2, 982, 7, 982, 2, 983, 7, 983, 2, 984, 7, 984, 2, 985, 7, 985, 2, 986, 7, 986, 2, 987, 7, 987, 2, 988, 7, 988, 2, 989, 7, 989, 2, 990, 7, 990, 2, 991, 7, 991, 2, 992, 7, 992, 2, 993, 7, 993, 2, 994, 7, 994, 2, 995, 7, 995, 2, 996, 7, 996, 2, 997, 7, 997, 2, 998, 7, 998, 2, 999, 7, 999, 2, 1000, 7, 1000, 2, 1001, 7, 1001, 2, 1002, 7, 1002, 2, 1003, 7, 1003, 2, 1004, 7, 1004, 2, 1005, 7, 1005, 2, 1006, 7, 1006, 2, 1007, 7, 1007, 2, 1008, 7, 1008, 2, 1009, 7, 1009, 2, 1010, 7, 1010, 2, 1011, 7, 1011, 2, 1012, 7, 1012, 2, 1013, 7, 1013, 2, 1014, 7, 1014, 2, 1015, 7, 1015, 2, 1016, 7, 1016, 2, 1017, 7, 1017, 2, 1018, 7, 1018, 2, 1019, 7, 1019, 2, 1020, 7, 1020, 2, 1021, 7, 1021, 2, 1022, 7, 1022, 2, 1023, 7, 1023, 2, 1024, 7, 1024, 2, 1025, 7, 1025, 2, 1026, 7, 1026, 2, 1027, 7, 1027, 2, 1028, 7, 1028, 2, 1029, 7, 1029, 2, 1030, 7, 1030, 2, 1031, 7, 1031, 2, 1032, 7, 1032, 2, 1033, 7, 1033, 2, 1034, 7, 1034, 2, 1035, 7, 1035, 2, 1036, 7, 1036, 2, 1037, 7, 1037, 2, 1038, 7, 1038, 2, 1039, 7, 1039, 2, 1040, 7, 1040, 2, 1041, 7, 1041, 2, 1042, 7, 1042, 2, 1043, 7, 1043, 2, 1044, 7, 1044, 2, 1045, 7, 1045, 2, 1046, 7, 1046, 2, 1047, 7, 1047, 2, 1048, 7, 1048, 2, 1049, 7, 1049, 2, 1050, 7, 1050, 2, 1051, 7, 1051, 2, 1052, 7, 1052, 2, 1053, 7, 1053, 2, 1054, 7, 1054, 2, 1055, 7, 1055, 2, 1056, 7, 1056, 2, 1057, 7, 1057, 2, 1058, 7, 1058, 2, 1059, 7, 1059, 2, 1060, 7, 1060, 2, 1061, 7, 1061, 2, 1062, 7, 1062, 2, 1063, 7, 1063, 2, 1064, 7, 1064, 2, 1065, 7, 1065, 2, 1066, 7, 1066, 2, 1067, 7, 1067, 2, 1068, 7, 1068, 2, 1069, 7, 1069, 2, 1070, 7, 1070, 2, 1071, 7, 1071, 2, 1072, 7, 1072, 2, 1073, 7, 1073, 2, 1074, 7, 1074, 2, 1075, 7, 1075, 2, 1076, 7, 1076, 2, 1077, 7, 1077, 2, 1078, 7, 1078, 2, 1079, 7, 1079, 2, 1080, 7, 1080, 2, 1081, 7, 1081, 2, 1082, 7, 1082, 2, 1083, 7, 1083, 2, 1084, 7, 1084, 2, 1085, 7, 1085, 2, 1086, 7, 1086, 2, 1087, 7, 1087, 2, 1088, 7, 1088, 2, 1089, 7, 1089, 2, 1090, 7, 1090, 2, 1091, 7, 1091, 2, 1092, 7, 1092, 2, 1093, 7, 1093, 2, 1094, 7, 1094, 2, 1095, 7, 1095, 2, 1096, 7, 1096, 2, 1097, 7, 1097, 2, 1098, 7, 1098, 2, 1099, 7, 1099, 2, 1100, 7, 1100, 2, 1101, 7, 1101, 2, 1102, 7, 1102, 2, 1103, 7, 1103, 2, 1104, 7, 1104, 2, 1105, 7, 1105, 2, 1106, 7, 1106, 2, 1107, 7, 1107, 2, 1108, 7, 1108, 2, 1109, 7, 1109, 2, 1110, 7, 1110, 2, 1111, 7, 1111, 2, 1112, 7, 1112, 2, 1113, 7, 1113, 2, 1114, 7, 1114, 2, 1115, 7, 1115, 2, 1116, 7, 1116, 2, 1117, 7, 1117, 2, 1118, 7, 1118, 2, 1119, 7, 1119, 2, 1120, 7, 1120, 2, 1121, 7, 1121, 2, 1122, 7, 1122, 2, 1123, 7, 1123, 2, 1124, 7, 1124, 2, 1125, 7, 1125, 2, 1126, 7, 1126, 2, 1127, 7, 1127, 2, 1128, 7, 1128, 2, 1129, 7, 1129, 2, 1130, 7, 1130, 2, 1131, 7, 1131, 2, 1132, 7, 1132, 2, 1133, 7, 1133, 2, 1134, 7, 1134, 2, 1135, 7, 1135, 2, 1136, 7, 1136, 2, 1137, 7, 1137, 2, 1138, 7, 1138, 2, 1139, 7, 1139, 2, 1140, 7, 1140, 2, 1141, 7, 1141, 2, 1142, 7, 1142, 2, 1143, 7, 1143, 2, 1144, 7, 1144, 2, 1145, 7, 1145, 2, 1146, 7, 1146, 2, 1147, 7, 1147, 2, 1148, 7, 1148, 2, 1149, 7, 1149, 2, 1150, 7, 1150, 2, 1151, 7, 1151, 2, 1152, 7, 1152, 2, 1153, 7, 1153, 2, 1154, 7, 1154, 2, 1155, 7, 1155, 2, 1156, 7, 1156, 2, 1157, 7, 1157, 2, 1158, 7, 1158, 2, 1159, 7, 1159, 2, 1160, 7, 1160, 2, 1161, 7, 1161, 2, 1162, 7, 1162, 2, 1163, 7, 1163, 2, 1164, 7, 1164, 1, 0, 4, 0, 2333, 8, 0, 11, 0, 12, 0, 2334, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 2344, 8, 1, 11, 1, 12, 1, 2345, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 2357, 8, 2, 10, 2, 12, 2, 2360, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 2371, 8, 3, 10, 3, 12, 3, 2374, 9, 3, 1, 3, 3, 3, 2377, 8, 3, 1, 3, 5, 3, 2380, 8, 3, 10, 3, 12, 3, 2383, 9, 3, 1, 3, 3, 3, 2386, 8, 3, 1, 3, 1, 3, 3, 3, 2390, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 2396, 8, 3, 1, 3, 1, 3, 3, 3, 2400, 8, 3, 3, 3, 2402, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 295, 1, 295, 1, 296, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, 1, 320, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 334, 1, 334, 1, 334, 1, 334, 1, 335, 1, 335, 1, 335, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 1, 343, 1, 343, 1, 343, 1, 343, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 348, 1, 348, 1, 348, 1, 348, 1, 348, 1, 348, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 1, 351, 1, 351, 1, 351, 1, 351, 1, 351, 1, 351, 1, 351, 1, 351, 1, 352, 1, 352, 1, 352, 1, 352, 1, 352, 1, 352, 1, 352, 1, 352, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 361, 1, 361, 1, 361, 1, 361, 1, 361, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 365, 1, 365, 1, 365, 1, 365, 1, 365, 1, 365, 1, 365, 1, 365, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 367, 1, 367, 1, 367, 1, 367, 1, 367, 1, 367, 1, 367, 1, 367, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 3, 370, 5515, 8, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 3, 370, 5530, 8, 370, 3, 370, 5532, 8, 370, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 381, 1, 381, 1, 381, 1, 381, 1, 381, 1, 382, 1, 382, 1, 382, 1, 382, 1, 383, 1, 383, 1, 383, 1, 383, 1, 383, 1, 383, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 396, 1, 396, 1, 396, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 399, 1, 399, 1, 399, 1, 399, 1, 399, 1, 399, 1, 399, 1, 399, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 404, 1, 404, 1, 404, 1, 404, 1, 405, 1, 405, 1, 405, 1, 405, 1, 405, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 411, 1, 411, 1, 411, 1, 411, 1, 411, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 422, 1, 422, 1, 422, 1, 422, 1, 422, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 424, 1, 424, 1, 424, 1, 424, 1, 424, 1, 424, 1, 424, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 426, 1, 426, 1, 426, 1, 426, 1, 426, 1, 426, 1, 426, 1, 427, 1, 427, 1, 427, 1, 427, 1, 427, 1, 427, 1, 428, 1, 428, 1, 428, 1, 428, 1, 428, 1, 428, 1, 429, 1, 429, 1, 429, 1, 429, 1, 429, 1, 429, 1, 430, 1, 430, 1, 430, 1, 430, 1, 430, 1, 430, 1, 430, 1, 430, 1, 430, 1, 430, 1, 431, 1, 431, 1, 431, 1, 431, 1, 431, 1, 431, 1, 431, 1, 431, 1, 432, 1, 432, 1, 432, 1, 432, 1, 432, 1, 432, 1, 433, 1, 433, 1, 433, 1, 433, 1, 433, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 435, 1, 435, 1, 435, 1, 435, 1, 435, 1, 435, 1, 435, 1, 435, 1, 436, 1, 436, 1, 436, 1, 436, 1, 436, 1, 436, 1, 436, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 439, 1, 439, 1, 439, 1, 439, 1, 439, 1, 439, 1, 439, 1, 439, 1, 440, 1, 440, 1, 440, 1, 440, 1, 440, 1, 441, 1, 441, 1, 441, 1, 441, 1, 441, 1, 442, 1, 442, 1, 442, 1, 442, 1, 442, 1, 442, 1, 442, 1, 442, 1, 443, 1, 443, 1, 443, 1, 443, 1, 443, 1, 444, 1, 444, 1, 444, 1, 444, 1, 444, 1, 444, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 447, 1, 447, 1, 447, 1, 447, 1, 447, 1, 447, 1, 447, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 1, 449, 1, 449, 1, 449, 1, 449, 1, 449, 1, 449, 1, 449, 1, 449, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 451, 1, 451, 1, 451, 1, 451, 1, 451, 1, 451, 1, 451, 1, 451, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 453, 1, 453, 1, 453, 1, 453, 1, 453, 1, 453, 1, 453, 1, 453, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 455, 1, 455, 1, 455, 1, 455, 1, 455, 1, 455, 1, 455, 1, 455, 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, 1, 457, 1, 457, 1, 457, 1, 457, 1, 457, 1, 457, 1, 457, 1, 457, 1, 458, 1, 458, 1, 458, 1, 459, 1, 459, 1, 459, 1, 459, 1, 459, 1, 459, 1, 459, 1, 459, 1, 459, 1, 459, 1, 460, 1, 460, 1, 460, 1, 460, 1, 461, 1, 461, 1, 461, 1, 461, 1, 461, 1, 461, 1, 461, 1, 461, 1, 461, 1, 461, 1, 462, 1, 462, 1, 462, 1, 462, 1, 462, 1, 462, 1, 462, 1, 463, 1, 463, 1, 463, 1, 463, 1, 463, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 1, 466, 1, 466, 1, 466, 1, 466, 1, 466, 1, 467, 1, 467, 1, 467, 1, 467, 1, 467, 1, 467, 1, 467, 1, 468, 1, 468, 1, 468, 1, 468, 1, 468, 1, 469, 1, 469, 1, 469, 1, 469, 1, 469, 1, 469, 1, 470, 1, 470, 1, 470, 1, 470, 1, 470, 1, 471, 1, 471, 1, 471, 1, 471, 1, 471, 1, 471, 1, 472, 1, 472, 1, 472, 1, 472, 1, 472, 1, 472, 1, 472, 1, 472, 1, 473, 1, 473, 1, 473, 1, 473, 1, 473, 1, 474, 1, 474, 1, 474, 1, 474, 1, 474, 1, 474, 1, 474, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 497, 1, 497, 1, 497, 1, 497, 1, 497, 1, 497, 1, 497, 1, 497, 1, 497, 1, 498, 1, 498, 1, 498, 1, 498, 1, 498, 1, 498, 1, 498, 1, 498, 1, 498, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 501, 1, 501, 1, 501, 1, 501, 1, 501, 1, 501, 1, 501, 1, 502, 1, 502, 1, 502, 1, 502, 1, 502, 1, 502, 1, 502, 1, 503, 1, 503, 1, 503, 1, 503, 1, 503, 1, 503, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 505, 1, 505, 1, 505, 1, 505, 1, 506, 1, 506, 1, 506, 1, 506, 1, 506, 1, 506, 1, 506, 1, 506, 1, 507, 1, 507, 1, 507, 1, 507, 1, 507, 1, 507, 1, 507, 1, 507, 1, 507, 1, 508, 1, 508, 1, 508, 1, 508, 1, 508, 1, 509, 1, 509, 1, 509, 1, 509, 1, 509, 1, 509, 1, 509, 1, 510, 1, 510, 1, 510, 1, 510, 1, 510, 1, 510, 1, 511, 1, 511, 1, 511, 1, 511, 1, 511, 1, 511, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 513, 1, 513, 1, 513, 1, 513, 1, 513, 1, 514, 1, 514, 1, 514, 1, 514, 1, 514, 1, 514, 1, 515, 1, 515, 1, 515, 1, 515, 1, 515, 1, 515, 1, 516, 1, 516, 1, 516, 1, 516, 1, 516, 1, 516, 1, 517, 1, 517, 1, 517, 1, 517, 1, 517, 1, 518, 1, 518, 1, 518, 1, 519, 1, 519, 1, 519, 1, 519, 1, 519, 1, 519, 1, 519, 1, 519, 1, 520, 1, 520, 1, 520, 1, 520, 1, 520, 1, 520, 1, 520, 1, 521, 1, 521, 1, 521, 1, 521, 1, 521, 1, 521, 1, 521, 1, 521, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, 1, 524, 1, 524, 1, 524, 1, 524, 1, 524, 1, 524, 1, 524, 1, 525, 1, 525, 1, 525, 1, 525, 1, 525, 1, 525, 1, 525, 1, 525, 1, 525, 1, 525, 1, 526, 1, 526, 1, 526, 1, 526, 1, 526, 1, 527, 1, 527, 1, 527, 1, 527, 1, 527, 1, 528, 1, 528, 1, 528, 1, 528, 1, 528, 1, 528, 1, 528, 1, 528, 1, 529, 1, 529, 1, 529, 1, 529, 1, 529, 1, 529, 1, 529, 1, 530, 1, 530, 1, 530, 1, 531, 1, 531, 1, 531, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 533, 1, 533, 1, 533, 1, 533, 1, 534, 1, 534, 1, 534, 1, 534, 1, 534, 1, 534, 1, 534, 1, 535, 1, 535, 1, 535, 1, 535, 1, 535, 1, 536, 1, 536, 1, 536, 1, 536, 1, 536, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 538, 1, 538, 1, 538, 1, 538, 1, 538, 1, 538, 1, 538, 1, 538, 1, 539, 1, 539, 1, 539, 1, 539, 1, 539, 1, 539, 1, 540, 1, 540, 1, 540, 1, 540, 1, 540, 1, 540, 1, 540, 1, 540, 1, 540, 1, 540, 1, 541, 1, 541, 1, 541, 1, 541, 1, 541, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 544, 1, 544, 1, 544, 1, 544, 1, 544, 1, 544, 1, 544, 1, 545, 1, 545, 1, 545, 1, 545, 1, 545, 1, 545, 1, 545, 1, 545, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 548, 1, 548, 1, 548, 1, 548, 1, 548, 1, 548, 1, 548, 1, 548, 1, 548, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 550, 1, 550, 1, 550, 1, 550, 1, 550, 1, 550, 1, 551, 1, 551, 1, 551, 1, 551, 1, 551, 1, 551, 1, 551, 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 553, 1, 553, 1, 553, 1, 553, 1, 553, 1, 553, 1, 553, 1, 553, 1, 554, 1, 554, 1, 554, 1, 554, 1, 554, 1, 555, 1, 555, 1, 555, 1, 555, 1, 555, 1, 555, 1, 555, 1, 555, 1, 555, 1, 556, 1, 556, 1, 556, 1, 556, 1, 556, 1, 556, 1, 556, 1, 556, 1, 556, 1, 556, 1, 557, 1, 557, 1, 557, 1, 557, 1, 557, 1, 557, 1, 557, 1, 557, 1, 558, 1, 558, 1, 558, 1, 558, 1, 558, 1, 558, 1, 558, 1, 558, 1, 558, 1, 559, 1, 559, 1, 559, 1, 559, 1, 559, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 561, 1, 561, 1, 561, 1, 561, 1, 561, 1, 561, 1, 561, 1, 561, 1, 562, 1, 562, 1, 562, 1, 562, 1, 562, 1, 562, 1, 562, 1, 562, 1, 562, 1, 563, 1, 563, 1, 563, 1, 563, 1, 563, 1, 563, 1, 564, 1, 564, 1, 564, 1, 564, 1, 564, 1, 564, 1, 565, 1, 565, 1, 565, 1, 565, 1, 565, 1, 565, 1, 566, 1, 566, 1, 566, 1, 566, 1, 566, 1, 566, 1, 566, 1, 566, 1, 567, 1, 567, 1, 567, 1, 567, 1, 567, 1, 567, 1, 567, 1, 567, 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, 1, 571, 1, 571, 1, 571, 1, 571, 1, 571, 1, 571, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 574, 1, 574, 1, 574, 1, 574, 1, 574, 1, 574, 1, 574, 1, 574, 1, 574, 1, 575, 1, 575, 1, 575, 1, 575, 1, 575, 1, 575, 1, 575, 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 577, 1, 577, 1, 577, 1, 577, 1, 577, 1, 577, 1, 577, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 586, 1, 586, 1, 586, 1, 586, 1, 586, 1, 586, 1, 587, 1, 587, 1, 587, 1, 587, 1, 587, 1, 587, 1, 587, 1, 587, 1, 588, 1, 588, 1, 588, 1, 588, 1, 588, 1, 588, 1, 588, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 590, 1, 590, 1, 590, 1, 590, 1, 590, 1, 590, 1, 590, 1, 590, 1, 590, 1, 590, 1, 591, 1, 591, 1, 591, 1, 591, 1, 591, 1, 591, 1, 591, 1, 591, 1, 592, 1, 592, 1, 592, 1, 592, 1, 592, 1, 592, 1, 593, 1, 593, 1, 593, 1, 593, 1, 593, 1, 594, 1, 594, 1, 594, 1, 594, 1, 594, 1, 594, 1, 594, 1, 594, 1, 594, 1, 595, 1, 595, 1, 595, 1, 595, 1, 595, 1, 595, 1, 595, 1, 596, 1, 596, 1, 596, 1, 596, 1, 596, 1, 596, 1, 596, 1, 597, 1, 597, 1, 597, 1, 597, 1, 598, 1, 598, 1, 598, 1, 598, 1, 598, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 600, 1, 600, 1, 600, 1, 600, 1, 600, 1, 600, 1, 601, 1, 601, 1, 601, 1, 601, 1, 601, 1, 601, 1, 601, 1, 601, 1, 601, 1, 601, 1, 602, 1, 602, 1, 602, 1, 602, 1, 602, 1, 602, 1, 602, 1, 602, 1, 602, 1, 603, 1, 603, 1, 603, 1, 603, 1, 603, 1, 603, 1, 603, 1, 603, 1, 603, 1, 604, 1, 604, 1, 604, 1, 604, 1, 604, 1, 604, 1, 604, 1, 604, 1, 604, 1, 605, 1, 605, 1, 605, 1, 605, 1, 605, 1, 605, 1, 605, 1, 606, 1, 606, 1, 606, 1, 606, 1, 606, 1, 606, 1, 606, 1, 606, 1, 607, 1, 607, 1, 607, 1, 607, 1, 607, 1, 607, 1, 608, 1, 608, 1, 608, 1, 608, 1, 608, 1, 608, 1, 608, 1, 609, 1, 609, 1, 609, 1, 609, 1, 609, 1, 609, 1, 609, 1, 610, 1, 610, 1, 610, 1, 610, 1, 610, 1, 610, 1, 610, 1, 611, 1, 611, 1, 611, 1, 611, 1, 611, 1, 611, 1, 612, 1, 612, 1, 612, 1, 612, 1, 612, 1, 613, 1, 613, 1, 613, 1, 613, 1, 613, 1, 613, 1, 613, 1, 613, 1, 613, 1, 614, 1, 614, 1, 614, 1, 614, 1, 614, 1, 614, 1, 614, 1, 615, 1, 615, 1, 615, 1, 615, 1, 615, 1, 616, 1, 616, 1, 616, 1, 616, 1, 616, 1, 616, 1, 616, 1, 617, 1, 617, 1, 617, 1, 617, 1, 617, 1, 617, 1, 617, 1, 618, 1, 618, 1, 618, 1, 618, 1, 618, 1, 618, 1, 618, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 623, 1, 623, 1, 623, 1, 623, 1, 623, 1, 623, 1, 623, 1, 623, 1, 623, 1, 623, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 626, 1, 626, 1, 626, 1, 626, 1, 626, 1, 626, 1, 627, 1, 627, 1, 627, 1, 627, 1, 627, 1, 627, 1, 627, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 631, 1, 631, 1, 631, 1, 631, 1, 631, 1, 631, 1, 631, 1, 632, 1, 632, 1, 632, 1, 632, 1, 632, 1, 633, 1, 633, 1, 633, 1, 633, 1, 633, 1, 633, 1, 633, 1, 633, 1, 634, 1, 634, 1, 634, 1, 634, 1, 634, 1, 634, 1, 634, 1, 635, 1, 635, 1, 635, 1, 635, 1, 635, 1, 635, 1, 635, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 637, 1, 637, 1, 637, 1, 637, 1, 637, 1, 637, 1, 637, 1, 637, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 640, 1, 640, 1, 640, 1, 640, 1, 640, 1, 640, 1, 640, 1, 640, 1, 641, 1, 641, 1, 641, 1, 641, 1, 641, 1, 641, 1, 642, 1, 642, 1, 642, 1, 642, 1, 642, 1, 642, 1, 642, 1, 642, 1, 642, 1, 643, 1, 643, 1, 643, 1, 643, 1, 643, 1, 643, 1, 643, 1, 643, 1, 643, 1, 643, 1, 643, 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 646, 1, 646, 1, 646, 1, 646, 1, 646, 1, 646, 1, 646, 1, 646, 1, 646, 1, 646, 1, 647, 1, 647, 1, 647, 1, 647, 1, 647, 1, 647, 1, 647, 1, 647, 1, 647, 1, 647, 1, 648, 1, 648, 1, 648, 1, 648, 1, 648, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 652, 1, 652, 1, 652, 1, 652, 1, 652, 1, 652, 1, 652, 1, 652, 1, 652, 1, 653, 1, 653, 1, 653, 1, 653, 1, 653, 1, 653, 1, 653, 1, 653, 1, 653, 1, 654, 1, 654, 1, 654, 1, 654, 1, 654, 1, 654, 1, 654, 1, 654, 1, 654, 1, 654, 1, 655, 1, 655, 1, 655, 1, 655, 1, 655, 1, 655, 1, 655, 1, 655, 1, 655, 1, 655, 1, 656, 1, 656, 1, 656, 1, 656, 1, 656, 1, 656, 1, 656, 1, 656, 1, 656, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 658, 1, 658, 1, 658, 1, 658, 1, 658, 1, 658, 1, 658, 1, 658, 1, 658, 1, 658, 1, 659, 1, 659, 1, 659, 1, 659, 1, 659, 1, 659, 1, 659, 1, 659, 1, 660, 1, 660, 1, 660, 1, 660, 1, 660, 1, 660, 1, 661, 1, 661, 1, 661, 1, 661, 1, 661, 1, 661, 1, 661, 1, 661, 1, 662, 1, 662, 1, 662, 1, 662, 1, 662, 1, 663, 1, 663, 1, 663, 1, 663, 1, 663, 1, 663, 1, 663, 1, 663, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 666, 1, 666, 1, 666, 1, 666, 1, 666, 1, 666, 1, 667, 1, 667, 1, 667, 1, 667, 1, 667, 1, 667, 1, 667, 1, 667, 1, 667, 1, 667, 1, 668, 1, 668, 1, 668, 1, 668, 1, 668, 1, 669, 1, 669, 1, 669, 1, 669, 1, 669, 1, 669, 1, 669, 1, 669, 1, 670, 1, 670, 1, 670, 1, 670, 1, 670, 1, 670, 1, 670, 1, 670, 1, 671, 1, 671, 1, 671, 1, 671, 1, 671, 1, 672, 1, 672, 1, 672, 1, 672, 1, 672, 1, 672, 1, 672, 1, 672, 1, 672, 1, 673, 1, 673, 1, 673, 1, 673, 1, 673, 1, 673, 1, 673, 1, 674, 1, 674, 1, 674, 1, 674, 1, 674, 1, 674, 1, 674, 1, 674, 1, 675, 1, 675, 1, 675, 1, 675, 1, 675, 1, 676, 1, 676, 1, 676, 1, 676, 1, 676, 1, 676, 1, 676, 1, 676, 1, 677, 1, 677, 1, 677, 1, 677, 1, 677, 1, 678, 1, 678, 1, 678, 1, 679, 1, 679, 1, 679, 1, 679, 1, 680, 1, 680, 1, 680, 1, 680, 1, 681, 1, 681, 1, 681, 1, 681, 1, 682, 1, 682, 1, 682, 1, 682, 1, 683, 1, 683, 1, 683, 1, 683, 1, 684, 1, 684, 1, 684, 1, 684, 1, 685, 1, 685, 1, 685, 1, 685, 1, 685, 1, 685, 1, 685, 1, 685, 1, 685, 1, 686, 1, 686, 1, 686, 1, 686, 1, 686, 1, 686, 1, 686, 1, 686, 1, 687, 1, 687, 1, 687, 1, 687, 1, 687, 1, 687, 1, 688, 1, 688, 1, 688, 1, 688, 1, 689, 1, 689, 1, 689, 1, 689, 1, 689, 1, 690, 1, 690, 1, 690, 1, 690, 1, 690, 1, 690, 1, 690, 1, 691, 1, 691, 1, 691, 1, 691, 1, 691, 1, 692, 1, 692, 1, 692, 1, 692, 1, 692, 1, 692, 1, 692, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 694, 1, 694, 1, 694, 1, 694, 1, 694, 1, 694, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 703, 1, 703, 1, 703, 1, 703, 1, 703, 1, 703, 1, 703, 1, 703, 1, 704, 1, 704, 1, 704, 1, 704, 1, 704, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 714, 1, 714, 1, 714, 1, 714, 1, 714, 1, 714, 1, 714, 1, 715, 1, 715, 1, 715, 1, 715, 1, 715, 1, 715, 1, 715, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 720, 1, 720, 1, 720, 1, 720, 1, 720, 1, 720, 1, 720, 1, 720, 1, 721, 1, 721, 1, 721, 1, 721, 1, 721, 1, 721, 1, 721, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, 1, 727, 1, 727, 1, 727, 1, 727, 1, 727, 1, 727, 1, 727, 1, 727, 1, 728, 1, 728, 1, 728, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 730, 3, 730, 9176, 8, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 3, 730, 9203, 8, 730, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 733, 1, 733, 1, 733, 1, 733, 1, 733, 1, 733, 1, 733, 1, 733, 1, 733, 1, 734, 1, 734, 1, 734, 1, 734, 1, 734, 1, 734, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 736, 1, 736, 1, 736, 1, 736, 1, 736, 1, 736, 1, 736, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 740, 1, 740, 1, 740, 1, 740, 1, 740, 1, 740, 1, 740, 1, 740, 1, 740, 1, 741, 1, 741, 1, 741, 1, 741, 1, 741, 1, 741, 1, 742, 1, 742, 1, 742, 1, 742, 1, 742, 1, 743, 1, 743, 1, 743, 1, 743, 1, 743, 1, 743, 1, 743, 1, 744, 1, 744, 1, 744, 1, 744, 1, 744, 1, 744, 1, 744, 1, 745, 1, 745, 1, 745, 1, 745, 1, 745, 1, 745, 1, 745, 1, 746, 1, 746, 1, 746, 1, 746, 1, 746, 1, 746, 1, 746, 1, 747, 1, 747, 1, 747, 1, 747, 1, 747, 1, 747, 1, 748, 1, 748, 1, 748, 1, 748, 1, 748, 1, 748, 1, 749, 1, 749, 1, 749, 1, 749, 1, 749, 1, 749, 1, 750, 1, 750, 1, 750, 1, 750, 1, 750, 1, 750, 1, 751, 1, 751, 1, 751, 1, 751, 1, 751, 1, 752, 1, 752, 1, 752, 1, 752, 1, 752, 1, 752, 1, 752, 1, 752, 1, 753, 1, 753, 1, 753, 1, 753, 1, 753, 1, 753, 1, 754, 1, 754, 1, 754, 1, 754, 1, 754, 1, 754, 1, 754, 1, 754, 1, 755, 1, 755, 1, 755, 1, 755, 1, 755, 1, 755, 1, 755, 1, 756, 1, 756, 1, 756, 1, 756, 1, 757, 1, 757, 1, 757, 1, 757, 1, 757, 1, 757, 1, 757, 1, 757, 1, 758, 1, 758, 1, 758, 1, 758, 1, 758, 1, 758, 1, 759, 1, 759, 1, 759, 1, 759, 1, 759, 1, 759, 1, 759, 1, 760, 1, 760, 1, 760, 1, 760, 1, 761, 1, 761, 1, 761, 1, 761, 1, 761, 1, 761, 1, 761, 1, 761, 1, 762, 1, 762, 1, 762, 1, 762, 1, 762, 1, 762, 1, 763, 1, 763, 1, 763, 1, 763, 1, 763, 1, 763, 1, 764, 1, 764, 1, 764, 1, 764, 1, 764, 1, 764, 1, 764, 1, 765, 1, 765, 1, 765, 1, 765, 1, 765, 1, 765, 1, 765, 1, 766, 1, 766, 1, 766, 1, 766, 1, 766, 1, 766, 1, 766, 1, 767, 1, 767, 1, 767, 1, 767, 1, 767, 1, 767, 1, 767, 1, 768, 1, 768, 1, 768, 1, 768, 1, 768, 1, 768, 1, 769, 1, 769, 1, 769, 1, 769, 1, 769, 1, 769, 1, 769, 1, 769, 1, 769, 1, 770, 1, 770, 1, 770, 1, 770, 1, 770, 1, 771, 1, 771, 1, 771, 1, 771, 1, 771, 1, 772, 1, 772, 1, 772, 1, 772, 1, 772, 1, 772, 1, 772, 1, 773, 1, 773, 1, 773, 1, 773, 1, 773, 1, 774, 1, 774, 1, 774, 1, 774, 1, 774, 1, 775, 1, 775, 1, 775, 1, 775, 1, 775, 1, 775, 1, 776, 1, 776, 1, 776, 1, 776, 1, 776, 1, 776, 1, 776, 1, 776, 1, 777, 1, 777, 1, 777, 1, 777, 1, 777, 1, 777, 1, 778, 1, 778, 1, 778, 1, 778, 1, 778, 1, 779, 1, 779, 1, 779, 1, 779, 1, 779, 1, 779, 1, 779, 1, 779, 1, 780, 1, 780, 1, 780, 1, 780, 1, 780, 1, 780, 1, 780, 1, 780, 1, 781, 1, 781, 1, 781, 1, 781, 1, 781, 1, 781, 1, 781, 1, 781, 1, 782, 1, 782, 1, 782, 1, 782, 1, 782, 1, 782, 1, 782, 1, 782, 1, 782, 1, 782, 1, 783, 1, 783, 1, 783, 1, 783, 1, 784, 1, 784, 1, 784, 1, 784, 1, 784, 1, 784, 1, 784, 1, 784, 1, 784, 1, 784, 1, 785, 1, 785, 1, 785, 1, 785, 1, 785, 1, 785, 1, 785, 1, 786, 1, 786, 1, 786, 1, 786, 1, 786, 1, 786, 1, 786, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 788, 1, 788, 1, 788, 1, 788, 1, 788, 1, 788, 1, 788, 1, 789, 1, 789, 1, 789, 1, 789, 1, 790, 1, 790, 1, 790, 1, 790, 1, 790, 1, 790, 1, 790, 1, 790, 1, 790, 1, 790, 1, 790, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 792, 1, 792, 1, 792, 1, 792, 1, 792, 1, 792, 1, 792, 1, 793, 1, 793, 1, 793, 1, 793, 1, 793, 1, 793, 1, 793, 1, 793, 1, 793, 1, 793, 1, 793, 1, 794, 1, 794, 1, 794, 1, 794, 1, 794, 1, 794, 1, 794, 1, 794, 1, 794, 1, 794, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 799, 1, 799, 1, 799, 1, 799, 1, 799, 1, 799, 1, 799, 1, 799, 1, 799, 1, 800, 1, 800, 1, 800, 1, 800, 1, 800, 1, 800, 1, 800, 1, 800, 1, 800, 1, 800, 1, 800, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 802, 1, 802, 1, 802, 1, 802, 1, 802, 1, 802, 1, 802, 1, 802, 1, 802, 1, 802, 1, 802, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 804, 1, 804, 1, 804, 1, 804, 1, 804, 1, 804, 1, 805, 1, 805, 1, 805, 1, 805, 1, 805, 1, 805, 1, 805, 1, 805, 1, 806, 1, 806, 1, 806, 1, 806, 1, 807, 1, 807, 1, 807, 1, 807, 1, 807, 1, 808, 1, 808, 1, 808, 1, 808, 1, 808, 1, 808, 1, 808, 1, 808, 1, 809, 1, 809, 1, 809, 1, 809, 1, 809, 1, 809, 1, 809, 1, 809, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 812, 1, 812, 1, 812, 1, 812, 1, 812, 1, 813, 1, 813, 1, 813, 1, 813, 1, 813, 1, 813, 1, 813, 1, 813, 1, 813, 1, 814, 1, 814, 1, 814, 1, 814, 1, 814, 1, 815, 1, 815, 1, 815, 1, 815, 1, 815, 1, 815, 1, 815, 1, 816, 1, 816, 1, 816, 1, 816, 1, 816, 1, 816, 1, 817, 1, 817, 1, 817, 1, 817, 1, 817, 1, 817, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 823, 1, 823, 1, 823, 1, 823, 1, 823, 1, 824, 1, 824, 1, 824, 1, 824, 1, 824, 1, 824, 1, 825, 1, 825, 1, 825, 1, 825, 1, 825, 1, 825, 1, 825, 1, 825, 1, 825, 1, 825, 1, 826, 1, 826, 1, 826, 1, 826, 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, 1, 829, 1, 829, 1, 829, 1, 829, 1, 829, 1, 829, 1, 829, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 831, 1, 831, 1, 831, 1, 831, 1, 831, 1, 832, 1, 832, 1, 832, 1, 832, 1, 832, 1, 832, 1, 832, 1, 832, 1, 833, 1, 833, 1, 833, 1, 833, 1, 833, 1, 833, 1, 833, 1, 833, 1, 833, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 835, 1, 835, 1, 835, 1, 835, 1, 835, 1, 835, 1, 835, 1, 835, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 838, 1, 838, 1, 838, 1, 838, 1, 838, 1, 838, 1, 838, 1, 838, 1, 838, 1, 838, 1, 839, 1, 839, 1, 839, 1, 839, 1, 839, 1, 839, 1, 839, 1, 839, 1, 839, 1, 840, 1, 840, 1, 840, 1, 840, 1, 840, 1, 840, 1, 840, 1, 841, 1, 841, 1, 841, 1, 841, 1, 841, 1, 841, 1, 841, 1, 841, 1, 841, 1, 841, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 843, 1, 843, 1, 843, 1, 843, 1, 843, 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 845, 1, 845, 1, 845, 1, 845, 1, 846, 1, 846, 1, 846, 1, 846, 1, 847, 1, 847, 1, 847, 1, 847, 1, 847, 1, 847, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 852, 1, 852, 1, 852, 1, 852, 1, 852, 1, 852, 1, 852, 1, 852, 1, 853, 1, 853, 1, 853, 1, 853, 1, 853, 1, 853, 1, 853, 1, 853, 1, 853, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 855, 1, 855, 1, 855, 1, 855, 1, 855, 1, 855, 1, 855, 1, 855, 1, 856, 1, 856, 1, 856, 1, 856, 1, 856, 1, 856, 1, 856, 1, 856, 1, 856, 1, 856, 1, 856, 1, 857, 1, 857, 1, 857, 1, 857, 1, 857, 1, 857, 1, 857, 1, 857, 1, 857, 1, 857, 1, 858, 1, 858, 1, 858, 1, 858, 1, 858, 1, 858, 1, 858, 1, 858, 1, 858, 1, 858, 1, 859, 1, 859, 1, 859, 1, 859, 1, 859, 1, 859, 1, 859, 1, 860, 1, 860, 1, 860, 1, 860, 1, 860, 1, 860, 1, 860, 1, 860, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 863, 1, 863, 1, 863, 1, 863, 1, 863, 1, 863, 1, 863, 1, 863, 1, 863, 1, 863, 1, 864, 1, 864, 1, 864, 1, 864, 1, 864, 1, 864, 1, 864, 1, 864, 1, 864, 1, 865, 1, 865, 1, 865, 1, 865, 1, 866, 1, 866, 1, 866, 1, 866, 1, 866, 1, 866, 1, 866, 1, 867, 1, 867, 1, 867, 1, 867, 1, 867, 1, 867, 1, 867, 1, 867, 1, 868, 1, 868, 1, 868, 1, 868, 1, 868, 1, 868, 1, 868, 1, 868, 1, 868, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 870, 1, 870, 1, 870, 1, 870, 1, 870, 1, 870, 1, 870, 1, 870, 1, 870, 1, 871, 1, 871, 1, 871, 1, 871, 1, 871, 1, 871, 1, 871, 1, 872, 1, 872, 1, 872, 1, 872, 1, 873, 1, 873, 1, 873, 1, 873, 1, 873, 1, 873, 1, 873, 1, 873, 1, 873, 1, 873, 1, 873, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 876, 1, 876, 1, 876, 1, 876, 1, 876, 1, 876, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 878, 1, 878, 1, 878, 1, 878, 1, 878, 1, 878, 1, 879, 1, 879, 1, 879, 1, 879, 1, 879, 1, 879, 1, 879, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 882, 1, 882, 1, 882, 1, 882, 1, 882, 1, 882, 1, 882, 1, 882, 1, 882, 1, 882, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 890, 1, 890, 1, 890, 1, 890, 1, 890, 1, 890, 1, 890, 1, 890, 1, 890, 1, 890, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 895, 1, 895, 1, 895, 1, 895, 1, 895, 1, 895, 1, 895, 1, 895, 1, 895, 1, 896, 1, 896, 1, 896, 1, 896, 1, 896, 1, 896, 1, 896, 1, 896, 1, 897, 1, 897, 1, 897, 1, 897, 1, 897, 1, 897, 1, 897, 1, 897, 1, 897, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 900, 1, 900, 1, 900, 1, 900, 1, 901, 1, 901, 1, 901, 1, 901, 1, 901, 1, 901, 1, 901, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 903, 1, 903, 1, 903, 1, 903, 1, 903, 1, 903, 1, 903, 1, 903, 1, 903, 1, 903, 1, 903, 1, 904, 1, 904, 1, 904, 1, 904, 1, 904, 1, 904, 1, 904, 1, 904, 1, 904, 1, 904, 1, 905, 1, 905, 1, 905, 1, 905, 1, 905, 1, 905, 1, 905, 1, 905, 1, 905, 1, 905, 1, 906, 1, 906, 1, 906, 1, 906, 1, 906, 1, 906, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 909, 1, 909, 1, 909, 1, 909, 1, 909, 1, 909, 1, 909, 1, 909, 1, 909, 1, 910, 1, 910, 1, 910, 1, 910, 1, 910, 1, 910, 1, 910, 1, 910, 1, 911, 1, 911, 1, 911, 1, 911, 1, 911, 1, 911, 1, 911, 1, 912, 1, 912, 1, 912, 1, 912, 1, 912, 1, 912, 1, 912, 1, 912, 1, 912, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 914, 1, 914, 1, 914, 1, 914, 1, 914, 1, 914, 1, 914, 1, 914, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 917, 1, 917, 1, 917, 1, 917, 1, 917, 1, 917, 1, 917, 1, 917, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 920, 1, 920, 1, 920, 1, 920, 1, 920, 1, 920, 1, 921, 1, 921, 1, 921, 1, 921, 1, 921, 1, 921, 1, 922, 1, 922, 1, 922, 1, 922, 1, 922, 1, 922, 1, 922, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 927, 1, 927, 1, 927, 1, 928, 1, 928, 1, 928, 1, 928, 1, 928, 1, 928, 1, 928, 1, 928, 1, 928, 1, 928, 1, 929, 1, 929, 1, 929, 1, 929, 1, 929, 1, 929, 1, 929, 1, 930, 1, 930, 1, 930, 1, 930, 1, 931, 1, 931, 1, 931, 1, 931, 1, 931, 1, 931, 1, 932, 1, 932, 1, 932, 1, 932, 1, 932, 1, 933, 1, 933, 1, 933, 1, 933, 1, 933, 1, 933, 1, 934, 1, 934, 1, 934, 1, 934, 1, 934, 1, 935, 1, 935, 1, 935, 1, 935, 1, 935, 1, 935, 1, 936, 1, 936, 1, 936, 1, 936, 1, 936, 1, 936, 1, 936, 1, 936, 1, 936, 1, 937, 1, 937, 1, 937, 1, 937, 1, 937, 1, 937, 1, 937, 1, 937, 1, 937, 1, 938, 1, 938, 1, 938, 1, 938, 1, 938, 1, 938, 1, 938, 1, 938, 1, 938, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 942, 1, 942, 1, 942, 1, 942, 1, 942, 1, 942, 1, 942, 1, 942, 1, 942, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 945, 1, 945, 1, 945, 1, 945, 1, 945, 1, 945, 1, 945, 1, 945, 1, 945, 1, 945, 1, 945, 1, 946, 1, 946, 1, 946, 1, 946, 1, 946, 1, 946, 1, 946, 1, 946, 1, 946, 1, 946, 1, 947, 1, 947, 1, 947, 1, 947, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 950, 1, 950, 1, 950, 1, 950, 1, 950, 1, 950, 1, 950, 1, 950, 1, 950, 1, 950, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 961, 1, 961, 1, 961, 1, 961, 1, 961, 1, 961, 1, 961, 1, 961, 1, 961, 1, 961, 1, 961, 1, 962, 1, 962, 1, 962, 1, 962, 1, 962, 1, 962, 1, 962, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, 1, 966, 1, 966, 1, 966, 1, 966, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 968, 1, 968, 1, 968, 1, 968, 1, 969, 1, 969, 1, 969, 1, 969, 1, 969, 1, 969, 1, 969, 1, 969, 1, 969, 1, 970, 1, 970, 1, 970, 1, 970, 1, 970, 1, 970, 1, 970, 1, 970, 1, 970, 1, 970, 1, 970, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 972, 1, 972, 1, 972, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 975, 1, 975, 1, 975, 1, 975, 1, 975, 1, 975, 1, 975, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 980, 1, 980, 1, 980, 1, 980, 1, 981, 1, 981, 1, 981, 1, 981, 1, 981, 1, 981, 1, 982, 1, 982, 1, 982, 1, 982, 1, 982, 1, 982, 1, 983, 1, 983, 1, 983, 1, 983, 1, 983, 1, 983, 1, 983, 1, 983, 1, 984, 1, 984, 1, 984, 1, 984, 1, 984, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 987, 1, 987, 1, 987, 1, 987, 1, 987, 1, 987, 1, 987, 1, 987, 1, 988, 1, 988, 1, 988, 1, 988, 1, 988, 1, 988, 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, 1, 990, 1, 990, 1, 990, 1, 990, 1, 990, 1, 991, 1, 991, 1, 991, 1, 991, 1, 991, 1, 991, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 995, 1, 995, 1, 995, 1, 995, 1, 996, 1, 996, 1, 996, 1, 996, 1, 996, 1, 997, 1, 997, 1, 997, 1, 997, 1, 997, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 999, 1, 999, 1, 999, 1, 999, 1, 999, 1, 1000, 1, 1000, 1, 1000, 1, 1000, 1, 1001, 1, 1001, 1, 1001, 1, 1001, 1, 1001, 1, 1001, 1, 1002, 1, 1002, 1, 1002, 1, 1002, 1, 1002, 1, 1002, 1, 1002, 1, 1002, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1004, 1, 1004, 1, 1004, 1, 1004, 1, 1004, 1, 1005, 1, 1005, 1, 1005, 1, 1005, 1, 1005, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1007, 1, 1007, 1, 1007, 1, 1007, 1, 1007, 1, 1007, 1, 1007, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1009, 1, 1009, 1, 1009, 1, 1009, 1, 1009, 1, 1009, 1, 1009, 1, 1009, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1012, 1, 1012, 1, 1012, 1, 1012, 1, 1012, 1, 1012, 1, 1012, 1, 1012, 1, 1012, 1, 1013, 1, 1013, 1, 1013, 1, 1013, 1, 1013, 1, 1013, 1, 1013, 1, 1013, 1, 1013, 1, 1014, 1, 1014, 1, 1014, 1, 1014, 1, 1014, 1, 1014, 1, 1014, 1, 1014, 1, 1014, 1, 1014, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1024, 1, 1024, 1, 1024, 1, 1024, 1, 1024, 1, 1024, 1, 1024, 1, 1024, 1, 1024, 1, 1024, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1054, 1, 1054, 1, 1054, 1, 1054, 1, 1054, 1, 1054, 1, 1054, 1, 1054, 1, 1054, 1, 1054, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1059, 1, 1059, 1, 1059, 1, 1059, 1, 1059, 1, 1059, 1, 1059, 1, 1059, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1063, 1, 1063, 1, 1063, 1, 1063, 1, 1063, 1, 1063, 1, 1063, 1, 1063, 1, 1063, 1, 1064, 1, 1064, 1, 1064, 1, 1064, 1, 1064, 1, 1064, 1, 1064, 1, 1064, 1, 1064, 1, 1064, 1, 1065, 1, 1065, 1, 1065, 1, 1065, 1, 1065, 1, 1066, 1, 1066, 1, 1066, 1, 1066, 1, 1066, 1, 1067, 1, 1067, 1, 1067, 1, 1067, 1, 1067, 1, 1067, 1, 1067, 1, 1067, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1069, 1, 1069, 1, 1069, 1, 1069, 1, 1069, 1, 1069, 1, 1069, 1, 1069, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1071, 1, 1071, 1, 1071, 1, 1071, 1, 1072, 1, 1072, 1, 1072, 1, 1072, 1, 1072, 1, 1072, 1, 1072, 1, 1072, 1, 1072, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1077, 1, 1077, 1, 1077, 1, 1077, 1, 1077, 1, 1077, 1, 1077, 1, 1077, 1, 1078, 1, 1078, 1, 1078, 1, 1078, 1, 1078, 1, 1078, 1, 1078, 1, 1078, 1, 1078, 1, 1078, 1, 1079, 1, 1079, 1, 1079, 1, 1079, 1, 1079, 1, 1079, 1, 1079, 1, 1079, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1081, 1, 1081, 1, 1081, 1, 1081, 1, 1081, 1, 1081, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1084, 1, 1084, 1, 1084, 1, 1084, 1, 1084, 1, 1084, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1086, 1, 1086, 1, 1086, 1, 1086, 1, 1086, 1, 1086, 1, 1086, 1, 1086, 1, 1086, 1, 1086, 1, 1087, 1, 1087, 1, 1087, 1, 1087, 1, 1087, 1, 1087, 1, 1088, 1, 1088, 1, 1088, 1, 1088, 1, 1088, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1091, 1, 1091, 1, 1091, 1, 1091, 1, 1091, 1, 1091, 1, 1091, 1, 1091, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1093, 1, 1093, 1, 1093, 1, 1093, 1, 1093, 1, 1093, 1, 1093, 1, 1093, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1096, 1, 1096, 1, 1096, 1, 1096, 1, 1096, 1, 1096, 1, 1096, 1, 1097, 1, 1097, 1, 1097, 1, 1097, 1, 1097, 1, 1097, 1, 1097, 1, 1097, 1, 1097, 1, 1098, 1, 1098, 1, 1099, 1, 1099, 1, 1100, 1, 1100, 1, 1100, 1, 1101, 1, 1101, 1, 1101, 1, 1102, 1, 1102, 1, 1102, 1, 1103, 1, 1103, 1, 1103, 1, 1104, 1, 1104, 1, 1104, 1, 1105, 1, 1105, 1, 1105, 1, 1106, 1, 1106, 1, 1106, 1, 1107, 1, 1107, 1, 1107, 1, 1108, 1, 1108, 1, 1108, 1, 1109, 1, 1109, 1, 1110, 1, 1110, 1, 1111, 1, 1111, 1, 1112, 1, 1112, 1, 1113, 1, 1113, 1, 1114, 1, 1114, 1, 1114, 1, 1114, 1, 1115, 1, 1115, 1, 1115, 1, 1115, 1, 1116, 1, 1116, 1, 1117, 1, 1117, 1, 1118, 1, 1118, 1, 1119, 1, 1119, 1, 1120, 1, 1120, 1, 1121, 1, 1121, 1, 1122, 1, 1122, 1, 1123, 1, 1123, 1, 1124, 1, 1124, 1, 1125, 1, 1125, 1, 1126, 1, 1126, 1, 1127, 1, 1127, 1, 1128, 1, 1128, 1, 1129, 1, 1129, 1, 1130, 1, 1130, 1, 1131, 1, 1131, 1, 1132, 1, 1132, 1, 1133, 1, 1133, 1, 1134, 1, 1134, 1, 1135, 1, 1135, 1, 1136, 1, 1136, 1, 1137, 1, 1137, 1, 1137, 3, 1137, 13309, 8, 1137, 1, 1138, 1, 1138, 1, 1138, 1, 1138, 1, 1139, 4, 1139, 13316, 8, 1139, 11, 1139, 12, 1139, 13317, 1, 1139, 1, 1139, 1, 1140, 1, 1140, 1, 1140, 1, 1141, 1, 1141, 1, 1141, 3, 1141, 13328, 8, 1141, 1, 1142, 4, 1142, 13331, 8, 1142, 11, 1142, 12, 1142, 13332, 1, 1143, 1, 1143, 1, 1143, 1, 1143, 1, 1143, 4, 1143, 13340, 8, 1143, 11, 1143, 12, 1143, 13341, 1, 1143, 1, 1143, 1, 1143, 1, 1143, 1, 1143, 1, 1143, 4, 1143, 13350, 8, 1143, 11, 1143, 12, 1143, 13351, 3, 1143, 13354, 8, 1143, 1, 1144, 4, 1144, 13357, 8, 1144, 11, 1144, 12, 1144, 13358, 3, 1144, 13361, 8, 1144, 1, 1144, 1, 1144, 4, 1144, 13365, 8, 1144, 11, 1144, 12, 1144, 13366, 1, 1144, 4, 1144, 13370, 8, 1144, 11, 1144, 12, 1144, 13371, 1, 1144, 1, 1144, 1, 1144, 1, 1144, 4, 1144, 13378, 8, 1144, 11, 1144, 12, 1144, 13379, 3, 1144, 13382, 8, 1144, 1, 1144, 1, 1144, 4, 1144, 13386, 8, 1144, 11, 1144, 12, 1144, 13387, 1, 1144, 1, 1144, 1, 1144, 4, 1144, 13393, 8, 1144, 11, 1144, 12, 1144, 13394, 1, 1144, 1, 1144, 3, 1144, 13399, 8, 1144, 1, 1145, 1, 1145, 1, 1145, 1, 1146, 1, 1146, 1, 1147, 1, 1147, 1, 1147, 1, 1148, 1, 1148, 1, 1148, 1, 1149, 1, 1149, 1, 1150, 1, 1150, 4, 1150, 13416, 8, 1150, 11, 1150, 12, 1150, 13417, 1, 1150, 1, 1150, 1, 1151, 1, 1151, 1, 1151, 1, 1151, 3, 1151, 13426, 8, 1151, 1, 1151, 1, 1151, 1, 1151, 1, 1151, 1, 1151, 1, 1151, 3, 1151, 13434, 8, 1151, 1, 1152, 4, 1152, 13437, 8, 1152, 11, 1152, 12, 1152, 13438, 1, 1152, 1, 1152, 4, 1152, 13443, 8, 1152, 11, 1152, 12, 1152, 13444, 1, 1152, 4, 1152, 13448, 8, 1152, 11, 1152, 12, 1152, 13449, 1, 1152, 1, 1152, 4, 1152, 13454, 8, 1152, 11, 1152, 12, 1152, 13455, 3, 1152, 13458, 8, 1152, 1, 1153, 1, 1153, 4, 1153, 13462, 8, 1153, 11, 1153, 12, 1153, 13463, 1, 1153, 1, 1153, 1, 1153, 3, 1153, 13469, 8, 1153, 1, 1154, 1, 1154, 1, 1154, 4, 1154, 13474, 8, 1154, 11, 1154, 12, 1154, 13475, 1, 1154, 3, 1154, 13479, 8, 1154, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 3, 1155, 13522, 8, 1155, 1, 1156, 1, 1156, 3, 1156, 13526, 8, 1156, 1, 1156, 4, 1156, 13529, 8, 1156, 11, 1156, 12, 1156, 13530, 1, 1157, 5, 1157, 13534, 8, 1157, 10, 1157, 12, 1157, 13537, 9, 1157, 1, 1157, 4, 1157, 13540, 8, 1157, 11, 1157, 12, 1157, 13541, 1, 1157, 5, 1157, 13545, 8, 1157, 10, 1157, 12, 1157, 13548, 9, 1157, 1, 1158, 1, 1158, 1, 1158, 1, 1158, 1, 1158, 1, 1158, 5, 1158, 13556, 8, 1158, 10, 1158, 12, 1158, 13559, 9, 1158, 1, 1158, 1, 1158, 1, 1159, 1, 1159, 1, 1159, 1, 1159, 1, 1159, 1, 1159, 5, 1159, 13569, 8, 1159, 10, 1159, 12, 1159, 13572, 9, 1159, 1, 1159, 1, 1159, 1, 1160, 1, 1160, 1, 1160, 1, 1160, 1, 1160, 1, 1160, 5, 1160, 13582, 8, 1160, 10, 1160, 12, 1160, 13585, 9, 1160, 1, 1160, 1, 1160, 1, 1161, 1, 1161, 1, 1162, 1, 1162, 1, 1163, 1, 1163, 1, 1163, 4, 1163, 13596, 8, 1163, 11, 1163, 12, 1163, 13597, 1, 1163, 1, 1163, 1, 1164, 1, 1164, 1, 1164, 1, 1164, 4, 2345, 2358, 13535, 13541, 0, 1165, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 263, 527, 264, 529, 265, 531, 266, 533, 267, 535, 268, 537, 269, 539, 270, 541, 271, 543, 272, 545, 273, 547, 274, 549, 275, 551, 276, 553, 277, 555, 278, 557, 279, 559, 280, 561, 281, 563, 282, 565, 283, 567, 284, 569, 285, 571, 286, 573, 287, 575, 288, 577, 289, 579, 290, 581, 291, 583, 292, 585, 293, 587, 294, 589, 295, 591, 296, 593, 297, 595, 298, 597, 299, 599, 300, 601, 301, 603, 302, 605, 303, 607, 304, 609, 305, 611, 306, 613, 307, 615, 308, 617, 309, 619, 310, 621, 311, 623, 312, 625, 313, 627, 314, 629, 315, 631, 316, 633, 317, 635, 318, 637, 319, 639, 320, 641, 321, 643, 322, 645, 323, 647, 324, 649, 325, 651, 326, 653, 327, 655, 328, 657, 329, 659, 330, 661, 331, 663, 332, 665, 333, 667, 334, 669, 335, 671, 336, 673, 337, 675, 338, 677, 339, 679, 340, 681, 341, 683, 342, 685, 343, 687, 344, 689, 345, 691, 346, 693, 347, 695, 348, 697, 349, 699, 350, 701, 351, 703, 352, 705, 353, 707, 354, 709, 355, 711, 356, 713, 357, 715, 358, 717, 359, 719, 360, 721, 361, 723, 362, 725, 363, 727, 364, 729, 365, 731, 366, 733, 367, 735, 368, 737, 369, 739, 370, 741, 371, 743, 372, 745, 373, 747, 374, 749, 375, 751, 376, 753, 377, 755, 378, 757, 379, 759, 380, 761, 381, 763, 382, 765, 383, 767, 384, 769, 385, 771, 386, 773, 387, 775, 388, 777, 389, 779, 390, 781, 391, 783, 392, 785, 393, 787, 394, 789, 395, 791, 396, 793, 397, 795, 398, 797, 399, 799, 400, 801, 401, 803, 402, 805, 403, 807, 404, 809, 405, 811, 406, 813, 407, 815, 408, 817, 409, 819, 410, 821, 411, 823, 412, 825, 413, 827, 414, 829, 415, 831, 416, 833, 417, 835, 418, 837, 419, 839, 420, 841, 421, 843, 422, 845, 423, 847, 424, 849, 425, 851, 426, 853, 427, 855, 428, 857, 429, 859, 430, 861, 431, 863, 432, 865, 433, 867, 434, 869, 435, 871, 436, 873, 437, 875, 438, 877, 439, 879, 440, 881, 441, 883, 442, 885, 443, 887, 444, 889, 445, 891, 446, 893, 447, 895, 448, 897, 449, 899, 450, 901, 451, 903, 452, 905, 453, 907, 454, 909, 455, 911, 456, 913, 457, 915, 458, 917, 459, 919, 460, 921, 461, 923, 462, 925, 463, 927, 464, 929, 465, 931, 466, 933, 467, 935, 468, 937, 469, 939, 470, 941, 471, 943, 472, 945, 473, 947, 474, 949, 475, 951, 476, 953, 477, 955, 478, 957, 479, 959, 480, 961, 481, 963, 482, 965, 483, 967, 484, 969, 485, 971, 486, 973, 487, 975, 488, 977, 489, 979, 490, 981, 491, 983, 492, 985, 493, 987, 494, 989, 495, 991, 496, 993, 497, 995, 498, 997, 499, 999, 500, 1001, 501, 1003, 502, 1005, 503, 1007, 504, 1009, 505, 1011, 506, 1013, 507, 1015, 508, 1017, 509, 1019, 510, 1021, 511, 1023, 512, 1025, 513, 1027, 514, 1029, 515, 1031, 516, 1033, 517, 1035, 518, 1037, 519, 1039, 520, 1041, 521, 1043, 522, 1045, 523, 1047, 524, 1049, 525, 1051, 526, 1053, 527, 1055, 528, 1057, 529, 1059, 530, 1061, 531, 1063, 532, 1065, 533, 1067, 534, 1069, 535, 1071, 536, 1073, 537, 1075, 538, 1077, 539, 1079, 540, 1081, 541, 1083, 542, 1085, 543, 1087, 544, 1089, 545, 1091, 546, 1093, 547, 1095, 548, 1097, 549, 1099, 550, 1101, 551, 1103, 552, 1105, 553, 1107, 554, 1109, 555, 1111, 556, 1113, 557, 1115, 558, 1117, 559, 1119, 560, 1121, 561, 1123, 562, 1125, 563, 1127, 564, 1129, 565, 1131, 566, 1133, 567, 1135, 568, 1137, 569, 1139, 570, 1141, 571, 1143, 572, 1145, 573, 1147, 574, 1149, 575, 1151, 576, 1153, 577, 1155, 578, 1157, 579, 1159, 580, 1161, 581, 1163, 582, 1165, 583, 1167, 584, 1169, 585, 1171, 586, 1173, 587, 1175, 588, 1177, 589, 1179, 590, 1181, 591, 1183, 592, 1185, 593, 1187, 594, 1189, 595, 1191, 596, 1193, 597, 1195, 598, 1197, 599, 1199, 600, 1201, 601, 1203, 602, 1205, 603, 1207, 604, 1209, 605, 1211, 606, 1213, 607, 1215, 608, 1217, 609, 1219, 610, 1221, 611, 1223, 612, 1225, 613, 1227, 614, 1229, 615, 1231, 616, 1233, 617, 1235, 618, 1237, 619, 1239, 620, 1241, 621, 1243, 622, 1245, 623, 1247, 624, 1249, 625, 1251, 626, 1253, 627, 1255, 628, 1257, 629, 1259, 630, 1261, 631, 1263, 632, 1265, 633, 1267, 634, 1269, 635, 1271, 636, 1273, 637, 1275, 638, 1277, 639, 1279, 640, 1281, 641, 1283, 642, 1285, 643, 1287, 644, 1289, 645, 1291, 646, 1293, 647, 1295, 648, 1297, 649, 1299, 650, 1301, 651, 1303, 652, 1305, 653, 1307, 654, 1309, 655, 1311, 656, 1313, 657, 1315, 658, 1317, 659, 1319, 660, 1321, 661, 1323, 662, 1325, 663, 1327, 664, 1329, 665, 1331, 666, 1333, 667, 1335, 668, 1337, 669, 1339, 670, 1341, 671, 1343, 672, 1345, 673, 1347, 674, 1349, 675, 1351, 676, 1353, 677, 1355, 678, 1357, 679, 1359, 680, 1361, 681, 1363, 682, 1365, 683, 1367, 684, 1369, 685, 1371, 686, 1373, 687, 1375, 688, 1377, 689, 1379, 690, 1381, 691, 1383, 692, 1385, 693, 1387, 694, 1389, 695, 1391, 696, 1393, 697, 1395, 698, 1397, 699, 1399, 700, 1401, 701, 1403, 702, 1405, 703, 1407, 704, 1409, 705, 1411, 706, 1413, 707, 1415, 708, 1417, 709, 1419, 710, 1421, 711, 1423, 712, 1425, 713, 1427, 714, 1429, 715, 1431, 716, 1433, 717, 1435, 718, 1437, 719, 1439, 720, 1441, 721, 1443, 722, 1445, 723, 1447, 724, 1449, 725, 1451, 726, 1453, 727, 1455, 728, 1457, 729, 1459, 730, 1461, 731, 1463, 732, 1465, 733, 1467, 734, 1469, 735, 1471, 736, 1473, 737, 1475, 738, 1477, 739, 1479, 740, 1481, 741, 1483, 742, 1485, 743, 1487, 744, 1489, 745, 1491, 746, 1493, 747, 1495, 748, 1497, 749, 1499, 750, 1501, 751, 1503, 752, 1505, 753, 1507, 754, 1509, 755, 1511, 756, 1513, 757, 1515, 758, 1517, 759, 1519, 760, 1521, 761, 1523, 762, 1525, 763, 1527, 764, 1529, 765, 1531, 766, 1533, 767, 1535, 768, 1537, 769, 1539, 770, 1541, 771, 1543, 772, 1545, 773, 1547, 774, 1549, 775, 1551, 776, 1553, 777, 1555, 778, 1557, 779, 1559, 780, 1561, 781, 1563, 782, 1565, 783, 1567, 784, 1569, 785, 1571, 786, 1573, 787, 1575, 788, 1577, 789, 1579, 790, 1581, 791, 1583, 792, 1585, 793, 1587, 794, 1589, 795, 1591, 796, 1593, 797, 1595, 798, 1597, 799, 1599, 800, 1601, 801, 1603, 802, 1605, 803, 1607, 804, 1609, 805, 1611, 806, 1613, 807, 1615, 808, 1617, 809, 1619, 810, 1621, 811, 1623, 812, 1625, 813, 1627, 814, 1629, 815, 1631, 816, 1633, 817, 1635, 818, 1637, 819, 1639, 820, 1641, 821, 1643, 822, 1645, 823, 1647, 824, 1649, 825, 1651, 826, 1653, 827, 1655, 828, 1657, 829, 1659, 830, 1661, 831, 1663, 832, 1665, 833, 1667, 834, 1669, 835, 1671, 836, 1673, 837, 1675, 838, 1677, 839, 1679, 840, 1681, 841, 1683, 842, 1685, 843, 1687, 844, 1689, 845, 1691, 846, 1693, 847, 1695, 848, 1697, 849, 1699, 850, 1701, 851, 1703, 852, 1705, 853, 1707, 854, 1709, 855, 1711, 856, 1713, 857, 1715, 858, 1717, 859, 1719, 860, 1721, 861, 1723, 862, 1725, 863, 1727, 864, 1729, 865, 1731, 866, 1733, 867, 1735, 868, 1737, 869, 1739, 870, 1741, 871, 1743, 872, 1745, 873, 1747, 874, 1749, 875, 1751, 876, 1753, 877, 1755, 878, 1757, 879, 1759, 880, 1761, 881, 1763, 882, 1765, 883, 1767, 884, 1769, 885, 1771, 886, 1773, 887, 1775, 888, 1777, 889, 1779, 890, 1781, 891, 1783, 892, 1785, 893, 1787, 894, 1789, 895, 1791, 896, 1793, 897, 1795, 898, 1797, 899, 1799, 900, 1801, 901, 1803, 902, 1805, 903, 1807, 904, 1809, 905, 1811, 906, 1813, 907, 1815, 908, 1817, 909, 1819, 910, 1821, 911, 1823, 912, 1825, 913, 1827, 914, 1829, 915, 1831, 916, 1833, 917, 1835, 918, 1837, 919, 1839, 920, 1841, 921, 1843, 922, 1845, 923, 1847, 924, 1849, 925, 1851, 926, 1853, 927, 1855, 928, 1857, 929, 1859, 930, 1861, 931, 1863, 932, 1865, 933, 1867, 934, 1869, 935, 1871, 936, 1873, 937, 1875, 938, 1877, 939, 1879, 940, 1881, 941, 1883, 942, 1885, 943, 1887, 944, 1889, 945, 1891, 946, 1893, 947, 1895, 948, 1897, 949, 1899, 950, 1901, 951, 1903, 952, 1905, 953, 1907, 954, 1909, 955, 1911, 956, 1913, 957, 1915, 958, 1917, 959, 1919, 960, 1921, 961, 1923, 962, 1925, 963, 1927, 964, 1929, 965, 1931, 966, 1933, 967, 1935, 968, 1937, 969, 1939, 970, 1941, 971, 1943, 972, 1945, 973, 1947, 974, 1949, 975, 1951, 976, 1953, 977, 1955, 978, 1957, 979, 1959, 980, 1961, 981, 1963, 982, 1965, 983, 1967, 984, 1969, 985, 1971, 986, 1973, 987, 1975, 988, 1977, 989, 1979, 990, 1981, 991, 1983, 992, 1985, 993, 1987, 994, 1989, 995, 1991, 996, 1993, 997, 1995, 998, 1997, 999, 1999, 1000, 2001, 1001, 2003, 1002, 2005, 1003, 2007, 1004, 2009, 1005, 2011, 1006, 2013, 1007, 2015, 1008, 2017, 1009, 2019, 1010, 2021, 1011, 2023, 1012, 2025, 1013, 2027, 1014, 2029, 1015, 2031, 1016, 2033, 1017, 2035, 1018, 2037, 1019, 2039, 1020, 2041, 1021, 2043, 1022, 2045, 1023, 2047, 1024, 2049, 1025, 2051, 1026, 2053, 1027, 2055, 1028, 2057, 1029, 2059, 1030, 2061, 1031, 2063, 1032, 2065, 1033, 2067, 1034, 2069, 1035, 2071, 1036, 2073, 1037, 2075, 1038, 2077, 1039, 2079, 1040, 2081, 1041, 2083, 1042, 2085, 1043, 2087, 1044, 2089, 1045, 2091, 1046, 2093, 1047, 2095, 1048, 2097, 1049, 2099, 1050, 2101, 1051, 2103, 1052, 2105, 1053, 2107, 1054, 2109, 1055, 2111, 1056, 2113, 1057, 2115, 1058, 2117, 1059, 2119, 1060, 2121, 1061, 2123, 1062, 2125, 1063, 2127, 1064, 2129, 1065, 2131, 1066, 2133, 1067, 2135, 1068, 2137, 1069, 2139, 1070, 2141, 1071, 2143, 1072, 2145, 1073, 2147, 1074, 2149, 1075, 2151, 1076, 2153, 1077, 2155, 1078, 2157, 1079, 2159, 1080, 2161, 1081, 2163, 1082, 2165, 1083, 2167, 1084, 2169, 1085, 2171, 1086, 2173, 1087, 2175, 1088, 2177, 1089, 2179, 1090, 2181, 1091, 2183, 1092, 2185, 1093, 2187, 1094, 2189, 1095, 2191, 1096, 2193, 1097, 2195, 1098, 2197, 1099, 2199, 1100, 2201, 1101, 2203, 1102, 2205, 1103, 2207, 1104, 2209, 1105, 2211, 1106, 2213, 1107, 2215, 1108, 2217, 1109, 2219, 1110, 2221, 1111, 2223, 1112, 2225, 1113, 2227, 1114, 2229, 1115, 2231, 1116, 2233, 1117, 2235, 1118, 2237, 1119, 2239, 1120, 2241, 1121, 2243, 1122, 2245, 1123, 2247, 1124, 2249, 1125, 2251, 1126, 2253, 1127, 2255, 1128, 2257, 1129, 2259, 1130, 2261, 1131, 2263, 1132, 2265, 1133, 2267, 1134, 2269, 1135, 2271, 1136, 2273, 1137, 2275, 0, 2277, 1138, 2279, 1139, 2281, 1140, 2283, 1141, 2285, 1142, 2287, 1143, 2289, 1144, 2291, 1145, 2293, 1146, 2295, 1147, 2297, 1148, 2299, 1149, 2301, 1150, 2303, 1151, 2305, 1152, 2307, 1153, 2309, 1154, 2311, 0, 2313, 0, 2315, 0, 2317, 0, 2319, 0, 2321, 0, 2323, 0, 2325, 0, 2327, 0, 2329, 1155, 1, 0, 43, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, 13, 13, 2, 0, 65, 65, 97, 97, 2, 0, 68, 68, 100, 100, 2, 0, 76, 76, 108, 108, 2, 0, 84, 84, 116, 116, 2, 0, 69, 69, 101, 101, 2, 0, 82, 82, 114, 114, 2, 0, 87, 87, 119, 119, 2, 0, 89, 89, 121, 121, 2, 0, 83, 83, 115, 115, 2, 0, 78, 78, 110, 110, 2, 0, 90, 90, 122, 122, 2, 0, 67, 67, 99, 99, 2, 0, 73, 73, 105, 105, 2, 0, 66, 66, 98, 98, 2, 0, 85, 85, 117, 117, 2, 0, 70, 70, 102, 102, 2, 0, 79, 79, 111, 111, 2, 0, 72, 72, 104, 104, 2, 0, 75, 75, 107, 107, 2, 0, 71, 71, 103, 103, 2, 0, 77, 77, 109, 109, 2, 0, 86, 86, 118, 118, 2, 0, 80, 80, 112, 112, 2, 0, 88, 88, 120, 120, 2, 0, 74, 74, 106, 106, 2, 0, 81, 81, 113, 113, 8, 0, 71, 71, 75, 75, 77, 77, 84, 84, 103, 103, 107, 107, 109, 109, 116, 116, 1, 0, 96, 96, 1, 0, 48, 57, 2, 0, 46, 46, 48, 57, 3, 0, 48, 58, 65, 70, 97, 102, 6, 0, 36, 36, 46, 46, 48, 57, 65, 90, 95, 95, 97, 122, 2, 0, 43, 43, 45, 45, 6, 0, 36, 36, 48, 57, 65, 90, 95, 95, 97, 122, 128, 65535, 5, 0, 36, 36, 65, 90, 95, 95, 97, 122, 128, 65535, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 92, 92, 96, 96, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 49, 13704, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 577, 1, 0, 0, 0, 0, 579, 1, 0, 0, 0, 0, 581, 1, 0, 0, 0, 0, 583, 1, 0, 0, 0, 0, 585, 1, 0, 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 0, 613, 1, 0, 0, 0, 0, 615, 1, 0, 0, 0, 0, 617, 1, 0, 0, 0, 0, 619, 1, 0, 0, 0, 0, 621, 1, 0, 0, 0, 0, 623, 1, 0, 0, 0, 0, 625, 1, 0, 0, 0, 0, 627, 1, 0, 0, 0, 0, 629, 1, 0, 0, 0, 0, 631, 1, 0, 0, 0, 0, 633, 1, 0, 0, 0, 0, 635, 1, 0, 0, 0, 0, 637, 1, 0, 0, 0, 0, 639, 1, 0, 0, 0, 0, 641, 1, 0, 0, 0, 0, 643, 1, 0, 0, 0, 0, 645, 1, 0, 0, 0, 0, 647, 1, 0, 0, 0, 0, 649, 1, 0, 0, 0, 0, 651, 1, 0, 0, 0, 0, 653, 1, 0, 0, 0, 0, 655, 1, 0, 0, 0, 0, 657, 1, 0, 0, 0, 0, 659, 1, 0, 0, 0, 0, 661, 1, 0, 0, 0, 0, 663, 1, 0, 0, 0, 0, 665, 1, 0, 0, 0, 0, 667, 1, 0, 0, 0, 0, 669, 1, 0, 0, 0, 0, 671, 1, 0, 0, 0, 0, 673, 1, 0, 0, 0, 0, 675, 1, 0, 0, 0, 0, 677, 1, 0, 0, 0, 0, 679, 1, 0, 0, 0, 0, 681, 1, 0, 0, 0, 0, 683, 1, 0, 0, 0, 0, 685, 1, 0, 0, 0, 0, 687, 1, 0, 0, 0, 0, 689, 1, 0, 0, 0, 0, 691, 1, 0, 0, 0, 0, 693, 1, 0, 0, 0, 0, 695, 1, 0, 0, 0, 0, 697, 1, 0, 0, 0, 0, 699, 1, 0, 0, 0, 0, 701, 1, 0, 0, 0, 0, 703, 1, 0, 0, 0, 0, 705, 1, 0, 0, 0, 0, 707, 1, 0, 0, 0, 0, 709, 1, 0, 0, 0, 0, 711, 1, 0, 0, 0, 0, 713, 1, 0, 0, 0, 0, 715, 1, 0, 0, 0, 0, 717, 1, 0, 0, 0, 0, 719, 1, 0, 0, 0, 0, 721, 1, 0, 0, 0, 0, 723, 1, 0, 0, 0, 0, 725, 1, 0, 0, 0, 0, 727, 1, 0, 0, 0, 0, 729, 1, 0, 0, 0, 0, 731, 1, 0, 0, 0, 0, 733, 1, 0, 0, 0, 0, 735, 1, 0, 0, 0, 0, 737, 1, 0, 0, 0, 0, 739, 1, 0, 0, 0, 0, 741, 1, 0, 0, 0, 0, 743, 1, 0, 0, 0, 0, 745, 1, 0, 0, 0, 0, 747, 1, 0, 0, 0, 0, 749, 1, 0, 0, 0, 0, 751, 1, 0, 0, 0, 0, 753, 1, 0, 0, 0, 0, 755, 1, 0, 0, 0, 0, 757, 1, 0, 0, 0, 0, 759, 1, 0, 0, 0, 0, 761, 1, 0, 0, 0, 0, 763, 1, 0, 0, 0, 0, 765, 1, 0, 0, 0, 0, 767, 1, 0, 0, 0, 0, 769, 1, 0, 0, 0, 0, 771, 1, 0, 0, 0, 0, 773, 1, 0, 0, 0, 0, 775, 1, 0, 0, 0, 0, 777, 1, 0, 0, 0, 0, 779, 1, 0, 0, 0, 0, 781, 1, 0, 0, 0, 0, 783, 1, 0, 0, 0, 0, 785, 1, 0, 0, 0, 0, 787, 1, 0, 0, 0, 0, 789, 1, 0, 0, 0, 0, 791, 1, 0, 0, 0, 0, 793, 1, 0, 0, 0, 0, 795, 1, 0, 0, 0, 0, 797, 1, 0, 0, 0, 0, 799, 1, 0, 0, 0, 0, 801, 1, 0, 0, 0, 0, 803, 1, 0, 0, 0, 0, 805, 1, 0, 0, 0, 0, 807, 1, 0, 0, 0, 0, 809, 1, 0, 0, 0, 0, 811, 1, 0, 0, 0, 0, 813, 1, 0, 0, 0, 0, 815, 1, 0, 0, 0, 0, 817, 1, 0, 0, 0, 0, 819, 1, 0, 0, 0, 0, 821, 1, 0, 0, 0, 0, 823, 1, 0, 0, 0, 0, 825, 1, 0, 0, 0, 0, 827, 1, 0, 0, 0, 0, 829, 1, 0, 0, 0, 0, 831, 1, 0, 0, 0, 0, 833, 1, 0, 0, 0, 0, 835, 1, 0, 0, 0, 0, 837, 1, 0, 0, 0, 0, 839, 1, 0, 0, 0, 0, 841, 1, 0, 0, 0, 0, 843, 1, 0, 0, 0, 0, 845, 1, 0, 0, 0, 0, 847, 1, 0, 0, 0, 0, 849, 1, 0, 0, 0, 0, 851, 1, 0, 0, 0, 0, 853, 1, 0, 0, 0, 0, 855, 1, 0, 0, 0, 0, 857, 1, 0, 0, 0, 0, 859, 1, 0, 0, 0, 0, 861, 1, 0, 0, 0, 0, 863, 1, 0, 0, 0, 0, 865, 1, 0, 0, 0, 0, 867, 1, 0, 0, 0, 0, 869, 1, 0, 0, 0, 0, 871, 1, 0, 0, 0, 0, 873, 1, 0, 0, 0, 0, 875, 1, 0, 0, 0, 0, 877, 1, 0, 0, 0, 0, 879, 1, 0, 0, 0, 0, 881, 1, 0, 0, 0, 0, 883, 1, 0, 0, 0, 0, 885, 1, 0, 0, 0, 0, 887, 1, 0, 0, 0, 0, 889, 1, 0, 0, 0, 0, 891, 1, 0, 0, 0, 0, 893, 1, 0, 0, 0, 0, 895, 1, 0, 0, 0, 0, 897, 1, 0, 0, 0, 0, 899, 1, 0, 0, 0, 0, 901, 1, 0, 0, 0, 0, 903, 1, 0, 0, 0, 0, 905, 1, 0, 0, 0, 0, 907, 1, 0, 0, 0, 0, 909, 1, 0, 0, 0, 0, 911, 1, 0, 0, 0, 0, 913, 1, 0, 0, 0, 0, 915, 1, 0, 0, 0, 0, 917, 1, 0, 0, 0, 0, 919, 1, 0, 0, 0, 0, 921, 1, 0, 0, 0, 0, 923, 1, 0, 0, 0, 0, 925, 1, 0, 0, 0, 0, 927, 1, 0, 0, 0, 0, 929, 1, 0, 0, 0, 0, 931, 1, 0, 0, 0, 0, 933, 1, 0, 0, 0, 0, 935, 1, 0, 0, 0, 0, 937, 1, 0, 0, 0, 0, 939, 1, 0, 0, 0, 0, 941, 1, 0, 0, 0, 0, 943, 1, 0, 0, 0, 0, 945, 1, 0, 0, 0, 0, 947, 1, 0, 0, 0, 0, 949, 1, 0, 0, 0, 0, 951, 1, 0, 0, 0, 0, 953, 1, 0, 0, 0, 0, 955, 1, 0, 0, 0, 0, 957, 1, 0, 0, 0, 0, 959, 1, 0, 0, 0, 0, 961, 1, 0, 0, 0, 0, 963, 1, 0, 0, 0, 0, 965, 1, 0, 0, 0, 0, 967, 1, 0, 0, 0, 0, 969, 1, 0, 0, 0, 0, 971, 1, 0, 0, 0, 0, 973, 1, 0, 0, 0, 0, 975, 1, 0, 0, 0, 0, 977, 1, 0, 0, 0, 0, 979, 1, 0, 0, 0, 0, 981, 1, 0, 0, 0, 0, 983, 1, 0, 0, 0, 0, 985, 1, 0, 0, 0, 0, 987, 1, 0, 0, 0, 0, 989, 1, 0, 0, 0, 0, 991, 1, 0, 0, 0, 0, 993, 1, 0, 0, 0, 0, 995, 1, 0, 0, 0, 0, 997, 1, 0, 0, 0, 0, 999, 1, 0, 0, 0, 0, 1001, 1, 0, 0, 0, 0, 1003, 1, 0, 0, 0, 0, 1005, 1, 0, 0, 0, 0, 1007, 1, 0, 0, 0, 0, 1009, 1, 0, 0, 0, 0, 1011, 1, 0, 0, 0, 0, 1013, 1, 0, 0, 0, 0, 1015, 1, 0, 0, 0, 0, 1017, 1, 0, 0, 0, 0, 1019, 1, 0, 0, 0, 0, 1021, 1, 0, 0, 0, 0, 1023, 1, 0, 0, 0, 0, 1025, 1, 0, 0, 0, 0, 1027, 1, 0, 0, 0, 0, 1029, 1, 0, 0, 0, 0, 1031, 1, 0, 0, 0, 0, 1033, 1, 0, 0, 0, 0, 1035, 1, 0, 0, 0, 0, 1037, 1, 0, 0, 0, 0, 1039, 1, 0, 0, 0, 0, 1041, 1, 0, 0, 0, 0, 1043, 1, 0, 0, 0, 0, 1045, 1, 0, 0, 0, 0, 1047, 1, 0, 0, 0, 0, 1049, 1, 0, 0, 0, 0, 1051, 1, 0, 0, 0, 0, 1053, 1, 0, 0, 0, 0, 1055, 1, 0, 0, 0, 0, 1057, 1, 0, 0, 0, 0, 1059, 1, 0, 0, 0, 0, 1061, 1, 0, 0, 0, 0, 1063, 1, 0, 0, 0, 0, 1065, 1, 0, 0, 0, 0, 1067, 1, 0, 0, 0, 0, 1069, 1, 0, 0, 0, 0, 1071, 1, 0, 0, 0, 0, 1073, 1, 0, 0, 0, 0, 1075, 1, 0, 0, 0, 0, 1077, 1, 0, 0, 0, 0, 1079, 1, 0, 0, 0, 0, 1081, 1, 0, 0, 0, 0, 1083, 1, 0, 0, 0, 0, 1085, 1, 0, 0, 0, 0, 1087, 1, 0, 0, 0, 0, 1089, 1, 0, 0, 0, 0, 1091, 1, 0, 0, 0, 0, 1093, 1, 0, 0, 0, 0, 1095, 1, 0, 0, 0, 0, 1097, 1, 0, 0, 0, 0, 1099, 1, 0, 0, 0, 0, 1101, 1, 0, 0, 0, 0, 1103, 1, 0, 0, 0, 0, 1105, 1, 0, 0, 0, 0, 1107, 1, 0, 0, 0, 0, 1109, 1, 0, 0, 0, 0, 1111, 1, 0, 0, 0, 0, 1113, 1, 0, 0, 0, 0, 1115, 1, 0, 0, 0, 0, 1117, 1, 0, 0, 0, 0, 1119, 1, 0, 0, 0, 0, 1121, 1, 0, 0, 0, 0, 1123, 1, 0, 0, 0, 0, 1125, 1, 0, 0, 0, 0, 1127, 1, 0, 0, 0, 0, 1129, 1, 0, 0, 0, 0, 1131, 1, 0, 0, 0, 0, 1133, 1, 0, 0, 0, 0, 1135, 1, 0, 0, 0, 0, 1137, 1, 0, 0, 0, 0, 1139, 1, 0, 0, 0, 0, 1141, 1, 0, 0, 0, 0, 1143, 1, 0, 0, 0, 0, 1145, 1, 0, 0, 0, 0, 1147, 1, 0, 0, 0, 0, 1149, 1, 0, 0, 0, 0, 1151, 1, 0, 0, 0, 0, 1153, 1, 0, 0, 0, 0, 1155, 1, 0, 0, 0, 0, 1157, 1, 0, 0, 0, 0, 1159, 1, 0, 0, 0, 0, 1161, 1, 0, 0, 0, 0, 1163, 1, 0, 0, 0, 0, 1165, 1, 0, 0, 0, 0, 1167, 1, 0, 0, 0, 0, 1169, 1, 0, 0, 0, 0, 1171, 1, 0, 0, 0, 0, 1173, 1, 0, 0, 0, 0, 1175, 1, 0, 0, 0, 0, 1177, 1, 0, 0, 0, 0, 1179, 1, 0, 0, 0, 0, 1181, 1, 0, 0, 0, 0, 1183, 1, 0, 0, 0, 0, 1185, 1, 0, 0, 0, 0, 1187, 1, 0, 0, 0, 0, 1189, 1, 0, 0, 0, 0, 1191, 1, 0, 0, 0, 0, 1193, 1, 0, 0, 0, 0, 1195, 1, 0, 0, 0, 0, 1197, 1, 0, 0, 0, 0, 1199, 1, 0, 0, 0, 0, 1201, 1, 0, 0, 0, 0, 1203, 1, 0, 0, 0, 0, 1205, 1, 0, 0, 0, 0, 1207, 1, 0, 0, 0, 0, 1209, 1, 0, 0, 0, 0, 1211, 1, 0, 0, 0, 0, 1213, 1, 0, 0, 0, 0, 1215, 1, 0, 0, 0, 0, 1217, 1, 0, 0, 0, 0, 1219, 1, 0, 0, 0, 0, 1221, 1, 0, 0, 0, 0, 1223, 1, 0, 0, 0, 0, 1225, 1, 0, 0, 0, 0, 1227, 1, 0, 0, 0, 0, 1229, 1, 0, 0, 0, 0, 1231, 1, 0, 0, 0, 0, 1233, 1, 0, 0, 0, 0, 1235, 1, 0, 0, 0, 0, 1237, 1, 0, 0, 0, 0, 1239, 1, 0, 0, 0, 0, 1241, 1, 0, 0, 0, 0, 1243, 1, 0, 0, 0, 0, 1245, 1, 0, 0, 0, 0, 1247, 1, 0, 0, 0, 0, 1249, 1, 0, 0, 0, 0, 1251, 1, 0, 0, 0, 0, 1253, 1, 0, 0, 0, 0, 1255, 1, 0, 0, 0, 0, 1257, 1, 0, 0, 0, 0, 1259, 1, 0, 0, 0, 0, 1261, 1, 0, 0, 0, 0, 1263, 1, 0, 0, 0, 0, 1265, 1, 0, 0, 0, 0, 1267, 1, 0, 0, 0, 0, 1269, 1, 0, 0, 0, 0, 1271, 1, 0, 0, 0, 0, 1273, 1, 0, 0, 0, 0, 1275, 1, 0, 0, 0, 0, 1277, 1, 0, 0, 0, 0, 1279, 1, 0, 0, 0, 0, 1281, 1, 0, 0, 0, 0, 1283, 1, 0, 0, 0, 0, 1285, 1, 0, 0, 0, 0, 1287, 1, 0, 0, 0, 0, 1289, 1, 0, 0, 0, 0, 1291, 1, 0, 0, 0, 0, 1293, 1, 0, 0, 0, 0, 1295, 1, 0, 0, 0, 0, 1297, 1, 0, 0, 0, 0, 1299, 1, 0, 0, 0, 0, 1301, 1, 0, 0, 0, 0, 1303, 1, 0, 0, 0, 0, 1305, 1, 0, 0, 0, 0, 1307, 1, 0, 0, 0, 0, 1309, 1, 0, 0, 0, 0, 1311, 1, 0, 0, 0, 0, 1313, 1, 0, 0, 0, 0, 1315, 1, 0, 0, 0, 0, 1317, 1, 0, 0, 0, 0, 1319, 1, 0, 0, 0, 0, 1321, 1, 0, 0, 0, 0, 1323, 1, 0, 0, 0, 0, 1325, 1, 0, 0, 0, 0, 1327, 1, 0, 0, 0, 0, 1329, 1, 0, 0, 0, 0, 1331, 1, 0, 0, 0, 0, 1333, 1, 0, 0, 0, 0, 1335, 1, 0, 0, 0, 0, 1337, 1, 0, 0, 0, 0, 1339, 1, 0, 0, 0, 0, 1341, 1, 0, 0, 0, 0, 1343, 1, 0, 0, 0, 0, 1345, 1, 0, 0, 0, 0, 1347, 1, 0, 0, 0, 0, 1349, 1, 0, 0, 0, 0, 1351, 1, 0, 0, 0, 0, 1353, 1, 0, 0, 0, 0, 1355, 1, 0, 0, 0, 0, 1357, 1, 0, 0, 0, 0, 1359, 1, 0, 0, 0, 0, 1361, 1, 0, 0, 0, 0, 1363, 1, 0, 0, 0, 0, 1365, 1, 0, 0, 0, 0, 1367, 1, 0, 0, 0, 0, 1369, 1, 0, 0, 0, 0, 1371, 1, 0, 0, 0, 0, 1373, 1, 0, 0, 0, 0, 1375, 1, 0, 0, 0, 0, 1377, 1, 0, 0, 0, 0, 1379, 1, 0, 0, 0, 0, 1381, 1, 0, 0, 0, 0, 1383, 1, 0, 0, 0, 0, 1385, 1, 0, 0, 0, 0, 1387, 1, 0, 0, 0, 0, 1389, 1, 0, 0, 0, 0, 1391, 1, 0, 0, 0, 0, 1393, 1, 0, 0, 0, 0, 1395, 1, 0, 0, 0, 0, 1397, 1, 0, 0, 0, 0, 1399, 1, 0, 0, 0, 0, 1401, 1, 0, 0, 0, 0, 1403, 1, 0, 0, 0, 0, 1405, 1, 0, 0, 0, 0, 1407, 1, 0, 0, 0, 0, 1409, 1, 0, 0, 0, 0, 1411, 1, 0, 0, 0, 0, 1413, 1, 0, 0, 0, 0, 1415, 1, 0, 0, 0, 0, 1417, 1, 0, 0, 0, 0, 1419, 1, 0, 0, 0, 0, 1421, 1, 0, 0, 0, 0, 1423, 1, 0, 0, 0, 0, 1425, 1, 0, 0, 0, 0, 1427, 1, 0, 0, 0, 0, 1429, 1, 0, 0, 0, 0, 1431, 1, 0, 0, 0, 0, 1433, 1, 0, 0, 0, 0, 1435, 1, 0, 0, 0, 0, 1437, 1, 0, 0, 0, 0, 1439, 1, 0, 0, 0, 0, 1441, 1, 0, 0, 0, 0, 1443, 1, 0, 0, 0, 0, 1445, 1, 0, 0, 0, 0, 1447, 1, 0, 0, 0, 0, 1449, 1, 0, 0, 0, 0, 1451, 1, 0, 0, 0, 0, 1453, 1, 0, 0, 0, 0, 1455, 1, 0, 0, 0, 0, 1457, 1, 0, 0, 0, 0, 1459, 1, 0, 0, 0, 0, 1461, 1, 0, 0, 0, 0, 1463, 1, 0, 0, 0, 0, 1465, 1, 0, 0, 0, 0, 1467, 1, 0, 0, 0, 0, 1469, 1, 0, 0, 0, 0, 1471, 1, 0, 0, 0, 0, 1473, 1, 0, 0, 0, 0, 1475, 1, 0, 0, 0, 0, 1477, 1, 0, 0, 0, 0, 1479, 1, 0, 0, 0, 0, 1481, 1, 0, 0, 0, 0, 1483, 1, 0, 0, 0, 0, 1485, 1, 0, 0, 0, 0, 1487, 1, 0, 0, 0, 0, 1489, 1, 0, 0, 0, 0, 1491, 1, 0, 0, 0, 0, 1493, 1, 0, 0, 0, 0, 1495, 1, 0, 0, 0, 0, 1497, 1, 0, 0, 0, 0, 1499, 1, 0, 0, 0, 0, 1501, 1, 0, 0, 0, 0, 1503, 1, 0, 0, 0, 0, 1505, 1, 0, 0, 0, 0, 1507, 1, 0, 0, 0, 0, 1509, 1, 0, 0, 0, 0, 1511, 1, 0, 0, 0, 0, 1513, 1, 0, 0, 0, 0, 1515, 1, 0, 0, 0, 0, 1517, 1, 0, 0, 0, 0, 1519, 1, 0, 0, 0, 0, 1521, 1, 0, 0, 0, 0, 1523, 1, 0, 0, 0, 0, 1525, 1, 0, 0, 0, 0, 1527, 1, 0, 0, 0, 0, 1529, 1, 0, 0, 0, 0, 1531, 1, 0, 0, 0, 0, 1533, 1, 0, 0, 0, 0, 1535, 1, 0, 0, 0, 0, 1537, 1, 0, 0, 0, 0, 1539, 1, 0, 0, 0, 0, 1541, 1, 0, 0, 0, 0, 1543, 1, 0, 0, 0, 0, 1545, 1, 0, 0, 0, 0, 1547, 1, 0, 0, 0, 0, 1549, 1, 0, 0, 0, 0, 1551, 1, 0, 0, 0, 0, 1553, 1, 0, 0, 0, 0, 1555, 1, 0, 0, 0, 0, 1557, 1, 0, 0, 0, 0, 1559, 1, 0, 0, 0, 0, 1561, 1, 0, 0, 0, 0, 1563, 1, 0, 0, 0, 0, 1565, 1, 0, 0, 0, 0, 1567, 1, 0, 0, 0, 0, 1569, 1, 0, 0, 0, 0, 1571, 1, 0, 0, 0, 0, 1573, 1, 0, 0, 0, 0, 1575, 1, 0, 0, 0, 0, 1577, 1, 0, 0, 0, 0, 1579, 1, 0, 0, 0, 0, 1581, 1, 0, 0, 0, 0, 1583, 1, 0, 0, 0, 0, 1585, 1, 0, 0, 0, 0, 1587, 1, 0, 0, 0, 0, 1589, 1, 0, 0, 0, 0, 1591, 1, 0, 0, 0, 0, 1593, 1, 0, 0, 0, 0, 1595, 1, 0, 0, 0, 0, 1597, 1, 0, 0, 0, 0, 1599, 1, 0, 0, 0, 0, 1601, 1, 0, 0, 0, 0, 1603, 1, 0, 0, 0, 0, 1605, 1, 0, 0, 0, 0, 1607, 1, 0, 0, 0, 0, 1609, 1, 0, 0, 0, 0, 1611, 1, 0, 0, 0, 0, 1613, 1, 0, 0, 0, 0, 1615, 1, 0, 0, 0, 0, 1617, 1, 0, 0, 0, 0, 1619, 1, 0, 0, 0, 0, 1621, 1, 0, 0, 0, 0, 1623, 1, 0, 0, 0, 0, 1625, 1, 0, 0, 0, 0, 1627, 1, 0, 0, 0, 0, 1629, 1, 0, 0, 0, 0, 1631, 1, 0, 0, 0, 0, 1633, 1, 0, 0, 0, 0, 1635, 1, 0, 0, 0, 0, 1637, 1, 0, 0, 0, 0, 1639, 1, 0, 0, 0, 0, 1641, 1, 0, 0, 0, 0, 1643, 1, 0, 0, 0, 0, 1645, 1, 0, 0, 0, 0, 1647, 1, 0, 0, 0, 0, 1649, 1, 0, 0, 0, 0, 1651, 1, 0, 0, 0, 0, 1653, 1, 0, 0, 0, 0, 1655, 1, 0, 0, 0, 0, 1657, 1, 0, 0, 0, 0, 1659, 1, 0, 0, 0, 0, 1661, 1, 0, 0, 0, 0, 1663, 1, 0, 0, 0, 0, 1665, 1, 0, 0, 0, 0, 1667, 1, 0, 0, 0, 0, 1669, 1, 0, 0, 0, 0, 1671, 1, 0, 0, 0, 0, 1673, 1, 0, 0, 0, 0, 1675, 1, 0, 0, 0, 0, 1677, 1, 0, 0, 0, 0, 1679, 1, 0, 0, 0, 0, 1681, 1, 0, 0, 0, 0, 1683, 1, 0, 0, 0, 0, 1685, 1, 0, 0, 0, 0, 1687, 1, 0, 0, 0, 0, 1689, 1, 0, 0, 0, 0, 1691, 1, 0, 0, 0, 0, 1693, 1, 0, 0, 0, 0, 1695, 1, 0, 0, 0, 0, 1697, 1, 0, 0, 0, 0, 1699, 1, 0, 0, 0, 0, 1701, 1, 0, 0, 0, 0, 1703, 1, 0, 0, 0, 0, 1705, 1, 0, 0, 0, 0, 1707, 1, 0, 0, 0, 0, 1709, 1, 0, 0, 0, 0, 1711, 1, 0, 0, 0, 0, 1713, 1, 0, 0, 0, 0, 1715, 1, 0, 0, 0, 0, 1717, 1, 0, 0, 0, 0, 1719, 1, 0, 0, 0, 0, 1721, 1, 0, 0, 0, 0, 1723, 1, 0, 0, 0, 0, 1725, 1, 0, 0, 0, 0, 1727, 1, 0, 0, 0, 0, 1729, 1, 0, 0, 0, 0, 1731, 1, 0, 0, 0, 0, 1733, 1, 0, 0, 0, 0, 1735, 1, 0, 0, 0, 0, 1737, 1, 0, 0, 0, 0, 1739, 1, 0, 0, 0, 0, 1741, 1, 0, 0, 0, 0, 1743, 1, 0, 0, 0, 0, 1745, 1, 0, 0, 0, 0, 1747, 1, 0, 0, 0, 0, 1749, 1, 0, 0, 0, 0, 1751, 1, 0, 0, 0, 0, 1753, 1, 0, 0, 0, 0, 1755, 1, 0, 0, 0, 0, 1757, 1, 0, 0, 0, 0, 1759, 1, 0, 0, 0, 0, 1761, 1, 0, 0, 0, 0, 1763, 1, 0, 0, 0, 0, 1765, 1, 0, 0, 0, 0, 1767, 1, 0, 0, 0, 0, 1769, 1, 0, 0, 0, 0, 1771, 1, 0, 0, 0, 0, 1773, 1, 0, 0, 0, 0, 1775, 1, 0, 0, 0, 0, 1777, 1, 0, 0, 0, 0, 1779, 1, 0, 0, 0, 0, 1781, 1, 0, 0, 0, 0, 1783, 1, 0, 0, 0, 0, 1785, 1, 0, 0, 0, 0, 1787, 1, 0, 0, 0, 0, 1789, 1, 0, 0, 0, 0, 1791, 1, 0, 0, 0, 0, 1793, 1, 0, 0, 0, 0, 1795, 1, 0, 0, 0, 0, 1797, 1, 0, 0, 0, 0, 1799, 1, 0, 0, 0, 0, 1801, 1, 0, 0, 0, 0, 1803, 1, 0, 0, 0, 0, 1805, 1, 0, 0, 0, 0, 1807, 1, 0, 0, 0, 0, 1809, 1, 0, 0, 0, 0, 1811, 1, 0, 0, 0, 0, 1813, 1, 0, 0, 0, 0, 1815, 1, 0, 0, 0, 0, 1817, 1, 0, 0, 0, 0, 1819, 1, 0, 0, 0, 0, 1821, 1, 0, 0, 0, 0, 1823, 1, 0, 0, 0, 0, 1825, 1, 0, 0, 0, 0, 1827, 1, 0, 0, 0, 0, 1829, 1, 0, 0, 0, 0, 1831, 1, 0, 0, 0, 0, 1833, 1, 0, 0, 0, 0, 1835, 1, 0, 0, 0, 0, 1837, 1, 0, 0, 0, 0, 1839, 1, 0, 0, 0, 0, 1841, 1, 0, 0, 0, 0, 1843, 1, 0, 0, 0, 0, 1845, 1, 0, 0, 0, 0, 1847, 1, 0, 0, 0, 0, 1849, 1, 0, 0, 0, 0, 1851, 1, 0, 0, 0, 0, 1853, 1, 0, 0, 0, 0, 1855, 1, 0, 0, 0, 0, 1857, 1, 0, 0, 0, 0, 1859, 1, 0, 0, 0, 0, 1861, 1, 0, 0, 0, 0, 1863, 1, 0, 0, 0, 0, 1865, 1, 0, 0, 0, 0, 1867, 1, 0, 0, 0, 0, 1869, 1, 0, 0, 0, 0, 1871, 1, 0, 0, 0, 0, 1873, 1, 0, 0, 0, 0, 1875, 1, 0, 0, 0, 0, 1877, 1, 0, 0, 0, 0, 1879, 1, 0, 0, 0, 0, 1881, 1, 0, 0, 0, 0, 1883, 1, 0, 0, 0, 0, 1885, 1, 0, 0, 0, 0, 1887, 1, 0, 0, 0, 0, 1889, 1, 0, 0, 0, 0, 1891, 1, 0, 0, 0, 0, 1893, 1, 0, 0, 0, 0, 1895, 1, 0, 0, 0, 0, 1897, 1, 0, 0, 0, 0, 1899, 1, 0, 0, 0, 0, 1901, 1, 0, 0, 0, 0, 1903, 1, 0, 0, 0, 0, 1905, 1, 0, 0, 0, 0, 1907, 1, 0, 0, 0, 0, 1909, 1, 0, 0, 0, 0, 1911, 1, 0, 0, 0, 0, 1913, 1, 0, 0, 0, 0, 1915, 1, 0, 0, 0, 0, 1917, 1, 0, 0, 0, 0, 1919, 1, 0, 0, 0, 0, 1921, 1, 0, 0, 0, 0, 1923, 1, 0, 0, 0, 0, 1925, 1, 0, 0, 0, 0, 1927, 1, 0, 0, 0, 0, 1929, 1, 0, 0, 0, 0, 1931, 1, 0, 0, 0, 0, 1933, 1, 0, 0, 0, 0, 1935, 1, 0, 0, 0, 0, 1937, 1, 0, 0, 0, 0, 1939, 1, 0, 0, 0, 0, 1941, 1, 0, 0, 0, 0, 1943, 1, 0, 0, 0, 0, 1945, 1, 0, 0, 0, 0, 1947, 1, 0, 0, 0, 0, 1949, 1, 0, 0, 0, 0, 1951, 1, 0, 0, 0, 0, 1953, 1, 0, 0, 0, 0, 1955, 1, 0, 0, 0, 0, 1957, 1, 0, 0, 0, 0, 1959, 1, 0, 0, 0, 0, 1961, 1, 0, 0, 0, 0, 1963, 1, 0, 0, 0, 0, 1965, 1, 0, 0, 0, 0, 1967, 1, 0, 0, 0, 0, 1969, 1, 0, 0, 0, 0, 1971, 1, 0, 0, 0, 0, 1973, 1, 0, 0, 0, 0, 1975, 1, 0, 0, 0, 0, 1977, 1, 0, 0, 0, 0, 1979, 1, 0, 0, 0, 0, 1981, 1, 0, 0, 0, 0, 1983, 1, 0, 0, 0, 0, 1985, 1, 0, 0, 0, 0, 1987, 1, 0, 0, 0, 0, 1989, 1, 0, 0, 0, 0, 1991, 1, 0, 0, 0, 0, 1993, 1, 0, 0, 0, 0, 1995, 1, 0, 0, 0, 0, 1997, 1, 0, 0, 0, 0, 1999, 1, 0, 0, 0, 0, 2001, 1, 0, 0, 0, 0, 2003, 1, 0, 0, 0, 0, 2005, 1, 0, 0, 0, 0, 2007, 1, 0, 0, 0, 0, 2009, 1, 0, 0, 0, 0, 2011, 1, 0, 0, 0, 0, 2013, 1, 0, 0, 0, 0, 2015, 1, 0, 0, 0, 0, 2017, 1, 0, 0, 0, 0, 2019, 1, 0, 0, 0, 0, 2021, 1, 0, 0, 0, 0, 2023, 1, 0, 0, 0, 0, 2025, 1, 0, 0, 0, 0, 2027, 1, 0, 0, 0, 0, 2029, 1, 0, 0, 0, 0, 2031, 1, 0, 0, 0, 0, 2033, 1, 0, 0, 0, 0, 2035, 1, 0, 0, 0, 0, 2037, 1, 0, 0, 0, 0, 2039, 1, 0, 0, 0, 0, 2041, 1, 0, 0, 0, 0, 2043, 1, 0, 0, 0, 0, 2045, 1, 0, 0, 0, 0, 2047, 1, 0, 0, 0, 0, 2049, 1, 0, 0, 0, 0, 2051, 1, 0, 0, 0, 0, 2053, 1, 0, 0, 0, 0, 2055, 1, 0, 0, 0, 0, 2057, 1, 0, 0, 0, 0, 2059, 1, 0, 0, 0, 0, 2061, 1, 0, 0, 0, 0, 2063, 1, 0, 0, 0, 0, 2065, 1, 0, 0, 0, 0, 2067, 1, 0, 0, 0, 0, 2069, 1, 0, 0, 0, 0, 2071, 1, 0, 0, 0, 0, 2073, 1, 0, 0, 0, 0, 2075, 1, 0, 0, 0, 0, 2077, 1, 0, 0, 0, 0, 2079, 1, 0, 0, 0, 0, 2081, 1, 0, 0, 0, 0, 2083, 1, 0, 0, 0, 0, 2085, 1, 0, 0, 0, 0, 2087, 1, 0, 0, 0, 0, 2089, 1, 0, 0, 0, 0, 2091, 1, 0, 0, 0, 0, 2093, 1, 0, 0, 0, 0, 2095, 1, 0, 0, 0, 0, 2097, 1, 0, 0, 0, 0, 2099, 1, 0, 0, 0, 0, 2101, 1, 0, 0, 0, 0, 2103, 1, 0, 0, 0, 0, 2105, 1, 0, 0, 0, 0, 2107, 1, 0, 0, 0, 0, 2109, 1, 0, 0, 0, 0, 2111, 1, 0, 0, 0, 0, 2113, 1, 0, 0, 0, 0, 2115, 1, 0, 0, 0, 0, 2117, 1, 0, 0, 0, 0, 2119, 1, 0, 0, 0, 0, 2121, 1, 0, 0, 0, 0, 2123, 1, 0, 0, 0, 0, 2125, 1, 0, 0, 0, 0, 2127, 1, 0, 0, 0, 0, 2129, 1, 0, 0, 0, 0, 2131, 1, 0, 0, 0, 0, 2133, 1, 0, 0, 0, 0, 2135, 1, 0, 0, 0, 0, 2137, 1, 0, 0, 0, 0, 2139, 1, 0, 0, 0, 0, 2141, 1, 0, 0, 0, 0, 2143, 1, 0, 0, 0, 0, 2145, 1, 0, 0, 0, 0, 2147, 1, 0, 0, 0, 0, 2149, 1, 0, 0, 0, 0, 2151, 1, 0, 0, 0, 0, 2153, 1, 0, 0, 0, 0, 2155, 1, 0, 0, 0, 0, 2157, 1, 0, 0, 0, 0, 2159, 1, 0, 0, 0, 0, 2161, 1, 0, 0, 0, 0, 2163, 1, 0, 0, 0, 0, 2165, 1, 0, 0, 0, 0, 2167, 1, 0, 0, 0, 0, 2169, 1, 0, 0, 0, 0, 2171, 1, 0, 0, 0, 0, 2173, 1, 0, 0, 0, 0, 2175, 1, 0, 0, 0, 0, 2177, 1, 0, 0, 0, 0, 2179, 1, 0, 0, 0, 0, 2181, 1, 0, 0, 0, 0, 2183, 1, 0, 0, 0, 0, 2185, 1, 0, 0, 0, 0, 2187, 1, 0, 0, 0, 0, 2189, 1, 0, 0, 0, 0, 2191, 1, 0, 0, 0, 0, 2193, 1, 0, 0, 0, 0, 2195, 1, 0, 0, 0, 0, 2197, 1, 0, 0, 0, 0, 2199, 1, 0, 0, 0, 0, 2201, 1, 0, 0, 0, 0, 2203, 1, 0, 0, 0, 0, 2205, 1, 0, 0, 0, 0, 2207, 1, 0, 0, 0, 0, 2209, 1, 0, 0, 0, 0, 2211, 1, 0, 0, 0, 0, 2213, 1, 0, 0, 0, 0, 2215, 1, 0, 0, 0, 0, 2217, 1, 0, 0, 0, 0, 2219, 1, 0, 0, 0, 0, 2221, 1, 0, 0, 0, 0, 2223, 1, 0, 0, 0, 0, 2225, 1, 0, 0, 0, 0, 2227, 1, 0, 0, 0, 0, 2229, 1, 0, 0, 0, 0, 2231, 1, 0, 0, 0, 0, 2233, 1, 0, 0, 0, 0, 2235, 1, 0, 0, 0, 0, 2237, 1, 0, 0, 0, 0, 2239, 1, 0, 0, 0, 0, 2241, 1, 0, 0, 0, 0, 2243, 1, 0, 0, 0, 0, 2245, 1, 0, 0, 0, 0, 2247, 1, 0, 0, 0, 0, 2249, 1, 0, 0, 0, 0, 2251, 1, 0, 0, 0, 0, 2253, 1, 0, 0, 0, 0, 2255, 1, 0, 0, 0, 0, 2257, 1, 0, 0, 0, 0, 2259, 1, 0, 0, 0, 0, 2261, 1, 0, 0, 0, 0, 2263, 1, 0, 0, 0, 0, 2265, 1, 0, 0, 0, 0, 2267, 1, 0, 0, 0, 0, 2269, 1, 0, 0, 0, 0, 2271, 1, 0, 0, 0, 0, 2273, 1, 0, 0, 0, 0, 2277, 1, 0, 0, 0, 0, 2279, 1, 0, 0, 0, 0, 2281, 1, 0, 0, 0, 0, 2283, 1, 0, 0, 0, 0, 2285, 1, 0, 0, 0, 0, 2287, 1, 0, 0, 0, 0, 2289, 1, 0, 0, 0, 0, 2291, 1, 0, 0, 0, 0, 2293, 1, 0, 0, 0, 0, 2295, 1, 0, 0, 0, 0, 2297, 1, 0, 0, 0, 0, 2299, 1, 0, 0, 0, 0, 2301, 1, 0, 0, 0, 0, 2303, 1, 0, 0, 0, 0, 2305, 1, 0, 0, 0, 0, 2307, 1, 0, 0, 0, 0, 2309, 1, 0, 0, 0, 0, 2329, 1, 0, 0, 0, 1, 2332, 1, 0, 0, 0, 3, 2338, 1, 0, 0, 0, 5, 2352, 1, 0, 0, 0, 7, 2401, 1, 0, 0, 0, 9, 2405, 1, 0, 0, 0, 11, 2409, 1, 0, 0, 0, 13, 2413, 1, 0, 0, 0, 15, 2419, 1, 0, 0, 0, 17, 2426, 1, 0, 0, 0, 19, 2434, 1, 0, 0, 0, 21, 2438, 1, 0, 0, 0, 23, 2444, 1, 0, 0, 0, 25, 2447, 1, 0, 0, 0, 27, 2451, 1, 0, 0, 0, 29, 2461, 1, 0, 0, 0, 31, 2468, 1, 0, 0, 0, 33, 2476, 1, 0, 0, 0, 35, 2481, 1, 0, 0, 0, 37, 2489, 1, 0, 0, 0, 39, 2492, 1, 0, 0, 0, 41, 2497, 1, 0, 0, 0, 43, 2505, 1, 0, 0, 0, 45, 2510, 1, 0, 0, 0, 47, 2515, 1, 0, 0, 0, 49, 2522, 1, 0, 0, 0, 51, 2532, 1, 0, 0, 0, 53, 2538, 1, 0, 0, 0, 55, 2546, 1, 0, 0, 0, 57, 2553, 1, 0, 0, 0, 59, 2563, 1, 0, 0, 0, 61, 2574, 1, 0, 0, 0, 63, 2583, 1, 0, 0, 0, 65, 2591, 1, 0, 0, 0, 67, 2598, 1, 0, 0, 0, 69, 2604, 1, 0, 0, 0, 71, 2612, 1, 0, 0, 0, 73, 2625, 1, 0, 0, 0, 75, 2638, 1, 0, 0, 0, 77, 2645, 1, 0, 0, 0, 79, 2654, 1, 0, 0, 0, 81, 2664, 1, 0, 0, 0, 83, 2672, 1, 0, 0, 0, 85, 2680, 1, 0, 0, 0, 87, 2688, 1, 0, 0, 0, 89, 2695, 1, 0, 0, 0, 91, 2700, 1, 0, 0, 0, 93, 2709, 1, 0, 0, 0, 95, 2723, 1, 0, 0, 0, 97, 2735, 1, 0, 0, 0, 99, 2744, 1, 0, 0, 0, 101, 2756, 1, 0, 0, 0, 103, 2761, 1, 0, 0, 0, 105, 2766, 1, 0, 0, 0, 107, 2771, 1, 0, 0, 0, 109, 2778, 1, 0, 0, 0, 111, 2784, 1, 0, 0, 0, 113, 2793, 1, 0, 0, 0, 115, 2801, 1, 0, 0, 0, 117, 2808, 1, 0, 0, 0, 119, 2815, 1, 0, 0, 0, 121, 2820, 1, 0, 0, 0, 123, 2828, 1, 0, 0, 0, 125, 2834, 1, 0, 0, 0, 127, 2840, 1, 0, 0, 0, 129, 2844, 1, 0, 0, 0, 131, 2850, 1, 0, 0, 0, 133, 2858, 1, 0, 0, 0, 135, 2863, 1, 0, 0, 0, 137, 2872, 1, 0, 0, 0, 139, 2882, 1, 0, 0, 0, 141, 2886, 1, 0, 0, 0, 143, 2892, 1, 0, 0, 0, 145, 2898, 1, 0, 0, 0, 147, 2905, 1, 0, 0, 0, 149, 2919, 1, 0, 0, 0, 151, 2929, 1, 0, 0, 0, 153, 2932, 1, 0, 0, 0, 155, 2939, 1, 0, 0, 0, 157, 2947, 1, 0, 0, 0, 159, 2950, 1, 0, 0, 0, 161, 2956, 1, 0, 0, 0, 163, 2963, 1, 0, 0, 0, 165, 2969, 1, 0, 0, 0, 167, 2975, 1, 0, 0, 0, 169, 2982, 1, 0, 0, 0, 171, 2991, 1, 0, 0, 0, 173, 2996, 1, 0, 0, 0, 175, 2999, 1, 0, 0, 0, 177, 3007, 1, 0, 0, 0, 179, 3012, 1, 0, 0, 0, 181, 3016, 1, 0, 0, 0, 183, 3021, 1, 0, 0, 0, 185, 3026, 1, 0, 0, 0, 187, 3034, 1, 0, 0, 0, 189, 3042, 1, 0, 0, 0, 191, 3048, 1, 0, 0, 0, 193, 3053, 1, 0, 0, 0, 195, 3058, 1, 0, 0, 0, 197, 3064, 1, 0, 0, 0, 199, 3071, 1, 0, 0, 0, 201, 3077, 1, 0, 0, 0, 203, 3082, 1, 0, 0, 0, 205, 3087, 1, 0, 0, 0, 207, 3094, 1, 0, 0, 0, 209, 3099, 1, 0, 0, 0, 211, 3112, 1, 0, 0, 0, 213, 3124, 1, 0, 0, 0, 215, 3154, 1, 0, 0, 0, 217, 3160, 1, 0, 0, 0, 219, 3169, 1, 0, 0, 0, 221, 3178, 1, 0, 0, 0, 223, 3187, 1, 0, 0, 0, 225, 3195, 1, 0, 0, 0, 227, 3199, 1, 0, 0, 0, 229, 3218, 1, 0, 0, 0, 231, 3223, 1, 0, 0, 0, 233, 3230, 1, 0, 0, 0, 235, 3233, 1, 0, 0, 0, 237, 3242, 1, 0, 0, 0, 239, 3249, 1, 0, 0, 0, 241, 3258, 1, 0, 0, 0, 243, 3269, 1, 0, 0, 0, 245, 3272, 1, 0, 0, 0, 247, 3278, 1, 0, 0, 0, 249, 3282, 1, 0, 0, 0, 251, 3288, 1, 0, 0, 0, 253, 3296, 1, 0, 0, 0, 255, 3301, 1, 0, 0, 0, 257, 3311, 1, 0, 0, 0, 259, 3319, 1, 0, 0, 0, 261, 3329, 1, 0, 0, 0, 263, 3335, 1, 0, 0, 0, 265, 3341, 1, 0, 0, 0, 267, 3346, 1, 0, 0, 0, 269, 3352, 1, 0, 0, 0, 271, 3363, 1, 0, 0, 0, 273, 3370, 1, 0, 0, 0, 275, 3378, 1, 0, 0, 0, 277, 3385, 1, 0, 0, 0, 279, 3392, 1, 0, 0, 0, 281, 3400, 1, 0, 0, 0, 283, 3408, 1, 0, 0, 0, 285, 3417, 1, 0, 0, 0, 287, 3426, 1, 0, 0, 0, 289, 3433, 1, 0, 0, 0, 291, 3440, 1, 0, 0, 0, 293, 3447, 1, 0, 0, 0, 295, 3453, 1, 0, 0, 0, 297, 3459, 1, 0, 0, 0, 299, 3466, 1, 0, 0, 0, 301, 3474, 1, 0, 0, 0, 303, 3481, 1, 0, 0, 0, 305, 3485, 1, 0, 0, 0, 307, 3495, 1, 0, 0, 0, 309, 3500, 1, 0, 0, 0, 311, 3507, 1, 0, 0, 0, 313, 3512, 1, 0, 0, 0, 315, 3520, 1, 0, 0, 0, 317, 3524, 1, 0, 0, 0, 319, 3537, 1, 0, 0, 0, 321, 3546, 1, 0, 0, 0, 323, 3557, 1, 0, 0, 0, 325, 3572, 1, 0, 0, 0, 327, 3592, 1, 0, 0, 0, 329, 3609, 1, 0, 0, 0, 331, 3613, 1, 0, 0, 0, 333, 3621, 1, 0, 0, 0, 335, 3630, 1, 0, 0, 0, 337, 3640, 1, 0, 0, 0, 339, 3654, 1, 0, 0, 0, 341, 3660, 1, 0, 0, 0, 343, 3671, 1, 0, 0, 0, 345, 3676, 1, 0, 0, 0, 347, 3679, 1, 0, 0, 0, 349, 3688, 1, 0, 0, 0, 351, 3696, 1, 0, 0, 0, 353, 3701, 1, 0, 0, 0, 355, 3706, 1, 0, 0, 0, 357, 3712, 1, 0, 0, 0, 359, 3719, 1, 0, 0, 0, 361, 3726, 1, 0, 0, 0, 363, 3735, 1, 0, 0, 0, 365, 3742, 1, 0, 0, 0, 367, 3748, 1, 0, 0, 0, 369, 3752, 1, 0, 0, 0, 371, 3758, 1, 0, 0, 0, 373, 3765, 1, 0, 0, 0, 375, 3770, 1, 0, 0, 0, 377, 3776, 1, 0, 0, 0, 379, 3782, 1, 0, 0, 0, 381, 3787, 1, 0, 0, 0, 383, 3793, 1, 0, 0, 0, 385, 3797, 1, 0, 0, 0, 387, 3806, 1, 0, 0, 0, 389, 3814, 1, 0, 0, 0, 391, 3823, 1, 0, 0, 0, 393, 3833, 1, 0, 0, 0, 395, 3843, 1, 0, 0, 0, 397, 3847, 1, 0, 0, 0, 399, 3852, 1, 0, 0, 0, 401, 3857, 1, 0, 0, 0, 403, 3862, 1, 0, 0, 0, 405, 3867, 1, 0, 0, 0, 407, 3872, 1, 0, 0, 0, 409, 3880, 1, 0, 0, 0, 411, 3887, 1, 0, 0, 0, 413, 3892, 1, 0, 0, 0, 415, 3899, 1, 0, 0, 0, 417, 3909, 1, 0, 0, 0, 419, 3915, 1, 0, 0, 0, 421, 3922, 1, 0, 0, 0, 423, 3929, 1, 0, 0, 0, 425, 3937, 1, 0, 0, 0, 427, 3941, 1, 0, 0, 0, 429, 3949, 1, 0, 0, 0, 431, 3954, 1, 0, 0, 0, 433, 3959, 1, 0, 0, 0, 435, 3969, 1, 0, 0, 0, 437, 3978, 1, 0, 0, 0, 439, 3983, 1, 0, 0, 0, 441, 3988, 1, 0, 0, 0, 443, 3996, 1, 0, 0, 0, 445, 4005, 1, 0, 0, 0, 447, 4014, 1, 0, 0, 0, 449, 4021, 1, 0, 0, 0, 451, 4031, 1, 0, 0, 0, 453, 4040, 1, 0, 0, 0, 455, 4045, 1, 0, 0, 0, 457, 4056, 1, 0, 0, 0, 459, 4061, 1, 0, 0, 0, 461, 4070, 1, 0, 0, 0, 463, 4079, 1, 0, 0, 0, 465, 4084, 1, 0, 0, 0, 467, 4095, 1, 0, 0, 0, 469, 4104, 1, 0, 0, 0, 471, 4109, 1, 0, 0, 0, 473, 4117, 1, 0, 0, 0, 475, 4124, 1, 0, 0, 0, 477, 4135, 1, 0, 0, 0, 479, 4144, 1, 0, 0, 0, 481, 4155, 1, 0, 0, 0, 483, 4166, 1, 0, 0, 0, 485, 4178, 1, 0, 0, 0, 487, 4190, 1, 0, 0, 0, 489, 4204, 1, 0, 0, 0, 491, 4223, 1, 0, 0, 0, 493, 4242, 1, 0, 0, 0, 495, 4259, 1, 0, 0, 0, 497, 4275, 1, 0, 0, 0, 499, 4286, 1, 0, 0, 0, 501, 4300, 1, 0, 0, 0, 503, 4318, 1, 0, 0, 0, 505, 4336, 1, 0, 0, 0, 507, 4350, 1, 0, 0, 0, 509, 4369, 1, 0, 0, 0, 511, 4380, 1, 0, 0, 0, 513, 4393, 1, 0, 0, 0, 515, 4405, 1, 0, 0, 0, 517, 4415, 1, 0, 0, 0, 519, 4427, 1, 0, 0, 0, 521, 4438, 1, 0, 0, 0, 523, 4455, 1, 0, 0, 0, 525, 4475, 1, 0, 0, 0, 527, 4487, 1, 0, 0, 0, 529, 4502, 1, 0, 0, 0, 531, 4516, 1, 0, 0, 0, 533, 4528, 1, 0, 0, 0, 535, 4539, 1, 0, 0, 0, 537, 4551, 1, 0, 0, 0, 539, 4564, 1, 0, 0, 0, 541, 4582, 1, 0, 0, 0, 543, 4612, 1, 0, 0, 0, 545, 4624, 1, 0, 0, 0, 547, 4633, 1, 0, 0, 0, 549, 4651, 1, 0, 0, 0, 551, 4669, 1, 0, 0, 0, 553, 4680, 1, 0, 0, 0, 555, 4690, 1, 0, 0, 0, 557, 4703, 1, 0, 0, 0, 559, 4714, 1, 0, 0, 0, 561, 4725, 1, 0, 0, 0, 563, 4732, 1, 0, 0, 0, 565, 4743, 1, 0, 0, 0, 567, 4748, 1, 0, 0, 0, 569, 4752, 1, 0, 0, 0, 571, 4760, 1, 0, 0, 0, 573, 4767, 1, 0, 0, 0, 575, 4775, 1, 0, 0, 0, 577, 4781, 1, 0, 0, 0, 579, 4791, 1, 0, 0, 0, 581, 4802, 1, 0, 0, 0, 583, 4814, 1, 0, 0, 0, 585, 4827, 1, 0, 0, 0, 587, 4831, 1, 0, 0, 0, 589, 4842, 1, 0, 0, 0, 591, 4847, 1, 0, 0, 0, 593, 4851, 1, 0, 0, 0, 595, 4855, 1, 0, 0, 0, 597, 4861, 1, 0, 0, 0, 599, 4871, 1, 0, 0, 0, 601, 4884, 1, 0, 0, 0, 603, 4889, 1, 0, 0, 0, 605, 4900, 1, 0, 0, 0, 607, 4904, 1, 0, 0, 0, 609, 4911, 1, 0, 0, 0, 611, 4922, 1, 0, 0, 0, 613, 4934, 1, 0, 0, 0, 615, 4938, 1, 0, 0, 0, 617, 4946, 1, 0, 0, 0, 619, 4955, 1, 0, 0, 0, 621, 4964, 1, 0, 0, 0, 623, 4977, 1, 0, 0, 0, 625, 4990, 1, 0, 0, 0, 627, 5008, 1, 0, 0, 0, 629, 5018, 1, 0, 0, 0, 631, 5026, 1, 0, 0, 0, 633, 5034, 1, 0, 0, 0, 635, 5043, 1, 0, 0, 0, 637, 5052, 1, 0, 0, 0, 639, 5060, 1, 0, 0, 0, 641, 5075, 1, 0, 0, 0, 643, 5079, 1, 0, 0, 0, 645, 5088, 1, 0, 0, 0, 647, 5095, 1, 0, 0, 0, 649, 5105, 1, 0, 0, 0, 651, 5113, 1, 0, 0, 0, 653, 5118, 1, 0, 0, 0, 655, 5127, 1, 0, 0, 0, 657, 5136, 1, 0, 0, 0, 659, 5150, 1, 0, 0, 0, 661, 5158, 1, 0, 0, 0, 663, 5165, 1, 0, 0, 0, 665, 5171, 1, 0, 0, 0, 667, 5181, 1, 0, 0, 0, 669, 5191, 1, 0, 0, 0, 671, 5195, 1, 0, 0, 0, 673, 5198, 1, 0, 0, 0, 675, 5206, 1, 0, 0, 0, 677, 5217, 1, 0, 0, 0, 679, 5233, 1, 0, 0, 0, 681, 5248, 1, 0, 0, 0, 683, 5263, 1, 0, 0, 0, 685, 5269, 1, 0, 0, 0, 687, 5276, 1, 0, 0, 0, 689, 5280, 1, 0, 0, 0, 691, 5286, 1, 0, 0, 0, 693, 5291, 1, 0, 0, 0, 695, 5299, 1, 0, 0, 0, 697, 5305, 1, 0, 0, 0, 699, 5311, 1, 0, 0, 0, 701, 5320, 1, 0, 0, 0, 703, 5326, 1, 0, 0, 0, 705, 5334, 1, 0, 0, 0, 707, 5342, 1, 0, 0, 0, 709, 5351, 1, 0, 0, 0, 711, 5365, 1, 0, 0, 0, 713, 5372, 1, 0, 0, 0, 715, 5385, 1, 0, 0, 0, 717, 5392, 1, 0, 0, 0, 719, 5398, 1, 0, 0, 0, 721, 5409, 1, 0, 0, 0, 723, 5418, 1, 0, 0, 0, 725, 5423, 1, 0, 0, 0, 727, 5431, 1, 0, 0, 0, 729, 5445, 1, 0, 0, 0, 731, 5457, 1, 0, 0, 0, 733, 5465, 1, 0, 0, 0, 735, 5472, 1, 0, 0, 0, 737, 5480, 1, 0, 0, 0, 739, 5491, 1, 0, 0, 0, 741, 5531, 1, 0, 0, 0, 743, 5533, 1, 0, 0, 0, 745, 5544, 1, 0, 0, 0, 747, 5552, 1, 0, 0, 0, 749, 5563, 1, 0, 0, 0, 751, 5574, 1, 0, 0, 0, 753, 5593, 1, 0, 0, 0, 755, 5611, 1, 0, 0, 0, 757, 5627, 1, 0, 0, 0, 759, 5636, 1, 0, 0, 0, 761, 5644, 1, 0, 0, 0, 763, 5657, 1, 0, 0, 0, 765, 5662, 1, 0, 0, 0, 767, 5666, 1, 0, 0, 0, 769, 5672, 1, 0, 0, 0, 771, 5684, 1, 0, 0, 0, 773, 5689, 1, 0, 0, 0, 775, 5698, 1, 0, 0, 0, 777, 5709, 1, 0, 0, 0, 779, 5722, 1, 0, 0, 0, 781, 5730, 1, 0, 0, 0, 783, 5746, 1, 0, 0, 0, 785, 5759, 1, 0, 0, 0, 787, 5769, 1, 0, 0, 0, 789, 5777, 1, 0, 0, 0, 791, 5785, 1, 0, 0, 0, 793, 5790, 1, 0, 0, 0, 795, 5793, 1, 0, 0, 0, 797, 5802, 1, 0, 0, 0, 799, 5812, 1, 0, 0, 0, 801, 5820, 1, 0, 0, 0, 803, 5827, 1, 0, 0, 0, 805, 5837, 1, 0, 0, 0, 807, 5848, 1, 0, 0, 0, 809, 5866, 1, 0, 0, 0, 811, 5870, 1, 0, 0, 0, 813, 5875, 1, 0, 0, 0, 815, 5882, 1, 0, 0, 0, 817, 5890, 1, 0, 0, 0, 819, 5896, 1, 0, 0, 0, 821, 5903, 1, 0, 0, 0, 823, 5910, 1, 0, 0, 0, 825, 5915, 1, 0, 0, 0, 827, 5921, 1, 0, 0, 0, 829, 5928, 1, 0, 0, 0, 831, 5934, 1, 0, 0, 0, 833, 5943, 1, 0, 0, 0, 835, 5953, 1, 0, 0, 0, 837, 5960, 1, 0, 0, 0, 839, 5967, 1, 0, 0, 0, 841, 5976, 1, 0, 0, 0, 843, 5988, 1, 0, 0, 0, 845, 6010, 1, 0, 0, 0, 847, 6015, 1, 0, 0, 0, 849, 6022, 1, 0, 0, 0, 851, 6029, 1, 0, 0, 0, 853, 6045, 1, 0, 0, 0, 855, 6052, 1, 0, 0, 0, 857, 6058, 1, 0, 0, 0, 859, 6064, 1, 0, 0, 0, 861, 6070, 1, 0, 0, 0, 863, 6080, 1, 0, 0, 0, 865, 6088, 1, 0, 0, 0, 867, 6094, 1, 0, 0, 0, 869, 6099, 1, 0, 0, 0, 871, 6108, 1, 0, 0, 0, 873, 6116, 1, 0, 0, 0, 875, 6123, 1, 0, 0, 0, 877, 6130, 1, 0, 0, 0, 879, 6148, 1, 0, 0, 0, 881, 6156, 1, 0, 0, 0, 883, 6161, 1, 0, 0, 0, 885, 6166, 1, 0, 0, 0, 887, 6174, 1, 0, 0, 0, 889, 6179, 1, 0, 0, 0, 891, 6185, 1, 0, 0, 0, 893, 6196, 1, 0, 0, 0, 895, 6214, 1, 0, 0, 0, 897, 6221, 1, 0, 0, 0, 899, 6231, 1, 0, 0, 0, 901, 6239, 1, 0, 0, 0, 903, 6252, 1, 0, 0, 0, 905, 6260, 1, 0, 0, 0, 907, 6274, 1, 0, 0, 0, 909, 6282, 1, 0, 0, 0, 911, 6291, 1, 0, 0, 0, 913, 6299, 1, 0, 0, 0, 915, 6309, 1, 0, 0, 0, 917, 6317, 1, 0, 0, 0, 919, 6320, 1, 0, 0, 0, 921, 6330, 1, 0, 0, 0, 923, 6334, 1, 0, 0, 0, 925, 6344, 1, 0, 0, 0, 927, 6351, 1, 0, 0, 0, 929, 6356, 1, 0, 0, 0, 931, 6371, 1, 0, 0, 0, 933, 6380, 1, 0, 0, 0, 935, 6385, 1, 0, 0, 0, 937, 6392, 1, 0, 0, 0, 939, 6397, 1, 0, 0, 0, 941, 6403, 1, 0, 0, 0, 943, 6408, 1, 0, 0, 0, 945, 6414, 1, 0, 0, 0, 947, 6422, 1, 0, 0, 0, 949, 6427, 1, 0, 0, 0, 951, 6434, 1, 0, 0, 0, 953, 6455, 1, 0, 0, 0, 955, 6476, 1, 0, 0, 0, 957, 6489, 1, 0, 0, 0, 959, 6513, 1, 0, 0, 0, 961, 6525, 1, 0, 0, 0, 963, 6541, 1, 0, 0, 0, 965, 6556, 1, 0, 0, 0, 967, 6572, 1, 0, 0, 0, 969, 6584, 1, 0, 0, 0, 971, 6603, 1, 0, 0, 0, 973, 6614, 1, 0, 0, 0, 975, 6628, 1, 0, 0, 0, 977, 6646, 1, 0, 0, 0, 979, 6662, 1, 0, 0, 0, 981, 6680, 1, 0, 0, 0, 983, 6695, 1, 0, 0, 0, 985, 6714, 1, 0, 0, 0, 987, 6729, 1, 0, 0, 0, 989, 6748, 1, 0, 0, 0, 991, 6760, 1, 0, 0, 0, 993, 6785, 1, 0, 0, 0, 995, 6806, 1, 0, 0, 0, 997, 6815, 1, 0, 0, 0, 999, 6824, 1, 0, 0, 0, 1001, 6845, 1, 0, 0, 0, 1003, 6866, 1, 0, 0, 0, 1005, 6873, 1, 0, 0, 0, 1007, 6880, 1, 0, 0, 0, 1009, 6886, 1, 0, 0, 0, 1011, 6899, 1, 0, 0, 0, 1013, 6903, 1, 0, 0, 0, 1015, 6911, 1, 0, 0, 0, 1017, 6920, 1, 0, 0, 0, 1019, 6925, 1, 0, 0, 0, 1021, 6932, 1, 0, 0, 0, 1023, 6938, 1, 0, 0, 0, 1025, 6944, 1, 0, 0, 0, 1027, 6956, 1, 0, 0, 0, 1029, 6961, 1, 0, 0, 0, 1031, 6967, 1, 0, 0, 0, 1033, 6973, 1, 0, 0, 0, 1035, 6979, 1, 0, 0, 0, 1037, 6984, 1, 0, 0, 0, 1039, 6987, 1, 0, 0, 0, 1041, 6995, 1, 0, 0, 0, 1043, 7002, 1, 0, 0, 0, 1045, 7010, 1, 0, 0, 0, 1047, 7021, 1, 0, 0, 0, 1049, 7032, 1, 0, 0, 0, 1051, 7039, 1, 0, 0, 0, 1053, 7049, 1, 0, 0, 0, 1055, 7054, 1, 0, 0, 0, 1057, 7059, 1, 0, 0, 0, 1059, 7067, 1, 0, 0, 0, 1061, 7074, 1, 0, 0, 0, 1063, 7077, 1, 0, 0, 0, 1065, 7080, 1, 0, 0, 0, 1067, 7093, 1, 0, 0, 0, 1069, 7097, 1, 0, 0, 0, 1071, 7104, 1, 0, 0, 0, 1073, 7109, 1, 0, 0, 0, 1075, 7114, 1, 0, 0, 0, 1077, 7130, 1, 0, 0, 0, 1079, 7138, 1, 0, 0, 0, 1081, 7144, 1, 0, 0, 0, 1083, 7154, 1, 0, 0, 0, 1085, 7159, 1, 0, 0, 0, 1087, 7175, 1, 0, 0, 0, 1089, 7198, 1, 0, 0, 0, 1091, 7205, 1, 0, 0, 0, 1093, 7213, 1, 0, 0, 0, 1095, 7226, 1, 0, 0, 0, 1097, 7237, 1, 0, 0, 0, 1099, 7246, 1, 0, 0, 0, 1101, 7265, 1, 0, 0, 0, 1103, 7271, 1, 0, 0, 0, 1105, 7278, 1, 0, 0, 0, 1107, 7289, 1, 0, 0, 0, 1109, 7297, 1, 0, 0, 0, 1111, 7302, 1, 0, 0, 0, 1113, 7311, 1, 0, 0, 0, 1115, 7321, 1, 0, 0, 0, 1117, 7329, 1, 0, 0, 0, 1119, 7338, 1, 0, 0, 0, 1121, 7343, 1, 0, 0, 0, 1123, 7355, 1, 0, 0, 0, 1125, 7363, 1, 0, 0, 0, 1127, 7372, 1, 0, 0, 0, 1129, 7378, 1, 0, 0, 0, 1131, 7384, 1, 0, 0, 0, 1133, 7390, 1, 0, 0, 0, 1135, 7398, 1, 0, 0, 0, 1137, 7406, 1, 0, 0, 0, 1139, 7416, 1, 0, 0, 0, 1141, 7433, 1, 0, 0, 0, 1143, 7443, 1, 0, 0, 0, 1145, 7449, 1, 0, 0, 0, 1147, 7464, 1, 0, 0, 0, 1149, 7478, 1, 0, 0, 0, 1151, 7487, 1, 0, 0, 0, 1153, 7494, 1, 0, 0, 0, 1155, 7505, 1, 0, 0, 0, 1157, 7512, 1, 0, 0, 0, 1159, 7528, 1, 0, 0, 0, 1161, 7547, 1, 0, 0, 0, 1163, 7567, 1, 0, 0, 0, 1165, 7590, 1, 0, 0, 0, 1167, 7611, 1, 0, 0, 0, 1169, 7635, 1, 0, 0, 0, 1171, 7663, 1, 0, 0, 0, 1173, 7675, 1, 0, 0, 0, 1175, 7681, 1, 0, 0, 0, 1177, 7689, 1, 0, 0, 0, 1179, 7696, 1, 0, 0, 0, 1181, 7714, 1, 0, 0, 0, 1183, 7724, 1, 0, 0, 0, 1185, 7732, 1, 0, 0, 0, 1187, 7738, 1, 0, 0, 0, 1189, 7743, 1, 0, 0, 0, 1191, 7752, 1, 0, 0, 0, 1193, 7759, 1, 0, 0, 0, 1195, 7766, 1, 0, 0, 0, 1197, 7770, 1, 0, 0, 0, 1199, 7775, 1, 0, 0, 0, 1201, 7786, 1, 0, 0, 0, 1203, 7792, 1, 0, 0, 0, 1205, 7802, 1, 0, 0, 0, 1207, 7811, 1, 0, 0, 0, 1209, 7820, 1, 0, 0, 0, 1211, 7829, 1, 0, 0, 0, 1213, 7836, 1, 0, 0, 0, 1215, 7844, 1, 0, 0, 0, 1217, 7850, 1, 0, 0, 0, 1219, 7857, 1, 0, 0, 0, 1221, 7864, 1, 0, 0, 0, 1223, 7871, 1, 0, 0, 0, 1225, 7877, 1, 0, 0, 0, 1227, 7882, 1, 0, 0, 0, 1229, 7891, 1, 0, 0, 0, 1231, 7898, 1, 0, 0, 0, 1233, 7903, 1, 0, 0, 0, 1235, 7910, 1, 0, 0, 0, 1237, 7917, 1, 0, 0, 0, 1239, 7924, 1, 0, 0, 0, 1241, 7940, 1, 0, 0, 0, 1243, 7959, 1, 0, 0, 0, 1245, 7976, 1, 0, 0, 0, 1247, 7994, 1, 0, 0, 0, 1249, 8004, 1, 0, 0, 0, 1251, 8017, 1, 0, 0, 0, 1253, 8028, 1, 0, 0, 0, 1255, 8034, 1, 0, 0, 0, 1257, 8041, 1, 0, 0, 0, 1259, 8059, 1, 0, 0, 0, 1261, 8076, 1, 0, 0, 0, 1263, 8095, 1, 0, 0, 0, 1265, 8102, 1, 0, 0, 0, 1267, 8107, 1, 0, 0, 0, 1269, 8115, 1, 0, 0, 0, 1271, 8122, 1, 0, 0, 0, 1273, 8129, 1, 0, 0, 0, 1275, 8145, 1, 0, 0, 0, 1277, 8153, 1, 0, 0, 0, 1279, 8166, 1, 0, 0, 0, 1281, 8180, 1, 0, 0, 0, 1283, 8188, 1, 0, 0, 0, 1285, 8194, 1, 0, 0, 0, 1287, 8203, 1, 0, 0, 0, 1289, 8214, 1, 0, 0, 0, 1291, 8225, 1, 0, 0, 0, 1293, 8236, 1, 0, 0, 0, 1295, 8246, 1, 0, 0, 0, 1297, 8256, 1, 0, 0, 0, 1299, 8261, 1, 0, 0, 0, 1301, 8273, 1, 0, 0, 0, 1303, 8285, 1, 0, 0, 0, 1305, 8299, 1, 0, 0, 0, 1307, 8308, 1, 0, 0, 0, 1309, 8317, 1, 0, 0, 0, 1311, 8327, 1, 0, 0, 0, 1313, 8337, 1, 0, 0, 0, 1315, 8346, 1, 0, 0, 0, 1317, 8363, 1, 0, 0, 0, 1319, 8373, 1, 0, 0, 0, 1321, 8381, 1, 0, 0, 0, 1323, 8387, 1, 0, 0, 0, 1325, 8395, 1, 0, 0, 0, 1327, 8400, 1, 0, 0, 0, 1329, 8408, 1, 0, 0, 0, 1331, 8423, 1, 0, 0, 0, 1333, 8434, 1, 0, 0, 0, 1335, 8440, 1, 0, 0, 0, 1337, 8450, 1, 0, 0, 0, 1339, 8455, 1, 0, 0, 0, 1341, 8463, 1, 0, 0, 0, 1343, 8471, 1, 0, 0, 0, 1345, 8476, 1, 0, 0, 0, 1347, 8485, 1, 0, 0, 0, 1349, 8492, 1, 0, 0, 0, 1351, 8500, 1, 0, 0, 0, 1353, 8505, 1, 0, 0, 0, 1355, 8513, 1, 0, 0, 0, 1357, 8518, 1, 0, 0, 0, 1359, 8521, 1, 0, 0, 0, 1361, 8525, 1, 0, 0, 0, 1363, 8529, 1, 0, 0, 0, 1365, 8533, 1, 0, 0, 0, 1367, 8537, 1, 0, 0, 0, 1369, 8541, 1, 0, 0, 0, 1371, 8545, 1, 0, 0, 0, 1373, 8554, 1, 0, 0, 0, 1375, 8562, 1, 0, 0, 0, 1377, 8568, 1, 0, 0, 0, 1379, 8572, 1, 0, 0, 0, 1381, 8577, 1, 0, 0, 0, 1383, 8584, 1, 0, 0, 0, 1385, 8589, 1, 0, 0, 0, 1387, 8596, 1, 0, 0, 0, 1389, 8608, 1, 0, 0, 0, 1391, 8614, 1, 0, 0, 0, 1393, 8641, 1, 0, 0, 0, 1395, 8653, 1, 0, 0, 0, 1397, 8666, 1, 0, 0, 0, 1399, 8679, 1, 0, 0, 0, 1401, 8703, 1, 0, 0, 0, 1403, 8715, 1, 0, 0, 0, 1405, 8732, 1, 0, 0, 0, 1407, 8753, 1, 0, 0, 0, 1409, 8761, 1, 0, 0, 0, 1411, 8766, 1, 0, 0, 0, 1413, 8781, 1, 0, 0, 0, 1415, 8795, 1, 0, 0, 0, 1417, 8817, 1, 0, 0, 0, 1419, 8830, 1, 0, 0, 0, 1421, 8843, 1, 0, 0, 0, 1423, 8864, 1, 0, 0, 0, 1425, 8888, 1, 0, 0, 0, 1427, 8912, 1, 0, 0, 0, 1429, 8935, 1, 0, 0, 0, 1431, 8942, 1, 0, 0, 0, 1433, 8949, 1, 0, 0, 0, 1435, 8965, 1, 0, 0, 0, 1437, 8989, 1, 0, 0, 0, 1439, 9016, 1, 0, 0, 0, 1441, 9027, 1, 0, 0, 0, 1443, 9035, 1, 0, 0, 0, 1445, 9042, 1, 0, 0, 0, 1447, 9062, 1, 0, 0, 0, 1449, 9086, 1, 0, 0, 0, 1451, 9107, 1, 0, 0, 0, 1453, 9127, 1, 0, 0, 0, 1455, 9138, 1, 0, 0, 0, 1457, 9146, 1, 0, 0, 0, 1459, 9149, 1, 0, 0, 0, 1461, 9175, 1, 0, 0, 0, 1463, 9204, 1, 0, 0, 0, 1465, 9216, 1, 0, 0, 0, 1467, 9229, 1, 0, 0, 0, 1469, 9238, 1, 0, 0, 0, 1471, 9244, 1, 0, 0, 0, 1473, 9267, 1, 0, 0, 0, 1475, 9274, 1, 0, 0, 0, 1477, 9297, 1, 0, 0, 0, 1479, 9317, 1, 0, 0, 0, 1481, 9334, 1, 0, 0, 0, 1483, 9343, 1, 0, 0, 0, 1485, 9349, 1, 0, 0, 0, 1487, 9354, 1, 0, 0, 0, 1489, 9361, 1, 0, 0, 0, 1491, 9368, 1, 0, 0, 0, 1493, 9375, 1, 0, 0, 0, 1495, 9382, 1, 0, 0, 0, 1497, 9388, 1, 0, 0, 0, 1499, 9394, 1, 0, 0, 0, 1501, 9400, 1, 0, 0, 0, 1503, 9406, 1, 0, 0, 0, 1505, 9411, 1, 0, 0, 0, 1507, 9419, 1, 0, 0, 0, 1509, 9425, 1, 0, 0, 0, 1511, 9433, 1, 0, 0, 0, 1513, 9440, 1, 0, 0, 0, 1515, 9444, 1, 0, 0, 0, 1517, 9452, 1, 0, 0, 0, 1519, 9458, 1, 0, 0, 0, 1521, 9465, 1, 0, 0, 0, 1523, 9469, 1, 0, 0, 0, 1525, 9477, 1, 0, 0, 0, 1527, 9483, 1, 0, 0, 0, 1529, 9489, 1, 0, 0, 0, 1531, 9496, 1, 0, 0, 0, 1533, 9503, 1, 0, 0, 0, 1535, 9510, 1, 0, 0, 0, 1537, 9517, 1, 0, 0, 0, 1539, 9523, 1, 0, 0, 0, 1541, 9532, 1, 0, 0, 0, 1543, 9537, 1, 0, 0, 0, 1545, 9542, 1, 0, 0, 0, 1547, 9549, 1, 0, 0, 0, 1549, 9554, 1, 0, 0, 0, 1551, 9559, 1, 0, 0, 0, 1553, 9565, 1, 0, 0, 0, 1555, 9573, 1, 0, 0, 0, 1557, 9579, 1, 0, 0, 0, 1559, 9584, 1, 0, 0, 0, 1561, 9592, 1, 0, 0, 0, 1563, 9600, 1, 0, 0, 0, 1565, 9608, 1, 0, 0, 0, 1567, 9618, 1, 0, 0, 0, 1569, 9622, 1, 0, 0, 0, 1571, 9632, 1, 0, 0, 0, 1573, 9639, 1, 0, 0, 0, 1575, 9646, 1, 0, 0, 0, 1577, 9657, 1, 0, 0, 0, 1579, 9664, 1, 0, 0, 0, 1581, 9668, 1, 0, 0, 0, 1583, 9679, 1, 0, 0, 0, 1585, 9698, 1, 0, 0, 0, 1587, 9705, 1, 0, 0, 0, 1589, 9716, 1, 0, 0, 0, 1591, 9726, 1, 0, 0, 0, 1593, 9738, 1, 0, 0, 0, 1595, 9751, 1, 0, 0, 0, 1597, 9770, 1, 0, 0, 0, 1599, 9785, 1, 0, 0, 0, 1601, 9794, 1, 0, 0, 0, 1603, 9805, 1, 0, 0, 0, 1605, 9821, 1, 0, 0, 0, 1607, 9832, 1, 0, 0, 0, 1609, 9845, 1, 0, 0, 0, 1611, 9851, 1, 0, 0, 0, 1613, 9859, 1, 0, 0, 0, 1615, 9863, 1, 0, 0, 0, 1617, 9868, 1, 0, 0, 0, 1619, 9876, 1, 0, 0, 0, 1621, 9884, 1, 0, 0, 0, 1623, 9896, 1, 0, 0, 0, 1625, 9908, 1, 0, 0, 0, 1627, 9913, 1, 0, 0, 0, 1629, 9922, 1, 0, 0, 0, 1631, 9927, 1, 0, 0, 0, 1633, 9934, 1, 0, 0, 0, 1635, 9940, 1, 0, 0, 0, 1637, 9946, 1, 0, 0, 0, 1639, 9965, 1, 0, 0, 0, 1641, 9983, 1, 0, 0, 0, 1643, 10002, 1, 0, 0, 0, 1645, 10018, 1, 0, 0, 0, 1647, 10036, 1, 0, 0, 0, 1649, 10041, 1, 0, 0, 0, 1651, 10047, 1, 0, 0, 0, 1653, 10057, 1, 0, 0, 0, 1655, 10061, 1, 0, 0, 0, 1657, 10071, 1, 0, 0, 0, 1659, 10082, 1, 0, 0, 0, 1661, 10089, 1, 0, 0, 0, 1663, 10102, 1, 0, 0, 0, 1665, 10107, 1, 0, 0, 0, 1667, 10115, 1, 0, 0, 0, 1669, 10124, 1, 0, 0, 0, 1671, 10141, 1, 0, 0, 0, 1673, 10149, 1, 0, 0, 0, 1675, 10161, 1, 0, 0, 0, 1677, 10174, 1, 0, 0, 0, 1679, 10184, 1, 0, 0, 0, 1681, 10193, 1, 0, 0, 0, 1683, 10200, 1, 0, 0, 0, 1685, 10210, 1, 0, 0, 0, 1687, 10224, 1, 0, 0, 0, 1689, 10229, 1, 0, 0, 0, 1691, 10240, 1, 0, 0, 0, 1693, 10244, 1, 0, 0, 0, 1695, 10248, 1, 0, 0, 0, 1697, 10254, 1, 0, 0, 0, 1699, 10281, 1, 0, 0, 0, 1701, 10307, 1, 0, 0, 0, 1703, 10328, 1, 0, 0, 0, 1705, 10342, 1, 0, 0, 0, 1707, 10350, 1, 0, 0, 0, 1709, 10359, 1, 0, 0, 0, 1711, 10371, 1, 0, 0, 0, 1713, 10379, 1, 0, 0, 0, 1715, 10390, 1, 0, 0, 0, 1717, 10400, 1, 0, 0, 0, 1719, 10410, 1, 0, 0, 0, 1721, 10417, 1, 0, 0, 0, 1723, 10425, 1, 0, 0, 0, 1725, 10437, 1, 0, 0, 0, 1727, 10449, 1, 0, 0, 0, 1729, 10459, 1, 0, 0, 0, 1731, 10468, 1, 0, 0, 0, 1733, 10472, 1, 0, 0, 0, 1735, 10479, 1, 0, 0, 0, 1737, 10487, 1, 0, 0, 0, 1739, 10496, 1, 0, 0, 0, 1741, 10513, 1, 0, 0, 0, 1743, 10522, 1, 0, 0, 0, 1745, 10529, 1, 0, 0, 0, 1747, 10533, 1, 0, 0, 0, 1749, 10544, 1, 0, 0, 0, 1751, 10557, 1, 0, 0, 0, 1753, 10570, 1, 0, 0, 0, 1755, 10576, 1, 0, 0, 0, 1757, 10588, 1, 0, 0, 0, 1759, 10594, 1, 0, 0, 0, 1761, 10601, 1, 0, 0, 0, 1763, 10612, 1, 0, 0, 0, 1765, 10624, 1, 0, 0, 0, 1767, 10634, 1, 0, 0, 0, 1769, 10648, 1, 0, 0, 0, 1771, 10665, 1, 0, 0, 0, 1773, 10681, 1, 0, 0, 0, 1775, 10708, 1, 0, 0, 0, 1777, 10734, 1, 0, 0, 0, 1779, 10751, 1, 0, 0, 0, 1781, 10767, 1, 0, 0, 0, 1783, 10777, 1, 0, 0, 0, 1785, 10790, 1, 0, 0, 0, 1787, 10803, 1, 0, 0, 0, 1789, 10815, 1, 0, 0, 0, 1791, 10826, 1, 0, 0, 0, 1793, 10835, 1, 0, 0, 0, 1795, 10843, 1, 0, 0, 0, 1797, 10852, 1, 0, 0, 0, 1799, 10864, 1, 0, 0, 0, 1801, 10878, 1, 0, 0, 0, 1803, 10882, 1, 0, 0, 0, 1805, 10889, 1, 0, 0, 0, 1807, 10900, 1, 0, 0, 0, 1809, 10911, 1, 0, 0, 0, 1811, 10921, 1, 0, 0, 0, 1813, 10931, 1, 0, 0, 0, 1815, 10937, 1, 0, 0, 0, 1817, 10951, 1, 0, 0, 0, 1819, 10962, 1, 0, 0, 0, 1821, 10971, 1, 0, 0, 0, 1823, 10979, 1, 0, 0, 0, 1825, 10986, 1, 0, 0, 0, 1827, 10995, 1, 0, 0, 0, 1829, 11008, 1, 0, 0, 0, 1831, 11016, 1, 0, 0, 0, 1833, 11031, 1, 0, 0, 0, 1835, 11046, 1, 0, 0, 0, 1837, 11054, 1, 0, 0, 0, 1839, 11067, 1, 0, 0, 0, 1841, 11082, 1, 0, 0, 0, 1843, 11088, 1, 0, 0, 0, 1845, 11094, 1, 0, 0, 0, 1847, 11101, 1, 0, 0, 0, 1849, 11114, 1, 0, 0, 0, 1851, 11126, 1, 0, 0, 0, 1853, 11145, 1, 0, 0, 0, 1855, 11163, 1, 0, 0, 0, 1857, 11166, 1, 0, 0, 0, 1859, 11176, 1, 0, 0, 0, 1861, 11183, 1, 0, 0, 0, 1863, 11187, 1, 0, 0, 0, 1865, 11193, 1, 0, 0, 0, 1867, 11198, 1, 0, 0, 0, 1869, 11204, 1, 0, 0, 0, 1871, 11209, 1, 0, 0, 0, 1873, 11215, 1, 0, 0, 0, 1875, 11224, 1, 0, 0, 0, 1877, 11233, 1, 0, 0, 0, 1879, 11242, 1, 0, 0, 0, 1881, 11258, 1, 0, 0, 0, 1883, 11270, 1, 0, 0, 0, 1885, 11282, 1, 0, 0, 0, 1887, 11291, 1, 0, 0, 0, 1889, 11305, 1, 0, 0, 0, 1891, 11317, 1, 0, 0, 0, 1893, 11328, 1, 0, 0, 0, 1895, 11338, 1, 0, 0, 0, 1897, 11342, 1, 0, 0, 0, 1899, 11356, 1, 0, 0, 0, 1901, 11369, 1, 0, 0, 0, 1903, 11379, 1, 0, 0, 0, 1905, 11394, 1, 0, 0, 0, 1907, 11408, 1, 0, 0, 0, 1909, 11422, 1, 0, 0, 0, 1911, 11435, 1, 0, 0, 0, 1913, 11459, 1, 0, 0, 0, 1915, 11482, 1, 0, 0, 0, 1917, 11501, 1, 0, 0, 0, 1919, 11519, 1, 0, 0, 0, 1921, 11540, 1, 0, 0, 0, 1923, 11560, 1, 0, 0, 0, 1925, 11571, 1, 0, 0, 0, 1927, 11578, 1, 0, 0, 0, 1929, 11592, 1, 0, 0, 0, 1931, 11609, 1, 0, 0, 0, 1933, 11619, 1, 0, 0, 0, 1935, 11623, 1, 0, 0, 0, 1937, 11636, 1, 0, 0, 0, 1939, 11640, 1, 0, 0, 0, 1941, 11649, 1, 0, 0, 0, 1943, 11660, 1, 0, 0, 0, 1945, 11672, 1, 0, 0, 0, 1947, 11675, 1, 0, 0, 0, 1949, 11689, 1, 0, 0, 0, 1951, 11702, 1, 0, 0, 0, 1953, 11709, 1, 0, 0, 0, 1955, 11722, 1, 0, 0, 0, 1957, 11734, 1, 0, 0, 0, 1959, 11750, 1, 0, 0, 0, 1961, 11765, 1, 0, 0, 0, 1963, 11769, 1, 0, 0, 0, 1965, 11775, 1, 0, 0, 0, 1967, 11781, 1, 0, 0, 0, 1969, 11789, 1, 0, 0, 0, 1971, 11794, 1, 0, 0, 0, 1973, 11807, 1, 0, 0, 0, 1975, 11820, 1, 0, 0, 0, 1977, 11828, 1, 0, 0, 0, 1979, 11834, 1, 0, 0, 0, 1981, 11844, 1, 0, 0, 0, 1983, 11849, 1, 0, 0, 0, 1985, 11855, 1, 0, 0, 0, 1987, 11867, 1, 0, 0, 0, 1989, 11894, 1, 0, 0, 0, 1991, 11907, 1, 0, 0, 0, 1993, 11911, 1, 0, 0, 0, 1995, 11916, 1, 0, 0, 0, 1997, 11921, 1, 0, 0, 0, 1999, 11933, 1, 0, 0, 0, 2001, 11938, 1, 0, 0, 0, 2003, 11942, 1, 0, 0, 0, 2005, 11948, 1, 0, 0, 0, 2007, 11956, 1, 0, 0, 0, 2009, 11984, 1, 0, 0, 0, 2011, 11989, 1, 0, 0, 0, 2013, 11994, 1, 0, 0, 0, 2015, 12005, 1, 0, 0, 0, 2017, 12012, 1, 0, 0, 0, 2019, 12024, 1, 0, 0, 0, 2021, 12032, 1, 0, 0, 0, 2023, 12044, 1, 0, 0, 0, 2025, 12054, 1, 0, 0, 0, 2027, 12063, 1, 0, 0, 0, 2029, 12072, 1, 0, 0, 0, 2031, 12082, 1, 0, 0, 0, 2033, 12094, 1, 0, 0, 0, 2035, 12106, 1, 0, 0, 0, 2037, 12117, 1, 0, 0, 0, 2039, 12131, 1, 0, 0, 0, 2041, 12144, 1, 0, 0, 0, 2043, 12156, 1, 0, 0, 0, 2045, 12168, 1, 0, 0, 0, 2047, 12180, 1, 0, 0, 0, 2049, 12192, 1, 0, 0, 0, 2051, 12202, 1, 0, 0, 0, 2053, 12218, 1, 0, 0, 0, 2055, 12238, 1, 0, 0, 0, 2057, 12257, 1, 0, 0, 0, 2059, 12276, 1, 0, 0, 0, 2061, 12306, 1, 0, 0, 0, 2063, 12335, 1, 0, 0, 0, 2065, 12355, 1, 0, 0, 0, 2067, 12374, 1, 0, 0, 0, 2069, 12387, 1, 0, 0, 0, 2071, 12403, 1, 0, 0, 0, 2073, 12419, 1, 0, 0, 0, 2075, 12434, 1, 0, 0, 0, 2077, 12451, 1, 0, 0, 0, 2079, 12467, 1, 0, 0, 0, 2081, 12481, 1, 0, 0, 0, 2083, 12493, 1, 0, 0, 0, 2085, 12504, 1, 0, 0, 0, 2087, 12516, 1, 0, 0, 0, 2089, 12532, 1, 0, 0, 0, 2091, 12547, 1, 0, 0, 0, 2093, 12569, 1, 0, 0, 0, 2095, 12590, 1, 0, 0, 0, 2097, 12607, 1, 0, 0, 0, 2099, 12626, 1, 0, 0, 0, 2101, 12646, 1, 0, 0, 0, 2103, 12659, 1, 0, 0, 0, 2105, 12671, 1, 0, 0, 0, 2107, 12688, 1, 0, 0, 0, 2109, 12704, 1, 0, 0, 0, 2111, 12714, 1, 0, 0, 0, 2113, 12730, 1, 0, 0, 0, 2115, 12745, 1, 0, 0, 0, 2117, 12764, 1, 0, 0, 0, 2119, 12782, 1, 0, 0, 0, 2121, 12790, 1, 0, 0, 0, 2123, 12804, 1, 0, 0, 0, 2125, 12821, 1, 0, 0, 0, 2127, 12832, 1, 0, 0, 0, 2129, 12841, 1, 0, 0, 0, 2131, 12851, 1, 0, 0, 0, 2133, 12856, 1, 0, 0, 0, 2135, 12861, 1, 0, 0, 0, 2137, 12869, 1, 0, 0, 0, 2139, 12885, 1, 0, 0, 0, 2141, 12893, 1, 0, 0, 0, 2143, 12905, 1, 0, 0, 0, 2145, 12909, 1, 0, 0, 0, 2147, 12918, 1, 0, 0, 0, 2149, 12931, 1, 0, 0, 0, 2151, 12945, 1, 0, 0, 0, 2153, 12957, 1, 0, 0, 0, 2155, 12969, 1, 0, 0, 0, 2157, 12977, 1, 0, 0, 0, 2159, 12987, 1, 0, 0, 0, 2161, 12995, 1, 0, 0, 0, 2163, 13006, 1, 0, 0, 0, 2165, 13012, 1, 0, 0, 0, 2167, 13023, 1, 0, 0, 0, 2169, 13043, 1, 0, 0, 0, 2171, 13049, 1, 0, 0, 0, 2173, 13064, 1, 0, 0, 0, 2175, 13074, 1, 0, 0, 0, 2177, 13080, 1, 0, 0, 0, 2179, 13085, 1, 0, 0, 0, 2181, 13096, 1, 0, 0, 0, 2183, 13123, 1, 0, 0, 0, 2185, 13131, 1, 0, 0, 0, 2187, 13165, 1, 0, 0, 0, 2189, 13173, 1, 0, 0, 0, 2191, 13184, 1, 0, 0, 0, 2193, 13198, 1, 0, 0, 0, 2195, 13205, 1, 0, 0, 0, 2197, 13214, 1, 0, 0, 0, 2199, 13216, 1, 0, 0, 0, 2201, 13218, 1, 0, 0, 0, 2203, 13221, 1, 0, 0, 0, 2205, 13224, 1, 0, 0, 0, 2207, 13227, 1, 0, 0, 0, 2209, 13230, 1, 0, 0, 0, 2211, 13233, 1, 0, 0, 0, 2213, 13236, 1, 0, 0, 0, 2215, 13239, 1, 0, 0, 0, 2217, 13242, 1, 0, 0, 0, 2219, 13245, 1, 0, 0, 0, 2221, 13247, 1, 0, 0, 0, 2223, 13249, 1, 0, 0, 0, 2225, 13251, 1, 0, 0, 0, 2227, 13253, 1, 0, 0, 0, 2229, 13255, 1, 0, 0, 0, 2231, 13259, 1, 0, 0, 0, 2233, 13263, 1, 0, 0, 0, 2235, 13265, 1, 0, 0, 0, 2237, 13267, 1, 0, 0, 0, 2239, 13269, 1, 0, 0, 0, 2241, 13271, 1, 0, 0, 0, 2243, 13273, 1, 0, 0, 0, 2245, 13275, 1, 0, 0, 0, 2247, 13277, 1, 0, 0, 0, 2249, 13279, 1, 0, 0, 0, 2251, 13281, 1, 0, 0, 0, 2253, 13283, 1, 0, 0, 0, 2255, 13285, 1, 0, 0, 0, 2257, 13287, 1, 0, 0, 0, 2259, 13289, 1, 0, 0, 0, 2261, 13291, 1, 0, 0, 0, 2263, 13293, 1, 0, 0, 0, 2265, 13295, 1, 0, 0, 0, 2267, 13297, 1, 0, 0, 0, 2269, 13299, 1, 0, 0, 0, 2271, 13301, 1, 0, 0, 0, 2273, 13303, 1, 0, 0, 0, 2275, 13308, 1, 0, 0, 0, 2277, 13310, 1, 0, 0, 0, 2279, 13315, 1, 0, 0, 0, 2281, 13321, 1, 0, 0, 0, 2283, 13327, 1, 0, 0, 0, 2285, 13330, 1, 0, 0, 0, 2287, 13353, 1, 0, 0, 0, 2289, 13398, 1, 0, 0, 0, 2291, 13400, 1, 0, 0, 0, 2293, 13403, 1, 0, 0, 0, 2295, 13405, 1, 0, 0, 0, 2297, 13408, 1, 0, 0, 0, 2299, 13411, 1, 0, 0, 0, 2301, 13413, 1, 0, 0, 0, 2303, 13425, 1, 0, 0, 0, 2305, 13457, 1, 0, 0, 0, 2307, 13459, 1, 0, 0, 0, 2309, 13470, 1, 0, 0, 0, 2311, 13521, 1, 0, 0, 0, 2313, 13523, 1, 0, 0, 0, 2315, 13535, 1, 0, 0, 0, 2317, 13549, 1, 0, 0, 0, 2319, 13562, 1, 0, 0, 0, 2321, 13575, 1, 0, 0, 0, 2323, 13588, 1, 0, 0, 0, 2325, 13590, 1, 0, 0, 0, 2327, 13592, 1, 0, 0, 0, 2329, 13601, 1, 0, 0, 0, 2331, 2333, 7, 0, 0, 0, 2332, 2331, 1, 0, 0, 0, 2333, 2334, 1, 0, 0, 0, 2334, 2332, 1, 0, 0, 0, 2334, 2335, 1, 0, 0, 0, 2335, 2336, 1, 0, 0, 0, 2336, 2337, 6, 0, 0, 0, 2337, 2, 1, 0, 0, 0, 2338, 2339, 5, 47, 0, 0, 2339, 2340, 5, 42, 0, 0, 2340, 2341, 5, 33, 0, 0, 2341, 2343, 1, 0, 0, 0, 2342, 2344, 9, 0, 0, 0, 2343, 2342, 1, 0, 0, 0, 2344, 2345, 1, 0, 0, 0, 2345, 2346, 1, 0, 0, 0, 2345, 2343, 1, 0, 0, 0, 2346, 2347, 1, 0, 0, 0, 2347, 2348, 5, 42, 0, 0, 2348, 2349, 5, 47, 0, 0, 2349, 2350, 1, 0, 0, 0, 2350, 2351, 6, 1, 1, 0, 2351, 4, 1, 0, 0, 0, 2352, 2353, 5, 47, 0, 0, 2353, 2354, 5, 42, 0, 0, 2354, 2358, 1, 0, 0, 0, 2355, 2357, 9, 0, 0, 0, 2356, 2355, 1, 0, 0, 0, 2357, 2360, 1, 0, 0, 0, 2358, 2359, 1, 0, 0, 0, 2358, 2356, 1, 0, 0, 0, 2359, 2361, 1, 0, 0, 0, 2360, 2358, 1, 0, 0, 0, 2361, 2362, 5, 42, 0, 0, 2362, 2363, 5, 47, 0, 0, 2363, 2364, 1, 0, 0, 0, 2364, 2365, 6, 2, 0, 0, 2365, 6, 1, 0, 0, 0, 2366, 2367, 5, 45, 0, 0, 2367, 2368, 5, 45, 0, 0, 2368, 2372, 1, 0, 0, 0, 2369, 2371, 7, 1, 0, 0, 2370, 2369, 1, 0, 0, 0, 2371, 2374, 1, 0, 0, 0, 2372, 2370, 1, 0, 0, 0, 2372, 2373, 1, 0, 0, 0, 2373, 2377, 1, 0, 0, 0, 2374, 2372, 1, 0, 0, 0, 2375, 2377, 5, 35, 0, 0, 2376, 2366, 1, 0, 0, 0, 2376, 2375, 1, 0, 0, 0, 2377, 2381, 1, 0, 0, 0, 2378, 2380, 8, 2, 0, 0, 2379, 2378, 1, 0, 0, 0, 2380, 2383, 1, 0, 0, 0, 2381, 2379, 1, 0, 0, 0, 2381, 2382, 1, 0, 0, 0, 2382, 2389, 1, 0, 0, 0, 2383, 2381, 1, 0, 0, 0, 2384, 2386, 5, 13, 0, 0, 2385, 2384, 1, 0, 0, 0, 2385, 2386, 1, 0, 0, 0, 2386, 2387, 1, 0, 0, 0, 2387, 2390, 5, 10, 0, 0, 2388, 2390, 5, 0, 0, 1, 2389, 2385, 1, 0, 0, 0, 2389, 2388, 1, 0, 0, 0, 2390, 2402, 1, 0, 0, 0, 2391, 2392, 5, 45, 0, 0, 2392, 2393, 5, 45, 0, 0, 2393, 2399, 1, 0, 0, 0, 2394, 2396, 5, 13, 0, 0, 2395, 2394, 1, 0, 0, 0, 2395, 2396, 1, 0, 0, 0, 2396, 2397, 1, 0, 0, 0, 2397, 2400, 5, 10, 0, 0, 2398, 2400, 5, 0, 0, 1, 2399, 2395, 1, 0, 0, 0, 2399, 2398, 1, 0, 0, 0, 2400, 2402, 1, 0, 0, 0, 2401, 2376, 1, 0, 0, 0, 2401, 2391, 1, 0, 0, 0, 2402, 2403, 1, 0, 0, 0, 2403, 2404, 6, 3, 0, 0, 2404, 8, 1, 0, 0, 0, 2405, 2406, 7, 3, 0, 0, 2406, 2407, 7, 4, 0, 0, 2407, 2408, 7, 4, 0, 0, 2408, 10, 1, 0, 0, 0, 2409, 2410, 7, 3, 0, 0, 2410, 2411, 7, 5, 0, 0, 2411, 2412, 7, 5, 0, 0, 2412, 12, 1, 0, 0, 0, 2413, 2414, 7, 3, 0, 0, 2414, 2415, 7, 5, 0, 0, 2415, 2416, 7, 6, 0, 0, 2416, 2417, 7, 7, 0, 0, 2417, 2418, 7, 8, 0, 0, 2418, 14, 1, 0, 0, 0, 2419, 2420, 7, 3, 0, 0, 2420, 2421, 7, 5, 0, 0, 2421, 2422, 7, 9, 0, 0, 2422, 2423, 7, 3, 0, 0, 2423, 2424, 7, 10, 0, 0, 2424, 2425, 7, 11, 0, 0, 2425, 16, 1, 0, 0, 0, 2426, 2427, 7, 3, 0, 0, 2427, 2428, 7, 12, 0, 0, 2428, 2429, 7, 3, 0, 0, 2429, 2430, 7, 5, 0, 0, 2430, 2431, 7, 10, 0, 0, 2431, 2432, 7, 13, 0, 0, 2432, 2433, 7, 7, 0, 0, 2433, 18, 1, 0, 0, 0, 2434, 2435, 7, 3, 0, 0, 2435, 2436, 7, 12, 0, 0, 2436, 2437, 7, 4, 0, 0, 2437, 20, 1, 0, 0, 0, 2438, 2439, 7, 3, 0, 0, 2439, 2440, 7, 8, 0, 0, 2440, 2441, 7, 8, 0, 0, 2441, 2442, 7, 3, 0, 0, 2442, 2443, 7, 10, 0, 0, 2443, 22, 1, 0, 0, 0, 2444, 2445, 7, 3, 0, 0, 2445, 2446, 7, 11, 0, 0, 2446, 24, 1, 0, 0, 0, 2447, 2448, 7, 3, 0, 0, 2448, 2449, 7, 11, 0, 0, 2449, 2450, 7, 14, 0, 0, 2450, 26, 1, 0, 0, 0, 2451, 2452, 7, 3, 0, 0, 2452, 2453, 7, 6, 0, 0, 2453, 2454, 7, 6, 0, 0, 2454, 2455, 7, 8, 0, 0, 2455, 2456, 7, 15, 0, 0, 2456, 2457, 7, 16, 0, 0, 2457, 2458, 7, 17, 0, 0, 2458, 2459, 7, 6, 0, 0, 2459, 2460, 7, 7, 0, 0, 2460, 28, 1, 0, 0, 0, 2461, 2462, 7, 16, 0, 0, 2462, 2463, 7, 7, 0, 0, 2463, 2464, 7, 18, 0, 0, 2464, 2465, 7, 19, 0, 0, 2465, 2466, 7, 8, 0, 0, 2466, 2467, 7, 7, 0, 0, 2467, 30, 1, 0, 0, 0, 2468, 2469, 7, 16, 0, 0, 2469, 2470, 7, 7, 0, 0, 2470, 2471, 7, 6, 0, 0, 2471, 2472, 7, 9, 0, 0, 2472, 2473, 7, 7, 0, 0, 2473, 2474, 7, 7, 0, 0, 2474, 2475, 7, 12, 0, 0, 2475, 32, 1, 0, 0, 0, 2476, 2477, 7, 16, 0, 0, 2477, 2478, 7, 19, 0, 0, 2478, 2479, 7, 6, 0, 0, 2479, 2480, 7, 20, 0, 0, 2480, 34, 1, 0, 0, 0, 2481, 2482, 7, 16, 0, 0, 2482, 2483, 7, 17, 0, 0, 2483, 2484, 7, 14, 0, 0, 2484, 2485, 7, 21, 0, 0, 2485, 2486, 7, 7, 0, 0, 2486, 2487, 7, 6, 0, 0, 2487, 2488, 7, 11, 0, 0, 2488, 36, 1, 0, 0, 0, 2489, 2490, 7, 16, 0, 0, 2490, 2491, 7, 10, 0, 0, 2491, 38, 1, 0, 0, 0, 2492, 2493, 7, 14, 0, 0, 2493, 2494, 7, 3, 0, 0, 2494, 2495, 7, 5, 0, 0, 2495, 2496, 7, 5, 0, 0, 2496, 40, 1, 0, 0, 0, 2497, 2498, 7, 14, 0, 0, 2498, 2499, 7, 3, 0, 0, 2499, 2500, 7, 11, 0, 0, 2500, 2501, 7, 14, 0, 0, 2501, 2502, 7, 3, 0, 0, 2502, 2503, 7, 4, 0, 0, 2503, 2504, 7, 7, 0, 0, 2504, 42, 1, 0, 0, 0, 2505, 2506, 7, 14, 0, 0, 2506, 2507, 7, 3, 0, 0, 2507, 2508, 7, 11, 0, 0, 2508, 2509, 7, 7, 0, 0, 2509, 44, 1, 0, 0, 0, 2510, 2511, 7, 14, 0, 0, 2511, 2512, 7, 3, 0, 0, 2512, 2513, 7, 11, 0, 0, 2513, 2514, 7, 6, 0, 0, 2514, 46, 1, 0, 0, 0, 2515, 2516, 7, 14, 0, 0, 2516, 2517, 7, 20, 0, 0, 2517, 2518, 7, 3, 0, 0, 2518, 2519, 7, 12, 0, 0, 2519, 2520, 7, 22, 0, 0, 2520, 2521, 7, 7, 0, 0, 2521, 48, 1, 0, 0, 0, 2522, 2523, 7, 14, 0, 0, 2523, 2524, 7, 20, 0, 0, 2524, 2525, 7, 3, 0, 0, 2525, 2526, 7, 8, 0, 0, 2526, 2527, 7, 3, 0, 0, 2527, 2528, 7, 14, 0, 0, 2528, 2529, 7, 6, 0, 0, 2529, 2530, 7, 7, 0, 0, 2530, 2531, 7, 8, 0, 0, 2531, 50, 1, 0, 0, 0, 2532, 2533, 7, 14, 0, 0, 2533, 2534, 7, 20, 0, 0, 2534, 2535, 7, 7, 0, 0, 2535, 2536, 7, 14, 0, 0, 2536, 2537, 7, 21, 0, 0, 2537, 52, 1, 0, 0, 0, 2538, 2539, 7, 14, 0, 0, 2539, 2540, 7, 19, 0, 0, 2540, 2541, 7, 5, 0, 0, 2541, 2542, 7, 5, 0, 0, 2542, 2543, 7, 3, 0, 0, 2543, 2544, 7, 6, 0, 0, 2544, 2545, 7, 7, 0, 0, 2545, 54, 1, 0, 0, 0, 2546, 2547, 7, 14, 0, 0, 2547, 2548, 7, 19, 0, 0, 2548, 2549, 7, 5, 0, 0, 2549, 2550, 7, 17, 0, 0, 2550, 2551, 7, 23, 0, 0, 2551, 2552, 7, 12, 0, 0, 2552, 56, 1, 0, 0, 0, 2553, 2554, 7, 14, 0, 0, 2554, 2555, 7, 19, 0, 0, 2555, 2556, 7, 12, 0, 0, 2556, 2557, 7, 4, 0, 0, 2557, 2558, 7, 15, 0, 0, 2558, 2559, 7, 6, 0, 0, 2559, 2560, 7, 15, 0, 0, 2560, 2561, 7, 19, 0, 0, 2561, 2562, 7, 12, 0, 0, 2562, 58, 1, 0, 0, 0, 2563, 2564, 7, 14, 0, 0, 2564, 2565, 7, 19, 0, 0, 2565, 2566, 7, 12, 0, 0, 2566, 2567, 7, 11, 0, 0, 2567, 2568, 7, 6, 0, 0, 2568, 2569, 7, 8, 0, 0, 2569, 2570, 7, 3, 0, 0, 2570, 2571, 7, 15, 0, 0, 2571, 2572, 7, 12, 0, 0, 2572, 2573, 7, 6, 0, 0, 2573, 60, 1, 0, 0, 0, 2574, 2575, 7, 14, 0, 0, 2575, 2576, 7, 19, 0, 0, 2576, 2577, 7, 12, 0, 0, 2577, 2578, 7, 6, 0, 0, 2578, 2579, 7, 15, 0, 0, 2579, 2580, 7, 12, 0, 0, 2580, 2581, 7, 17, 0, 0, 2581, 2582, 7, 7, 0, 0, 2582, 62, 1, 0, 0, 0, 2583, 2584, 7, 14, 0, 0, 2584, 2585, 7, 19, 0, 0, 2585, 2586, 7, 12, 0, 0, 2586, 2587, 7, 24, 0, 0, 2587, 2588, 7, 7, 0, 0, 2588, 2589, 7, 8, 0, 0, 2589, 2590, 7, 6, 0, 0, 2590, 64, 1, 0, 0, 0, 2591, 2592, 7, 14, 0, 0, 2592, 2593, 7, 8, 0, 0, 2593, 2594, 7, 7, 0, 0, 2594, 2595, 7, 3, 0, 0, 2595, 2596, 7, 6, 0, 0, 2596, 2597, 7, 7, 0, 0, 2597, 66, 1, 0, 0, 0, 2598, 2599, 7, 14, 0, 0, 2599, 2600, 7, 8, 0, 0, 2600, 2601, 7, 19, 0, 0, 2601, 2602, 7, 11, 0, 0, 2602, 2603, 7, 11, 0, 0, 2603, 68, 1, 0, 0, 0, 2604, 2605, 7, 14, 0, 0, 2605, 2606, 7, 17, 0, 0, 2606, 2607, 7, 8, 0, 0, 2607, 2608, 7, 8, 0, 0, 2608, 2609, 7, 7, 0, 0, 2609, 2610, 7, 12, 0, 0, 2610, 2611, 7, 6, 0, 0, 2611, 70, 1, 0, 0, 0, 2612, 2613, 7, 14, 0, 0, 2613, 2614, 7, 17, 0, 0, 2614, 2615, 7, 8, 0, 0, 2615, 2616, 7, 8, 0, 0, 2616, 2617, 7, 7, 0, 0, 2617, 2618, 7, 12, 0, 0, 2618, 2619, 7, 6, 0, 0, 2619, 2620, 5, 95, 0, 0, 2620, 2621, 7, 8, 0, 0, 2621, 2622, 7, 19, 0, 0, 2622, 2623, 7, 5, 0, 0, 2623, 2624, 7, 7, 0, 0, 2624, 72, 1, 0, 0, 0, 2625, 2626, 7, 14, 0, 0, 2626, 2627, 7, 17, 0, 0, 2627, 2628, 7, 8, 0, 0, 2628, 2629, 7, 8, 0, 0, 2629, 2630, 7, 7, 0, 0, 2630, 2631, 7, 12, 0, 0, 2631, 2632, 7, 6, 0, 0, 2632, 2633, 5, 95, 0, 0, 2633, 2634, 7, 17, 0, 0, 2634, 2635, 7, 11, 0, 0, 2635, 2636, 7, 7, 0, 0, 2636, 2637, 7, 8, 0, 0, 2637, 74, 1, 0, 0, 0, 2638, 2639, 7, 14, 0, 0, 2639, 2640, 7, 17, 0, 0, 2640, 2641, 7, 8, 0, 0, 2641, 2642, 7, 11, 0, 0, 2642, 2643, 7, 19, 0, 0, 2643, 2644, 7, 8, 0, 0, 2644, 76, 1, 0, 0, 0, 2645, 2646, 7, 4, 0, 0, 2646, 2647, 7, 3, 0, 0, 2647, 2648, 7, 6, 0, 0, 2648, 2649, 7, 3, 0, 0, 2649, 2650, 7, 16, 0, 0, 2650, 2651, 7, 3, 0, 0, 2651, 2652, 7, 11, 0, 0, 2652, 2653, 7, 7, 0, 0, 2653, 78, 1, 0, 0, 0, 2654, 2655, 7, 4, 0, 0, 2655, 2656, 7, 3, 0, 0, 2656, 2657, 7, 6, 0, 0, 2657, 2658, 7, 3, 0, 0, 2658, 2659, 7, 16, 0, 0, 2659, 2660, 7, 3, 0, 0, 2660, 2661, 7, 11, 0, 0, 2661, 2662, 7, 7, 0, 0, 2662, 2663, 7, 11, 0, 0, 2663, 80, 1, 0, 0, 0, 2664, 2665, 7, 4, 0, 0, 2665, 2666, 7, 7, 0, 0, 2666, 2667, 7, 14, 0, 0, 2667, 2668, 7, 5, 0, 0, 2668, 2669, 7, 3, 0, 0, 2669, 2670, 7, 8, 0, 0, 2670, 2671, 7, 7, 0, 0, 2671, 82, 1, 0, 0, 0, 2672, 2673, 7, 4, 0, 0, 2673, 2674, 7, 7, 0, 0, 2674, 2675, 7, 18, 0, 0, 2675, 2676, 7, 3, 0, 0, 2676, 2677, 7, 17, 0, 0, 2677, 2678, 7, 5, 0, 0, 2678, 2679, 7, 6, 0, 0, 2679, 84, 1, 0, 0, 0, 2680, 2681, 7, 4, 0, 0, 2681, 2682, 7, 7, 0, 0, 2682, 2683, 7, 5, 0, 0, 2683, 2684, 7, 3, 0, 0, 2684, 2685, 7, 10, 0, 0, 2685, 2686, 7, 7, 0, 0, 2686, 2687, 7, 4, 0, 0, 2687, 86, 1, 0, 0, 0, 2688, 2689, 7, 4, 0, 0, 2689, 2690, 7, 7, 0, 0, 2690, 2691, 7, 5, 0, 0, 2691, 2692, 7, 7, 0, 0, 2692, 2693, 7, 6, 0, 0, 2693, 2694, 7, 7, 0, 0, 2694, 88, 1, 0, 0, 0, 2695, 2696, 7, 4, 0, 0, 2696, 2697, 7, 7, 0, 0, 2697, 2698, 7, 11, 0, 0, 2698, 2699, 7, 14, 0, 0, 2699, 90, 1, 0, 0, 0, 2700, 2701, 7, 4, 0, 0, 2701, 2702, 7, 7, 0, 0, 2702, 2703, 7, 11, 0, 0, 2703, 2704, 7, 14, 0, 0, 2704, 2705, 7, 8, 0, 0, 2705, 2706, 7, 15, 0, 0, 2706, 2707, 7, 16, 0, 0, 2707, 2708, 7, 7, 0, 0, 2708, 92, 1, 0, 0, 0, 2709, 2710, 7, 4, 0, 0, 2710, 2711, 7, 7, 0, 0, 2711, 2712, 7, 6, 0, 0, 2712, 2713, 7, 7, 0, 0, 2713, 2714, 7, 8, 0, 0, 2714, 2715, 7, 23, 0, 0, 2715, 2716, 7, 15, 0, 0, 2716, 2717, 7, 12, 0, 0, 2717, 2718, 7, 15, 0, 0, 2718, 2719, 7, 11, 0, 0, 2719, 2720, 7, 6, 0, 0, 2720, 2721, 7, 15, 0, 0, 2721, 2722, 7, 14, 0, 0, 2722, 94, 1, 0, 0, 0, 2723, 2724, 7, 4, 0, 0, 2724, 2725, 7, 15, 0, 0, 2725, 2726, 7, 3, 0, 0, 2726, 2727, 7, 22, 0, 0, 2727, 2728, 7, 12, 0, 0, 2728, 2729, 7, 19, 0, 0, 2729, 2730, 7, 11, 0, 0, 2730, 2731, 7, 6, 0, 0, 2731, 2732, 7, 15, 0, 0, 2732, 2733, 7, 14, 0, 0, 2733, 2734, 7, 11, 0, 0, 2734, 96, 1, 0, 0, 0, 2735, 2736, 7, 4, 0, 0, 2736, 2737, 7, 15, 0, 0, 2737, 2738, 7, 11, 0, 0, 2738, 2739, 7, 6, 0, 0, 2739, 2740, 7, 15, 0, 0, 2740, 2741, 7, 12, 0, 0, 2741, 2742, 7, 14, 0, 0, 2742, 2743, 7, 6, 0, 0, 2743, 98, 1, 0, 0, 0, 2744, 2745, 7, 4, 0, 0, 2745, 2746, 7, 15, 0, 0, 2746, 2747, 7, 11, 0, 0, 2747, 2748, 7, 6, 0, 0, 2748, 2749, 7, 15, 0, 0, 2749, 2750, 7, 12, 0, 0, 2750, 2751, 7, 14, 0, 0, 2751, 2752, 7, 6, 0, 0, 2752, 2753, 7, 8, 0, 0, 2753, 2754, 7, 19, 0, 0, 2754, 2755, 7, 9, 0, 0, 2755, 100, 1, 0, 0, 0, 2756, 2757, 7, 4, 0, 0, 2757, 2758, 7, 8, 0, 0, 2758, 2759, 7, 19, 0, 0, 2759, 2760, 7, 25, 0, 0, 2760, 102, 1, 0, 0, 0, 2761, 2762, 7, 7, 0, 0, 2762, 2763, 7, 3, 0, 0, 2763, 2764, 7, 14, 0, 0, 2764, 2765, 7, 20, 0, 0, 2765, 104, 1, 0, 0, 0, 2766, 2767, 7, 7, 0, 0, 2767, 2768, 7, 5, 0, 0, 2768, 2769, 7, 11, 0, 0, 2769, 2770, 7, 7, 0, 0, 2770, 106, 1, 0, 0, 0, 2771, 2772, 7, 7, 0, 0, 2772, 2773, 7, 5, 0, 0, 2773, 2774, 7, 11, 0, 0, 2774, 2775, 7, 7, 0, 0, 2775, 2776, 7, 15, 0, 0, 2776, 2777, 7, 18, 0, 0, 2777, 108, 1, 0, 0, 0, 2778, 2779, 7, 7, 0, 0, 2779, 2780, 7, 23, 0, 0, 2780, 2781, 7, 25, 0, 0, 2781, 2782, 7, 6, 0, 0, 2782, 2783, 7, 10, 0, 0, 2783, 110, 1, 0, 0, 0, 2784, 2785, 7, 7, 0, 0, 2785, 2786, 7, 12, 0, 0, 2786, 2787, 7, 14, 0, 0, 2787, 2788, 7, 5, 0, 0, 2788, 2789, 7, 19, 0, 0, 2789, 2790, 7, 11, 0, 0, 2790, 2791, 7, 7, 0, 0, 2791, 2792, 7, 4, 0, 0, 2792, 112, 1, 0, 0, 0, 2793, 2794, 7, 7, 0, 0, 2794, 2795, 7, 11, 0, 0, 2795, 2796, 7, 14, 0, 0, 2796, 2797, 7, 3, 0, 0, 2797, 2798, 7, 25, 0, 0, 2798, 2799, 7, 7, 0, 0, 2799, 2800, 7, 4, 0, 0, 2800, 114, 1, 0, 0, 0, 2801, 2802, 7, 7, 0, 0, 2802, 2803, 7, 26, 0, 0, 2803, 2804, 7, 14, 0, 0, 2804, 2805, 7, 7, 0, 0, 2805, 2806, 7, 25, 0, 0, 2806, 2807, 7, 6, 0, 0, 2807, 116, 1, 0, 0, 0, 2808, 2809, 7, 7, 0, 0, 2809, 2810, 7, 26, 0, 0, 2810, 2811, 7, 15, 0, 0, 2811, 2812, 7, 11, 0, 0, 2812, 2813, 7, 6, 0, 0, 2813, 2814, 7, 11, 0, 0, 2814, 118, 1, 0, 0, 0, 2815, 2816, 7, 7, 0, 0, 2816, 2817, 7, 26, 0, 0, 2817, 2818, 7, 15, 0, 0, 2818, 2819, 7, 6, 0, 0, 2819, 120, 1, 0, 0, 0, 2820, 2821, 7, 7, 0, 0, 2821, 2822, 7, 26, 0, 0, 2822, 2823, 7, 25, 0, 0, 2823, 2824, 7, 5, 0, 0, 2824, 2825, 7, 3, 0, 0, 2825, 2826, 7, 15, 0, 0, 2826, 2827, 7, 12, 0, 0, 2827, 122, 1, 0, 0, 0, 2828, 2829, 7, 18, 0, 0, 2829, 2830, 7, 3, 0, 0, 2830, 2831, 7, 5, 0, 0, 2831, 2832, 7, 11, 0, 0, 2832, 2833, 7, 7, 0, 0, 2833, 124, 1, 0, 0, 0, 2834, 2835, 7, 18, 0, 0, 2835, 2836, 7, 7, 0, 0, 2836, 2837, 7, 6, 0, 0, 2837, 2838, 7, 14, 0, 0, 2838, 2839, 7, 20, 0, 0, 2839, 126, 1, 0, 0, 0, 2840, 2841, 7, 18, 0, 0, 2841, 2842, 7, 19, 0, 0, 2842, 2843, 7, 8, 0, 0, 2843, 128, 1, 0, 0, 0, 2844, 2845, 7, 18, 0, 0, 2845, 2846, 7, 19, 0, 0, 2846, 2847, 7, 8, 0, 0, 2847, 2848, 7, 14, 0, 0, 2848, 2849, 7, 7, 0, 0, 2849, 130, 1, 0, 0, 0, 2850, 2851, 7, 18, 0, 0, 2851, 2852, 7, 19, 0, 0, 2852, 2853, 7, 8, 0, 0, 2853, 2854, 7, 7, 0, 0, 2854, 2855, 7, 15, 0, 0, 2855, 2856, 7, 22, 0, 0, 2856, 2857, 7, 12, 0, 0, 2857, 132, 1, 0, 0, 0, 2858, 2859, 7, 18, 0, 0, 2859, 2860, 7, 8, 0, 0, 2860, 2861, 7, 19, 0, 0, 2861, 2862, 7, 23, 0, 0, 2862, 134, 1, 0, 0, 0, 2863, 2864, 7, 18, 0, 0, 2864, 2865, 7, 17, 0, 0, 2865, 2866, 7, 5, 0, 0, 2866, 2867, 7, 5, 0, 0, 2867, 2868, 7, 6, 0, 0, 2868, 2869, 7, 7, 0, 0, 2869, 2870, 7, 26, 0, 0, 2870, 2871, 7, 6, 0, 0, 2871, 136, 1, 0, 0, 0, 2872, 2873, 7, 22, 0, 0, 2873, 2874, 7, 7, 0, 0, 2874, 2875, 7, 12, 0, 0, 2875, 2876, 7, 7, 0, 0, 2876, 2877, 7, 8, 0, 0, 2877, 2878, 7, 3, 0, 0, 2878, 2879, 7, 6, 0, 0, 2879, 2880, 7, 7, 0, 0, 2880, 2881, 7, 4, 0, 0, 2881, 138, 1, 0, 0, 0, 2882, 2883, 7, 22, 0, 0, 2883, 2884, 7, 7, 0, 0, 2884, 2885, 7, 6, 0, 0, 2885, 140, 1, 0, 0, 0, 2886, 2887, 7, 22, 0, 0, 2887, 2888, 7, 8, 0, 0, 2888, 2889, 7, 3, 0, 0, 2889, 2890, 7, 12, 0, 0, 2890, 2891, 7, 6, 0, 0, 2891, 142, 1, 0, 0, 0, 2892, 2893, 7, 22, 0, 0, 2893, 2894, 7, 8, 0, 0, 2894, 2895, 7, 19, 0, 0, 2895, 2896, 7, 17, 0, 0, 2896, 2897, 7, 25, 0, 0, 2897, 144, 1, 0, 0, 0, 2898, 2899, 7, 20, 0, 0, 2899, 2900, 7, 3, 0, 0, 2900, 2901, 7, 24, 0, 0, 2901, 2902, 7, 15, 0, 0, 2902, 2903, 7, 12, 0, 0, 2903, 2904, 7, 22, 0, 0, 2904, 146, 1, 0, 0, 0, 2905, 2906, 7, 20, 0, 0, 2906, 2907, 7, 15, 0, 0, 2907, 2908, 7, 22, 0, 0, 2908, 2909, 7, 20, 0, 0, 2909, 2910, 5, 95, 0, 0, 2910, 2911, 7, 25, 0, 0, 2911, 2912, 7, 8, 0, 0, 2912, 2913, 7, 15, 0, 0, 2913, 2914, 7, 19, 0, 0, 2914, 2915, 7, 8, 0, 0, 2915, 2916, 7, 15, 0, 0, 2916, 2917, 7, 6, 0, 0, 2917, 2918, 7, 10, 0, 0, 2918, 148, 1, 0, 0, 0, 2919, 2920, 7, 20, 0, 0, 2920, 2921, 7, 15, 0, 0, 2921, 2922, 7, 11, 0, 0, 2922, 2923, 7, 6, 0, 0, 2923, 2924, 7, 19, 0, 0, 2924, 2925, 7, 22, 0, 0, 2925, 2926, 7, 8, 0, 0, 2926, 2927, 7, 3, 0, 0, 2927, 2928, 7, 23, 0, 0, 2928, 150, 1, 0, 0, 0, 2929, 2930, 7, 15, 0, 0, 2930, 2931, 7, 18, 0, 0, 2931, 152, 1, 0, 0, 0, 2932, 2933, 7, 15, 0, 0, 2933, 2934, 7, 22, 0, 0, 2934, 2935, 7, 12, 0, 0, 2935, 2936, 7, 19, 0, 0, 2936, 2937, 7, 8, 0, 0, 2937, 2938, 7, 7, 0, 0, 2938, 154, 1, 0, 0, 0, 2939, 2940, 7, 15, 0, 0, 2940, 2941, 7, 22, 0, 0, 2941, 2942, 7, 12, 0, 0, 2942, 2943, 7, 19, 0, 0, 2943, 2944, 7, 8, 0, 0, 2944, 2945, 7, 7, 0, 0, 2945, 2946, 7, 4, 0, 0, 2946, 156, 1, 0, 0, 0, 2947, 2948, 7, 15, 0, 0, 2948, 2949, 7, 12, 0, 0, 2949, 158, 1, 0, 0, 0, 2950, 2951, 7, 15, 0, 0, 2951, 2952, 7, 12, 0, 0, 2952, 2953, 7, 4, 0, 0, 2953, 2954, 7, 7, 0, 0, 2954, 2955, 7, 26, 0, 0, 2955, 160, 1, 0, 0, 0, 2956, 2957, 7, 15, 0, 0, 2957, 2958, 7, 12, 0, 0, 2958, 2959, 7, 18, 0, 0, 2959, 2960, 7, 15, 0, 0, 2960, 2961, 7, 5, 0, 0, 2961, 2962, 7, 7, 0, 0, 2962, 162, 1, 0, 0, 0, 2963, 2964, 7, 15, 0, 0, 2964, 2965, 7, 12, 0, 0, 2965, 2966, 7, 12, 0, 0, 2966, 2967, 7, 7, 0, 0, 2967, 2968, 7, 8, 0, 0, 2968, 164, 1, 0, 0, 0, 2969, 2970, 7, 15, 0, 0, 2970, 2971, 7, 12, 0, 0, 2971, 2972, 7, 19, 0, 0, 2972, 2973, 7, 17, 0, 0, 2973, 2974, 7, 6, 0, 0, 2974, 166, 1, 0, 0, 0, 2975, 2976, 7, 15, 0, 0, 2976, 2977, 7, 12, 0, 0, 2977, 2978, 7, 11, 0, 0, 2978, 2979, 7, 7, 0, 0, 2979, 2980, 7, 8, 0, 0, 2980, 2981, 7, 6, 0, 0, 2981, 168, 1, 0, 0, 0, 2982, 2983, 7, 15, 0, 0, 2983, 2984, 7, 12, 0, 0, 2984, 2985, 7, 6, 0, 0, 2985, 2986, 7, 7, 0, 0, 2986, 2987, 7, 8, 0, 0, 2987, 2988, 7, 24, 0, 0, 2988, 2989, 7, 3, 0, 0, 2989, 2990, 7, 5, 0, 0, 2990, 170, 1, 0, 0, 0, 2991, 2992, 7, 15, 0, 0, 2992, 2993, 7, 12, 0, 0, 2993, 2994, 7, 6, 0, 0, 2994, 2995, 7, 19, 0, 0, 2995, 172, 1, 0, 0, 0, 2996, 2997, 7, 15, 0, 0, 2997, 2998, 7, 11, 0, 0, 2998, 174, 1, 0, 0, 0, 2999, 3000, 7, 15, 0, 0, 3000, 3001, 7, 6, 0, 0, 3001, 3002, 7, 7, 0, 0, 3002, 3003, 7, 8, 0, 0, 3003, 3004, 7, 3, 0, 0, 3004, 3005, 7, 6, 0, 0, 3005, 3006, 7, 7, 0, 0, 3006, 176, 1, 0, 0, 0, 3007, 3008, 7, 27, 0, 0, 3008, 3009, 7, 19, 0, 0, 3009, 3010, 7, 15, 0, 0, 3010, 3011, 7, 12, 0, 0, 3011, 178, 1, 0, 0, 0, 3012, 3013, 7, 21, 0, 0, 3013, 3014, 7, 7, 0, 0, 3014, 3015, 7, 10, 0, 0, 3015, 180, 1, 0, 0, 0, 3016, 3017, 7, 21, 0, 0, 3017, 3018, 7, 7, 0, 0, 3018, 3019, 7, 10, 0, 0, 3019, 3020, 7, 11, 0, 0, 3020, 182, 1, 0, 0, 0, 3021, 3022, 7, 21, 0, 0, 3022, 3023, 7, 15, 0, 0, 3023, 3024, 7, 5, 0, 0, 3024, 3025, 7, 5, 0, 0, 3025, 184, 1, 0, 0, 0, 3026, 3027, 7, 5, 0, 0, 3027, 3028, 7, 3, 0, 0, 3028, 3029, 7, 6, 0, 0, 3029, 3030, 7, 7, 0, 0, 3030, 3031, 7, 8, 0, 0, 3031, 3032, 7, 3, 0, 0, 3032, 3033, 7, 5, 0, 0, 3033, 186, 1, 0, 0, 0, 3034, 3035, 7, 5, 0, 0, 3035, 3036, 7, 7, 0, 0, 3036, 3037, 7, 3, 0, 0, 3037, 3038, 7, 4, 0, 0, 3038, 3039, 7, 15, 0, 0, 3039, 3040, 7, 12, 0, 0, 3040, 3041, 7, 22, 0, 0, 3041, 188, 1, 0, 0, 0, 3042, 3043, 7, 5, 0, 0, 3043, 3044, 7, 7, 0, 0, 3044, 3045, 7, 3, 0, 0, 3045, 3046, 7, 24, 0, 0, 3046, 3047, 7, 7, 0, 0, 3047, 190, 1, 0, 0, 0, 3048, 3049, 7, 5, 0, 0, 3049, 3050, 7, 7, 0, 0, 3050, 3051, 7, 18, 0, 0, 3051, 3052, 7, 6, 0, 0, 3052, 192, 1, 0, 0, 0, 3053, 3054, 7, 5, 0, 0, 3054, 3055, 7, 15, 0, 0, 3055, 3056, 7, 21, 0, 0, 3056, 3057, 7, 7, 0, 0, 3057, 194, 1, 0, 0, 0, 3058, 3059, 7, 5, 0, 0, 3059, 3060, 7, 15, 0, 0, 3060, 3061, 7, 23, 0, 0, 3061, 3062, 7, 15, 0, 0, 3062, 3063, 7, 6, 0, 0, 3063, 196, 1, 0, 0, 0, 3064, 3065, 7, 5, 0, 0, 3065, 3066, 7, 15, 0, 0, 3066, 3067, 7, 12, 0, 0, 3067, 3068, 7, 7, 0, 0, 3068, 3069, 7, 3, 0, 0, 3069, 3070, 7, 8, 0, 0, 3070, 198, 1, 0, 0, 0, 3071, 3072, 7, 5, 0, 0, 3072, 3073, 7, 15, 0, 0, 3073, 3074, 7, 12, 0, 0, 3074, 3075, 7, 7, 0, 0, 3075, 3076, 7, 11, 0, 0, 3076, 200, 1, 0, 0, 0, 3077, 3078, 7, 5, 0, 0, 3078, 3079, 7, 19, 0, 0, 3079, 3080, 7, 3, 0, 0, 3080, 3081, 7, 4, 0, 0, 3081, 202, 1, 0, 0, 0, 3082, 3083, 7, 5, 0, 0, 3083, 3084, 7, 19, 0, 0, 3084, 3085, 7, 14, 0, 0, 3085, 3086, 7, 21, 0, 0, 3086, 204, 1, 0, 0, 0, 3087, 3088, 7, 5, 0, 0, 3088, 3089, 7, 19, 0, 0, 3089, 3090, 7, 14, 0, 0, 3090, 3091, 7, 21, 0, 0, 3091, 3092, 7, 7, 0, 0, 3092, 3093, 7, 4, 0, 0, 3093, 206, 1, 0, 0, 0, 3094, 3095, 7, 5, 0, 0, 3095, 3096, 7, 19, 0, 0, 3096, 3097, 7, 19, 0, 0, 3097, 3098, 7, 25, 0, 0, 3098, 208, 1, 0, 0, 0, 3099, 3100, 7, 5, 0, 0, 3100, 3101, 7, 19, 0, 0, 3101, 3102, 7, 9, 0, 0, 3102, 3103, 5, 95, 0, 0, 3103, 3104, 7, 25, 0, 0, 3104, 3105, 7, 8, 0, 0, 3105, 3106, 7, 15, 0, 0, 3106, 3107, 7, 19, 0, 0, 3107, 3108, 7, 8, 0, 0, 3108, 3109, 7, 15, 0, 0, 3109, 3110, 7, 6, 0, 0, 3110, 3111, 7, 10, 0, 0, 3111, 210, 1, 0, 0, 0, 3112, 3113, 7, 23, 0, 0, 3113, 3114, 7, 3, 0, 0, 3114, 3115, 7, 11, 0, 0, 3115, 3116, 7, 6, 0, 0, 3116, 3117, 7, 7, 0, 0, 3117, 3118, 7, 8, 0, 0, 3118, 3119, 5, 95, 0, 0, 3119, 3120, 7, 16, 0, 0, 3120, 3121, 7, 15, 0, 0, 3121, 3122, 7, 12, 0, 0, 3122, 3123, 7, 4, 0, 0, 3123, 212, 1, 0, 0, 0, 3124, 3125, 7, 23, 0, 0, 3125, 3126, 7, 3, 0, 0, 3126, 3127, 7, 11, 0, 0, 3127, 3128, 7, 6, 0, 0, 3128, 3129, 7, 7, 0, 0, 3129, 3130, 7, 8, 0, 0, 3130, 3131, 5, 95, 0, 0, 3131, 3132, 7, 11, 0, 0, 3132, 3133, 7, 11, 0, 0, 3133, 3134, 7, 5, 0, 0, 3134, 3135, 5, 95, 0, 0, 3135, 3136, 7, 24, 0, 0, 3136, 3137, 7, 7, 0, 0, 3137, 3138, 7, 8, 0, 0, 3138, 3139, 7, 15, 0, 0, 3139, 3140, 7, 18, 0, 0, 3140, 3141, 7, 10, 0, 0, 3141, 3142, 5, 95, 0, 0, 3142, 3143, 7, 11, 0, 0, 3143, 3144, 7, 7, 0, 0, 3144, 3145, 7, 8, 0, 0, 3145, 3146, 7, 24, 0, 0, 3146, 3147, 7, 7, 0, 0, 3147, 3148, 7, 8, 0, 0, 3148, 3149, 5, 95, 0, 0, 3149, 3150, 7, 14, 0, 0, 3150, 3151, 7, 7, 0, 0, 3151, 3152, 7, 8, 0, 0, 3152, 3153, 7, 6, 0, 0, 3153, 214, 1, 0, 0, 0, 3154, 3155, 7, 23, 0, 0, 3155, 3156, 7, 3, 0, 0, 3156, 3157, 7, 6, 0, 0, 3157, 3158, 7, 14, 0, 0, 3158, 3159, 7, 20, 0, 0, 3159, 216, 1, 0, 0, 0, 3160, 3161, 7, 23, 0, 0, 3161, 3162, 7, 3, 0, 0, 3162, 3163, 7, 26, 0, 0, 3163, 3164, 7, 24, 0, 0, 3164, 3165, 7, 3, 0, 0, 3165, 3166, 7, 5, 0, 0, 3166, 3167, 7, 17, 0, 0, 3167, 3168, 7, 7, 0, 0, 3168, 218, 1, 0, 0, 0, 3169, 3170, 7, 23, 0, 0, 3170, 3171, 7, 15, 0, 0, 3171, 3172, 7, 12, 0, 0, 3172, 3173, 7, 24, 0, 0, 3173, 3174, 7, 3, 0, 0, 3174, 3175, 7, 5, 0, 0, 3175, 3176, 7, 17, 0, 0, 3176, 3177, 7, 7, 0, 0, 3177, 220, 1, 0, 0, 0, 3178, 3179, 7, 23, 0, 0, 3179, 3180, 7, 19, 0, 0, 3180, 3181, 7, 4, 0, 0, 3181, 3182, 7, 15, 0, 0, 3182, 3183, 7, 18, 0, 0, 3183, 3184, 7, 15, 0, 0, 3184, 3185, 7, 7, 0, 0, 3185, 3186, 7, 11, 0, 0, 3186, 222, 1, 0, 0, 0, 3187, 3188, 7, 12, 0, 0, 3188, 3189, 7, 3, 0, 0, 3189, 3190, 7, 6, 0, 0, 3190, 3191, 7, 17, 0, 0, 3191, 3192, 7, 8, 0, 0, 3192, 3193, 7, 3, 0, 0, 3193, 3194, 7, 5, 0, 0, 3194, 224, 1, 0, 0, 0, 3195, 3196, 7, 12, 0, 0, 3196, 3197, 7, 19, 0, 0, 3197, 3198, 7, 6, 0, 0, 3198, 226, 1, 0, 0, 0, 3199, 3200, 7, 12, 0, 0, 3200, 3201, 7, 19, 0, 0, 3201, 3202, 5, 95, 0, 0, 3202, 3203, 7, 9, 0, 0, 3203, 3204, 7, 8, 0, 0, 3204, 3205, 7, 15, 0, 0, 3205, 3206, 7, 6, 0, 0, 3206, 3207, 7, 7, 0, 0, 3207, 3208, 5, 95, 0, 0, 3208, 3209, 7, 6, 0, 0, 3209, 3210, 7, 19, 0, 0, 3210, 3211, 5, 95, 0, 0, 3211, 3212, 7, 16, 0, 0, 3212, 3213, 7, 15, 0, 0, 3213, 3214, 7, 12, 0, 0, 3214, 3215, 7, 5, 0, 0, 3215, 3216, 7, 19, 0, 0, 3216, 3217, 7, 22, 0, 0, 3217, 228, 1, 0, 0, 0, 3218, 3219, 7, 12, 0, 0, 3219, 3220, 7, 17, 0, 0, 3220, 3221, 7, 5, 0, 0, 3221, 3222, 7, 5, 0, 0, 3222, 230, 1, 0, 0, 0, 3223, 3224, 7, 12, 0, 0, 3224, 3225, 7, 17, 0, 0, 3225, 3226, 7, 23, 0, 0, 3226, 3227, 7, 16, 0, 0, 3227, 3228, 7, 7, 0, 0, 3228, 3229, 7, 8, 0, 0, 3229, 232, 1, 0, 0, 0, 3230, 3231, 7, 19, 0, 0, 3231, 3232, 7, 12, 0, 0, 3232, 234, 1, 0, 0, 0, 3233, 3234, 7, 19, 0, 0, 3234, 3235, 7, 25, 0, 0, 3235, 3236, 7, 6, 0, 0, 3236, 3237, 7, 15, 0, 0, 3237, 3238, 7, 23, 0, 0, 3238, 3239, 7, 15, 0, 0, 3239, 3240, 7, 13, 0, 0, 3240, 3241, 7, 7, 0, 0, 3241, 236, 1, 0, 0, 0, 3242, 3243, 7, 19, 0, 0, 3243, 3244, 7, 25, 0, 0, 3244, 3245, 7, 6, 0, 0, 3245, 3246, 7, 15, 0, 0, 3246, 3247, 7, 19, 0, 0, 3247, 3248, 7, 12, 0, 0, 3248, 238, 1, 0, 0, 0, 3249, 3250, 7, 19, 0, 0, 3250, 3251, 7, 25, 0, 0, 3251, 3252, 7, 6, 0, 0, 3252, 3253, 7, 15, 0, 0, 3253, 3254, 7, 19, 0, 0, 3254, 3255, 7, 12, 0, 0, 3255, 3256, 7, 3, 0, 0, 3256, 3257, 7, 5, 0, 0, 3257, 240, 1, 0, 0, 0, 3258, 3259, 7, 19, 0, 0, 3259, 3260, 7, 25, 0, 0, 3260, 3261, 7, 6, 0, 0, 3261, 3262, 7, 15, 0, 0, 3262, 3263, 7, 19, 0, 0, 3263, 3264, 7, 12, 0, 0, 3264, 3265, 7, 3, 0, 0, 3265, 3266, 7, 5, 0, 0, 3266, 3267, 7, 5, 0, 0, 3267, 3268, 7, 10, 0, 0, 3268, 242, 1, 0, 0, 0, 3269, 3270, 7, 19, 0, 0, 3270, 3271, 7, 8, 0, 0, 3271, 244, 1, 0, 0, 0, 3272, 3273, 7, 19, 0, 0, 3273, 3274, 7, 8, 0, 0, 3274, 3275, 7, 4, 0, 0, 3275, 3276, 7, 7, 0, 0, 3276, 3277, 7, 8, 0, 0, 3277, 246, 1, 0, 0, 0, 3278, 3279, 7, 19, 0, 0, 3279, 3280, 7, 17, 0, 0, 3280, 3281, 7, 6, 0, 0, 3281, 248, 1, 0, 0, 0, 3282, 3283, 7, 19, 0, 0, 3283, 3284, 7, 17, 0, 0, 3284, 3285, 7, 6, 0, 0, 3285, 3286, 7, 7, 0, 0, 3286, 3287, 7, 8, 0, 0, 3287, 250, 1, 0, 0, 0, 3288, 3289, 7, 19, 0, 0, 3289, 3290, 7, 17, 0, 0, 3290, 3291, 7, 6, 0, 0, 3291, 3292, 7, 18, 0, 0, 3292, 3293, 7, 15, 0, 0, 3293, 3294, 7, 5, 0, 0, 3294, 3295, 7, 7, 0, 0, 3295, 252, 1, 0, 0, 0, 3296, 3297, 7, 19, 0, 0, 3297, 3298, 7, 24, 0, 0, 3298, 3299, 7, 7, 0, 0, 3299, 3300, 7, 8, 0, 0, 3300, 254, 1, 0, 0, 0, 3301, 3302, 7, 25, 0, 0, 3302, 3303, 7, 3, 0, 0, 3303, 3304, 7, 8, 0, 0, 3304, 3305, 7, 6, 0, 0, 3305, 3306, 7, 15, 0, 0, 3306, 3307, 7, 6, 0, 0, 3307, 3308, 7, 15, 0, 0, 3308, 3309, 7, 19, 0, 0, 3309, 3310, 7, 12, 0, 0, 3310, 256, 1, 0, 0, 0, 3311, 3312, 7, 25, 0, 0, 3312, 3313, 7, 8, 0, 0, 3313, 3314, 7, 15, 0, 0, 3314, 3315, 7, 23, 0, 0, 3315, 3316, 7, 3, 0, 0, 3316, 3317, 7, 8, 0, 0, 3317, 3318, 7, 10, 0, 0, 3318, 258, 1, 0, 0, 0, 3319, 3320, 7, 25, 0, 0, 3320, 3321, 7, 8, 0, 0, 3321, 3322, 7, 19, 0, 0, 3322, 3323, 7, 14, 0, 0, 3323, 3324, 7, 7, 0, 0, 3324, 3325, 7, 4, 0, 0, 3325, 3326, 7, 17, 0, 0, 3326, 3327, 7, 8, 0, 0, 3327, 3328, 7, 7, 0, 0, 3328, 260, 1, 0, 0, 0, 3329, 3330, 7, 25, 0, 0, 3330, 3331, 7, 17, 0, 0, 3331, 3332, 7, 8, 0, 0, 3332, 3333, 7, 22, 0, 0, 3333, 3334, 7, 7, 0, 0, 3334, 262, 1, 0, 0, 0, 3335, 3336, 7, 8, 0, 0, 3336, 3337, 7, 3, 0, 0, 3337, 3338, 7, 12, 0, 0, 3338, 3339, 7, 22, 0, 0, 3339, 3340, 7, 7, 0, 0, 3340, 264, 1, 0, 0, 0, 3341, 3342, 7, 8, 0, 0, 3342, 3343, 7, 7, 0, 0, 3343, 3344, 7, 3, 0, 0, 3344, 3345, 7, 4, 0, 0, 3345, 266, 1, 0, 0, 0, 3346, 3347, 7, 8, 0, 0, 3347, 3348, 7, 7, 0, 0, 3348, 3349, 7, 3, 0, 0, 3349, 3350, 7, 4, 0, 0, 3350, 3351, 7, 11, 0, 0, 3351, 268, 1, 0, 0, 0, 3352, 3353, 7, 8, 0, 0, 3353, 3354, 7, 7, 0, 0, 3354, 3355, 7, 18, 0, 0, 3355, 3356, 7, 7, 0, 0, 3356, 3357, 7, 8, 0, 0, 3357, 3358, 7, 7, 0, 0, 3358, 3359, 7, 12, 0, 0, 3359, 3360, 7, 14, 0, 0, 3360, 3361, 7, 7, 0, 0, 3361, 3362, 7, 11, 0, 0, 3362, 270, 1, 0, 0, 0, 3363, 3364, 7, 8, 0, 0, 3364, 3365, 7, 7, 0, 0, 3365, 3366, 7, 22, 0, 0, 3366, 3367, 7, 7, 0, 0, 3367, 3368, 7, 26, 0, 0, 3368, 3369, 7, 25, 0, 0, 3369, 272, 1, 0, 0, 0, 3370, 3371, 7, 8, 0, 0, 3371, 3372, 7, 7, 0, 0, 3372, 3373, 7, 5, 0, 0, 3373, 3374, 7, 7, 0, 0, 3374, 3375, 7, 3, 0, 0, 3375, 3376, 7, 11, 0, 0, 3376, 3377, 7, 7, 0, 0, 3377, 274, 1, 0, 0, 0, 3378, 3379, 7, 8, 0, 0, 3379, 3380, 7, 7, 0, 0, 3380, 3381, 7, 12, 0, 0, 3381, 3382, 7, 3, 0, 0, 3382, 3383, 7, 23, 0, 0, 3383, 3384, 7, 7, 0, 0, 3384, 276, 1, 0, 0, 0, 3385, 3386, 7, 8, 0, 0, 3386, 3387, 7, 7, 0, 0, 3387, 3388, 7, 25, 0, 0, 3388, 3389, 7, 7, 0, 0, 3389, 3390, 7, 3, 0, 0, 3390, 3391, 7, 6, 0, 0, 3391, 278, 1, 0, 0, 0, 3392, 3393, 7, 8, 0, 0, 3393, 3394, 7, 7, 0, 0, 3394, 3395, 7, 25, 0, 0, 3395, 3396, 7, 5, 0, 0, 3396, 3397, 7, 3, 0, 0, 3397, 3398, 7, 14, 0, 0, 3398, 3399, 7, 7, 0, 0, 3399, 280, 1, 0, 0, 0, 3400, 3401, 7, 8, 0, 0, 3401, 3402, 7, 7, 0, 0, 3402, 3403, 7, 28, 0, 0, 3403, 3404, 7, 17, 0, 0, 3404, 3405, 7, 15, 0, 0, 3405, 3406, 7, 8, 0, 0, 3406, 3407, 7, 7, 0, 0, 3407, 282, 1, 0, 0, 0, 3408, 3409, 7, 8, 0, 0, 3409, 3410, 7, 7, 0, 0, 3410, 3411, 7, 11, 0, 0, 3411, 3412, 7, 15, 0, 0, 3412, 3413, 7, 22, 0, 0, 3413, 3414, 7, 12, 0, 0, 3414, 3415, 7, 3, 0, 0, 3415, 3416, 7, 5, 0, 0, 3416, 284, 1, 0, 0, 0, 3417, 3418, 7, 8, 0, 0, 3418, 3419, 7, 7, 0, 0, 3419, 3420, 7, 11, 0, 0, 3420, 3421, 7, 6, 0, 0, 3421, 3422, 7, 8, 0, 0, 3422, 3423, 7, 15, 0, 0, 3423, 3424, 7, 14, 0, 0, 3424, 3425, 7, 6, 0, 0, 3425, 286, 1, 0, 0, 0, 3426, 3427, 7, 8, 0, 0, 3427, 3428, 7, 7, 0, 0, 3428, 3429, 7, 6, 0, 0, 3429, 3430, 7, 3, 0, 0, 3430, 3431, 7, 15, 0, 0, 3431, 3432, 7, 12, 0, 0, 3432, 288, 1, 0, 0, 0, 3433, 3434, 7, 8, 0, 0, 3434, 3435, 7, 7, 0, 0, 3435, 3436, 7, 6, 0, 0, 3436, 3437, 7, 17, 0, 0, 3437, 3438, 7, 8, 0, 0, 3438, 3439, 7, 12, 0, 0, 3439, 290, 1, 0, 0, 0, 3440, 3441, 7, 8, 0, 0, 3441, 3442, 7, 7, 0, 0, 3442, 3443, 7, 24, 0, 0, 3443, 3444, 7, 19, 0, 0, 3444, 3445, 7, 21, 0, 0, 3445, 3446, 7, 7, 0, 0, 3446, 292, 1, 0, 0, 0, 3447, 3448, 7, 8, 0, 0, 3448, 3449, 7, 15, 0, 0, 3449, 3450, 7, 22, 0, 0, 3450, 3451, 7, 20, 0, 0, 3451, 3452, 7, 6, 0, 0, 3452, 294, 1, 0, 0, 0, 3453, 3454, 7, 8, 0, 0, 3454, 3455, 7, 5, 0, 0, 3455, 3456, 7, 15, 0, 0, 3456, 3457, 7, 21, 0, 0, 3457, 3458, 7, 7, 0, 0, 3458, 296, 1, 0, 0, 0, 3459, 3460, 7, 11, 0, 0, 3460, 3461, 7, 14, 0, 0, 3461, 3462, 7, 20, 0, 0, 3462, 3463, 7, 7, 0, 0, 3463, 3464, 7, 23, 0, 0, 3464, 3465, 7, 3, 0, 0, 3465, 298, 1, 0, 0, 0, 3466, 3467, 7, 11, 0, 0, 3467, 3468, 7, 14, 0, 0, 3468, 3469, 7, 20, 0, 0, 3469, 3470, 7, 7, 0, 0, 3470, 3471, 7, 23, 0, 0, 3471, 3472, 7, 3, 0, 0, 3472, 3473, 7, 11, 0, 0, 3473, 300, 1, 0, 0, 0, 3474, 3475, 7, 11, 0, 0, 3475, 3476, 7, 7, 0, 0, 3476, 3477, 7, 5, 0, 0, 3477, 3478, 7, 7, 0, 0, 3478, 3479, 7, 14, 0, 0, 3479, 3480, 7, 6, 0, 0, 3480, 302, 1, 0, 0, 0, 3481, 3482, 7, 11, 0, 0, 3482, 3483, 7, 7, 0, 0, 3483, 3484, 7, 6, 0, 0, 3484, 304, 1, 0, 0, 0, 3485, 3486, 7, 11, 0, 0, 3486, 3487, 7, 7, 0, 0, 3487, 3488, 7, 25, 0, 0, 3488, 3489, 7, 3, 0, 0, 3489, 3490, 7, 8, 0, 0, 3490, 3491, 7, 3, 0, 0, 3491, 3492, 7, 6, 0, 0, 3492, 3493, 7, 19, 0, 0, 3493, 3494, 7, 8, 0, 0, 3494, 306, 1, 0, 0, 0, 3495, 3496, 7, 11, 0, 0, 3496, 3497, 7, 20, 0, 0, 3497, 3498, 7, 19, 0, 0, 3498, 3499, 7, 9, 0, 0, 3499, 308, 1, 0, 0, 0, 3500, 3501, 7, 11, 0, 0, 3501, 3502, 7, 15, 0, 0, 3502, 3503, 7, 22, 0, 0, 3503, 3504, 7, 12, 0, 0, 3504, 3505, 7, 3, 0, 0, 3505, 3506, 7, 5, 0, 0, 3506, 310, 1, 0, 0, 0, 3507, 3508, 7, 11, 0, 0, 3508, 3509, 7, 21, 0, 0, 3509, 3510, 7, 15, 0, 0, 3510, 3511, 7, 25, 0, 0, 3511, 312, 1, 0, 0, 0, 3512, 3513, 7, 11, 0, 0, 3513, 3514, 7, 25, 0, 0, 3514, 3515, 7, 3, 0, 0, 3515, 3516, 7, 6, 0, 0, 3516, 3517, 7, 15, 0, 0, 3517, 3518, 7, 3, 0, 0, 3518, 3519, 7, 5, 0, 0, 3519, 314, 1, 0, 0, 0, 3520, 3521, 7, 11, 0, 0, 3521, 3522, 7, 28, 0, 0, 3522, 3523, 7, 5, 0, 0, 3523, 316, 1, 0, 0, 0, 3524, 3525, 7, 11, 0, 0, 3525, 3526, 7, 28, 0, 0, 3526, 3527, 7, 5, 0, 0, 3527, 3528, 7, 7, 0, 0, 3528, 3529, 7, 26, 0, 0, 3529, 3530, 7, 14, 0, 0, 3530, 3531, 7, 7, 0, 0, 3531, 3532, 7, 25, 0, 0, 3532, 3533, 7, 6, 0, 0, 3533, 3534, 7, 15, 0, 0, 3534, 3535, 7, 19, 0, 0, 3535, 3536, 7, 12, 0, 0, 3536, 318, 1, 0, 0, 0, 3537, 3538, 7, 11, 0, 0, 3538, 3539, 7, 28, 0, 0, 3539, 3540, 7, 5, 0, 0, 3540, 3541, 7, 11, 0, 0, 3541, 3542, 7, 6, 0, 0, 3542, 3543, 7, 3, 0, 0, 3543, 3544, 7, 6, 0, 0, 3544, 3545, 7, 7, 0, 0, 3545, 320, 1, 0, 0, 0, 3546, 3547, 7, 11, 0, 0, 3547, 3548, 7, 28, 0, 0, 3548, 3549, 7, 5, 0, 0, 3549, 3550, 7, 9, 0, 0, 3550, 3551, 7, 3, 0, 0, 3551, 3552, 7, 8, 0, 0, 3552, 3553, 7, 12, 0, 0, 3553, 3554, 7, 15, 0, 0, 3554, 3555, 7, 12, 0, 0, 3555, 3556, 7, 22, 0, 0, 3556, 322, 1, 0, 0, 0, 3557, 3558, 7, 11, 0, 0, 3558, 3559, 7, 28, 0, 0, 3559, 3560, 7, 5, 0, 0, 3560, 3561, 5, 95, 0, 0, 3561, 3562, 7, 16, 0, 0, 3562, 3563, 7, 15, 0, 0, 3563, 3564, 7, 22, 0, 0, 3564, 3565, 5, 95, 0, 0, 3565, 3566, 7, 8, 0, 0, 3566, 3567, 7, 7, 0, 0, 3567, 3568, 7, 11, 0, 0, 3568, 3569, 7, 17, 0, 0, 3569, 3570, 7, 5, 0, 0, 3570, 3571, 7, 6, 0, 0, 3571, 324, 1, 0, 0, 0, 3572, 3573, 7, 11, 0, 0, 3573, 3574, 7, 28, 0, 0, 3574, 3575, 7, 5, 0, 0, 3575, 3576, 5, 95, 0, 0, 3576, 3577, 7, 14, 0, 0, 3577, 3578, 7, 3, 0, 0, 3578, 3579, 7, 5, 0, 0, 3579, 3580, 7, 14, 0, 0, 3580, 3581, 5, 95, 0, 0, 3581, 3582, 7, 18, 0, 0, 3582, 3583, 7, 19, 0, 0, 3583, 3584, 7, 17, 0, 0, 3584, 3585, 7, 12, 0, 0, 3585, 3586, 7, 4, 0, 0, 3586, 3587, 5, 95, 0, 0, 3587, 3588, 7, 8, 0, 0, 3588, 3589, 7, 19, 0, 0, 3589, 3590, 7, 9, 0, 0, 3590, 3591, 7, 11, 0, 0, 3591, 326, 1, 0, 0, 0, 3592, 3593, 7, 11, 0, 0, 3593, 3594, 7, 28, 0, 0, 3594, 3595, 7, 5, 0, 0, 3595, 3596, 5, 95, 0, 0, 3596, 3597, 7, 11, 0, 0, 3597, 3598, 7, 23, 0, 0, 3598, 3599, 7, 3, 0, 0, 3599, 3600, 7, 5, 0, 0, 3600, 3601, 7, 5, 0, 0, 3601, 3602, 5, 95, 0, 0, 3602, 3603, 7, 8, 0, 0, 3603, 3604, 7, 7, 0, 0, 3604, 3605, 7, 11, 0, 0, 3605, 3606, 7, 17, 0, 0, 3606, 3607, 7, 5, 0, 0, 3607, 3608, 7, 6, 0, 0, 3608, 328, 1, 0, 0, 0, 3609, 3610, 7, 11, 0, 0, 3610, 3611, 7, 11, 0, 0, 3611, 3612, 7, 5, 0, 0, 3612, 330, 1, 0, 0, 0, 3613, 3614, 7, 11, 0, 0, 3614, 3615, 7, 6, 0, 0, 3615, 3616, 7, 3, 0, 0, 3616, 3617, 7, 14, 0, 0, 3617, 3618, 7, 21, 0, 0, 3618, 3619, 7, 7, 0, 0, 3619, 3620, 7, 4, 0, 0, 3620, 332, 1, 0, 0, 0, 3621, 3622, 7, 11, 0, 0, 3622, 3623, 7, 6, 0, 0, 3623, 3624, 7, 3, 0, 0, 3624, 3625, 7, 8, 0, 0, 3625, 3626, 7, 6, 0, 0, 3626, 3627, 7, 15, 0, 0, 3627, 3628, 7, 12, 0, 0, 3628, 3629, 7, 22, 0, 0, 3629, 334, 1, 0, 0, 0, 3630, 3631, 7, 11, 0, 0, 3631, 3632, 7, 6, 0, 0, 3632, 3633, 7, 3, 0, 0, 3633, 3634, 7, 6, 0, 0, 3634, 3635, 7, 7, 0, 0, 3635, 3636, 7, 23, 0, 0, 3636, 3637, 7, 7, 0, 0, 3637, 3638, 7, 12, 0, 0, 3638, 3639, 7, 6, 0, 0, 3639, 336, 1, 0, 0, 0, 3640, 3641, 7, 11, 0, 0, 3641, 3642, 7, 6, 0, 0, 3642, 3643, 7, 8, 0, 0, 3643, 3644, 7, 3, 0, 0, 3644, 3645, 7, 15, 0, 0, 3645, 3646, 7, 22, 0, 0, 3646, 3647, 7, 20, 0, 0, 3647, 3648, 7, 6, 0, 0, 3648, 3649, 5, 95, 0, 0, 3649, 3650, 7, 27, 0, 0, 3650, 3651, 7, 19, 0, 0, 3651, 3652, 7, 15, 0, 0, 3652, 3653, 7, 12, 0, 0, 3653, 338, 1, 0, 0, 0, 3654, 3655, 7, 6, 0, 0, 3655, 3656, 7, 3, 0, 0, 3656, 3657, 7, 16, 0, 0, 3657, 3658, 7, 5, 0, 0, 3658, 3659, 7, 7, 0, 0, 3659, 340, 1, 0, 0, 0, 3660, 3661, 7, 6, 0, 0, 3661, 3662, 7, 7, 0, 0, 3662, 3663, 7, 8, 0, 0, 3663, 3664, 7, 23, 0, 0, 3664, 3665, 7, 15, 0, 0, 3665, 3666, 7, 12, 0, 0, 3666, 3667, 7, 3, 0, 0, 3667, 3668, 7, 6, 0, 0, 3668, 3669, 7, 7, 0, 0, 3669, 3670, 7, 4, 0, 0, 3670, 342, 1, 0, 0, 0, 3671, 3672, 7, 6, 0, 0, 3672, 3673, 7, 20, 0, 0, 3673, 3674, 7, 7, 0, 0, 3674, 3675, 7, 12, 0, 0, 3675, 344, 1, 0, 0, 0, 3676, 3677, 7, 6, 0, 0, 3677, 3678, 7, 19, 0, 0, 3678, 346, 1, 0, 0, 0, 3679, 3680, 7, 6, 0, 0, 3680, 3681, 7, 8, 0, 0, 3681, 3682, 7, 3, 0, 0, 3682, 3683, 7, 15, 0, 0, 3683, 3684, 7, 5, 0, 0, 3684, 3685, 7, 15, 0, 0, 3685, 3686, 7, 12, 0, 0, 3686, 3687, 7, 22, 0, 0, 3687, 348, 1, 0, 0, 0, 3688, 3689, 7, 6, 0, 0, 3689, 3690, 7, 8, 0, 0, 3690, 3691, 7, 15, 0, 0, 3691, 3692, 7, 22, 0, 0, 3692, 3693, 7, 22, 0, 0, 3693, 3694, 7, 7, 0, 0, 3694, 3695, 7, 8, 0, 0, 3695, 350, 1, 0, 0, 0, 3696, 3697, 7, 6, 0, 0, 3697, 3698, 7, 8, 0, 0, 3698, 3699, 7, 17, 0, 0, 3699, 3700, 7, 7, 0, 0, 3700, 352, 1, 0, 0, 0, 3701, 3702, 7, 17, 0, 0, 3702, 3703, 7, 12, 0, 0, 3703, 3704, 7, 4, 0, 0, 3704, 3705, 7, 19, 0, 0, 3705, 354, 1, 0, 0, 0, 3706, 3707, 7, 17, 0, 0, 3707, 3708, 7, 12, 0, 0, 3708, 3709, 7, 15, 0, 0, 3709, 3710, 7, 19, 0, 0, 3710, 3711, 7, 12, 0, 0, 3711, 356, 1, 0, 0, 0, 3712, 3713, 7, 17, 0, 0, 3713, 3714, 7, 12, 0, 0, 3714, 3715, 7, 15, 0, 0, 3715, 3716, 7, 28, 0, 0, 3716, 3717, 7, 17, 0, 0, 3717, 3718, 7, 7, 0, 0, 3718, 358, 1, 0, 0, 0, 3719, 3720, 7, 17, 0, 0, 3720, 3721, 7, 12, 0, 0, 3721, 3722, 7, 5, 0, 0, 3722, 3723, 7, 19, 0, 0, 3723, 3724, 7, 14, 0, 0, 3724, 3725, 7, 21, 0, 0, 3725, 360, 1, 0, 0, 0, 3726, 3727, 7, 17, 0, 0, 3727, 3728, 7, 12, 0, 0, 3728, 3729, 7, 11, 0, 0, 3729, 3730, 7, 15, 0, 0, 3730, 3731, 7, 22, 0, 0, 3731, 3732, 7, 12, 0, 0, 3732, 3733, 7, 7, 0, 0, 3733, 3734, 7, 4, 0, 0, 3734, 362, 1, 0, 0, 0, 3735, 3736, 7, 17, 0, 0, 3736, 3737, 7, 25, 0, 0, 3737, 3738, 7, 4, 0, 0, 3738, 3739, 7, 3, 0, 0, 3739, 3740, 7, 6, 0, 0, 3740, 3741, 7, 7, 0, 0, 3741, 364, 1, 0, 0, 0, 3742, 3743, 7, 17, 0, 0, 3743, 3744, 7, 11, 0, 0, 3744, 3745, 7, 3, 0, 0, 3745, 3746, 7, 22, 0, 0, 3746, 3747, 7, 7, 0, 0, 3747, 366, 1, 0, 0, 0, 3748, 3749, 7, 17, 0, 0, 3749, 3750, 7, 11, 0, 0, 3750, 3751, 7, 7, 0, 0, 3751, 368, 1, 0, 0, 0, 3752, 3753, 7, 17, 0, 0, 3753, 3754, 7, 11, 0, 0, 3754, 3755, 7, 15, 0, 0, 3755, 3756, 7, 12, 0, 0, 3756, 3757, 7, 22, 0, 0, 3757, 370, 1, 0, 0, 0, 3758, 3759, 7, 24, 0, 0, 3759, 3760, 7, 3, 0, 0, 3760, 3761, 7, 5, 0, 0, 3761, 3762, 7, 17, 0, 0, 3762, 3763, 7, 7, 0, 0, 3763, 3764, 7, 11, 0, 0, 3764, 372, 1, 0, 0, 0, 3765, 3766, 7, 9, 0, 0, 3766, 3767, 7, 20, 0, 0, 3767, 3768, 7, 7, 0, 0, 3768, 3769, 7, 12, 0, 0, 3769, 374, 1, 0, 0, 0, 3770, 3771, 7, 9, 0, 0, 3771, 3772, 7, 20, 0, 0, 3772, 3773, 7, 7, 0, 0, 3773, 3774, 7, 8, 0, 0, 3774, 3775, 7, 7, 0, 0, 3775, 376, 1, 0, 0, 0, 3776, 3777, 7, 9, 0, 0, 3777, 3778, 7, 20, 0, 0, 3778, 3779, 7, 15, 0, 0, 3779, 3780, 7, 5, 0, 0, 3780, 3781, 7, 7, 0, 0, 3781, 378, 1, 0, 0, 0, 3782, 3783, 7, 9, 0, 0, 3783, 3784, 7, 15, 0, 0, 3784, 3785, 7, 6, 0, 0, 3785, 3786, 7, 20, 0, 0, 3786, 380, 1, 0, 0, 0, 3787, 3788, 7, 9, 0, 0, 3788, 3789, 7, 8, 0, 0, 3789, 3790, 7, 15, 0, 0, 3790, 3791, 7, 6, 0, 0, 3791, 3792, 7, 7, 0, 0, 3792, 382, 1, 0, 0, 0, 3793, 3794, 7, 26, 0, 0, 3794, 3795, 7, 19, 0, 0, 3795, 3796, 7, 8, 0, 0, 3796, 384, 1, 0, 0, 0, 3797, 3798, 7, 13, 0, 0, 3798, 3799, 7, 7, 0, 0, 3799, 3800, 7, 8, 0, 0, 3800, 3801, 7, 19, 0, 0, 3801, 3802, 7, 18, 0, 0, 3802, 3803, 7, 15, 0, 0, 3803, 3804, 7, 5, 0, 0, 3804, 3805, 7, 5, 0, 0, 3805, 386, 1, 0, 0, 0, 3806, 3807, 7, 6, 0, 0, 3807, 3808, 7, 15, 0, 0, 3808, 3809, 7, 12, 0, 0, 3809, 3810, 7, 10, 0, 0, 3810, 3811, 7, 15, 0, 0, 3811, 3812, 7, 12, 0, 0, 3812, 3813, 7, 6, 0, 0, 3813, 388, 1, 0, 0, 0, 3814, 3815, 7, 11, 0, 0, 3815, 3816, 7, 23, 0, 0, 3816, 3817, 7, 3, 0, 0, 3817, 3818, 7, 5, 0, 0, 3818, 3819, 7, 5, 0, 0, 3819, 3820, 7, 15, 0, 0, 3820, 3821, 7, 12, 0, 0, 3821, 3822, 7, 6, 0, 0, 3822, 390, 1, 0, 0, 0, 3823, 3824, 7, 23, 0, 0, 3824, 3825, 7, 7, 0, 0, 3825, 3826, 7, 4, 0, 0, 3826, 3827, 7, 15, 0, 0, 3827, 3828, 7, 17, 0, 0, 3828, 3829, 7, 23, 0, 0, 3829, 3830, 7, 15, 0, 0, 3830, 3831, 7, 12, 0, 0, 3831, 3832, 7, 6, 0, 0, 3832, 392, 1, 0, 0, 0, 3833, 3834, 7, 23, 0, 0, 3834, 3835, 7, 15, 0, 0, 3835, 3836, 7, 4, 0, 0, 3836, 3837, 7, 4, 0, 0, 3837, 3838, 7, 5, 0, 0, 3838, 3839, 7, 7, 0, 0, 3839, 3840, 7, 15, 0, 0, 3840, 3841, 7, 12, 0, 0, 3841, 3842, 7, 6, 0, 0, 3842, 394, 1, 0, 0, 0, 3843, 3844, 7, 15, 0, 0, 3844, 3845, 7, 12, 0, 0, 3845, 3846, 7, 6, 0, 0, 3846, 396, 1, 0, 0, 0, 3847, 3848, 7, 15, 0, 0, 3848, 3849, 7, 12, 0, 0, 3849, 3850, 7, 6, 0, 0, 3850, 3851, 5, 49, 0, 0, 3851, 398, 1, 0, 0, 0, 3852, 3853, 7, 15, 0, 0, 3853, 3854, 7, 12, 0, 0, 3854, 3855, 7, 6, 0, 0, 3855, 3856, 5, 50, 0, 0, 3856, 400, 1, 0, 0, 0, 3857, 3858, 7, 15, 0, 0, 3858, 3859, 7, 12, 0, 0, 3859, 3860, 7, 6, 0, 0, 3860, 3861, 5, 51, 0, 0, 3861, 402, 1, 0, 0, 0, 3862, 3863, 7, 15, 0, 0, 3863, 3864, 7, 12, 0, 0, 3864, 3865, 7, 6, 0, 0, 3865, 3866, 5, 52, 0, 0, 3866, 404, 1, 0, 0, 0, 3867, 3868, 7, 15, 0, 0, 3868, 3869, 7, 12, 0, 0, 3869, 3870, 7, 6, 0, 0, 3870, 3871, 5, 56, 0, 0, 3871, 406, 1, 0, 0, 0, 3872, 3873, 7, 15, 0, 0, 3873, 3874, 7, 12, 0, 0, 3874, 3875, 7, 6, 0, 0, 3875, 3876, 7, 7, 0, 0, 3876, 3877, 7, 22, 0, 0, 3877, 3878, 7, 7, 0, 0, 3878, 3879, 7, 8, 0, 0, 3879, 408, 1, 0, 0, 0, 3880, 3881, 7, 16, 0, 0, 3881, 3882, 7, 15, 0, 0, 3882, 3883, 7, 22, 0, 0, 3883, 3884, 7, 15, 0, 0, 3884, 3885, 7, 12, 0, 0, 3885, 3886, 7, 6, 0, 0, 3886, 410, 1, 0, 0, 0, 3887, 3888, 7, 8, 0, 0, 3888, 3889, 7, 7, 0, 0, 3889, 3890, 7, 3, 0, 0, 3890, 3891, 7, 5, 0, 0, 3891, 412, 1, 0, 0, 0, 3892, 3893, 7, 4, 0, 0, 3893, 3894, 7, 19, 0, 0, 3894, 3895, 7, 17, 0, 0, 3895, 3896, 7, 16, 0, 0, 3896, 3897, 7, 5, 0, 0, 3897, 3898, 7, 7, 0, 0, 3898, 414, 1, 0, 0, 0, 3899, 3900, 7, 25, 0, 0, 3900, 3901, 7, 8, 0, 0, 3901, 3902, 7, 7, 0, 0, 3902, 3903, 7, 14, 0, 0, 3903, 3904, 7, 15, 0, 0, 3904, 3905, 7, 11, 0, 0, 3905, 3906, 7, 15, 0, 0, 3906, 3907, 7, 19, 0, 0, 3907, 3908, 7, 12, 0, 0, 3908, 416, 1, 0, 0, 0, 3909, 3910, 7, 18, 0, 0, 3910, 3911, 7, 5, 0, 0, 3911, 3912, 7, 19, 0, 0, 3912, 3913, 7, 3, 0, 0, 3913, 3914, 7, 6, 0, 0, 3914, 418, 1, 0, 0, 0, 3915, 3916, 7, 18, 0, 0, 3916, 3917, 7, 5, 0, 0, 3917, 3918, 7, 19, 0, 0, 3918, 3919, 7, 3, 0, 0, 3919, 3920, 7, 6, 0, 0, 3920, 3921, 5, 52, 0, 0, 3921, 420, 1, 0, 0, 0, 3922, 3923, 7, 18, 0, 0, 3923, 3924, 7, 5, 0, 0, 3924, 3925, 7, 19, 0, 0, 3925, 3926, 7, 3, 0, 0, 3926, 3927, 7, 6, 0, 0, 3927, 3928, 5, 56, 0, 0, 3928, 422, 1, 0, 0, 0, 3929, 3930, 7, 4, 0, 0, 3930, 3931, 7, 7, 0, 0, 3931, 3932, 7, 14, 0, 0, 3932, 3933, 7, 15, 0, 0, 3933, 3934, 7, 23, 0, 0, 3934, 3935, 7, 3, 0, 0, 3935, 3936, 7, 5, 0, 0, 3936, 424, 1, 0, 0, 0, 3937, 3938, 7, 4, 0, 0, 3938, 3939, 7, 7, 0, 0, 3939, 3940, 7, 14, 0, 0, 3940, 426, 1, 0, 0, 0, 3941, 3942, 7, 12, 0, 0, 3942, 3943, 7, 17, 0, 0, 3943, 3944, 7, 23, 0, 0, 3944, 3945, 7, 7, 0, 0, 3945, 3946, 7, 8, 0, 0, 3946, 3947, 7, 15, 0, 0, 3947, 3948, 7, 14, 0, 0, 3948, 428, 1, 0, 0, 0, 3949, 3950, 7, 4, 0, 0, 3950, 3951, 7, 3, 0, 0, 3951, 3952, 7, 6, 0, 0, 3952, 3953, 7, 7, 0, 0, 3953, 430, 1, 0, 0, 0, 3954, 3955, 7, 6, 0, 0, 3955, 3956, 7, 15, 0, 0, 3956, 3957, 7, 23, 0, 0, 3957, 3958, 7, 7, 0, 0, 3958, 432, 1, 0, 0, 0, 3959, 3960, 7, 6, 0, 0, 3960, 3961, 7, 15, 0, 0, 3961, 3962, 7, 23, 0, 0, 3962, 3963, 7, 7, 0, 0, 3963, 3964, 7, 11, 0, 0, 3964, 3965, 7, 6, 0, 0, 3965, 3966, 7, 3, 0, 0, 3966, 3967, 7, 23, 0, 0, 3967, 3968, 7, 25, 0, 0, 3968, 434, 1, 0, 0, 0, 3969, 3970, 7, 4, 0, 0, 3970, 3971, 7, 3, 0, 0, 3971, 3972, 7, 6, 0, 0, 3972, 3973, 7, 7, 0, 0, 3973, 3974, 7, 6, 0, 0, 3974, 3975, 7, 15, 0, 0, 3975, 3976, 7, 23, 0, 0, 3976, 3977, 7, 7, 0, 0, 3977, 436, 1, 0, 0, 0, 3978, 3979, 7, 10, 0, 0, 3979, 3980, 7, 7, 0, 0, 3980, 3981, 7, 3, 0, 0, 3981, 3982, 7, 8, 0, 0, 3982, 438, 1, 0, 0, 0, 3983, 3984, 7, 14, 0, 0, 3984, 3985, 7, 20, 0, 0, 3985, 3986, 7, 3, 0, 0, 3986, 3987, 7, 8, 0, 0, 3987, 440, 1, 0, 0, 0, 3988, 3989, 7, 24, 0, 0, 3989, 3990, 7, 3, 0, 0, 3990, 3991, 7, 8, 0, 0, 3991, 3992, 7, 14, 0, 0, 3992, 3993, 7, 20, 0, 0, 3993, 3994, 7, 3, 0, 0, 3994, 3995, 7, 8, 0, 0, 3995, 442, 1, 0, 0, 0, 3996, 3997, 7, 12, 0, 0, 3997, 3998, 7, 24, 0, 0, 3998, 3999, 7, 3, 0, 0, 3999, 4000, 7, 8, 0, 0, 4000, 4001, 7, 14, 0, 0, 4001, 4002, 7, 20, 0, 0, 4002, 4003, 7, 3, 0, 0, 4003, 4004, 7, 8, 0, 0, 4004, 444, 1, 0, 0, 0, 4005, 4006, 7, 12, 0, 0, 4006, 4007, 7, 3, 0, 0, 4007, 4008, 7, 6, 0, 0, 4008, 4009, 7, 15, 0, 0, 4009, 4010, 7, 19, 0, 0, 4010, 4011, 7, 12, 0, 0, 4011, 4012, 7, 3, 0, 0, 4012, 4013, 7, 5, 0, 0, 4013, 446, 1, 0, 0, 0, 4014, 4015, 7, 16, 0, 0, 4015, 4016, 7, 15, 0, 0, 4016, 4017, 7, 12, 0, 0, 4017, 4018, 7, 3, 0, 0, 4018, 4019, 7, 8, 0, 0, 4019, 4020, 7, 10, 0, 0, 4020, 448, 1, 0, 0, 0, 4021, 4022, 7, 24, 0, 0, 4022, 4023, 7, 3, 0, 0, 4023, 4024, 7, 8, 0, 0, 4024, 4025, 7, 16, 0, 0, 4025, 4026, 7, 15, 0, 0, 4026, 4027, 7, 12, 0, 0, 4027, 4028, 7, 3, 0, 0, 4028, 4029, 7, 8, 0, 0, 4029, 4030, 7, 10, 0, 0, 4030, 450, 1, 0, 0, 0, 4031, 4032, 7, 6, 0, 0, 4032, 4033, 7, 15, 0, 0, 4033, 4034, 7, 12, 0, 0, 4034, 4035, 7, 10, 0, 0, 4035, 4036, 7, 16, 0, 0, 4036, 4037, 7, 5, 0, 0, 4037, 4038, 7, 19, 0, 0, 4038, 4039, 7, 16, 0, 0, 4039, 452, 1, 0, 0, 0, 4040, 4041, 7, 16, 0, 0, 4041, 4042, 7, 5, 0, 0, 4042, 4043, 7, 19, 0, 0, 4043, 4044, 7, 16, 0, 0, 4044, 454, 1, 0, 0, 0, 4045, 4046, 7, 23, 0, 0, 4046, 4047, 7, 7, 0, 0, 4047, 4048, 7, 4, 0, 0, 4048, 4049, 7, 15, 0, 0, 4049, 4050, 7, 17, 0, 0, 4050, 4051, 7, 23, 0, 0, 4051, 4052, 7, 16, 0, 0, 4052, 4053, 7, 5, 0, 0, 4053, 4054, 7, 19, 0, 0, 4054, 4055, 7, 16, 0, 0, 4055, 456, 1, 0, 0, 0, 4056, 4057, 7, 5, 0, 0, 4057, 4058, 7, 19, 0, 0, 4058, 4059, 7, 12, 0, 0, 4059, 4060, 7, 22, 0, 0, 4060, 458, 1, 0, 0, 0, 4061, 4062, 7, 5, 0, 0, 4062, 4063, 7, 19, 0, 0, 4063, 4064, 7, 12, 0, 0, 4064, 4065, 7, 22, 0, 0, 4065, 4066, 7, 16, 0, 0, 4066, 4067, 7, 5, 0, 0, 4067, 4068, 7, 19, 0, 0, 4068, 4069, 7, 16, 0, 0, 4069, 460, 1, 0, 0, 0, 4070, 4071, 7, 6, 0, 0, 4071, 4072, 7, 15, 0, 0, 4072, 4073, 7, 12, 0, 0, 4073, 4074, 7, 10, 0, 0, 4074, 4075, 7, 6, 0, 0, 4075, 4076, 7, 7, 0, 0, 4076, 4077, 7, 26, 0, 0, 4077, 4078, 7, 6, 0, 0, 4078, 462, 1, 0, 0, 0, 4079, 4080, 7, 6, 0, 0, 4080, 4081, 7, 7, 0, 0, 4081, 4082, 7, 26, 0, 0, 4082, 4083, 7, 6, 0, 0, 4083, 464, 1, 0, 0, 0, 4084, 4085, 7, 23, 0, 0, 4085, 4086, 7, 7, 0, 0, 4086, 4087, 7, 4, 0, 0, 4087, 4088, 7, 15, 0, 0, 4088, 4089, 7, 17, 0, 0, 4089, 4090, 7, 23, 0, 0, 4090, 4091, 7, 6, 0, 0, 4091, 4092, 7, 7, 0, 0, 4092, 4093, 7, 26, 0, 0, 4093, 4094, 7, 6, 0, 0, 4094, 466, 1, 0, 0, 0, 4095, 4096, 7, 5, 0, 0, 4096, 4097, 7, 19, 0, 0, 4097, 4098, 7, 12, 0, 0, 4098, 4099, 7, 22, 0, 0, 4099, 4100, 7, 6, 0, 0, 4100, 4101, 7, 7, 0, 0, 4101, 4102, 7, 26, 0, 0, 4102, 4103, 7, 6, 0, 0, 4103, 468, 1, 0, 0, 0, 4104, 4105, 7, 7, 0, 0, 4105, 4106, 7, 12, 0, 0, 4106, 4107, 7, 17, 0, 0, 4107, 4108, 7, 23, 0, 0, 4108, 470, 1, 0, 0, 0, 4109, 4110, 7, 24, 0, 0, 4110, 4111, 7, 3, 0, 0, 4111, 4112, 7, 8, 0, 0, 4112, 4113, 7, 10, 0, 0, 4113, 4114, 7, 15, 0, 0, 4114, 4115, 7, 12, 0, 0, 4115, 4116, 7, 22, 0, 0, 4116, 472, 1, 0, 0, 0, 4117, 4118, 7, 11, 0, 0, 4118, 4119, 7, 7, 0, 0, 4119, 4120, 7, 8, 0, 0, 4120, 4121, 7, 15, 0, 0, 4121, 4122, 7, 3, 0, 0, 4122, 4123, 7, 5, 0, 0, 4123, 474, 1, 0, 0, 0, 4124, 4125, 7, 10, 0, 0, 4125, 4126, 7, 7, 0, 0, 4126, 4127, 7, 3, 0, 0, 4127, 4128, 7, 8, 0, 0, 4128, 4129, 5, 95, 0, 0, 4129, 4130, 7, 23, 0, 0, 4130, 4131, 7, 19, 0, 0, 4131, 4132, 7, 12, 0, 0, 4132, 4133, 7, 6, 0, 0, 4133, 4134, 7, 20, 0, 0, 4134, 476, 1, 0, 0, 0, 4135, 4136, 7, 4, 0, 0, 4136, 4137, 7, 3, 0, 0, 4137, 4138, 7, 10, 0, 0, 4138, 4139, 5, 95, 0, 0, 4139, 4140, 7, 20, 0, 0, 4140, 4141, 7, 19, 0, 0, 4141, 4142, 7, 17, 0, 0, 4142, 4143, 7, 8, 0, 0, 4143, 478, 1, 0, 0, 0, 4144, 4145, 7, 4, 0, 0, 4145, 4146, 7, 3, 0, 0, 4146, 4147, 7, 10, 0, 0, 4147, 4148, 5, 95, 0, 0, 4148, 4149, 7, 23, 0, 0, 4149, 4150, 7, 15, 0, 0, 4150, 4151, 7, 12, 0, 0, 4151, 4152, 7, 17, 0, 0, 4152, 4153, 7, 6, 0, 0, 4153, 4154, 7, 7, 0, 0, 4154, 480, 1, 0, 0, 0, 4155, 4156, 7, 4, 0, 0, 4156, 4157, 7, 3, 0, 0, 4157, 4158, 7, 10, 0, 0, 4158, 4159, 5, 95, 0, 0, 4159, 4160, 7, 11, 0, 0, 4160, 4161, 7, 7, 0, 0, 4161, 4162, 7, 14, 0, 0, 4162, 4163, 7, 19, 0, 0, 4163, 4164, 7, 12, 0, 0, 4164, 4165, 7, 4, 0, 0, 4165, 482, 1, 0, 0, 0, 4166, 4167, 7, 20, 0, 0, 4167, 4168, 7, 19, 0, 0, 4168, 4169, 7, 17, 0, 0, 4169, 4170, 7, 8, 0, 0, 4170, 4171, 5, 95, 0, 0, 4171, 4172, 7, 23, 0, 0, 4172, 4173, 7, 15, 0, 0, 4173, 4174, 7, 12, 0, 0, 4174, 4175, 7, 17, 0, 0, 4175, 4176, 7, 6, 0, 0, 4176, 4177, 7, 7, 0, 0, 4177, 484, 1, 0, 0, 0, 4178, 4179, 7, 20, 0, 0, 4179, 4180, 7, 19, 0, 0, 4180, 4181, 7, 17, 0, 0, 4181, 4182, 7, 8, 0, 0, 4182, 4183, 5, 95, 0, 0, 4183, 4184, 7, 11, 0, 0, 4184, 4185, 7, 7, 0, 0, 4185, 4186, 7, 14, 0, 0, 4186, 4187, 7, 19, 0, 0, 4187, 4188, 7, 12, 0, 0, 4188, 4189, 7, 4, 0, 0, 4189, 486, 1, 0, 0, 0, 4190, 4191, 7, 23, 0, 0, 4191, 4192, 7, 15, 0, 0, 4192, 4193, 7, 12, 0, 0, 4193, 4194, 7, 17, 0, 0, 4194, 4195, 7, 6, 0, 0, 4195, 4196, 7, 7, 0, 0, 4196, 4197, 5, 95, 0, 0, 4197, 4198, 7, 11, 0, 0, 4198, 4199, 7, 7, 0, 0, 4199, 4200, 7, 14, 0, 0, 4200, 4201, 7, 19, 0, 0, 4201, 4202, 7, 12, 0, 0, 4202, 4203, 7, 4, 0, 0, 4203, 488, 1, 0, 0, 0, 4204, 4205, 7, 11, 0, 0, 4205, 4206, 7, 7, 0, 0, 4206, 4207, 7, 14, 0, 0, 4207, 4208, 7, 19, 0, 0, 4208, 4209, 7, 12, 0, 0, 4209, 4210, 7, 4, 0, 0, 4210, 4211, 5, 95, 0, 0, 4211, 4212, 7, 23, 0, 0, 4212, 4213, 7, 15, 0, 0, 4213, 4214, 7, 14, 0, 0, 4214, 4215, 7, 8, 0, 0, 4215, 4216, 7, 19, 0, 0, 4216, 4217, 7, 11, 0, 0, 4217, 4218, 7, 7, 0, 0, 4218, 4219, 7, 14, 0, 0, 4219, 4220, 7, 19, 0, 0, 4220, 4221, 7, 12, 0, 0, 4221, 4222, 7, 4, 0, 0, 4222, 490, 1, 0, 0, 0, 4223, 4224, 7, 23, 0, 0, 4224, 4225, 7, 15, 0, 0, 4225, 4226, 7, 12, 0, 0, 4226, 4227, 7, 17, 0, 0, 4227, 4228, 7, 6, 0, 0, 4228, 4229, 7, 7, 0, 0, 4229, 4230, 5, 95, 0, 0, 4230, 4231, 7, 23, 0, 0, 4231, 4232, 7, 15, 0, 0, 4232, 4233, 7, 14, 0, 0, 4233, 4234, 7, 8, 0, 0, 4234, 4235, 7, 19, 0, 0, 4235, 4236, 7, 11, 0, 0, 4236, 4237, 7, 7, 0, 0, 4237, 4238, 7, 14, 0, 0, 4238, 4239, 7, 19, 0, 0, 4239, 4240, 7, 12, 0, 0, 4240, 4241, 7, 4, 0, 0, 4241, 492, 1, 0, 0, 0, 4242, 4243, 7, 20, 0, 0, 4243, 4244, 7, 19, 0, 0, 4244, 4245, 7, 17, 0, 0, 4245, 4246, 7, 8, 0, 0, 4246, 4247, 5, 95, 0, 0, 4247, 4248, 7, 23, 0, 0, 4248, 4249, 7, 15, 0, 0, 4249, 4250, 7, 14, 0, 0, 4250, 4251, 7, 8, 0, 0, 4251, 4252, 7, 19, 0, 0, 4252, 4253, 7, 11, 0, 0, 4253, 4254, 7, 7, 0, 0, 4254, 4255, 7, 14, 0, 0, 4255, 4256, 7, 19, 0, 0, 4256, 4257, 7, 12, 0, 0, 4257, 4258, 7, 4, 0, 0, 4258, 494, 1, 0, 0, 0, 4259, 4260, 7, 4, 0, 0, 4260, 4261, 7, 3, 0, 0, 4261, 4262, 7, 10, 0, 0, 4262, 4263, 5, 95, 0, 0, 4263, 4264, 7, 23, 0, 0, 4264, 4265, 7, 15, 0, 0, 4265, 4266, 7, 14, 0, 0, 4266, 4267, 7, 8, 0, 0, 4267, 4268, 7, 19, 0, 0, 4268, 4269, 7, 11, 0, 0, 4269, 4270, 7, 7, 0, 0, 4270, 4271, 7, 14, 0, 0, 4271, 4272, 7, 19, 0, 0, 4272, 4273, 7, 12, 0, 0, 4273, 4274, 7, 4, 0, 0, 4274, 496, 1, 0, 0, 0, 4275, 4276, 7, 27, 0, 0, 4276, 4277, 7, 11, 0, 0, 4277, 4278, 7, 19, 0, 0, 4278, 4279, 7, 12, 0, 0, 4279, 4280, 5, 95, 0, 0, 4280, 4281, 7, 3, 0, 0, 4281, 4282, 7, 8, 0, 0, 4282, 4283, 7, 8, 0, 0, 4283, 4284, 7, 3, 0, 0, 4284, 4285, 7, 10, 0, 0, 4285, 498, 1, 0, 0, 0, 4286, 4287, 7, 27, 0, 0, 4287, 4288, 7, 11, 0, 0, 4288, 4289, 7, 19, 0, 0, 4289, 4290, 7, 12, 0, 0, 4290, 4291, 5, 95, 0, 0, 4291, 4292, 7, 3, 0, 0, 4292, 4293, 7, 8, 0, 0, 4293, 4294, 7, 8, 0, 0, 4294, 4295, 7, 3, 0, 0, 4295, 4296, 7, 10, 0, 0, 4296, 4297, 7, 3, 0, 0, 4297, 4298, 7, 22, 0, 0, 4298, 4299, 7, 22, 0, 0, 4299, 500, 1, 0, 0, 0, 4300, 4301, 7, 27, 0, 0, 4301, 4302, 7, 11, 0, 0, 4302, 4303, 7, 19, 0, 0, 4303, 4304, 7, 12, 0, 0, 4304, 4305, 5, 95, 0, 0, 4305, 4306, 7, 3, 0, 0, 4306, 4307, 7, 8, 0, 0, 4307, 4308, 7, 8, 0, 0, 4308, 4309, 7, 3, 0, 0, 4309, 4310, 7, 10, 0, 0, 4310, 4311, 5, 95, 0, 0, 4311, 4312, 7, 3, 0, 0, 4312, 4313, 7, 25, 0, 0, 4313, 4314, 7, 25, 0, 0, 4314, 4315, 7, 7, 0, 0, 4315, 4316, 7, 12, 0, 0, 4316, 4317, 7, 4, 0, 0, 4317, 502, 1, 0, 0, 0, 4318, 4319, 7, 27, 0, 0, 4319, 4320, 7, 11, 0, 0, 4320, 4321, 7, 19, 0, 0, 4321, 4322, 7, 12, 0, 0, 4322, 4323, 5, 95, 0, 0, 4323, 4324, 7, 3, 0, 0, 4324, 4325, 7, 8, 0, 0, 4325, 4326, 7, 8, 0, 0, 4326, 4327, 7, 3, 0, 0, 4327, 4328, 7, 10, 0, 0, 4328, 4329, 5, 95, 0, 0, 4329, 4330, 7, 15, 0, 0, 4330, 4331, 7, 12, 0, 0, 4331, 4332, 7, 11, 0, 0, 4332, 4333, 7, 7, 0, 0, 4333, 4334, 7, 8, 0, 0, 4334, 4335, 7, 6, 0, 0, 4335, 504, 1, 0, 0, 0, 4336, 4337, 7, 27, 0, 0, 4337, 4338, 7, 11, 0, 0, 4338, 4339, 7, 19, 0, 0, 4339, 4340, 7, 12, 0, 0, 4340, 4341, 5, 95, 0, 0, 4341, 4342, 7, 14, 0, 0, 4342, 4343, 7, 19, 0, 0, 4343, 4344, 7, 12, 0, 0, 4344, 4345, 7, 6, 0, 0, 4345, 4346, 7, 3, 0, 0, 4346, 4347, 7, 15, 0, 0, 4347, 4348, 7, 12, 0, 0, 4348, 4349, 7, 11, 0, 0, 4349, 506, 1, 0, 0, 0, 4350, 4351, 7, 27, 0, 0, 4351, 4352, 7, 11, 0, 0, 4352, 4353, 7, 19, 0, 0, 4353, 4354, 7, 12, 0, 0, 4354, 4355, 5, 95, 0, 0, 4355, 4356, 7, 14, 0, 0, 4356, 4357, 7, 19, 0, 0, 4357, 4358, 7, 12, 0, 0, 4358, 4359, 7, 6, 0, 0, 4359, 4360, 7, 3, 0, 0, 4360, 4361, 7, 15, 0, 0, 4361, 4362, 7, 12, 0, 0, 4362, 4363, 7, 11, 0, 0, 4363, 4364, 5, 95, 0, 0, 4364, 4365, 7, 25, 0, 0, 4365, 4366, 7, 3, 0, 0, 4366, 4367, 7, 6, 0, 0, 4367, 4368, 7, 20, 0, 0, 4368, 508, 1, 0, 0, 0, 4369, 4370, 7, 27, 0, 0, 4370, 4371, 7, 11, 0, 0, 4371, 4372, 7, 19, 0, 0, 4372, 4373, 7, 12, 0, 0, 4373, 4374, 5, 95, 0, 0, 4374, 4375, 7, 4, 0, 0, 4375, 4376, 7, 7, 0, 0, 4376, 4377, 7, 25, 0, 0, 4377, 4378, 7, 6, 0, 0, 4378, 4379, 7, 20, 0, 0, 4379, 510, 1, 0, 0, 0, 4380, 4381, 7, 27, 0, 0, 4381, 4382, 7, 11, 0, 0, 4382, 4383, 7, 19, 0, 0, 4383, 4384, 7, 12, 0, 0, 4384, 4385, 5, 95, 0, 0, 4385, 4386, 7, 7, 0, 0, 4386, 4387, 7, 26, 0, 0, 4387, 4388, 7, 6, 0, 0, 4388, 4389, 7, 8, 0, 0, 4389, 4390, 7, 3, 0, 0, 4390, 4391, 7, 14, 0, 0, 4391, 4392, 7, 6, 0, 0, 4392, 512, 1, 0, 0, 0, 4393, 4394, 7, 27, 0, 0, 4394, 4395, 7, 11, 0, 0, 4395, 4396, 7, 19, 0, 0, 4396, 4397, 7, 12, 0, 0, 4397, 4398, 5, 95, 0, 0, 4398, 4399, 7, 15, 0, 0, 4399, 4400, 7, 12, 0, 0, 4400, 4401, 7, 11, 0, 0, 4401, 4402, 7, 7, 0, 0, 4402, 4403, 7, 8, 0, 0, 4403, 4404, 7, 6, 0, 0, 4404, 514, 1, 0, 0, 0, 4405, 4406, 7, 27, 0, 0, 4406, 4407, 7, 11, 0, 0, 4407, 4408, 7, 19, 0, 0, 4408, 4409, 7, 12, 0, 0, 4409, 4410, 5, 95, 0, 0, 4410, 4411, 7, 21, 0, 0, 4411, 4412, 7, 7, 0, 0, 4412, 4413, 7, 10, 0, 0, 4413, 4414, 7, 11, 0, 0, 4414, 516, 1, 0, 0, 0, 4415, 4416, 7, 27, 0, 0, 4416, 4417, 7, 11, 0, 0, 4417, 4418, 7, 19, 0, 0, 4418, 4419, 7, 12, 0, 0, 4419, 4420, 5, 95, 0, 0, 4420, 4421, 7, 5, 0, 0, 4421, 4422, 7, 7, 0, 0, 4422, 4423, 7, 12, 0, 0, 4423, 4424, 7, 22, 0, 0, 4424, 4425, 7, 6, 0, 0, 4425, 4426, 7, 20, 0, 0, 4426, 518, 1, 0, 0, 0, 4427, 4428, 7, 27, 0, 0, 4428, 4429, 7, 11, 0, 0, 4429, 4430, 7, 19, 0, 0, 4430, 4431, 7, 12, 0, 0, 4431, 4432, 5, 95, 0, 0, 4432, 4433, 7, 23, 0, 0, 4433, 4434, 7, 7, 0, 0, 4434, 4435, 7, 8, 0, 0, 4435, 4436, 7, 22, 0, 0, 4436, 4437, 7, 7, 0, 0, 4437, 520, 1, 0, 0, 0, 4438, 4439, 7, 27, 0, 0, 4439, 4440, 7, 11, 0, 0, 4440, 4441, 7, 19, 0, 0, 4441, 4442, 7, 12, 0, 0, 4442, 4443, 5, 95, 0, 0, 4443, 4444, 7, 23, 0, 0, 4444, 4445, 7, 7, 0, 0, 4445, 4446, 7, 8, 0, 0, 4446, 4447, 7, 22, 0, 0, 4447, 4448, 7, 7, 0, 0, 4448, 4449, 5, 95, 0, 0, 4449, 4450, 7, 25, 0, 0, 4450, 4451, 7, 3, 0, 0, 4451, 4452, 7, 6, 0, 0, 4452, 4453, 7, 14, 0, 0, 4453, 4454, 7, 20, 0, 0, 4454, 522, 1, 0, 0, 0, 4455, 4456, 7, 27, 0, 0, 4456, 4457, 7, 11, 0, 0, 4457, 4458, 7, 19, 0, 0, 4458, 4459, 7, 12, 0, 0, 4459, 4460, 5, 95, 0, 0, 4460, 4461, 7, 23, 0, 0, 4461, 4462, 7, 7, 0, 0, 4462, 4463, 7, 8, 0, 0, 4463, 4464, 7, 22, 0, 0, 4464, 4465, 7, 7, 0, 0, 4465, 4466, 5, 95, 0, 0, 4466, 4467, 7, 25, 0, 0, 4467, 4468, 7, 8, 0, 0, 4468, 4469, 7, 7, 0, 0, 4469, 4470, 7, 11, 0, 0, 4470, 4471, 7, 7, 0, 0, 4471, 4472, 7, 8, 0, 0, 4472, 4473, 7, 24, 0, 0, 4473, 4474, 7, 7, 0, 0, 4474, 524, 1, 0, 0, 0, 4475, 4476, 7, 27, 0, 0, 4476, 4477, 7, 11, 0, 0, 4477, 4478, 7, 19, 0, 0, 4478, 4479, 7, 12, 0, 0, 4479, 4480, 5, 95, 0, 0, 4480, 4481, 7, 19, 0, 0, 4481, 4482, 7, 16, 0, 0, 4482, 4483, 7, 27, 0, 0, 4483, 4484, 7, 7, 0, 0, 4484, 4485, 7, 14, 0, 0, 4485, 4486, 7, 6, 0, 0, 4486, 526, 1, 0, 0, 0, 4487, 4488, 7, 27, 0, 0, 4488, 4489, 7, 11, 0, 0, 4489, 4490, 7, 19, 0, 0, 4490, 4491, 7, 12, 0, 0, 4491, 4492, 5, 95, 0, 0, 4492, 4493, 7, 19, 0, 0, 4493, 4494, 7, 16, 0, 0, 4494, 4495, 7, 27, 0, 0, 4495, 4496, 7, 7, 0, 0, 4496, 4497, 7, 14, 0, 0, 4497, 4498, 7, 6, 0, 0, 4498, 4499, 7, 3, 0, 0, 4499, 4500, 7, 22, 0, 0, 4500, 4501, 7, 22, 0, 0, 4501, 528, 1, 0, 0, 0, 4502, 4503, 7, 27, 0, 0, 4503, 4504, 7, 11, 0, 0, 4504, 4505, 7, 19, 0, 0, 4505, 4506, 7, 12, 0, 0, 4506, 4507, 5, 95, 0, 0, 4507, 4508, 7, 19, 0, 0, 4508, 4509, 7, 24, 0, 0, 4509, 4510, 7, 7, 0, 0, 4510, 4511, 7, 8, 0, 0, 4511, 4512, 7, 5, 0, 0, 4512, 4513, 7, 3, 0, 0, 4513, 4514, 7, 25, 0, 0, 4514, 4515, 7, 11, 0, 0, 4515, 530, 1, 0, 0, 0, 4516, 4517, 7, 27, 0, 0, 4517, 4518, 7, 11, 0, 0, 4518, 4519, 7, 19, 0, 0, 4519, 4520, 7, 12, 0, 0, 4520, 4521, 5, 95, 0, 0, 4521, 4522, 7, 25, 0, 0, 4522, 4523, 7, 8, 0, 0, 4523, 4524, 7, 7, 0, 0, 4524, 4525, 7, 6, 0, 0, 4525, 4526, 7, 6, 0, 0, 4526, 4527, 7, 10, 0, 0, 4527, 532, 1, 0, 0, 0, 4528, 4529, 7, 27, 0, 0, 4529, 4530, 7, 11, 0, 0, 4530, 4531, 7, 19, 0, 0, 4531, 4532, 7, 12, 0, 0, 4532, 4533, 5, 95, 0, 0, 4533, 4534, 7, 28, 0, 0, 4534, 4535, 7, 17, 0, 0, 4535, 4536, 7, 19, 0, 0, 4536, 4537, 7, 6, 0, 0, 4537, 4538, 7, 7, 0, 0, 4538, 534, 1, 0, 0, 0, 4539, 4540, 7, 27, 0, 0, 4540, 4541, 7, 11, 0, 0, 4541, 4542, 7, 19, 0, 0, 4542, 4543, 7, 12, 0, 0, 4543, 4544, 5, 95, 0, 0, 4544, 4545, 7, 8, 0, 0, 4545, 4546, 7, 7, 0, 0, 4546, 4547, 7, 23, 0, 0, 4547, 4548, 7, 19, 0, 0, 4548, 4549, 7, 24, 0, 0, 4549, 4550, 7, 7, 0, 0, 4550, 536, 1, 0, 0, 0, 4551, 4552, 7, 27, 0, 0, 4552, 4553, 7, 11, 0, 0, 4553, 4554, 7, 19, 0, 0, 4554, 4555, 7, 12, 0, 0, 4555, 4556, 5, 95, 0, 0, 4556, 4557, 7, 8, 0, 0, 4557, 4558, 7, 7, 0, 0, 4558, 4559, 7, 25, 0, 0, 4559, 4560, 7, 5, 0, 0, 4560, 4561, 7, 3, 0, 0, 4561, 4562, 7, 14, 0, 0, 4562, 4563, 7, 7, 0, 0, 4563, 538, 1, 0, 0, 0, 4564, 4565, 7, 27, 0, 0, 4565, 4566, 7, 11, 0, 0, 4566, 4567, 7, 19, 0, 0, 4567, 4568, 7, 12, 0, 0, 4568, 4569, 5, 95, 0, 0, 4569, 4570, 7, 11, 0, 0, 4570, 4571, 7, 14, 0, 0, 4571, 4572, 7, 20, 0, 0, 4572, 4573, 7, 7, 0, 0, 4573, 4574, 7, 23, 0, 0, 4574, 4575, 7, 3, 0, 0, 4575, 4576, 5, 95, 0, 0, 4576, 4577, 7, 24, 0, 0, 4577, 4578, 7, 3, 0, 0, 4578, 4579, 7, 5, 0, 0, 4579, 4580, 7, 15, 0, 0, 4580, 4581, 7, 4, 0, 0, 4581, 540, 1, 0, 0, 0, 4582, 4583, 7, 27, 0, 0, 4583, 4584, 7, 11, 0, 0, 4584, 4585, 7, 19, 0, 0, 4585, 4586, 7, 12, 0, 0, 4586, 4587, 5, 95, 0, 0, 4587, 4588, 7, 11, 0, 0, 4588, 4589, 7, 14, 0, 0, 4589, 4590, 7, 20, 0, 0, 4590, 4591, 7, 7, 0, 0, 4591, 4592, 7, 23, 0, 0, 4592, 4593, 7, 3, 0, 0, 4593, 4594, 5, 95, 0, 0, 4594, 4595, 7, 24, 0, 0, 4595, 4596, 7, 3, 0, 0, 4596, 4597, 7, 5, 0, 0, 4597, 4598, 7, 15, 0, 0, 4598, 4599, 7, 4, 0, 0, 4599, 4600, 7, 3, 0, 0, 4600, 4601, 7, 6, 0, 0, 4601, 4602, 7, 15, 0, 0, 4602, 4603, 7, 19, 0, 0, 4603, 4604, 7, 12, 0, 0, 4604, 4605, 5, 95, 0, 0, 4605, 4606, 7, 8, 0, 0, 4606, 4607, 7, 7, 0, 0, 4607, 4608, 7, 25, 0, 0, 4608, 4609, 7, 19, 0, 0, 4609, 4610, 7, 8, 0, 0, 4610, 4611, 7, 6, 0, 0, 4611, 542, 1, 0, 0, 0, 4612, 4613, 7, 27, 0, 0, 4613, 4614, 7, 11, 0, 0, 4614, 4615, 7, 19, 0, 0, 4615, 4616, 7, 12, 0, 0, 4616, 4617, 5, 95, 0, 0, 4617, 4618, 7, 11, 0, 0, 4618, 4619, 7, 7, 0, 0, 4619, 4620, 7, 3, 0, 0, 4620, 4621, 7, 8, 0, 0, 4621, 4622, 7, 14, 0, 0, 4622, 4623, 7, 20, 0, 0, 4623, 544, 1, 0, 0, 0, 4624, 4625, 7, 27, 0, 0, 4625, 4626, 7, 11, 0, 0, 4626, 4627, 7, 19, 0, 0, 4627, 4628, 7, 12, 0, 0, 4628, 4629, 5, 95, 0, 0, 4629, 4630, 7, 11, 0, 0, 4630, 4631, 7, 7, 0, 0, 4631, 4632, 7, 6, 0, 0, 4632, 546, 1, 0, 0, 0, 4633, 4634, 7, 27, 0, 0, 4634, 4635, 7, 11, 0, 0, 4635, 4636, 7, 19, 0, 0, 4636, 4637, 7, 12, 0, 0, 4637, 4638, 5, 95, 0, 0, 4638, 4639, 7, 11, 0, 0, 4639, 4640, 7, 6, 0, 0, 4640, 4641, 7, 19, 0, 0, 4641, 4642, 7, 8, 0, 0, 4642, 4643, 7, 3, 0, 0, 4643, 4644, 7, 22, 0, 0, 4644, 4645, 7, 7, 0, 0, 4645, 4646, 5, 95, 0, 0, 4646, 4647, 7, 18, 0, 0, 4647, 4648, 7, 8, 0, 0, 4648, 4649, 7, 7, 0, 0, 4649, 4650, 7, 7, 0, 0, 4650, 548, 1, 0, 0, 0, 4651, 4652, 7, 27, 0, 0, 4652, 4653, 7, 11, 0, 0, 4653, 4654, 7, 19, 0, 0, 4654, 4655, 7, 12, 0, 0, 4655, 4656, 5, 95, 0, 0, 4656, 4657, 7, 11, 0, 0, 4657, 4658, 7, 6, 0, 0, 4658, 4659, 7, 19, 0, 0, 4659, 4660, 7, 8, 0, 0, 4660, 4661, 7, 3, 0, 0, 4661, 4662, 7, 22, 0, 0, 4662, 4663, 7, 7, 0, 0, 4663, 4664, 5, 95, 0, 0, 4664, 4665, 7, 11, 0, 0, 4665, 4666, 7, 15, 0, 0, 4666, 4667, 7, 13, 0, 0, 4667, 4668, 7, 7, 0, 0, 4668, 550, 1, 0, 0, 0, 4669, 4670, 7, 27, 0, 0, 4670, 4671, 7, 11, 0, 0, 4671, 4672, 7, 19, 0, 0, 4672, 4673, 7, 12, 0, 0, 4673, 4674, 5, 95, 0, 0, 4674, 4675, 7, 6, 0, 0, 4675, 4676, 7, 3, 0, 0, 4676, 4677, 7, 16, 0, 0, 4677, 4678, 7, 5, 0, 0, 4678, 4679, 7, 7, 0, 0, 4679, 552, 1, 0, 0, 0, 4680, 4681, 7, 27, 0, 0, 4681, 4682, 7, 11, 0, 0, 4682, 4683, 7, 19, 0, 0, 4683, 4684, 7, 12, 0, 0, 4684, 4685, 5, 95, 0, 0, 4685, 4686, 7, 6, 0, 0, 4686, 4687, 7, 10, 0, 0, 4687, 4688, 7, 25, 0, 0, 4688, 4689, 7, 7, 0, 0, 4689, 554, 1, 0, 0, 0, 4690, 4691, 7, 27, 0, 0, 4691, 4692, 7, 11, 0, 0, 4692, 4693, 7, 19, 0, 0, 4693, 4694, 7, 12, 0, 0, 4694, 4695, 5, 95, 0, 0, 4695, 4696, 7, 17, 0, 0, 4696, 4697, 7, 12, 0, 0, 4697, 4698, 7, 28, 0, 0, 4698, 4699, 7, 17, 0, 0, 4699, 4700, 7, 19, 0, 0, 4700, 4701, 7, 6, 0, 0, 4701, 4702, 7, 7, 0, 0, 4702, 556, 1, 0, 0, 0, 4703, 4704, 7, 27, 0, 0, 4704, 4705, 7, 11, 0, 0, 4705, 4706, 7, 19, 0, 0, 4706, 4707, 7, 12, 0, 0, 4707, 4708, 5, 95, 0, 0, 4708, 4709, 7, 24, 0, 0, 4709, 4710, 7, 3, 0, 0, 4710, 4711, 7, 5, 0, 0, 4711, 4712, 7, 15, 0, 0, 4712, 4713, 7, 4, 0, 0, 4713, 558, 1, 0, 0, 0, 4714, 4715, 7, 27, 0, 0, 4715, 4716, 7, 11, 0, 0, 4716, 4717, 7, 19, 0, 0, 4717, 4718, 7, 12, 0, 0, 4718, 4719, 5, 95, 0, 0, 4719, 4720, 7, 24, 0, 0, 4720, 4721, 7, 3, 0, 0, 4721, 4722, 7, 5, 0, 0, 4722, 4723, 7, 17, 0, 0, 4723, 4724, 7, 7, 0, 0, 4724, 560, 1, 0, 0, 0, 4725, 4726, 7, 12, 0, 0, 4726, 4727, 7, 7, 0, 0, 4727, 4728, 7, 11, 0, 0, 4728, 4729, 7, 6, 0, 0, 4729, 4730, 7, 7, 0, 0, 4730, 4731, 7, 4, 0, 0, 4731, 562, 1, 0, 0, 0, 4732, 4733, 7, 19, 0, 0, 4733, 4734, 7, 8, 0, 0, 4734, 4735, 7, 4, 0, 0, 4735, 4736, 7, 15, 0, 0, 4736, 4737, 7, 12, 0, 0, 4737, 4738, 7, 3, 0, 0, 4738, 4739, 7, 5, 0, 0, 4739, 4740, 7, 15, 0, 0, 4740, 4741, 7, 6, 0, 0, 4741, 4742, 7, 10, 0, 0, 4742, 564, 1, 0, 0, 0, 4743, 4744, 7, 25, 0, 0, 4744, 4745, 7, 3, 0, 0, 4745, 4746, 7, 6, 0, 0, 4746, 4747, 7, 20, 0, 0, 4747, 566, 1, 0, 0, 0, 4748, 4749, 7, 3, 0, 0, 4749, 4750, 7, 24, 0, 0, 4750, 4751, 7, 22, 0, 0, 4751, 568, 1, 0, 0, 0, 4752, 4753, 7, 16, 0, 0, 4753, 4754, 7, 15, 0, 0, 4754, 4755, 7, 6, 0, 0, 4755, 4756, 5, 95, 0, 0, 4756, 4757, 7, 3, 0, 0, 4757, 4758, 7, 12, 0, 0, 4758, 4759, 7, 4, 0, 0, 4759, 570, 1, 0, 0, 0, 4760, 4761, 7, 16, 0, 0, 4761, 4762, 7, 15, 0, 0, 4762, 4763, 7, 6, 0, 0, 4763, 4764, 5, 95, 0, 0, 4764, 4765, 7, 19, 0, 0, 4765, 4766, 7, 8, 0, 0, 4766, 572, 1, 0, 0, 0, 4767, 4768, 7, 16, 0, 0, 4768, 4769, 7, 15, 0, 0, 4769, 4770, 7, 6, 0, 0, 4770, 4771, 5, 95, 0, 0, 4771, 4772, 7, 26, 0, 0, 4772, 4773, 7, 19, 0, 0, 4773, 4774, 7, 8, 0, 0, 4774, 574, 1, 0, 0, 0, 4775, 4776, 7, 14, 0, 0, 4776, 4777, 7, 19, 0, 0, 4777, 4778, 7, 17, 0, 0, 4778, 4779, 7, 12, 0, 0, 4779, 4780, 7, 6, 0, 0, 4780, 576, 1, 0, 0, 0, 4781, 4782, 7, 14, 0, 0, 4782, 4783, 7, 17, 0, 0, 4783, 4784, 7, 23, 0, 0, 4784, 4785, 7, 7, 0, 0, 4785, 4786, 5, 95, 0, 0, 4786, 4787, 7, 4, 0, 0, 4787, 4788, 7, 15, 0, 0, 4788, 4789, 7, 11, 0, 0, 4789, 4790, 7, 6, 0, 0, 4790, 578, 1, 0, 0, 0, 4791, 4792, 7, 4, 0, 0, 4792, 4793, 7, 7, 0, 0, 4793, 4794, 7, 12, 0, 0, 4794, 4795, 7, 11, 0, 0, 4795, 4796, 7, 7, 0, 0, 4796, 4797, 5, 95, 0, 0, 4797, 4798, 7, 8, 0, 0, 4798, 4799, 7, 3, 0, 0, 4799, 4800, 7, 12, 0, 0, 4800, 4801, 7, 21, 0, 0, 4801, 580, 1, 0, 0, 0, 4802, 4803, 7, 18, 0, 0, 4803, 4804, 7, 15, 0, 0, 4804, 4805, 7, 8, 0, 0, 4805, 4806, 7, 11, 0, 0, 4806, 4807, 7, 6, 0, 0, 4807, 4808, 5, 95, 0, 0, 4808, 4809, 7, 24, 0, 0, 4809, 4810, 7, 3, 0, 0, 4810, 4811, 7, 5, 0, 0, 4811, 4812, 7, 17, 0, 0, 4812, 4813, 7, 7, 0, 0, 4813, 582, 1, 0, 0, 0, 4814, 4815, 7, 22, 0, 0, 4815, 4816, 7, 8, 0, 0, 4816, 4817, 7, 19, 0, 0, 4817, 4818, 7, 17, 0, 0, 4818, 4819, 7, 25, 0, 0, 4819, 4820, 5, 95, 0, 0, 4820, 4821, 7, 14, 0, 0, 4821, 4822, 7, 19, 0, 0, 4822, 4823, 7, 12, 0, 0, 4823, 4824, 7, 14, 0, 0, 4824, 4825, 7, 3, 0, 0, 4825, 4826, 7, 6, 0, 0, 4826, 584, 1, 0, 0, 0, 4827, 4828, 7, 5, 0, 0, 4828, 4829, 7, 3, 0, 0, 4829, 4830, 7, 22, 0, 0, 4830, 586, 1, 0, 0, 0, 4831, 4832, 7, 5, 0, 0, 4832, 4833, 7, 3, 0, 0, 4833, 4834, 7, 11, 0, 0, 4834, 4835, 7, 6, 0, 0, 4835, 4836, 5, 95, 0, 0, 4836, 4837, 7, 24, 0, 0, 4837, 4838, 7, 3, 0, 0, 4838, 4839, 7, 5, 0, 0, 4839, 4840, 7, 17, 0, 0, 4840, 4841, 7, 7, 0, 0, 4841, 588, 1, 0, 0, 0, 4842, 4843, 7, 5, 0, 0, 4843, 4844, 7, 7, 0, 0, 4844, 4845, 7, 3, 0, 0, 4845, 4846, 7, 4, 0, 0, 4846, 590, 1, 0, 0, 0, 4847, 4848, 7, 23, 0, 0, 4848, 4849, 7, 3, 0, 0, 4849, 4850, 7, 26, 0, 0, 4850, 592, 1, 0, 0, 0, 4851, 4852, 7, 23, 0, 0, 4852, 4853, 7, 15, 0, 0, 4853, 4854, 7, 12, 0, 0, 4854, 594, 1, 0, 0, 0, 4855, 4856, 7, 12, 0, 0, 4856, 4857, 7, 6, 0, 0, 4857, 4858, 7, 15, 0, 0, 4858, 4859, 7, 5, 0, 0, 4859, 4860, 7, 7, 0, 0, 4860, 596, 1, 0, 0, 0, 4861, 4862, 7, 12, 0, 0, 4862, 4863, 7, 6, 0, 0, 4863, 4864, 7, 20, 0, 0, 4864, 4865, 5, 95, 0, 0, 4865, 4866, 7, 24, 0, 0, 4866, 4867, 7, 3, 0, 0, 4867, 4868, 7, 5, 0, 0, 4868, 4869, 7, 17, 0, 0, 4869, 4870, 7, 7, 0, 0, 4870, 598, 1, 0, 0, 0, 4871, 4872, 7, 25, 0, 0, 4872, 4873, 7, 7, 0, 0, 4873, 4874, 7, 8, 0, 0, 4874, 4875, 7, 14, 0, 0, 4875, 4876, 7, 7, 0, 0, 4876, 4877, 7, 12, 0, 0, 4877, 4878, 7, 6, 0, 0, 4878, 4879, 5, 95, 0, 0, 4879, 4880, 7, 8, 0, 0, 4880, 4881, 7, 3, 0, 0, 4881, 4882, 7, 12, 0, 0, 4882, 4883, 7, 21, 0, 0, 4883, 600, 1, 0, 0, 0, 4884, 4885, 7, 8, 0, 0, 4885, 4886, 7, 3, 0, 0, 4886, 4887, 7, 12, 0, 0, 4887, 4888, 7, 21, 0, 0, 4888, 602, 1, 0, 0, 0, 4889, 4890, 7, 8, 0, 0, 4890, 4891, 7, 19, 0, 0, 4891, 4892, 7, 9, 0, 0, 4892, 4893, 5, 95, 0, 0, 4893, 4894, 7, 12, 0, 0, 4894, 4895, 7, 17, 0, 0, 4895, 4896, 7, 23, 0, 0, 4896, 4897, 7, 16, 0, 0, 4897, 4898, 7, 7, 0, 0, 4898, 4899, 7, 8, 0, 0, 4899, 604, 1, 0, 0, 0, 4900, 4901, 7, 11, 0, 0, 4901, 4902, 7, 6, 0, 0, 4902, 4903, 7, 4, 0, 0, 4903, 606, 1, 0, 0, 0, 4904, 4905, 7, 11, 0, 0, 4905, 4906, 7, 6, 0, 0, 4906, 4907, 7, 4, 0, 0, 4907, 4908, 7, 4, 0, 0, 4908, 4909, 7, 7, 0, 0, 4909, 4910, 7, 24, 0, 0, 4910, 608, 1, 0, 0, 0, 4911, 4912, 7, 11, 0, 0, 4912, 4913, 7, 6, 0, 0, 4913, 4914, 7, 4, 0, 0, 4914, 4915, 7, 4, 0, 0, 4915, 4916, 7, 7, 0, 0, 4916, 4917, 7, 24, 0, 0, 4917, 4918, 5, 95, 0, 0, 4918, 4919, 7, 25, 0, 0, 4919, 4920, 7, 19, 0, 0, 4920, 4921, 7, 25, 0, 0, 4921, 610, 1, 0, 0, 0, 4922, 4923, 7, 11, 0, 0, 4923, 4924, 7, 6, 0, 0, 4924, 4925, 7, 4, 0, 0, 4925, 4926, 7, 4, 0, 0, 4926, 4927, 7, 7, 0, 0, 4927, 4928, 7, 24, 0, 0, 4928, 4929, 5, 95, 0, 0, 4929, 4930, 7, 11, 0, 0, 4930, 4931, 7, 3, 0, 0, 4931, 4932, 7, 23, 0, 0, 4932, 4933, 7, 25, 0, 0, 4933, 612, 1, 0, 0, 0, 4934, 4935, 7, 11, 0, 0, 4935, 4936, 7, 17, 0, 0, 4936, 4937, 7, 23, 0, 0, 4937, 614, 1, 0, 0, 0, 4938, 4939, 7, 24, 0, 0, 4939, 4940, 7, 3, 0, 0, 4940, 4941, 7, 8, 0, 0, 4941, 4942, 5, 95, 0, 0, 4942, 4943, 7, 25, 0, 0, 4943, 4944, 7, 19, 0, 0, 4944, 4945, 7, 25, 0, 0, 4945, 616, 1, 0, 0, 0, 4946, 4947, 7, 24, 0, 0, 4947, 4948, 7, 3, 0, 0, 4948, 4949, 7, 8, 0, 0, 4949, 4950, 5, 95, 0, 0, 4950, 4951, 7, 11, 0, 0, 4951, 4952, 7, 3, 0, 0, 4952, 4953, 7, 23, 0, 0, 4953, 4954, 7, 25, 0, 0, 4954, 618, 1, 0, 0, 0, 4955, 4956, 7, 24, 0, 0, 4956, 4957, 7, 3, 0, 0, 4957, 4958, 7, 8, 0, 0, 4958, 4959, 7, 15, 0, 0, 4959, 4960, 7, 3, 0, 0, 4960, 4961, 7, 12, 0, 0, 4961, 4962, 7, 14, 0, 0, 4962, 4963, 7, 7, 0, 0, 4963, 620, 1, 0, 0, 0, 4964, 4965, 7, 14, 0, 0, 4965, 4966, 7, 17, 0, 0, 4966, 4967, 7, 8, 0, 0, 4967, 4968, 7, 8, 0, 0, 4968, 4969, 7, 7, 0, 0, 4969, 4970, 7, 12, 0, 0, 4970, 4971, 7, 6, 0, 0, 4971, 4972, 5, 95, 0, 0, 4972, 4973, 7, 4, 0, 0, 4973, 4974, 7, 3, 0, 0, 4974, 4975, 7, 6, 0, 0, 4975, 4976, 7, 7, 0, 0, 4976, 622, 1, 0, 0, 0, 4977, 4978, 7, 14, 0, 0, 4978, 4979, 7, 17, 0, 0, 4979, 4980, 7, 8, 0, 0, 4980, 4981, 7, 8, 0, 0, 4981, 4982, 7, 7, 0, 0, 4982, 4983, 7, 12, 0, 0, 4983, 4984, 7, 6, 0, 0, 4984, 4985, 5, 95, 0, 0, 4985, 4986, 7, 6, 0, 0, 4986, 4987, 7, 15, 0, 0, 4987, 4988, 7, 23, 0, 0, 4988, 4989, 7, 7, 0, 0, 4989, 624, 1, 0, 0, 0, 4990, 4991, 7, 14, 0, 0, 4991, 4992, 7, 17, 0, 0, 4992, 4993, 7, 8, 0, 0, 4993, 4994, 7, 8, 0, 0, 4994, 4995, 7, 7, 0, 0, 4995, 4996, 7, 12, 0, 0, 4996, 4997, 7, 6, 0, 0, 4997, 4998, 5, 95, 0, 0, 4998, 4999, 7, 6, 0, 0, 4999, 5000, 7, 15, 0, 0, 5000, 5001, 7, 23, 0, 0, 5001, 5002, 7, 7, 0, 0, 5002, 5003, 7, 11, 0, 0, 5003, 5004, 7, 6, 0, 0, 5004, 5005, 7, 3, 0, 0, 5005, 5006, 7, 23, 0, 0, 5006, 5007, 7, 25, 0, 0, 5007, 626, 1, 0, 0, 0, 5008, 5009, 7, 5, 0, 0, 5009, 5010, 7, 19, 0, 0, 5010, 5011, 7, 14, 0, 0, 5011, 5012, 7, 3, 0, 0, 5012, 5013, 7, 5, 0, 0, 5013, 5014, 7, 6, 0, 0, 5014, 5015, 7, 15, 0, 0, 5015, 5016, 7, 23, 0, 0, 5016, 5017, 7, 7, 0, 0, 5017, 628, 1, 0, 0, 0, 5018, 5019, 7, 14, 0, 0, 5019, 5020, 7, 17, 0, 0, 5020, 5021, 7, 8, 0, 0, 5021, 5022, 7, 4, 0, 0, 5022, 5023, 7, 3, 0, 0, 5023, 5024, 7, 6, 0, 0, 5024, 5025, 7, 7, 0, 0, 5025, 630, 1, 0, 0, 0, 5026, 5027, 7, 14, 0, 0, 5027, 5028, 7, 17, 0, 0, 5028, 5029, 7, 8, 0, 0, 5029, 5030, 7, 6, 0, 0, 5030, 5031, 7, 15, 0, 0, 5031, 5032, 7, 23, 0, 0, 5032, 5033, 7, 7, 0, 0, 5033, 632, 1, 0, 0, 0, 5034, 5035, 7, 4, 0, 0, 5035, 5036, 7, 3, 0, 0, 5036, 5037, 7, 6, 0, 0, 5037, 5038, 7, 7, 0, 0, 5038, 5039, 5, 95, 0, 0, 5039, 5040, 7, 3, 0, 0, 5040, 5041, 7, 4, 0, 0, 5041, 5042, 7, 4, 0, 0, 5042, 634, 1, 0, 0, 0, 5043, 5044, 7, 4, 0, 0, 5044, 5045, 7, 3, 0, 0, 5045, 5046, 7, 6, 0, 0, 5046, 5047, 7, 7, 0, 0, 5047, 5048, 5, 95, 0, 0, 5048, 5049, 7, 11, 0, 0, 5049, 5050, 7, 17, 0, 0, 5050, 5051, 7, 16, 0, 0, 5051, 636, 1, 0, 0, 0, 5052, 5053, 7, 7, 0, 0, 5053, 5054, 7, 26, 0, 0, 5054, 5055, 7, 6, 0, 0, 5055, 5056, 7, 8, 0, 0, 5056, 5057, 7, 3, 0, 0, 5057, 5058, 7, 14, 0, 0, 5058, 5059, 7, 6, 0, 0, 5059, 638, 1, 0, 0, 0, 5060, 5061, 7, 5, 0, 0, 5061, 5062, 7, 19, 0, 0, 5062, 5063, 7, 14, 0, 0, 5063, 5064, 7, 3, 0, 0, 5064, 5065, 7, 5, 0, 0, 5065, 5066, 7, 6, 0, 0, 5066, 5067, 7, 15, 0, 0, 5067, 5068, 7, 23, 0, 0, 5068, 5069, 7, 7, 0, 0, 5069, 5070, 7, 11, 0, 0, 5070, 5071, 7, 6, 0, 0, 5071, 5072, 7, 3, 0, 0, 5072, 5073, 7, 23, 0, 0, 5073, 5074, 7, 25, 0, 0, 5074, 640, 1, 0, 0, 0, 5075, 5076, 7, 12, 0, 0, 5076, 5077, 7, 19, 0, 0, 5077, 5078, 7, 9, 0, 0, 5078, 642, 1, 0, 0, 0, 5079, 5080, 7, 25, 0, 0, 5080, 5081, 7, 19, 0, 0, 5081, 5082, 7, 11, 0, 0, 5082, 5083, 7, 15, 0, 0, 5083, 5084, 7, 6, 0, 0, 5084, 5085, 7, 15, 0, 0, 5085, 5086, 7, 19, 0, 0, 5086, 5087, 7, 12, 0, 0, 5087, 644, 1, 0, 0, 0, 5088, 5089, 7, 11, 0, 0, 5089, 5090, 7, 17, 0, 0, 5090, 5091, 7, 16, 0, 0, 5091, 5092, 7, 11, 0, 0, 5092, 5093, 7, 6, 0, 0, 5093, 5094, 7, 8, 0, 0, 5094, 646, 1, 0, 0, 0, 5095, 5096, 7, 11, 0, 0, 5096, 5097, 7, 17, 0, 0, 5097, 5098, 7, 16, 0, 0, 5098, 5099, 7, 11, 0, 0, 5099, 5100, 7, 6, 0, 0, 5100, 5101, 7, 8, 0, 0, 5101, 5102, 7, 15, 0, 0, 5102, 5103, 7, 12, 0, 0, 5103, 5104, 7, 22, 0, 0, 5104, 648, 1, 0, 0, 0, 5105, 5106, 7, 11, 0, 0, 5106, 5107, 7, 10, 0, 0, 5107, 5108, 7, 11, 0, 0, 5108, 5109, 7, 4, 0, 0, 5109, 5110, 7, 3, 0, 0, 5110, 5111, 7, 6, 0, 0, 5111, 5112, 7, 7, 0, 0, 5112, 650, 1, 0, 0, 0, 5113, 5114, 7, 6, 0, 0, 5114, 5115, 7, 8, 0, 0, 5115, 5116, 7, 15, 0, 0, 5116, 5117, 7, 23, 0, 0, 5117, 652, 1, 0, 0, 0, 5118, 5119, 7, 17, 0, 0, 5119, 5120, 7, 6, 0, 0, 5120, 5121, 7, 14, 0, 0, 5121, 5122, 5, 95, 0, 0, 5122, 5123, 7, 4, 0, 0, 5123, 5124, 7, 3, 0, 0, 5124, 5125, 7, 6, 0, 0, 5125, 5126, 7, 7, 0, 0, 5126, 654, 1, 0, 0, 0, 5127, 5128, 7, 17, 0, 0, 5128, 5129, 7, 6, 0, 0, 5129, 5130, 7, 14, 0, 0, 5130, 5131, 5, 95, 0, 0, 5131, 5132, 7, 6, 0, 0, 5132, 5133, 7, 15, 0, 0, 5133, 5134, 7, 23, 0, 0, 5134, 5135, 7, 7, 0, 0, 5135, 656, 1, 0, 0, 0, 5136, 5137, 7, 17, 0, 0, 5137, 5138, 7, 6, 0, 0, 5138, 5139, 7, 14, 0, 0, 5139, 5140, 5, 95, 0, 0, 5140, 5141, 7, 6, 0, 0, 5141, 5142, 7, 15, 0, 0, 5142, 5143, 7, 23, 0, 0, 5143, 5144, 7, 7, 0, 0, 5144, 5145, 7, 11, 0, 0, 5145, 5146, 7, 6, 0, 0, 5146, 5147, 7, 3, 0, 0, 5147, 5148, 7, 23, 0, 0, 5148, 5149, 7, 25, 0, 0, 5149, 658, 1, 0, 0, 0, 5150, 5151, 7, 3, 0, 0, 5151, 5152, 7, 14, 0, 0, 5152, 5153, 7, 14, 0, 0, 5153, 5154, 7, 19, 0, 0, 5154, 5155, 7, 17, 0, 0, 5155, 5156, 7, 12, 0, 0, 5156, 5157, 7, 6, 0, 0, 5157, 660, 1, 0, 0, 0, 5158, 5159, 7, 3, 0, 0, 5159, 5160, 7, 14, 0, 0, 5160, 5161, 7, 6, 0, 0, 5161, 5162, 7, 15, 0, 0, 5162, 5163, 7, 19, 0, 0, 5163, 5164, 7, 12, 0, 0, 5164, 662, 1, 0, 0, 0, 5165, 5166, 7, 3, 0, 0, 5166, 5167, 7, 18, 0, 0, 5167, 5168, 7, 6, 0, 0, 5168, 5169, 7, 7, 0, 0, 5169, 5170, 7, 8, 0, 0, 5170, 664, 1, 0, 0, 0, 5171, 5172, 7, 3, 0, 0, 5172, 5173, 7, 22, 0, 0, 5173, 5174, 7, 22, 0, 0, 5174, 5175, 7, 8, 0, 0, 5175, 5176, 7, 7, 0, 0, 5176, 5177, 7, 22, 0, 0, 5177, 5178, 7, 3, 0, 0, 5178, 5179, 7, 6, 0, 0, 5179, 5180, 7, 7, 0, 0, 5180, 666, 1, 0, 0, 0, 5181, 5182, 7, 3, 0, 0, 5182, 5183, 7, 5, 0, 0, 5183, 5184, 7, 22, 0, 0, 5184, 5185, 7, 19, 0, 0, 5185, 5186, 7, 8, 0, 0, 5186, 5187, 7, 15, 0, 0, 5187, 5188, 7, 6, 0, 0, 5188, 5189, 7, 20, 0, 0, 5189, 5190, 7, 23, 0, 0, 5190, 668, 1, 0, 0, 0, 5191, 5192, 7, 3, 0, 0, 5192, 5193, 7, 12, 0, 0, 5193, 5194, 7, 10, 0, 0, 5194, 670, 1, 0, 0, 0, 5195, 5196, 7, 3, 0, 0, 5196, 5197, 7, 6, 0, 0, 5197, 672, 1, 0, 0, 0, 5198, 5199, 7, 3, 0, 0, 5199, 5200, 7, 17, 0, 0, 5200, 5201, 7, 6, 0, 0, 5201, 5202, 7, 20, 0, 0, 5202, 5203, 7, 19, 0, 0, 5203, 5204, 7, 8, 0, 0, 5204, 5205, 7, 11, 0, 0, 5205, 674, 1, 0, 0, 0, 5206, 5207, 7, 3, 0, 0, 5207, 5208, 7, 17, 0, 0, 5208, 5209, 7, 6, 0, 0, 5209, 5210, 7, 19, 0, 0, 5210, 5211, 7, 14, 0, 0, 5211, 5212, 7, 19, 0, 0, 5212, 5213, 7, 23, 0, 0, 5213, 5214, 7, 23, 0, 0, 5214, 5215, 7, 15, 0, 0, 5215, 5216, 7, 6, 0, 0, 5216, 676, 1, 0, 0, 0, 5217, 5218, 7, 3, 0, 0, 5218, 5219, 7, 17, 0, 0, 5219, 5220, 7, 6, 0, 0, 5220, 5221, 7, 19, 0, 0, 5221, 5222, 7, 7, 0, 0, 5222, 5223, 7, 26, 0, 0, 5223, 5224, 7, 6, 0, 0, 5224, 5225, 7, 7, 0, 0, 5225, 5226, 7, 12, 0, 0, 5226, 5227, 7, 4, 0, 0, 5227, 5228, 5, 95, 0, 0, 5228, 5229, 7, 11, 0, 0, 5229, 5230, 7, 15, 0, 0, 5230, 5231, 7, 13, 0, 0, 5231, 5232, 7, 7, 0, 0, 5232, 678, 1, 0, 0, 0, 5233, 5234, 7, 3, 0, 0, 5234, 5235, 7, 17, 0, 0, 5235, 5236, 7, 6, 0, 0, 5236, 5237, 7, 19, 0, 0, 5237, 5238, 5, 95, 0, 0, 5238, 5239, 7, 15, 0, 0, 5239, 5240, 7, 12, 0, 0, 5240, 5241, 7, 14, 0, 0, 5241, 5242, 7, 8, 0, 0, 5242, 5243, 7, 7, 0, 0, 5243, 5244, 7, 23, 0, 0, 5244, 5245, 7, 7, 0, 0, 5245, 5246, 7, 12, 0, 0, 5246, 5247, 7, 6, 0, 0, 5247, 680, 1, 0, 0, 0, 5248, 5249, 7, 3, 0, 0, 5249, 5250, 7, 24, 0, 0, 5250, 5251, 7, 22, 0, 0, 5251, 5252, 5, 95, 0, 0, 5252, 5253, 7, 8, 0, 0, 5253, 5254, 7, 19, 0, 0, 5254, 5255, 7, 9, 0, 0, 5255, 5256, 5, 95, 0, 0, 5256, 5257, 7, 5, 0, 0, 5257, 5258, 7, 7, 0, 0, 5258, 5259, 7, 12, 0, 0, 5259, 5260, 7, 22, 0, 0, 5260, 5261, 7, 6, 0, 0, 5261, 5262, 7, 20, 0, 0, 5262, 682, 1, 0, 0, 0, 5263, 5264, 7, 16, 0, 0, 5264, 5265, 7, 7, 0, 0, 5265, 5266, 7, 22, 0, 0, 5266, 5267, 7, 15, 0, 0, 5267, 5268, 7, 12, 0, 0, 5268, 684, 1, 0, 0, 0, 5269, 5270, 7, 16, 0, 0, 5270, 5271, 7, 15, 0, 0, 5271, 5272, 7, 12, 0, 0, 5272, 5273, 7, 5, 0, 0, 5273, 5274, 7, 19, 0, 0, 5274, 5275, 7, 22, 0, 0, 5275, 686, 1, 0, 0, 0, 5276, 5277, 7, 16, 0, 0, 5277, 5278, 7, 15, 0, 0, 5278, 5279, 7, 6, 0, 0, 5279, 688, 1, 0, 0, 0, 5280, 5281, 7, 16, 0, 0, 5281, 5282, 7, 5, 0, 0, 5282, 5283, 7, 19, 0, 0, 5283, 5284, 7, 14, 0, 0, 5284, 5285, 7, 21, 0, 0, 5285, 690, 1, 0, 0, 0, 5286, 5287, 7, 16, 0, 0, 5287, 5288, 7, 19, 0, 0, 5288, 5289, 7, 19, 0, 0, 5289, 5290, 7, 5, 0, 0, 5290, 692, 1, 0, 0, 0, 5291, 5292, 7, 16, 0, 0, 5292, 5293, 7, 19, 0, 0, 5293, 5294, 7, 19, 0, 0, 5294, 5295, 7, 5, 0, 0, 5295, 5296, 7, 7, 0, 0, 5296, 5297, 7, 3, 0, 0, 5297, 5298, 7, 12, 0, 0, 5298, 694, 1, 0, 0, 0, 5299, 5300, 7, 16, 0, 0, 5300, 5301, 7, 6, 0, 0, 5301, 5302, 7, 8, 0, 0, 5302, 5303, 7, 7, 0, 0, 5303, 5304, 7, 7, 0, 0, 5304, 696, 1, 0, 0, 0, 5305, 5306, 7, 14, 0, 0, 5306, 5307, 7, 3, 0, 0, 5307, 5308, 7, 14, 0, 0, 5308, 5309, 7, 20, 0, 0, 5309, 5310, 7, 7, 0, 0, 5310, 698, 1, 0, 0, 0, 5311, 5312, 7, 14, 0, 0, 5312, 5313, 7, 3, 0, 0, 5313, 5314, 7, 11, 0, 0, 5314, 5315, 7, 14, 0, 0, 5315, 5316, 7, 3, 0, 0, 5316, 5317, 7, 4, 0, 0, 5317, 5318, 7, 7, 0, 0, 5318, 5319, 7, 4, 0, 0, 5319, 700, 1, 0, 0, 0, 5320, 5321, 7, 14, 0, 0, 5321, 5322, 7, 20, 0, 0, 5322, 5323, 7, 3, 0, 0, 5323, 5324, 7, 15, 0, 0, 5324, 5325, 7, 12, 0, 0, 5325, 702, 1, 0, 0, 0, 5326, 5327, 7, 14, 0, 0, 5327, 5328, 7, 20, 0, 0, 5328, 5329, 7, 3, 0, 0, 5329, 5330, 7, 12, 0, 0, 5330, 5331, 7, 22, 0, 0, 5331, 5332, 7, 7, 0, 0, 5332, 5333, 7, 4, 0, 0, 5333, 704, 1, 0, 0, 0, 5334, 5335, 7, 14, 0, 0, 5335, 5336, 7, 20, 0, 0, 5336, 5337, 7, 3, 0, 0, 5337, 5338, 7, 12, 0, 0, 5338, 5339, 7, 12, 0, 0, 5339, 5340, 7, 7, 0, 0, 5340, 5341, 7, 5, 0, 0, 5341, 706, 1, 0, 0, 0, 5342, 5343, 7, 14, 0, 0, 5343, 5344, 7, 20, 0, 0, 5344, 5345, 7, 7, 0, 0, 5345, 5346, 7, 14, 0, 0, 5346, 5347, 7, 21, 0, 0, 5347, 5348, 7, 11, 0, 0, 5348, 5349, 7, 17, 0, 0, 5349, 5350, 7, 23, 0, 0, 5350, 708, 1, 0, 0, 0, 5351, 5352, 7, 25, 0, 0, 5352, 5353, 7, 3, 0, 0, 5353, 5354, 7, 22, 0, 0, 5354, 5355, 7, 7, 0, 0, 5355, 5356, 5, 95, 0, 0, 5356, 5357, 7, 14, 0, 0, 5357, 5358, 7, 20, 0, 0, 5358, 5359, 7, 7, 0, 0, 5359, 5360, 7, 14, 0, 0, 5360, 5361, 7, 21, 0, 0, 5361, 5362, 7, 11, 0, 0, 5362, 5363, 7, 17, 0, 0, 5363, 5364, 7, 23, 0, 0, 5364, 710, 1, 0, 0, 0, 5365, 5366, 7, 14, 0, 0, 5366, 5367, 7, 15, 0, 0, 5367, 5368, 7, 25, 0, 0, 5368, 5369, 7, 20, 0, 0, 5369, 5370, 7, 7, 0, 0, 5370, 5371, 7, 8, 0, 0, 5371, 712, 1, 0, 0, 0, 5372, 5373, 7, 14, 0, 0, 5373, 5374, 7, 5, 0, 0, 5374, 5375, 7, 3, 0, 0, 5375, 5376, 7, 11, 0, 0, 5376, 5377, 7, 11, 0, 0, 5377, 5378, 5, 95, 0, 0, 5378, 5379, 7, 19, 0, 0, 5379, 5380, 7, 8, 0, 0, 5380, 5381, 7, 15, 0, 0, 5381, 5382, 7, 22, 0, 0, 5382, 5383, 7, 15, 0, 0, 5383, 5384, 7, 12, 0, 0, 5384, 714, 1, 0, 0, 0, 5385, 5386, 7, 14, 0, 0, 5386, 5387, 7, 5, 0, 0, 5387, 5388, 7, 15, 0, 0, 5388, 5389, 7, 7, 0, 0, 5389, 5390, 7, 12, 0, 0, 5390, 5391, 7, 6, 0, 0, 5391, 716, 1, 0, 0, 0, 5392, 5393, 7, 14, 0, 0, 5393, 5394, 7, 5, 0, 0, 5394, 5395, 7, 19, 0, 0, 5395, 5396, 7, 11, 0, 0, 5396, 5397, 7, 7, 0, 0, 5397, 718, 1, 0, 0, 0, 5398, 5399, 7, 14, 0, 0, 5399, 5400, 7, 5, 0, 0, 5400, 5401, 7, 17, 0, 0, 5401, 5402, 7, 11, 0, 0, 5402, 5403, 7, 6, 0, 0, 5403, 5404, 7, 7, 0, 0, 5404, 5405, 7, 8, 0, 0, 5405, 5406, 7, 15, 0, 0, 5406, 5407, 7, 12, 0, 0, 5407, 5408, 7, 22, 0, 0, 5408, 720, 1, 0, 0, 0, 5409, 5410, 7, 14, 0, 0, 5410, 5411, 7, 19, 0, 0, 5411, 5412, 7, 3, 0, 0, 5412, 5413, 7, 5, 0, 0, 5413, 5414, 7, 7, 0, 0, 5414, 5415, 7, 11, 0, 0, 5415, 5416, 7, 14, 0, 0, 5416, 5417, 7, 7, 0, 0, 5417, 722, 1, 0, 0, 0, 5418, 5419, 7, 14, 0, 0, 5419, 5420, 7, 19, 0, 0, 5420, 5421, 7, 4, 0, 0, 5421, 5422, 7, 7, 0, 0, 5422, 724, 1, 0, 0, 0, 5423, 5424, 7, 14, 0, 0, 5424, 5425, 7, 19, 0, 0, 5425, 5426, 7, 5, 0, 0, 5426, 5427, 7, 17, 0, 0, 5427, 5428, 7, 23, 0, 0, 5428, 5429, 7, 12, 0, 0, 5429, 5430, 7, 11, 0, 0, 5430, 726, 1, 0, 0, 0, 5431, 5432, 7, 14, 0, 0, 5432, 5433, 7, 19, 0, 0, 5433, 5434, 7, 5, 0, 0, 5434, 5435, 7, 17, 0, 0, 5435, 5436, 7, 23, 0, 0, 5436, 5437, 7, 12, 0, 0, 5437, 5438, 5, 95, 0, 0, 5438, 5439, 7, 18, 0, 0, 5439, 5440, 7, 19, 0, 0, 5440, 5441, 7, 8, 0, 0, 5441, 5442, 7, 23, 0, 0, 5442, 5443, 7, 3, 0, 0, 5443, 5444, 7, 6, 0, 0, 5444, 728, 1, 0, 0, 0, 5445, 5446, 7, 14, 0, 0, 5446, 5447, 7, 19, 0, 0, 5447, 5448, 7, 5, 0, 0, 5448, 5449, 7, 17, 0, 0, 5449, 5450, 7, 23, 0, 0, 5450, 5451, 7, 12, 0, 0, 5451, 5452, 5, 95, 0, 0, 5452, 5453, 7, 12, 0, 0, 5453, 5454, 7, 3, 0, 0, 5454, 5455, 7, 23, 0, 0, 5455, 5456, 7, 7, 0, 0, 5456, 730, 1, 0, 0, 0, 5457, 5458, 7, 14, 0, 0, 5458, 5459, 7, 19, 0, 0, 5459, 5460, 7, 23, 0, 0, 5460, 5461, 7, 23, 0, 0, 5461, 5462, 7, 7, 0, 0, 5462, 5463, 7, 12, 0, 0, 5463, 5464, 7, 6, 0, 0, 5464, 732, 1, 0, 0, 0, 5465, 5466, 7, 14, 0, 0, 5466, 5467, 7, 19, 0, 0, 5467, 5468, 7, 23, 0, 0, 5468, 5469, 7, 23, 0, 0, 5469, 5470, 7, 15, 0, 0, 5470, 5471, 7, 6, 0, 0, 5471, 734, 1, 0, 0, 0, 5472, 5473, 7, 14, 0, 0, 5473, 5474, 7, 19, 0, 0, 5474, 5475, 7, 23, 0, 0, 5475, 5476, 7, 25, 0, 0, 5476, 5477, 7, 3, 0, 0, 5477, 5478, 7, 14, 0, 0, 5478, 5479, 7, 6, 0, 0, 5479, 736, 1, 0, 0, 0, 5480, 5481, 7, 14, 0, 0, 5481, 5482, 7, 19, 0, 0, 5482, 5483, 7, 23, 0, 0, 5483, 5484, 7, 25, 0, 0, 5484, 5485, 7, 5, 0, 0, 5485, 5486, 7, 7, 0, 0, 5486, 5487, 7, 6, 0, 0, 5487, 5488, 7, 15, 0, 0, 5488, 5489, 7, 19, 0, 0, 5489, 5490, 7, 12, 0, 0, 5490, 738, 1, 0, 0, 0, 5491, 5492, 7, 14, 0, 0, 5492, 5493, 7, 19, 0, 0, 5493, 5494, 7, 23, 0, 0, 5494, 5495, 7, 25, 0, 0, 5495, 5496, 7, 8, 0, 0, 5496, 5497, 7, 7, 0, 0, 5497, 5498, 7, 11, 0, 0, 5498, 5499, 7, 11, 0, 0, 5499, 5500, 7, 7, 0, 0, 5500, 5501, 7, 4, 0, 0, 5501, 740, 1, 0, 0, 0, 5502, 5503, 7, 14, 0, 0, 5503, 5504, 7, 19, 0, 0, 5504, 5505, 7, 23, 0, 0, 5505, 5506, 7, 25, 0, 0, 5506, 5507, 7, 8, 0, 0, 5507, 5508, 7, 7, 0, 0, 5508, 5509, 7, 11, 0, 0, 5509, 5510, 7, 11, 0, 0, 5510, 5511, 7, 15, 0, 0, 5511, 5512, 7, 19, 0, 0, 5512, 5532, 7, 12, 0, 0, 5513, 5515, 3, 2275, 1137, 0, 5514, 5513, 1, 0, 0, 0, 5514, 5515, 1, 0, 0, 0, 5515, 5516, 1, 0, 0, 0, 5516, 5517, 7, 14, 0, 0, 5517, 5518, 7, 19, 0, 0, 5518, 5519, 7, 23, 0, 0, 5519, 5520, 7, 25, 0, 0, 5520, 5521, 7, 8, 0, 0, 5521, 5522, 7, 7, 0, 0, 5522, 5523, 7, 11, 0, 0, 5523, 5524, 7, 11, 0, 0, 5524, 5525, 7, 15, 0, 0, 5525, 5526, 7, 19, 0, 0, 5526, 5527, 7, 12, 0, 0, 5527, 5529, 1, 0, 0, 0, 5528, 5530, 3, 2275, 1137, 0, 5529, 5528, 1, 0, 0, 0, 5529, 5530, 1, 0, 0, 0, 5530, 5532, 1, 0, 0, 0, 5531, 5502, 1, 0, 0, 0, 5531, 5514, 1, 0, 0, 0, 5532, 742, 1, 0, 0, 0, 5533, 5534, 7, 14, 0, 0, 5534, 5535, 7, 19, 0, 0, 5535, 5536, 7, 12, 0, 0, 5536, 5537, 7, 14, 0, 0, 5537, 5538, 7, 17, 0, 0, 5538, 5539, 7, 8, 0, 0, 5539, 5540, 7, 8, 0, 0, 5540, 5541, 7, 7, 0, 0, 5541, 5542, 7, 12, 0, 0, 5542, 5543, 7, 6, 0, 0, 5543, 744, 1, 0, 0, 0, 5544, 5545, 7, 14, 0, 0, 5545, 5546, 7, 19, 0, 0, 5546, 5547, 7, 12, 0, 0, 5547, 5548, 7, 12, 0, 0, 5548, 5549, 7, 7, 0, 0, 5549, 5550, 7, 14, 0, 0, 5550, 5551, 7, 6, 0, 0, 5551, 746, 1, 0, 0, 0, 5552, 5553, 7, 14, 0, 0, 5553, 5554, 7, 19, 0, 0, 5554, 5555, 7, 12, 0, 0, 5555, 5556, 7, 12, 0, 0, 5556, 5557, 7, 7, 0, 0, 5557, 5558, 7, 14, 0, 0, 5558, 5559, 7, 6, 0, 0, 5559, 5560, 7, 15, 0, 0, 5560, 5561, 7, 19, 0, 0, 5561, 5562, 7, 12, 0, 0, 5562, 748, 1, 0, 0, 0, 5563, 5564, 7, 14, 0, 0, 5564, 5565, 7, 19, 0, 0, 5565, 5566, 7, 12, 0, 0, 5566, 5567, 7, 11, 0, 0, 5567, 5568, 7, 15, 0, 0, 5568, 5569, 7, 11, 0, 0, 5569, 5570, 7, 6, 0, 0, 5570, 5571, 7, 7, 0, 0, 5571, 5572, 7, 12, 0, 0, 5572, 5573, 7, 6, 0, 0, 5573, 750, 1, 0, 0, 0, 5574, 5575, 7, 14, 0, 0, 5575, 5576, 7, 19, 0, 0, 5576, 5577, 7, 12, 0, 0, 5577, 5578, 7, 11, 0, 0, 5578, 5579, 7, 6, 0, 0, 5579, 5580, 7, 8, 0, 0, 5580, 5581, 7, 3, 0, 0, 5581, 5582, 7, 15, 0, 0, 5582, 5583, 7, 12, 0, 0, 5583, 5584, 7, 6, 0, 0, 5584, 5585, 5, 95, 0, 0, 5585, 5586, 7, 14, 0, 0, 5586, 5587, 7, 3, 0, 0, 5587, 5588, 7, 6, 0, 0, 5588, 5589, 7, 3, 0, 0, 5589, 5590, 7, 5, 0, 0, 5590, 5591, 7, 19, 0, 0, 5591, 5592, 7, 22, 0, 0, 5592, 752, 1, 0, 0, 0, 5593, 5594, 7, 14, 0, 0, 5594, 5595, 7, 19, 0, 0, 5595, 5596, 7, 12, 0, 0, 5596, 5597, 7, 11, 0, 0, 5597, 5598, 7, 6, 0, 0, 5598, 5599, 7, 8, 0, 0, 5599, 5600, 7, 3, 0, 0, 5600, 5601, 7, 15, 0, 0, 5601, 5602, 7, 12, 0, 0, 5602, 5603, 7, 6, 0, 0, 5603, 5604, 5, 95, 0, 0, 5604, 5605, 7, 11, 0, 0, 5605, 5606, 7, 14, 0, 0, 5606, 5607, 7, 20, 0, 0, 5607, 5608, 7, 7, 0, 0, 5608, 5609, 7, 23, 0, 0, 5609, 5610, 7, 3, 0, 0, 5610, 754, 1, 0, 0, 0, 5611, 5612, 7, 14, 0, 0, 5612, 5613, 7, 19, 0, 0, 5613, 5614, 7, 12, 0, 0, 5614, 5615, 7, 11, 0, 0, 5615, 5616, 7, 6, 0, 0, 5616, 5617, 7, 8, 0, 0, 5617, 5618, 7, 3, 0, 0, 5618, 5619, 7, 15, 0, 0, 5619, 5620, 7, 12, 0, 0, 5620, 5621, 7, 6, 0, 0, 5621, 5622, 5, 95, 0, 0, 5622, 5623, 7, 12, 0, 0, 5623, 5624, 7, 3, 0, 0, 5624, 5625, 7, 23, 0, 0, 5625, 5626, 7, 7, 0, 0, 5626, 756, 1, 0, 0, 0, 5627, 5628, 7, 14, 0, 0, 5628, 5629, 7, 19, 0, 0, 5629, 5630, 7, 12, 0, 0, 5630, 5631, 7, 6, 0, 0, 5631, 5632, 7, 3, 0, 0, 5632, 5633, 7, 15, 0, 0, 5633, 5634, 7, 12, 0, 0, 5634, 5635, 7, 11, 0, 0, 5635, 758, 1, 0, 0, 0, 5636, 5637, 7, 14, 0, 0, 5637, 5638, 7, 19, 0, 0, 5638, 5639, 7, 12, 0, 0, 5639, 5640, 7, 6, 0, 0, 5640, 5641, 7, 7, 0, 0, 5641, 5642, 7, 26, 0, 0, 5642, 5643, 7, 6, 0, 0, 5643, 760, 1, 0, 0, 0, 5644, 5645, 7, 14, 0, 0, 5645, 5646, 7, 19, 0, 0, 5646, 5647, 7, 12, 0, 0, 5647, 5648, 7, 6, 0, 0, 5648, 5649, 7, 8, 0, 0, 5649, 5650, 7, 15, 0, 0, 5650, 5651, 7, 16, 0, 0, 5651, 5652, 7, 17, 0, 0, 5652, 5653, 7, 6, 0, 0, 5653, 5654, 7, 19, 0, 0, 5654, 5655, 7, 8, 0, 0, 5655, 5656, 7, 11, 0, 0, 5656, 762, 1, 0, 0, 0, 5657, 5658, 7, 14, 0, 0, 5658, 5659, 7, 19, 0, 0, 5659, 5660, 7, 25, 0, 0, 5660, 5661, 7, 10, 0, 0, 5661, 764, 1, 0, 0, 0, 5662, 5663, 7, 14, 0, 0, 5663, 5664, 7, 25, 0, 0, 5664, 5665, 7, 17, 0, 0, 5665, 766, 1, 0, 0, 0, 5666, 5667, 7, 14, 0, 0, 5667, 5668, 7, 10, 0, 0, 5668, 5669, 7, 14, 0, 0, 5669, 5670, 7, 5, 0, 0, 5670, 5671, 7, 7, 0, 0, 5671, 768, 1, 0, 0, 0, 5672, 5673, 7, 14, 0, 0, 5673, 5674, 7, 17, 0, 0, 5674, 5675, 7, 8, 0, 0, 5675, 5676, 7, 11, 0, 0, 5676, 5677, 7, 19, 0, 0, 5677, 5678, 7, 8, 0, 0, 5678, 5679, 5, 95, 0, 0, 5679, 5680, 7, 12, 0, 0, 5680, 5681, 7, 3, 0, 0, 5681, 5682, 7, 23, 0, 0, 5682, 5683, 7, 7, 0, 0, 5683, 770, 1, 0, 0, 0, 5684, 5685, 7, 4, 0, 0, 5685, 5686, 7, 3, 0, 0, 5686, 5687, 7, 6, 0, 0, 5687, 5688, 7, 3, 0, 0, 5688, 772, 1, 0, 0, 0, 5689, 5690, 7, 4, 0, 0, 5690, 5691, 7, 3, 0, 0, 5691, 5692, 7, 6, 0, 0, 5692, 5693, 7, 3, 0, 0, 5693, 5694, 7, 18, 0, 0, 5694, 5695, 7, 15, 0, 0, 5695, 5696, 7, 5, 0, 0, 5696, 5697, 7, 7, 0, 0, 5697, 774, 1, 0, 0, 0, 5698, 5699, 7, 4, 0, 0, 5699, 5700, 7, 7, 0, 0, 5700, 5701, 7, 3, 0, 0, 5701, 5702, 7, 5, 0, 0, 5702, 5703, 7, 5, 0, 0, 5703, 5704, 7, 19, 0, 0, 5704, 5705, 7, 14, 0, 0, 5705, 5706, 7, 3, 0, 0, 5706, 5707, 7, 6, 0, 0, 5707, 5708, 7, 7, 0, 0, 5708, 776, 1, 0, 0, 0, 5709, 5710, 7, 4, 0, 0, 5710, 5711, 7, 7, 0, 0, 5711, 5712, 7, 18, 0, 0, 5712, 5713, 7, 3, 0, 0, 5713, 5714, 7, 17, 0, 0, 5714, 5715, 7, 5, 0, 0, 5715, 5716, 7, 6, 0, 0, 5716, 5717, 5, 95, 0, 0, 5717, 5718, 7, 3, 0, 0, 5718, 5719, 7, 17, 0, 0, 5719, 5720, 7, 6, 0, 0, 5720, 5721, 7, 20, 0, 0, 5721, 778, 1, 0, 0, 0, 5722, 5723, 7, 4, 0, 0, 5723, 5724, 7, 7, 0, 0, 5724, 5725, 7, 18, 0, 0, 5725, 5726, 7, 15, 0, 0, 5726, 5727, 7, 12, 0, 0, 5727, 5728, 7, 7, 0, 0, 5728, 5729, 7, 8, 0, 0, 5729, 780, 1, 0, 0, 0, 5730, 5731, 7, 4, 0, 0, 5731, 5732, 7, 7, 0, 0, 5732, 5733, 7, 5, 0, 0, 5733, 5734, 7, 3, 0, 0, 5734, 5735, 7, 10, 0, 0, 5735, 5736, 5, 95, 0, 0, 5736, 5737, 7, 21, 0, 0, 5737, 5738, 7, 7, 0, 0, 5738, 5739, 7, 10, 0, 0, 5739, 5740, 5, 95, 0, 0, 5740, 5741, 7, 9, 0, 0, 5741, 5742, 7, 8, 0, 0, 5742, 5743, 7, 15, 0, 0, 5743, 5744, 7, 6, 0, 0, 5744, 5745, 7, 7, 0, 0, 5745, 782, 1, 0, 0, 0, 5746, 5747, 7, 4, 0, 0, 5747, 5748, 7, 7, 0, 0, 5748, 5749, 7, 11, 0, 0, 5749, 5750, 5, 95, 0, 0, 5750, 5751, 7, 21, 0, 0, 5751, 5752, 7, 7, 0, 0, 5752, 5753, 7, 10, 0, 0, 5753, 5754, 5, 95, 0, 0, 5754, 5755, 7, 18, 0, 0, 5755, 5756, 7, 15, 0, 0, 5756, 5757, 7, 5, 0, 0, 5757, 5758, 7, 7, 0, 0, 5758, 784, 1, 0, 0, 0, 5759, 5760, 7, 4, 0, 0, 5760, 5761, 7, 15, 0, 0, 5761, 5762, 7, 8, 0, 0, 5762, 5763, 7, 7, 0, 0, 5763, 5764, 7, 14, 0, 0, 5764, 5765, 7, 6, 0, 0, 5765, 5766, 7, 19, 0, 0, 5766, 5767, 7, 8, 0, 0, 5767, 5768, 7, 10, 0, 0, 5768, 786, 1, 0, 0, 0, 5769, 5770, 7, 4, 0, 0, 5770, 5771, 7, 15, 0, 0, 5771, 5772, 7, 11, 0, 0, 5772, 5773, 7, 3, 0, 0, 5773, 5774, 7, 16, 0, 0, 5774, 5775, 7, 5, 0, 0, 5775, 5776, 7, 7, 0, 0, 5776, 788, 1, 0, 0, 0, 5777, 5778, 7, 4, 0, 0, 5778, 5779, 7, 15, 0, 0, 5779, 5780, 7, 11, 0, 0, 5780, 5781, 7, 14, 0, 0, 5781, 5782, 7, 3, 0, 0, 5782, 5783, 7, 8, 0, 0, 5783, 5784, 7, 4, 0, 0, 5784, 790, 1, 0, 0, 0, 5785, 5786, 7, 4, 0, 0, 5786, 5787, 7, 15, 0, 0, 5787, 5788, 7, 11, 0, 0, 5788, 5789, 7, 21, 0, 0, 5789, 792, 1, 0, 0, 0, 5790, 5791, 7, 4, 0, 0, 5791, 5792, 7, 19, 0, 0, 5792, 794, 1, 0, 0, 0, 5793, 5794, 7, 4, 0, 0, 5794, 5795, 7, 17, 0, 0, 5795, 5796, 7, 23, 0, 0, 5796, 5797, 7, 25, 0, 0, 5797, 5798, 7, 18, 0, 0, 5798, 5799, 7, 15, 0, 0, 5799, 5800, 7, 5, 0, 0, 5800, 5801, 7, 7, 0, 0, 5801, 796, 1, 0, 0, 0, 5802, 5803, 7, 4, 0, 0, 5803, 5804, 7, 17, 0, 0, 5804, 5805, 7, 25, 0, 0, 5805, 5806, 7, 5, 0, 0, 5806, 5807, 7, 15, 0, 0, 5807, 5808, 7, 14, 0, 0, 5808, 5809, 7, 3, 0, 0, 5809, 5810, 7, 6, 0, 0, 5810, 5811, 7, 7, 0, 0, 5811, 798, 1, 0, 0, 0, 5812, 5813, 7, 4, 0, 0, 5813, 5814, 7, 10, 0, 0, 5814, 5815, 7, 12, 0, 0, 5815, 5816, 7, 3, 0, 0, 5816, 5817, 7, 23, 0, 0, 5817, 5818, 7, 15, 0, 0, 5818, 5819, 7, 14, 0, 0, 5819, 800, 1, 0, 0, 0, 5820, 5821, 7, 7, 0, 0, 5821, 5822, 7, 12, 0, 0, 5822, 5823, 7, 3, 0, 0, 5823, 5824, 7, 16, 0, 0, 5824, 5825, 7, 5, 0, 0, 5825, 5826, 7, 7, 0, 0, 5826, 802, 1, 0, 0, 0, 5827, 5828, 7, 7, 0, 0, 5828, 5829, 7, 12, 0, 0, 5829, 5830, 7, 14, 0, 0, 5830, 5831, 7, 8, 0, 0, 5831, 5832, 7, 10, 0, 0, 5832, 5833, 7, 25, 0, 0, 5833, 5834, 7, 6, 0, 0, 5834, 5835, 7, 7, 0, 0, 5835, 5836, 7, 4, 0, 0, 5836, 804, 1, 0, 0, 0, 5837, 5838, 7, 7, 0, 0, 5838, 5839, 7, 12, 0, 0, 5839, 5840, 7, 14, 0, 0, 5840, 5841, 7, 8, 0, 0, 5841, 5842, 7, 10, 0, 0, 5842, 5843, 7, 25, 0, 0, 5843, 5844, 7, 6, 0, 0, 5844, 5845, 7, 15, 0, 0, 5845, 5846, 7, 19, 0, 0, 5846, 5847, 7, 12, 0, 0, 5847, 806, 1, 0, 0, 0, 5848, 5849, 7, 7, 0, 0, 5849, 5850, 7, 12, 0, 0, 5850, 5851, 7, 14, 0, 0, 5851, 5852, 7, 8, 0, 0, 5852, 5853, 7, 10, 0, 0, 5853, 5854, 7, 25, 0, 0, 5854, 5855, 7, 6, 0, 0, 5855, 5856, 7, 15, 0, 0, 5856, 5857, 7, 19, 0, 0, 5857, 5858, 7, 12, 0, 0, 5858, 5859, 5, 95, 0, 0, 5859, 5860, 7, 21, 0, 0, 5860, 5861, 7, 7, 0, 0, 5861, 5862, 7, 10, 0, 0, 5862, 5863, 5, 95, 0, 0, 5863, 5864, 7, 15, 0, 0, 5864, 5865, 7, 4, 0, 0, 5865, 808, 1, 0, 0, 0, 5866, 5867, 7, 7, 0, 0, 5867, 5868, 7, 12, 0, 0, 5868, 5869, 7, 4, 0, 0, 5869, 810, 1, 0, 0, 0, 5870, 5871, 7, 7, 0, 0, 5871, 5872, 7, 12, 0, 0, 5872, 5873, 7, 4, 0, 0, 5873, 5874, 7, 11, 0, 0, 5874, 812, 1, 0, 0, 0, 5875, 5876, 7, 7, 0, 0, 5876, 5877, 7, 12, 0, 0, 5877, 5878, 7, 22, 0, 0, 5878, 5879, 7, 15, 0, 0, 5879, 5880, 7, 12, 0, 0, 5880, 5881, 7, 7, 0, 0, 5881, 814, 1, 0, 0, 0, 5882, 5883, 7, 7, 0, 0, 5883, 5884, 7, 12, 0, 0, 5884, 5885, 7, 22, 0, 0, 5885, 5886, 7, 15, 0, 0, 5886, 5887, 7, 12, 0, 0, 5887, 5888, 7, 7, 0, 0, 5888, 5889, 7, 11, 0, 0, 5889, 816, 1, 0, 0, 0, 5890, 5891, 7, 7, 0, 0, 5891, 5892, 7, 8, 0, 0, 5892, 5893, 7, 8, 0, 0, 5893, 5894, 7, 19, 0, 0, 5894, 5895, 7, 8, 0, 0, 5895, 818, 1, 0, 0, 0, 5896, 5897, 7, 7, 0, 0, 5897, 5898, 7, 8, 0, 0, 5898, 5899, 7, 8, 0, 0, 5899, 5900, 7, 19, 0, 0, 5900, 5901, 7, 8, 0, 0, 5901, 5902, 7, 11, 0, 0, 5902, 820, 1, 0, 0, 0, 5903, 5904, 7, 7, 0, 0, 5904, 5905, 7, 11, 0, 0, 5905, 5906, 7, 14, 0, 0, 5906, 5907, 7, 3, 0, 0, 5907, 5908, 7, 25, 0, 0, 5908, 5909, 7, 7, 0, 0, 5909, 822, 1, 0, 0, 0, 5910, 5911, 7, 7, 0, 0, 5911, 5912, 7, 24, 0, 0, 5912, 5913, 7, 7, 0, 0, 5913, 5914, 7, 12, 0, 0, 5914, 824, 1, 0, 0, 0, 5915, 5916, 7, 7, 0, 0, 5916, 5917, 7, 24, 0, 0, 5917, 5918, 7, 7, 0, 0, 5918, 5919, 7, 12, 0, 0, 5919, 5920, 7, 6, 0, 0, 5920, 826, 1, 0, 0, 0, 5921, 5922, 7, 7, 0, 0, 5922, 5923, 7, 24, 0, 0, 5923, 5924, 7, 7, 0, 0, 5924, 5925, 7, 12, 0, 0, 5925, 5926, 7, 6, 0, 0, 5926, 5927, 7, 11, 0, 0, 5927, 828, 1, 0, 0, 0, 5928, 5929, 7, 7, 0, 0, 5929, 5930, 7, 24, 0, 0, 5930, 5931, 7, 7, 0, 0, 5931, 5932, 7, 8, 0, 0, 5932, 5933, 7, 10, 0, 0, 5933, 830, 1, 0, 0, 0, 5934, 5935, 7, 7, 0, 0, 5935, 5936, 7, 26, 0, 0, 5936, 5937, 7, 14, 0, 0, 5937, 5938, 7, 20, 0, 0, 5938, 5939, 7, 3, 0, 0, 5939, 5940, 7, 12, 0, 0, 5940, 5941, 7, 22, 0, 0, 5941, 5942, 7, 7, 0, 0, 5942, 832, 1, 0, 0, 0, 5943, 5944, 7, 7, 0, 0, 5944, 5945, 7, 26, 0, 0, 5945, 5946, 7, 14, 0, 0, 5946, 5947, 7, 5, 0, 0, 5947, 5948, 7, 17, 0, 0, 5948, 5949, 7, 11, 0, 0, 5949, 5950, 7, 15, 0, 0, 5950, 5951, 7, 24, 0, 0, 5951, 5952, 7, 7, 0, 0, 5952, 834, 1, 0, 0, 0, 5953, 5954, 7, 7, 0, 0, 5954, 5955, 7, 26, 0, 0, 5955, 5956, 7, 25, 0, 0, 5956, 5957, 7, 15, 0, 0, 5957, 5958, 7, 8, 0, 0, 5958, 5959, 7, 7, 0, 0, 5959, 836, 1, 0, 0, 0, 5960, 5961, 7, 7, 0, 0, 5961, 5962, 7, 26, 0, 0, 5962, 5963, 7, 25, 0, 0, 5963, 5964, 7, 19, 0, 0, 5964, 5965, 7, 8, 0, 0, 5965, 5966, 7, 6, 0, 0, 5966, 838, 1, 0, 0, 0, 5967, 5968, 7, 7, 0, 0, 5968, 5969, 7, 26, 0, 0, 5969, 5970, 7, 6, 0, 0, 5970, 5971, 7, 7, 0, 0, 5971, 5972, 7, 12, 0, 0, 5972, 5973, 7, 4, 0, 0, 5973, 5974, 7, 7, 0, 0, 5974, 5975, 7, 4, 0, 0, 5975, 840, 1, 0, 0, 0, 5976, 5977, 7, 7, 0, 0, 5977, 5978, 7, 26, 0, 0, 5978, 5979, 7, 6, 0, 0, 5979, 5980, 7, 7, 0, 0, 5980, 5981, 7, 12, 0, 0, 5981, 5982, 7, 6, 0, 0, 5982, 5983, 5, 95, 0, 0, 5983, 5984, 7, 11, 0, 0, 5984, 5985, 7, 15, 0, 0, 5985, 5986, 7, 13, 0, 0, 5986, 5987, 7, 7, 0, 0, 5987, 842, 1, 0, 0, 0, 5988, 5989, 7, 18, 0, 0, 5989, 5990, 7, 3, 0, 0, 5990, 5991, 7, 15, 0, 0, 5991, 5992, 7, 5, 0, 0, 5992, 5993, 7, 7, 0, 0, 5993, 5994, 7, 4, 0, 0, 5994, 5995, 5, 95, 0, 0, 5995, 5996, 7, 5, 0, 0, 5996, 5997, 7, 19, 0, 0, 5997, 5998, 7, 22, 0, 0, 5998, 5999, 7, 15, 0, 0, 5999, 6000, 7, 12, 0, 0, 6000, 6001, 5, 95, 0, 0, 6001, 6002, 7, 3, 0, 0, 6002, 6003, 7, 6, 0, 0, 6003, 6004, 7, 6, 0, 0, 6004, 6005, 7, 7, 0, 0, 6005, 6006, 7, 23, 0, 0, 6006, 6007, 7, 25, 0, 0, 6007, 6008, 7, 6, 0, 0, 6008, 6009, 7, 11, 0, 0, 6009, 844, 1, 0, 0, 0, 6010, 6011, 7, 18, 0, 0, 6011, 6012, 7, 3, 0, 0, 6012, 6013, 7, 11, 0, 0, 6013, 6014, 7, 6, 0, 0, 6014, 846, 1, 0, 0, 0, 6015, 6016, 7, 18, 0, 0, 6016, 6017, 7, 3, 0, 0, 6017, 6018, 7, 17, 0, 0, 6018, 6019, 7, 5, 0, 0, 6019, 6020, 7, 6, 0, 0, 6020, 6021, 7, 11, 0, 0, 6021, 848, 1, 0, 0, 0, 6022, 6023, 7, 18, 0, 0, 6023, 6024, 7, 15, 0, 0, 6024, 6025, 7, 7, 0, 0, 6025, 6026, 7, 5, 0, 0, 6026, 6027, 7, 4, 0, 0, 6027, 6028, 7, 11, 0, 0, 6028, 850, 1, 0, 0, 0, 6029, 6030, 7, 18, 0, 0, 6030, 6031, 7, 15, 0, 0, 6031, 6032, 7, 5, 0, 0, 6032, 6033, 7, 7, 0, 0, 6033, 6034, 5, 95, 0, 0, 6034, 6035, 7, 16, 0, 0, 6035, 6036, 7, 5, 0, 0, 6036, 6037, 7, 19, 0, 0, 6037, 6038, 7, 14, 0, 0, 6038, 6039, 7, 21, 0, 0, 6039, 6040, 5, 95, 0, 0, 6040, 6041, 7, 11, 0, 0, 6041, 6042, 7, 15, 0, 0, 6042, 6043, 7, 13, 0, 0, 6043, 6044, 7, 7, 0, 0, 6044, 852, 1, 0, 0, 0, 6045, 6046, 7, 18, 0, 0, 6046, 6047, 7, 15, 0, 0, 6047, 6048, 7, 5, 0, 0, 6048, 6049, 7, 6, 0, 0, 6049, 6050, 7, 7, 0, 0, 6050, 6051, 7, 8, 0, 0, 6051, 854, 1, 0, 0, 0, 6052, 6053, 7, 18, 0, 0, 6053, 6054, 7, 15, 0, 0, 6054, 6055, 7, 8, 0, 0, 6055, 6056, 7, 11, 0, 0, 6056, 6057, 7, 6, 0, 0, 6057, 856, 1, 0, 0, 0, 6058, 6059, 7, 18, 0, 0, 6059, 6060, 7, 15, 0, 0, 6060, 6061, 7, 26, 0, 0, 6061, 6062, 7, 7, 0, 0, 6062, 6063, 7, 4, 0, 0, 6063, 858, 1, 0, 0, 0, 6064, 6065, 7, 18, 0, 0, 6065, 6066, 7, 5, 0, 0, 6066, 6067, 7, 17, 0, 0, 6067, 6068, 7, 11, 0, 0, 6068, 6069, 7, 20, 0, 0, 6069, 860, 1, 0, 0, 0, 6070, 6071, 7, 18, 0, 0, 6071, 6072, 7, 19, 0, 0, 6072, 6073, 7, 5, 0, 0, 6073, 6074, 7, 5, 0, 0, 6074, 6075, 7, 19, 0, 0, 6075, 6076, 7, 9, 0, 0, 6076, 6077, 7, 15, 0, 0, 6077, 6078, 7, 12, 0, 0, 6078, 6079, 7, 22, 0, 0, 6079, 862, 1, 0, 0, 0, 6080, 6081, 7, 18, 0, 0, 6081, 6082, 7, 19, 0, 0, 6082, 6083, 7, 5, 0, 0, 6083, 6084, 7, 5, 0, 0, 6084, 6085, 7, 19, 0, 0, 6085, 6086, 7, 9, 0, 0, 6086, 6087, 7, 11, 0, 0, 6087, 864, 1, 0, 0, 0, 6088, 6089, 7, 18, 0, 0, 6089, 6090, 7, 19, 0, 0, 6090, 6091, 7, 17, 0, 0, 6091, 6092, 7, 12, 0, 0, 6092, 6093, 7, 4, 0, 0, 6093, 866, 1, 0, 0, 0, 6094, 6095, 7, 18, 0, 0, 6095, 6096, 7, 17, 0, 0, 6096, 6097, 7, 5, 0, 0, 6097, 6098, 7, 5, 0, 0, 6098, 868, 1, 0, 0, 0, 6099, 6100, 7, 18, 0, 0, 6100, 6101, 7, 17, 0, 0, 6101, 6102, 7, 12, 0, 0, 6102, 6103, 7, 14, 0, 0, 6103, 6104, 7, 6, 0, 0, 6104, 6105, 7, 15, 0, 0, 6105, 6106, 7, 19, 0, 0, 6106, 6107, 7, 12, 0, 0, 6107, 870, 1, 0, 0, 0, 6108, 6109, 7, 22, 0, 0, 6109, 6110, 7, 7, 0, 0, 6110, 6111, 7, 12, 0, 0, 6111, 6112, 7, 7, 0, 0, 6112, 6113, 7, 8, 0, 0, 6113, 6114, 7, 3, 0, 0, 6114, 6115, 7, 5, 0, 0, 6115, 872, 1, 0, 0, 0, 6116, 6117, 7, 22, 0, 0, 6117, 6118, 7, 5, 0, 0, 6118, 6119, 7, 19, 0, 0, 6119, 6120, 7, 16, 0, 0, 6120, 6121, 7, 3, 0, 0, 6121, 6122, 7, 5, 0, 0, 6122, 874, 1, 0, 0, 0, 6123, 6124, 7, 22, 0, 0, 6124, 6125, 7, 8, 0, 0, 6125, 6126, 7, 3, 0, 0, 6126, 6127, 7, 12, 0, 0, 6127, 6128, 7, 6, 0, 0, 6128, 6129, 7, 11, 0, 0, 6129, 876, 1, 0, 0, 0, 6130, 6131, 7, 22, 0, 0, 6131, 6132, 7, 8, 0, 0, 6132, 6133, 7, 19, 0, 0, 6133, 6134, 7, 17, 0, 0, 6134, 6135, 7, 25, 0, 0, 6135, 6136, 5, 95, 0, 0, 6136, 6137, 7, 8, 0, 0, 6137, 6138, 7, 7, 0, 0, 6138, 6139, 7, 25, 0, 0, 6139, 6140, 7, 5, 0, 0, 6140, 6141, 7, 15, 0, 0, 6141, 6142, 7, 14, 0, 0, 6142, 6143, 7, 3, 0, 0, 6143, 6144, 7, 6, 0, 0, 6144, 6145, 7, 15, 0, 0, 6145, 6146, 7, 19, 0, 0, 6146, 6147, 7, 12, 0, 0, 6147, 878, 1, 0, 0, 0, 6148, 6149, 7, 20, 0, 0, 6149, 6150, 7, 3, 0, 0, 6150, 6151, 7, 12, 0, 0, 6151, 6152, 7, 4, 0, 0, 6152, 6153, 7, 5, 0, 0, 6153, 6154, 7, 7, 0, 0, 6154, 6155, 7, 8, 0, 0, 6155, 880, 1, 0, 0, 0, 6156, 6157, 7, 20, 0, 0, 6157, 6158, 7, 3, 0, 0, 6158, 6159, 7, 11, 0, 0, 6159, 6160, 7, 20, 0, 0, 6160, 882, 1, 0, 0, 0, 6161, 6162, 7, 20, 0, 0, 6162, 6163, 7, 7, 0, 0, 6163, 6164, 7, 5, 0, 0, 6164, 6165, 7, 25, 0, 0, 6165, 884, 1, 0, 0, 0, 6166, 6167, 7, 20, 0, 0, 6167, 6168, 7, 15, 0, 0, 6168, 6169, 7, 11, 0, 0, 6169, 6170, 7, 6, 0, 0, 6170, 6171, 7, 19, 0, 0, 6171, 6172, 7, 8, 0, 0, 6172, 6173, 7, 10, 0, 0, 6173, 886, 1, 0, 0, 0, 6174, 6175, 7, 20, 0, 0, 6175, 6176, 7, 19, 0, 0, 6176, 6177, 7, 11, 0, 0, 6177, 6178, 7, 6, 0, 0, 6178, 888, 1, 0, 0, 0, 6179, 6180, 7, 20, 0, 0, 6180, 6181, 7, 19, 0, 0, 6181, 6182, 7, 11, 0, 0, 6182, 6183, 7, 6, 0, 0, 6183, 6184, 7, 11, 0, 0, 6184, 890, 1, 0, 0, 0, 6185, 6186, 7, 15, 0, 0, 6186, 6187, 7, 4, 0, 0, 6187, 6188, 7, 7, 0, 0, 6188, 6189, 7, 12, 0, 0, 6189, 6190, 7, 6, 0, 0, 6190, 6191, 7, 15, 0, 0, 6191, 6192, 7, 18, 0, 0, 6192, 6193, 7, 15, 0, 0, 6193, 6194, 7, 7, 0, 0, 6194, 6195, 7, 4, 0, 0, 6195, 892, 1, 0, 0, 0, 6196, 6197, 7, 15, 0, 0, 6197, 6198, 7, 22, 0, 0, 6198, 6199, 7, 12, 0, 0, 6199, 6200, 7, 19, 0, 0, 6200, 6201, 7, 8, 0, 0, 6201, 6202, 7, 7, 0, 0, 6202, 6203, 5, 95, 0, 0, 6203, 6204, 7, 11, 0, 0, 6204, 6205, 7, 7, 0, 0, 6205, 6206, 7, 8, 0, 0, 6206, 6207, 7, 24, 0, 0, 6207, 6208, 7, 7, 0, 0, 6208, 6209, 7, 8, 0, 0, 6209, 6210, 5, 95, 0, 0, 6210, 6211, 7, 15, 0, 0, 6211, 6212, 7, 4, 0, 0, 6212, 6213, 7, 11, 0, 0, 6213, 894, 1, 0, 0, 0, 6214, 6215, 7, 15, 0, 0, 6215, 6216, 7, 23, 0, 0, 6216, 6217, 7, 25, 0, 0, 6217, 6218, 7, 19, 0, 0, 6218, 6219, 7, 8, 0, 0, 6219, 6220, 7, 6, 0, 0, 6220, 896, 1, 0, 0, 0, 6221, 6222, 7, 15, 0, 0, 6222, 6223, 7, 12, 0, 0, 6223, 6224, 7, 14, 0, 0, 6224, 6225, 7, 8, 0, 0, 6225, 6226, 7, 7, 0, 0, 6226, 6227, 7, 23, 0, 0, 6227, 6228, 7, 7, 0, 0, 6228, 6229, 7, 12, 0, 0, 6229, 6230, 7, 6, 0, 0, 6230, 898, 1, 0, 0, 0, 6231, 6232, 7, 15, 0, 0, 6232, 6233, 7, 12, 0, 0, 6233, 6234, 7, 4, 0, 0, 6234, 6235, 7, 7, 0, 0, 6235, 6236, 7, 26, 0, 0, 6236, 6237, 7, 7, 0, 0, 6237, 6238, 7, 11, 0, 0, 6238, 900, 1, 0, 0, 0, 6239, 6240, 7, 15, 0, 0, 6240, 6241, 7, 12, 0, 0, 6241, 6242, 7, 15, 0, 0, 6242, 6243, 7, 6, 0, 0, 6243, 6244, 7, 15, 0, 0, 6244, 6245, 7, 3, 0, 0, 6245, 6246, 7, 5, 0, 0, 6246, 6247, 5, 95, 0, 0, 6247, 6248, 7, 11, 0, 0, 6248, 6249, 7, 15, 0, 0, 6249, 6250, 7, 13, 0, 0, 6250, 6251, 7, 7, 0, 0, 6251, 902, 1, 0, 0, 0, 6252, 6253, 7, 15, 0, 0, 6253, 6254, 7, 12, 0, 0, 6254, 6255, 7, 25, 0, 0, 6255, 6256, 7, 5, 0, 0, 6256, 6257, 7, 3, 0, 0, 6257, 6258, 7, 14, 0, 0, 6258, 6259, 7, 7, 0, 0, 6259, 904, 1, 0, 0, 0, 6260, 6261, 7, 15, 0, 0, 6261, 6262, 7, 12, 0, 0, 6262, 6263, 7, 11, 0, 0, 6263, 6264, 7, 7, 0, 0, 6264, 6265, 7, 8, 0, 0, 6265, 6266, 7, 6, 0, 0, 6266, 6267, 5, 95, 0, 0, 6267, 6268, 7, 23, 0, 0, 6268, 6269, 7, 7, 0, 0, 6269, 6270, 7, 6, 0, 0, 6270, 6271, 7, 20, 0, 0, 6271, 6272, 7, 19, 0, 0, 6272, 6273, 7, 4, 0, 0, 6273, 906, 1, 0, 0, 0, 6274, 6275, 7, 15, 0, 0, 6275, 6276, 7, 12, 0, 0, 6276, 6277, 7, 11, 0, 0, 6277, 6278, 7, 6, 0, 0, 6278, 6279, 7, 3, 0, 0, 6279, 6280, 7, 5, 0, 0, 6280, 6281, 7, 5, 0, 0, 6281, 908, 1, 0, 0, 0, 6282, 6283, 7, 15, 0, 0, 6283, 6284, 7, 12, 0, 0, 6284, 6285, 7, 11, 0, 0, 6285, 6286, 7, 6, 0, 0, 6286, 6287, 7, 3, 0, 0, 6287, 6288, 7, 12, 0, 0, 6288, 6289, 7, 14, 0, 0, 6289, 6290, 7, 7, 0, 0, 6290, 910, 1, 0, 0, 0, 6291, 6292, 7, 15, 0, 0, 6292, 6293, 7, 12, 0, 0, 6293, 6294, 7, 11, 0, 0, 6294, 6295, 7, 6, 0, 0, 6295, 6296, 7, 3, 0, 0, 6296, 6297, 7, 12, 0, 0, 6297, 6298, 7, 6, 0, 0, 6298, 912, 1, 0, 0, 0, 6299, 6300, 7, 15, 0, 0, 6300, 6301, 7, 12, 0, 0, 6301, 6302, 7, 24, 0, 0, 6302, 6303, 7, 15, 0, 0, 6303, 6304, 7, 11, 0, 0, 6304, 6305, 7, 15, 0, 0, 6305, 6306, 7, 16, 0, 0, 6306, 6307, 7, 5, 0, 0, 6307, 6308, 7, 7, 0, 0, 6308, 914, 1, 0, 0, 0, 6309, 6310, 7, 15, 0, 0, 6310, 6311, 7, 12, 0, 0, 6311, 6312, 7, 24, 0, 0, 6312, 6313, 7, 19, 0, 0, 6313, 6314, 7, 21, 0, 0, 6314, 6315, 7, 7, 0, 0, 6315, 6316, 7, 8, 0, 0, 6316, 916, 1, 0, 0, 0, 6317, 6318, 7, 15, 0, 0, 6318, 6319, 7, 19, 0, 0, 6319, 918, 1, 0, 0, 0, 6320, 6321, 7, 15, 0, 0, 6321, 6322, 7, 19, 0, 0, 6322, 6323, 5, 95, 0, 0, 6323, 6324, 7, 6, 0, 0, 6324, 6325, 7, 20, 0, 0, 6325, 6326, 7, 8, 0, 0, 6326, 6327, 7, 7, 0, 0, 6327, 6328, 7, 3, 0, 0, 6328, 6329, 7, 4, 0, 0, 6329, 920, 1, 0, 0, 0, 6330, 6331, 7, 15, 0, 0, 6331, 6332, 7, 25, 0, 0, 6332, 6333, 7, 14, 0, 0, 6333, 922, 1, 0, 0, 0, 6334, 6335, 7, 15, 0, 0, 6335, 6336, 7, 11, 0, 0, 6336, 6337, 7, 19, 0, 0, 6337, 6338, 7, 5, 0, 0, 6338, 6339, 7, 3, 0, 0, 6339, 6340, 7, 6, 0, 0, 6340, 6341, 7, 15, 0, 0, 6341, 6342, 7, 19, 0, 0, 6342, 6343, 7, 12, 0, 0, 6343, 924, 1, 0, 0, 0, 6344, 6345, 7, 15, 0, 0, 6345, 6346, 7, 11, 0, 0, 6346, 6347, 7, 11, 0, 0, 6347, 6348, 7, 17, 0, 0, 6348, 6349, 7, 7, 0, 0, 6349, 6350, 7, 8, 0, 0, 6350, 926, 1, 0, 0, 0, 6351, 6352, 7, 27, 0, 0, 6352, 6353, 7, 11, 0, 0, 6353, 6354, 7, 19, 0, 0, 6354, 6355, 7, 12, 0, 0, 6355, 928, 1, 0, 0, 0, 6356, 6357, 7, 21, 0, 0, 6357, 6358, 7, 7, 0, 0, 6358, 6359, 7, 10, 0, 0, 6359, 6360, 5, 95, 0, 0, 6360, 6361, 7, 16, 0, 0, 6361, 6362, 7, 5, 0, 0, 6362, 6363, 7, 19, 0, 0, 6363, 6364, 7, 14, 0, 0, 6364, 6365, 7, 21, 0, 0, 6365, 6366, 5, 95, 0, 0, 6366, 6367, 7, 11, 0, 0, 6367, 6368, 7, 15, 0, 0, 6368, 6369, 7, 13, 0, 0, 6369, 6370, 7, 7, 0, 0, 6370, 930, 1, 0, 0, 0, 6371, 6372, 7, 5, 0, 0, 6372, 6373, 7, 3, 0, 0, 6373, 6374, 7, 12, 0, 0, 6374, 6375, 7, 22, 0, 0, 6375, 6376, 7, 17, 0, 0, 6376, 6377, 7, 3, 0, 0, 6377, 6378, 7, 22, 0, 0, 6378, 6379, 7, 7, 0, 0, 6379, 932, 1, 0, 0, 0, 6380, 6381, 7, 5, 0, 0, 6381, 6382, 7, 3, 0, 0, 6382, 6383, 7, 11, 0, 0, 6383, 6384, 7, 6, 0, 0, 6384, 934, 1, 0, 0, 0, 6385, 6386, 7, 5, 0, 0, 6386, 6387, 7, 7, 0, 0, 6387, 6388, 7, 3, 0, 0, 6388, 6389, 7, 24, 0, 0, 6389, 6390, 7, 7, 0, 0, 6390, 6391, 7, 11, 0, 0, 6391, 936, 1, 0, 0, 0, 6392, 6393, 7, 5, 0, 0, 6393, 6394, 7, 7, 0, 0, 6394, 6395, 7, 11, 0, 0, 6395, 6396, 7, 11, 0, 0, 6396, 938, 1, 0, 0, 0, 6397, 6398, 7, 5, 0, 0, 6398, 6399, 7, 7, 0, 0, 6399, 6400, 7, 24, 0, 0, 6400, 6401, 7, 7, 0, 0, 6401, 6402, 7, 5, 0, 0, 6402, 940, 1, 0, 0, 0, 6403, 6404, 7, 5, 0, 0, 6404, 6405, 7, 15, 0, 0, 6405, 6406, 7, 11, 0, 0, 6406, 6407, 7, 6, 0, 0, 6407, 942, 1, 0, 0, 0, 6408, 6409, 7, 5, 0, 0, 6409, 6410, 7, 19, 0, 0, 6410, 6411, 7, 14, 0, 0, 6411, 6412, 7, 3, 0, 0, 6412, 6413, 7, 5, 0, 0, 6413, 944, 1, 0, 0, 0, 6414, 6415, 7, 5, 0, 0, 6415, 6416, 7, 19, 0, 0, 6416, 6417, 7, 22, 0, 0, 6417, 6418, 7, 18, 0, 0, 6418, 6419, 7, 15, 0, 0, 6419, 6420, 7, 5, 0, 0, 6420, 6421, 7, 7, 0, 0, 6421, 946, 1, 0, 0, 0, 6422, 6423, 7, 5, 0, 0, 6423, 6424, 7, 19, 0, 0, 6424, 6425, 7, 22, 0, 0, 6425, 6426, 7, 11, 0, 0, 6426, 948, 1, 0, 0, 0, 6427, 6428, 7, 23, 0, 0, 6428, 6429, 7, 3, 0, 0, 6429, 6430, 7, 11, 0, 0, 6430, 6431, 7, 6, 0, 0, 6431, 6432, 7, 7, 0, 0, 6432, 6433, 7, 8, 0, 0, 6433, 950, 1, 0, 0, 0, 6434, 6435, 7, 23, 0, 0, 6435, 6436, 7, 3, 0, 0, 6436, 6437, 7, 11, 0, 0, 6437, 6438, 7, 6, 0, 0, 6438, 6439, 7, 7, 0, 0, 6439, 6440, 7, 8, 0, 0, 6440, 6441, 5, 95, 0, 0, 6441, 6442, 7, 3, 0, 0, 6442, 6443, 7, 17, 0, 0, 6443, 6444, 7, 6, 0, 0, 6444, 6445, 7, 19, 0, 0, 6445, 6446, 5, 95, 0, 0, 6446, 6447, 7, 25, 0, 0, 6447, 6448, 7, 19, 0, 0, 6448, 6449, 7, 11, 0, 0, 6449, 6450, 7, 15, 0, 0, 6450, 6451, 7, 6, 0, 0, 6451, 6452, 7, 15, 0, 0, 6452, 6453, 7, 19, 0, 0, 6453, 6454, 7, 12, 0, 0, 6454, 952, 1, 0, 0, 0, 6455, 6456, 7, 23, 0, 0, 6456, 6457, 7, 3, 0, 0, 6457, 6458, 7, 11, 0, 0, 6458, 6459, 7, 6, 0, 0, 6459, 6460, 7, 7, 0, 0, 6460, 6461, 7, 8, 0, 0, 6461, 6462, 5, 95, 0, 0, 6462, 6463, 7, 14, 0, 0, 6463, 6464, 7, 19, 0, 0, 6464, 6465, 7, 12, 0, 0, 6465, 6466, 7, 12, 0, 0, 6466, 6467, 7, 7, 0, 0, 6467, 6468, 7, 14, 0, 0, 6468, 6469, 7, 6, 0, 0, 6469, 6470, 5, 95, 0, 0, 6470, 6471, 7, 8, 0, 0, 6471, 6472, 7, 7, 0, 0, 6472, 6473, 7, 6, 0, 0, 6473, 6474, 7, 8, 0, 0, 6474, 6475, 7, 10, 0, 0, 6475, 954, 1, 0, 0, 0, 6476, 6477, 7, 23, 0, 0, 6477, 6478, 7, 3, 0, 0, 6478, 6479, 7, 11, 0, 0, 6479, 6480, 7, 6, 0, 0, 6480, 6481, 7, 7, 0, 0, 6481, 6482, 7, 8, 0, 0, 6482, 6483, 5, 95, 0, 0, 6483, 6484, 7, 4, 0, 0, 6484, 6485, 7, 7, 0, 0, 6485, 6486, 7, 5, 0, 0, 6486, 6487, 7, 3, 0, 0, 6487, 6488, 7, 10, 0, 0, 6488, 956, 1, 0, 0, 0, 6489, 6490, 7, 23, 0, 0, 6490, 6491, 7, 3, 0, 0, 6491, 6492, 7, 11, 0, 0, 6492, 6493, 7, 6, 0, 0, 6493, 6494, 7, 7, 0, 0, 6494, 6495, 7, 8, 0, 0, 6495, 6496, 5, 95, 0, 0, 6496, 6497, 7, 20, 0, 0, 6497, 6498, 7, 7, 0, 0, 6498, 6499, 7, 3, 0, 0, 6499, 6500, 7, 8, 0, 0, 6500, 6501, 7, 6, 0, 0, 6501, 6502, 7, 16, 0, 0, 6502, 6503, 7, 7, 0, 0, 6503, 6504, 7, 3, 0, 0, 6504, 6505, 7, 6, 0, 0, 6505, 6506, 5, 95, 0, 0, 6506, 6507, 7, 25, 0, 0, 6507, 6508, 7, 7, 0, 0, 6508, 6509, 7, 8, 0, 0, 6509, 6510, 7, 15, 0, 0, 6510, 6511, 7, 19, 0, 0, 6511, 6512, 7, 4, 0, 0, 6512, 958, 1, 0, 0, 0, 6513, 6514, 7, 23, 0, 0, 6514, 6515, 7, 3, 0, 0, 6515, 6516, 7, 11, 0, 0, 6516, 6517, 7, 6, 0, 0, 6517, 6518, 7, 7, 0, 0, 6518, 6519, 7, 8, 0, 0, 6519, 6520, 5, 95, 0, 0, 6520, 6521, 7, 20, 0, 0, 6521, 6522, 7, 19, 0, 0, 6522, 6523, 7, 11, 0, 0, 6523, 6524, 7, 6, 0, 0, 6524, 960, 1, 0, 0, 0, 6525, 6526, 7, 23, 0, 0, 6526, 6527, 7, 3, 0, 0, 6527, 6528, 7, 11, 0, 0, 6528, 6529, 7, 6, 0, 0, 6529, 6530, 7, 7, 0, 0, 6530, 6531, 7, 8, 0, 0, 6531, 6532, 5, 95, 0, 0, 6532, 6533, 7, 5, 0, 0, 6533, 6534, 7, 19, 0, 0, 6534, 6535, 7, 22, 0, 0, 6535, 6536, 5, 95, 0, 0, 6536, 6537, 7, 18, 0, 0, 6537, 6538, 7, 15, 0, 0, 6538, 6539, 7, 5, 0, 0, 6539, 6540, 7, 7, 0, 0, 6540, 962, 1, 0, 0, 0, 6541, 6542, 7, 23, 0, 0, 6542, 6543, 7, 3, 0, 0, 6543, 6544, 7, 11, 0, 0, 6544, 6545, 7, 6, 0, 0, 6545, 6546, 7, 7, 0, 0, 6546, 6547, 7, 8, 0, 0, 6547, 6548, 5, 95, 0, 0, 6548, 6549, 7, 5, 0, 0, 6549, 6550, 7, 19, 0, 0, 6550, 6551, 7, 22, 0, 0, 6551, 6552, 5, 95, 0, 0, 6552, 6553, 7, 25, 0, 0, 6553, 6554, 7, 19, 0, 0, 6554, 6555, 7, 11, 0, 0, 6555, 964, 1, 0, 0, 0, 6556, 6557, 7, 23, 0, 0, 6557, 6558, 7, 3, 0, 0, 6558, 6559, 7, 11, 0, 0, 6559, 6560, 7, 6, 0, 0, 6560, 6561, 7, 7, 0, 0, 6561, 6562, 7, 8, 0, 0, 6562, 6563, 5, 95, 0, 0, 6563, 6564, 7, 25, 0, 0, 6564, 6565, 7, 3, 0, 0, 6565, 6566, 7, 11, 0, 0, 6566, 6567, 7, 11, 0, 0, 6567, 6568, 7, 9, 0, 0, 6568, 6569, 7, 19, 0, 0, 6569, 6570, 7, 8, 0, 0, 6570, 6571, 7, 4, 0, 0, 6571, 966, 1, 0, 0, 0, 6572, 6573, 7, 23, 0, 0, 6573, 6574, 7, 3, 0, 0, 6574, 6575, 7, 11, 0, 0, 6575, 6576, 7, 6, 0, 0, 6576, 6577, 7, 7, 0, 0, 6577, 6578, 7, 8, 0, 0, 6578, 6579, 5, 95, 0, 0, 6579, 6580, 7, 25, 0, 0, 6580, 6581, 7, 19, 0, 0, 6581, 6582, 7, 8, 0, 0, 6582, 6583, 7, 6, 0, 0, 6583, 968, 1, 0, 0, 0, 6584, 6585, 7, 23, 0, 0, 6585, 6586, 7, 3, 0, 0, 6586, 6587, 7, 11, 0, 0, 6587, 6588, 7, 6, 0, 0, 6588, 6589, 7, 7, 0, 0, 6589, 6590, 7, 8, 0, 0, 6590, 6591, 5, 95, 0, 0, 6591, 6592, 7, 8, 0, 0, 6592, 6593, 7, 7, 0, 0, 6593, 6594, 7, 6, 0, 0, 6594, 6595, 7, 8, 0, 0, 6595, 6596, 7, 10, 0, 0, 6596, 6597, 5, 95, 0, 0, 6597, 6598, 7, 14, 0, 0, 6598, 6599, 7, 19, 0, 0, 6599, 6600, 7, 17, 0, 0, 6600, 6601, 7, 12, 0, 0, 6601, 6602, 7, 6, 0, 0, 6602, 970, 1, 0, 0, 0, 6603, 6604, 7, 23, 0, 0, 6604, 6605, 7, 3, 0, 0, 6605, 6606, 7, 11, 0, 0, 6606, 6607, 7, 6, 0, 0, 6607, 6608, 7, 7, 0, 0, 6608, 6609, 7, 8, 0, 0, 6609, 6610, 5, 95, 0, 0, 6610, 6611, 7, 11, 0, 0, 6611, 6612, 7, 11, 0, 0, 6612, 6613, 7, 5, 0, 0, 6613, 972, 1, 0, 0, 0, 6614, 6615, 7, 23, 0, 0, 6615, 6616, 7, 3, 0, 0, 6616, 6617, 7, 11, 0, 0, 6617, 6618, 7, 6, 0, 0, 6618, 6619, 7, 7, 0, 0, 6619, 6620, 7, 8, 0, 0, 6620, 6621, 5, 95, 0, 0, 6621, 6622, 7, 11, 0, 0, 6622, 6623, 7, 11, 0, 0, 6623, 6624, 7, 5, 0, 0, 6624, 6625, 5, 95, 0, 0, 6625, 6626, 7, 14, 0, 0, 6626, 6627, 7, 3, 0, 0, 6627, 974, 1, 0, 0, 0, 6628, 6629, 7, 23, 0, 0, 6629, 6630, 7, 3, 0, 0, 6630, 6631, 7, 11, 0, 0, 6631, 6632, 7, 6, 0, 0, 6632, 6633, 7, 7, 0, 0, 6633, 6634, 7, 8, 0, 0, 6634, 6635, 5, 95, 0, 0, 6635, 6636, 7, 11, 0, 0, 6636, 6637, 7, 11, 0, 0, 6637, 6638, 7, 5, 0, 0, 6638, 6639, 5, 95, 0, 0, 6639, 6640, 7, 14, 0, 0, 6640, 6641, 7, 3, 0, 0, 6641, 6642, 7, 25, 0, 0, 6642, 6643, 7, 3, 0, 0, 6643, 6644, 7, 6, 0, 0, 6644, 6645, 7, 20, 0, 0, 6645, 976, 1, 0, 0, 0, 6646, 6647, 7, 23, 0, 0, 6647, 6648, 7, 3, 0, 0, 6648, 6649, 7, 11, 0, 0, 6649, 6650, 7, 6, 0, 0, 6650, 6651, 7, 7, 0, 0, 6651, 6652, 7, 8, 0, 0, 6652, 6653, 5, 95, 0, 0, 6653, 6654, 7, 11, 0, 0, 6654, 6655, 7, 11, 0, 0, 6655, 6656, 7, 5, 0, 0, 6656, 6657, 5, 95, 0, 0, 6657, 6658, 7, 14, 0, 0, 6658, 6659, 7, 7, 0, 0, 6659, 6660, 7, 8, 0, 0, 6660, 6661, 7, 6, 0, 0, 6661, 978, 1, 0, 0, 0, 6662, 6663, 7, 23, 0, 0, 6663, 6664, 7, 3, 0, 0, 6664, 6665, 7, 11, 0, 0, 6665, 6666, 7, 6, 0, 0, 6666, 6667, 7, 7, 0, 0, 6667, 6668, 7, 8, 0, 0, 6668, 6669, 5, 95, 0, 0, 6669, 6670, 7, 11, 0, 0, 6670, 6671, 7, 11, 0, 0, 6671, 6672, 7, 5, 0, 0, 6672, 6673, 5, 95, 0, 0, 6673, 6674, 7, 14, 0, 0, 6674, 6675, 7, 15, 0, 0, 6675, 6676, 7, 25, 0, 0, 6676, 6677, 7, 20, 0, 0, 6677, 6678, 7, 7, 0, 0, 6678, 6679, 7, 8, 0, 0, 6679, 980, 1, 0, 0, 0, 6680, 6681, 7, 23, 0, 0, 6681, 6682, 7, 3, 0, 0, 6682, 6683, 7, 11, 0, 0, 6683, 6684, 7, 6, 0, 0, 6684, 6685, 7, 7, 0, 0, 6685, 6686, 7, 8, 0, 0, 6686, 6687, 5, 95, 0, 0, 6687, 6688, 7, 11, 0, 0, 6688, 6689, 7, 11, 0, 0, 6689, 6690, 7, 5, 0, 0, 6690, 6691, 5, 95, 0, 0, 6691, 6692, 7, 14, 0, 0, 6692, 6693, 7, 8, 0, 0, 6693, 6694, 7, 5, 0, 0, 6694, 982, 1, 0, 0, 0, 6695, 6696, 7, 23, 0, 0, 6696, 6697, 7, 3, 0, 0, 6697, 6698, 7, 11, 0, 0, 6698, 6699, 7, 6, 0, 0, 6699, 6700, 7, 7, 0, 0, 6700, 6701, 7, 8, 0, 0, 6701, 6702, 5, 95, 0, 0, 6702, 6703, 7, 11, 0, 0, 6703, 6704, 7, 11, 0, 0, 6704, 6705, 7, 5, 0, 0, 6705, 6706, 5, 95, 0, 0, 6706, 6707, 7, 14, 0, 0, 6707, 6708, 7, 8, 0, 0, 6708, 6709, 7, 5, 0, 0, 6709, 6710, 7, 25, 0, 0, 6710, 6711, 7, 3, 0, 0, 6711, 6712, 7, 6, 0, 0, 6712, 6713, 7, 20, 0, 0, 6713, 984, 1, 0, 0, 0, 6714, 6715, 7, 23, 0, 0, 6715, 6716, 7, 3, 0, 0, 6716, 6717, 7, 11, 0, 0, 6717, 6718, 7, 6, 0, 0, 6718, 6719, 7, 7, 0, 0, 6719, 6720, 7, 8, 0, 0, 6720, 6721, 5, 95, 0, 0, 6721, 6722, 7, 11, 0, 0, 6722, 6723, 7, 11, 0, 0, 6723, 6724, 7, 5, 0, 0, 6724, 6725, 5, 95, 0, 0, 6725, 6726, 7, 21, 0, 0, 6726, 6727, 7, 7, 0, 0, 6727, 6728, 7, 10, 0, 0, 6728, 986, 1, 0, 0, 0, 6729, 6730, 7, 23, 0, 0, 6730, 6731, 7, 3, 0, 0, 6731, 6732, 7, 11, 0, 0, 6732, 6733, 7, 6, 0, 0, 6733, 6734, 7, 7, 0, 0, 6734, 6735, 7, 8, 0, 0, 6735, 6736, 5, 95, 0, 0, 6736, 6737, 7, 6, 0, 0, 6737, 6738, 7, 5, 0, 0, 6738, 6739, 7, 11, 0, 0, 6739, 6740, 5, 95, 0, 0, 6740, 6741, 7, 24, 0, 0, 6741, 6742, 7, 7, 0, 0, 6742, 6743, 7, 8, 0, 0, 6743, 6744, 7, 11, 0, 0, 6744, 6745, 7, 15, 0, 0, 6745, 6746, 7, 19, 0, 0, 6746, 6747, 7, 12, 0, 0, 6747, 988, 1, 0, 0, 0, 6748, 6749, 7, 23, 0, 0, 6749, 6750, 7, 3, 0, 0, 6750, 6751, 7, 11, 0, 0, 6751, 6752, 7, 6, 0, 0, 6752, 6753, 7, 7, 0, 0, 6753, 6754, 7, 8, 0, 0, 6754, 6755, 5, 95, 0, 0, 6755, 6756, 7, 17, 0, 0, 6756, 6757, 7, 11, 0, 0, 6757, 6758, 7, 7, 0, 0, 6758, 6759, 7, 8, 0, 0, 6759, 990, 1, 0, 0, 0, 6760, 6761, 7, 23, 0, 0, 6761, 6762, 7, 3, 0, 0, 6762, 6763, 7, 26, 0, 0, 6763, 6764, 5, 95, 0, 0, 6764, 6765, 7, 14, 0, 0, 6765, 6766, 7, 19, 0, 0, 6766, 6767, 7, 12, 0, 0, 6767, 6768, 7, 12, 0, 0, 6768, 6769, 7, 7, 0, 0, 6769, 6770, 7, 14, 0, 0, 6770, 6771, 7, 6, 0, 0, 6771, 6772, 7, 15, 0, 0, 6772, 6773, 7, 19, 0, 0, 6773, 6774, 7, 12, 0, 0, 6774, 6775, 7, 11, 0, 0, 6775, 6776, 5, 95, 0, 0, 6776, 6777, 7, 25, 0, 0, 6777, 6778, 7, 7, 0, 0, 6778, 6779, 7, 8, 0, 0, 6779, 6780, 5, 95, 0, 0, 6780, 6781, 7, 20, 0, 0, 6781, 6782, 7, 19, 0, 0, 6782, 6783, 7, 17, 0, 0, 6783, 6784, 7, 8, 0, 0, 6784, 992, 1, 0, 0, 0, 6785, 6786, 7, 23, 0, 0, 6786, 6787, 7, 3, 0, 0, 6787, 6788, 7, 26, 0, 0, 6788, 6789, 5, 95, 0, 0, 6789, 6790, 7, 28, 0, 0, 6790, 6791, 7, 17, 0, 0, 6791, 6792, 7, 7, 0, 0, 6792, 6793, 7, 8, 0, 0, 6793, 6794, 7, 15, 0, 0, 6794, 6795, 7, 7, 0, 0, 6795, 6796, 7, 11, 0, 0, 6796, 6797, 5, 95, 0, 0, 6797, 6798, 7, 25, 0, 0, 6798, 6799, 7, 7, 0, 0, 6799, 6800, 7, 8, 0, 0, 6800, 6801, 5, 95, 0, 0, 6801, 6802, 7, 20, 0, 0, 6802, 6803, 7, 19, 0, 0, 6803, 6804, 7, 17, 0, 0, 6804, 6805, 7, 8, 0, 0, 6805, 994, 1, 0, 0, 0, 6806, 6807, 7, 23, 0, 0, 6807, 6808, 7, 3, 0, 0, 6808, 6809, 7, 26, 0, 0, 6809, 6810, 5, 95, 0, 0, 6810, 6811, 7, 8, 0, 0, 6811, 6812, 7, 19, 0, 0, 6812, 6813, 7, 9, 0, 0, 6813, 6814, 7, 11, 0, 0, 6814, 996, 1, 0, 0, 0, 6815, 6816, 7, 23, 0, 0, 6816, 6817, 7, 3, 0, 0, 6817, 6818, 7, 26, 0, 0, 6818, 6819, 5, 95, 0, 0, 6819, 6820, 7, 11, 0, 0, 6820, 6821, 7, 15, 0, 0, 6821, 6822, 7, 13, 0, 0, 6822, 6823, 7, 7, 0, 0, 6823, 998, 1, 0, 0, 0, 6824, 6825, 7, 23, 0, 0, 6825, 6826, 7, 3, 0, 0, 6826, 6827, 7, 26, 0, 0, 6827, 6828, 5, 95, 0, 0, 6828, 6829, 7, 17, 0, 0, 6829, 6830, 7, 25, 0, 0, 6830, 6831, 7, 4, 0, 0, 6831, 6832, 7, 3, 0, 0, 6832, 6833, 7, 6, 0, 0, 6833, 6834, 7, 7, 0, 0, 6834, 6835, 7, 11, 0, 0, 6835, 6836, 5, 95, 0, 0, 6836, 6837, 7, 25, 0, 0, 6837, 6838, 7, 7, 0, 0, 6838, 6839, 7, 8, 0, 0, 6839, 6840, 5, 95, 0, 0, 6840, 6841, 7, 20, 0, 0, 6841, 6842, 7, 19, 0, 0, 6842, 6843, 7, 17, 0, 0, 6843, 6844, 7, 8, 0, 0, 6844, 1000, 1, 0, 0, 0, 6845, 6846, 7, 23, 0, 0, 6846, 6847, 7, 3, 0, 0, 6847, 6848, 7, 26, 0, 0, 6848, 6849, 5, 95, 0, 0, 6849, 6850, 7, 17, 0, 0, 6850, 6851, 7, 11, 0, 0, 6851, 6852, 7, 7, 0, 0, 6852, 6853, 7, 8, 0, 0, 6853, 6854, 5, 95, 0, 0, 6854, 6855, 7, 14, 0, 0, 6855, 6856, 7, 19, 0, 0, 6856, 6857, 7, 12, 0, 0, 6857, 6858, 7, 12, 0, 0, 6858, 6859, 7, 7, 0, 0, 6859, 6860, 7, 14, 0, 0, 6860, 6861, 7, 6, 0, 0, 6861, 6862, 7, 15, 0, 0, 6862, 6863, 7, 19, 0, 0, 6863, 6864, 7, 12, 0, 0, 6864, 6865, 7, 11, 0, 0, 6865, 1002, 1, 0, 0, 0, 6866, 6867, 7, 23, 0, 0, 6867, 6868, 7, 7, 0, 0, 6868, 6869, 7, 4, 0, 0, 6869, 6870, 7, 15, 0, 0, 6870, 6871, 7, 17, 0, 0, 6871, 6872, 7, 23, 0, 0, 6872, 1004, 1, 0, 0, 0, 6873, 6874, 7, 23, 0, 0, 6874, 6875, 7, 7, 0, 0, 6875, 6876, 7, 23, 0, 0, 6876, 6877, 7, 16, 0, 0, 6877, 6878, 7, 7, 0, 0, 6878, 6879, 7, 8, 0, 0, 6879, 1006, 1, 0, 0, 0, 6880, 6881, 7, 23, 0, 0, 6881, 6882, 7, 7, 0, 0, 6882, 6883, 7, 8, 0, 0, 6883, 6884, 7, 22, 0, 0, 6884, 6885, 7, 7, 0, 0, 6885, 1008, 1, 0, 0, 0, 6886, 6887, 7, 23, 0, 0, 6887, 6888, 7, 7, 0, 0, 6888, 6889, 7, 11, 0, 0, 6889, 6890, 7, 11, 0, 0, 6890, 6891, 7, 3, 0, 0, 6891, 6892, 7, 22, 0, 0, 6892, 6893, 7, 7, 0, 0, 6893, 6894, 5, 95, 0, 0, 6894, 6895, 7, 6, 0, 0, 6895, 6896, 7, 7, 0, 0, 6896, 6897, 7, 26, 0, 0, 6897, 6898, 7, 6, 0, 0, 6898, 1010, 1, 0, 0, 0, 6899, 6900, 7, 23, 0, 0, 6900, 6901, 7, 15, 0, 0, 6901, 6902, 7, 4, 0, 0, 6902, 1012, 1, 0, 0, 0, 6903, 6904, 7, 23, 0, 0, 6904, 6905, 7, 15, 0, 0, 6905, 6906, 7, 22, 0, 0, 6906, 6907, 7, 8, 0, 0, 6907, 6908, 7, 3, 0, 0, 6908, 6909, 7, 6, 0, 0, 6909, 6910, 7, 7, 0, 0, 6910, 1014, 1, 0, 0, 0, 6911, 6912, 7, 23, 0, 0, 6912, 6913, 7, 15, 0, 0, 6913, 6914, 7, 12, 0, 0, 6914, 6915, 5, 95, 0, 0, 6915, 6916, 7, 8, 0, 0, 6916, 6917, 7, 19, 0, 0, 6917, 6918, 7, 9, 0, 0, 6918, 6919, 7, 11, 0, 0, 6919, 1016, 1, 0, 0, 0, 6920, 6921, 7, 23, 0, 0, 6921, 6922, 7, 19, 0, 0, 6922, 6923, 7, 4, 0, 0, 6923, 6924, 7, 7, 0, 0, 6924, 1018, 1, 0, 0, 0, 6925, 6926, 7, 23, 0, 0, 6926, 6927, 7, 19, 0, 0, 6927, 6928, 7, 4, 0, 0, 6928, 6929, 7, 15, 0, 0, 6929, 6930, 7, 18, 0, 0, 6930, 6931, 7, 10, 0, 0, 6931, 1020, 1, 0, 0, 0, 6932, 6933, 7, 23, 0, 0, 6933, 6934, 7, 17, 0, 0, 6934, 6935, 7, 6, 0, 0, 6935, 6936, 7, 7, 0, 0, 6936, 6937, 7, 26, 0, 0, 6937, 1022, 1, 0, 0, 0, 6938, 6939, 7, 23, 0, 0, 6939, 6940, 7, 10, 0, 0, 6940, 6941, 7, 11, 0, 0, 6941, 6942, 7, 28, 0, 0, 6942, 6943, 7, 5, 0, 0, 6943, 1024, 1, 0, 0, 0, 6944, 6945, 7, 23, 0, 0, 6945, 6946, 7, 10, 0, 0, 6946, 6947, 7, 11, 0, 0, 6947, 6948, 7, 28, 0, 0, 6948, 6949, 7, 5, 0, 0, 6949, 6950, 5, 95, 0, 0, 6950, 6951, 7, 7, 0, 0, 6951, 6952, 7, 8, 0, 0, 6952, 6953, 7, 8, 0, 0, 6953, 6954, 7, 12, 0, 0, 6954, 6955, 7, 19, 0, 0, 6955, 1026, 1, 0, 0, 0, 6956, 6957, 7, 12, 0, 0, 6957, 6958, 7, 3, 0, 0, 6958, 6959, 7, 23, 0, 0, 6959, 6960, 7, 7, 0, 0, 6960, 1028, 1, 0, 0, 0, 6961, 6962, 7, 12, 0, 0, 6962, 6963, 7, 3, 0, 0, 6963, 6964, 7, 23, 0, 0, 6964, 6965, 7, 7, 0, 0, 6965, 6966, 7, 11, 0, 0, 6966, 1030, 1, 0, 0, 0, 6967, 6968, 7, 12, 0, 0, 6968, 6969, 7, 14, 0, 0, 6969, 6970, 7, 20, 0, 0, 6970, 6971, 7, 3, 0, 0, 6971, 6972, 7, 8, 0, 0, 6972, 1032, 1, 0, 0, 0, 6973, 6974, 7, 12, 0, 0, 6974, 6975, 7, 7, 0, 0, 6975, 6976, 7, 24, 0, 0, 6976, 6977, 7, 7, 0, 0, 6977, 6978, 7, 8, 0, 0, 6978, 1034, 1, 0, 0, 0, 6979, 6980, 7, 12, 0, 0, 6980, 6981, 7, 7, 0, 0, 6981, 6982, 7, 26, 0, 0, 6982, 6983, 7, 6, 0, 0, 6983, 1036, 1, 0, 0, 0, 6984, 6985, 7, 12, 0, 0, 6985, 6986, 7, 19, 0, 0, 6986, 1038, 1, 0, 0, 0, 6987, 6988, 7, 12, 0, 0, 6988, 6989, 7, 19, 0, 0, 6989, 6990, 7, 14, 0, 0, 6990, 6991, 7, 3, 0, 0, 6991, 6992, 7, 14, 0, 0, 6992, 6993, 7, 20, 0, 0, 6993, 6994, 7, 7, 0, 0, 6994, 1040, 1, 0, 0, 0, 6995, 6996, 7, 12, 0, 0, 6996, 6997, 7, 19, 0, 0, 6997, 6998, 7, 14, 0, 0, 6998, 6999, 7, 19, 0, 0, 6999, 7000, 7, 25, 0, 0, 7000, 7001, 7, 10, 0, 0, 7001, 1042, 1, 0, 0, 0, 7002, 7003, 7, 12, 0, 0, 7003, 7004, 7, 19, 0, 0, 7004, 7005, 7, 14, 0, 0, 7005, 7006, 7, 10, 0, 0, 7006, 7007, 7, 14, 0, 0, 7007, 7008, 7, 5, 0, 0, 7008, 7009, 7, 7, 0, 0, 7009, 1044, 1, 0, 0, 0, 7010, 7011, 7, 12, 0, 0, 7011, 7012, 7, 19, 0, 0, 7012, 7013, 7, 23, 0, 0, 7013, 7014, 7, 3, 0, 0, 7014, 7015, 7, 26, 0, 0, 7015, 7016, 7, 24, 0, 0, 7016, 7017, 7, 3, 0, 0, 7017, 7018, 7, 5, 0, 0, 7018, 7019, 7, 17, 0, 0, 7019, 7020, 7, 7, 0, 0, 7020, 1046, 1, 0, 0, 0, 7021, 7022, 7, 12, 0, 0, 7022, 7023, 7, 19, 0, 0, 7023, 7024, 7, 23, 0, 0, 7024, 7025, 7, 15, 0, 0, 7025, 7026, 7, 12, 0, 0, 7026, 7027, 7, 24, 0, 0, 7027, 7028, 7, 3, 0, 0, 7028, 7029, 7, 5, 0, 0, 7029, 7030, 7, 17, 0, 0, 7030, 7031, 7, 7, 0, 0, 7031, 1048, 1, 0, 0, 0, 7032, 7033, 7, 12, 0, 0, 7033, 7034, 7, 19, 0, 0, 7034, 7035, 7, 9, 0, 0, 7035, 7036, 7, 3, 0, 0, 7036, 7037, 7, 15, 0, 0, 7037, 7038, 7, 6, 0, 0, 7038, 1050, 1, 0, 0, 0, 7039, 7040, 7, 12, 0, 0, 7040, 7041, 7, 19, 0, 0, 7041, 7042, 7, 4, 0, 0, 7042, 7043, 7, 7, 0, 0, 7043, 7044, 7, 22, 0, 0, 7044, 7045, 7, 8, 0, 0, 7045, 7046, 7, 19, 0, 0, 7046, 7047, 7, 17, 0, 0, 7047, 7048, 7, 25, 0, 0, 7048, 1052, 1, 0, 0, 0, 7049, 7050, 7, 12, 0, 0, 7050, 7051, 7, 19, 0, 0, 7051, 7052, 7, 12, 0, 0, 7052, 7053, 7, 7, 0, 0, 7053, 1054, 1, 0, 0, 0, 7054, 7055, 7, 19, 0, 0, 7055, 7056, 7, 4, 0, 0, 7056, 7057, 7, 16, 0, 0, 7057, 7058, 7, 14, 0, 0, 7058, 1056, 1, 0, 0, 0, 7059, 7060, 7, 19, 0, 0, 7060, 7061, 7, 18, 0, 0, 7061, 7062, 7, 18, 0, 0, 7062, 7063, 7, 5, 0, 0, 7063, 7064, 7, 15, 0, 0, 7064, 7065, 7, 12, 0, 0, 7065, 7066, 7, 7, 0, 0, 7066, 1058, 1, 0, 0, 0, 7067, 7068, 7, 19, 0, 0, 7068, 7069, 7, 18, 0, 0, 7069, 7070, 7, 18, 0, 0, 7070, 7071, 7, 11, 0, 0, 7071, 7072, 7, 7, 0, 0, 7072, 7073, 7, 6, 0, 0, 7073, 1060, 1, 0, 0, 0, 7074, 7075, 7, 19, 0, 0, 7075, 7076, 7, 18, 0, 0, 7076, 1062, 1, 0, 0, 0, 7077, 7078, 7, 19, 0, 0, 7078, 7079, 7, 27, 0, 0, 7079, 1064, 1, 0, 0, 0, 7080, 7081, 7, 19, 0, 0, 7081, 7082, 7, 5, 0, 0, 7082, 7083, 7, 4, 0, 0, 7083, 7084, 5, 95, 0, 0, 7084, 7085, 7, 25, 0, 0, 7085, 7086, 7, 3, 0, 0, 7086, 7087, 7, 11, 0, 0, 7087, 7088, 7, 11, 0, 0, 7088, 7089, 7, 9, 0, 0, 7089, 7090, 7, 19, 0, 0, 7090, 7091, 7, 8, 0, 0, 7091, 7092, 7, 4, 0, 0, 7092, 1066, 1, 0, 0, 0, 7093, 7094, 7, 19, 0, 0, 7094, 7095, 7, 12, 0, 0, 7095, 7096, 7, 7, 0, 0, 7096, 1068, 1, 0, 0, 0, 7097, 7098, 7, 19, 0, 0, 7098, 7099, 7, 12, 0, 0, 7099, 7100, 7, 5, 0, 0, 7100, 7101, 7, 15, 0, 0, 7101, 7102, 7, 12, 0, 0, 7102, 7103, 7, 7, 0, 0, 7103, 1070, 1, 0, 0, 0, 7104, 7105, 7, 19, 0, 0, 7105, 7106, 7, 12, 0, 0, 7106, 7107, 7, 5, 0, 0, 7107, 7108, 7, 10, 0, 0, 7108, 1072, 1, 0, 0, 0, 7109, 7110, 7, 19, 0, 0, 7110, 7111, 7, 25, 0, 0, 7111, 7112, 7, 7, 0, 0, 7112, 7113, 7, 12, 0, 0, 7113, 1074, 1, 0, 0, 0, 7114, 7115, 7, 19, 0, 0, 7115, 7116, 7, 25, 0, 0, 7116, 7117, 7, 6, 0, 0, 7117, 7118, 7, 15, 0, 0, 7118, 7119, 7, 23, 0, 0, 7119, 7120, 7, 15, 0, 0, 7120, 7121, 7, 13, 0, 0, 7121, 7122, 7, 7, 0, 0, 7122, 7123, 7, 8, 0, 0, 7123, 7124, 5, 95, 0, 0, 7124, 7125, 7, 14, 0, 0, 7125, 7126, 7, 19, 0, 0, 7126, 7127, 7, 11, 0, 0, 7127, 7128, 7, 6, 0, 0, 7128, 7129, 7, 11, 0, 0, 7129, 1076, 1, 0, 0, 0, 7130, 7131, 7, 19, 0, 0, 7131, 7132, 7, 25, 0, 0, 7132, 7133, 7, 6, 0, 0, 7133, 7134, 7, 15, 0, 0, 7134, 7135, 7, 19, 0, 0, 7135, 7136, 7, 12, 0, 0, 7136, 7137, 7, 11, 0, 0, 7137, 1078, 1, 0, 0, 0, 7138, 7139, 7, 19, 0, 0, 7139, 7140, 7, 9, 0, 0, 7140, 7141, 7, 12, 0, 0, 7141, 7142, 7, 7, 0, 0, 7142, 7143, 7, 8, 0, 0, 7143, 1080, 1, 0, 0, 0, 7144, 7145, 7, 25, 0, 0, 7145, 7146, 7, 3, 0, 0, 7146, 7147, 7, 14, 0, 0, 7147, 7148, 7, 21, 0, 0, 7148, 7149, 5, 95, 0, 0, 7149, 7150, 7, 21, 0, 0, 7150, 7151, 7, 7, 0, 0, 7151, 7152, 7, 10, 0, 0, 7152, 7153, 7, 11, 0, 0, 7153, 1082, 1, 0, 0, 0, 7154, 7155, 7, 25, 0, 0, 7155, 7156, 7, 3, 0, 0, 7156, 7157, 7, 22, 0, 0, 7157, 7158, 7, 7, 0, 0, 7158, 1084, 1, 0, 0, 0, 7159, 7160, 7, 25, 0, 0, 7160, 7161, 7, 3, 0, 0, 7161, 7162, 7, 22, 0, 0, 7162, 7163, 7, 7, 0, 0, 7163, 7164, 5, 95, 0, 0, 7164, 7165, 7, 14, 0, 0, 7165, 7166, 7, 19, 0, 0, 7166, 7167, 7, 23, 0, 0, 7167, 7168, 7, 25, 0, 0, 7168, 7169, 7, 8, 0, 0, 7169, 7170, 7, 7, 0, 0, 7170, 7171, 7, 11, 0, 0, 7171, 7172, 7, 11, 0, 0, 7172, 7173, 7, 7, 0, 0, 7173, 7174, 7, 4, 0, 0, 7174, 1086, 1, 0, 0, 0, 7175, 7176, 7, 25, 0, 0, 7176, 7177, 7, 3, 0, 0, 7177, 7178, 7, 22, 0, 0, 7178, 7179, 7, 7, 0, 0, 7179, 7180, 5, 95, 0, 0, 7180, 7181, 7, 14, 0, 0, 7181, 7182, 7, 19, 0, 0, 7182, 7183, 7, 23, 0, 0, 7183, 7184, 7, 25, 0, 0, 7184, 7185, 7, 8, 0, 0, 7185, 7186, 7, 7, 0, 0, 7186, 7187, 7, 11, 0, 0, 7187, 7188, 7, 11, 0, 0, 7188, 7189, 7, 15, 0, 0, 7189, 7190, 7, 19, 0, 0, 7190, 7191, 7, 12, 0, 0, 7191, 7192, 5, 95, 0, 0, 7192, 7193, 7, 5, 0, 0, 7193, 7194, 7, 7, 0, 0, 7194, 7195, 7, 24, 0, 0, 7195, 7196, 7, 7, 0, 0, 7196, 7197, 7, 5, 0, 0, 7197, 1088, 1, 0, 0, 0, 7198, 7199, 7, 25, 0, 0, 7199, 7200, 7, 3, 0, 0, 7200, 7201, 7, 8, 0, 0, 7201, 7202, 7, 11, 0, 0, 7202, 7203, 7, 7, 0, 0, 7203, 7204, 7, 8, 0, 0, 7204, 1090, 1, 0, 0, 0, 7205, 7206, 7, 25, 0, 0, 7206, 7207, 7, 3, 0, 0, 7207, 7208, 7, 8, 0, 0, 7208, 7209, 7, 6, 0, 0, 7209, 7210, 7, 15, 0, 0, 7210, 7211, 7, 3, 0, 0, 7211, 7212, 7, 5, 0, 0, 7212, 1092, 1, 0, 0, 0, 7213, 7214, 7, 25, 0, 0, 7214, 7215, 7, 3, 0, 0, 7215, 7216, 7, 8, 0, 0, 7216, 7217, 7, 6, 0, 0, 7217, 7218, 7, 15, 0, 0, 7218, 7219, 7, 6, 0, 0, 7219, 7220, 7, 15, 0, 0, 7220, 7221, 7, 19, 0, 0, 7221, 7222, 7, 12, 0, 0, 7222, 7223, 7, 15, 0, 0, 7223, 7224, 7, 12, 0, 0, 7224, 7225, 7, 22, 0, 0, 7225, 1094, 1, 0, 0, 0, 7226, 7227, 7, 25, 0, 0, 7227, 7228, 7, 3, 0, 0, 7228, 7229, 7, 8, 0, 0, 7229, 7230, 7, 6, 0, 0, 7230, 7231, 7, 15, 0, 0, 7231, 7232, 7, 6, 0, 0, 7232, 7233, 7, 15, 0, 0, 7233, 7234, 7, 19, 0, 0, 7234, 7235, 7, 12, 0, 0, 7235, 7236, 7, 11, 0, 0, 7236, 1096, 1, 0, 0, 0, 7237, 7238, 7, 25, 0, 0, 7238, 7239, 7, 3, 0, 0, 7239, 7240, 7, 11, 0, 0, 7240, 7241, 7, 11, 0, 0, 7241, 7242, 7, 9, 0, 0, 7242, 7243, 7, 19, 0, 0, 7243, 7244, 7, 8, 0, 0, 7244, 7245, 7, 4, 0, 0, 7245, 1098, 1, 0, 0, 0, 7246, 7247, 7, 25, 0, 0, 7247, 7248, 7, 3, 0, 0, 7248, 7249, 7, 11, 0, 0, 7249, 7250, 7, 11, 0, 0, 7250, 7251, 7, 9, 0, 0, 7251, 7252, 7, 19, 0, 0, 7252, 7253, 7, 8, 0, 0, 7253, 7254, 7, 4, 0, 0, 7254, 7255, 5, 95, 0, 0, 7255, 7256, 7, 5, 0, 0, 7256, 7257, 7, 19, 0, 0, 7257, 7258, 7, 14, 0, 0, 7258, 7259, 7, 21, 0, 0, 7259, 7260, 5, 95, 0, 0, 7260, 7261, 7, 6, 0, 0, 7261, 7262, 7, 15, 0, 0, 7262, 7263, 7, 23, 0, 0, 7263, 7264, 7, 7, 0, 0, 7264, 1100, 1, 0, 0, 0, 7265, 7266, 7, 25, 0, 0, 7266, 7267, 7, 20, 0, 0, 7267, 7268, 7, 3, 0, 0, 7268, 7269, 7, 11, 0, 0, 7269, 7270, 7, 7, 0, 0, 7270, 1102, 1, 0, 0, 0, 7271, 7272, 7, 25, 0, 0, 7272, 7273, 7, 5, 0, 0, 7273, 7274, 7, 17, 0, 0, 7274, 7275, 7, 22, 0, 0, 7275, 7276, 7, 15, 0, 0, 7276, 7277, 7, 12, 0, 0, 7277, 1104, 1, 0, 0, 0, 7278, 7279, 7, 25, 0, 0, 7279, 7280, 7, 5, 0, 0, 7280, 7281, 7, 17, 0, 0, 7281, 7282, 7, 22, 0, 0, 7282, 7283, 7, 15, 0, 0, 7283, 7284, 7, 12, 0, 0, 7284, 7285, 5, 95, 0, 0, 7285, 7286, 7, 4, 0, 0, 7286, 7287, 7, 15, 0, 0, 7287, 7288, 7, 8, 0, 0, 7288, 1106, 1, 0, 0, 0, 7289, 7290, 7, 25, 0, 0, 7290, 7291, 7, 5, 0, 0, 7291, 7292, 7, 17, 0, 0, 7292, 7293, 7, 22, 0, 0, 7293, 7294, 7, 15, 0, 0, 7294, 7295, 7, 12, 0, 0, 7295, 7296, 7, 11, 0, 0, 7296, 1108, 1, 0, 0, 0, 7297, 7298, 7, 25, 0, 0, 7298, 7299, 7, 19, 0, 0, 7299, 7300, 7, 8, 0, 0, 7300, 7301, 7, 6, 0, 0, 7301, 1110, 1, 0, 0, 0, 7302, 7303, 7, 25, 0, 0, 7303, 7304, 7, 8, 0, 0, 7304, 7305, 7, 7, 0, 0, 7305, 7306, 7, 14, 0, 0, 7306, 7307, 7, 7, 0, 0, 7307, 7308, 7, 4, 0, 0, 7308, 7309, 7, 7, 0, 0, 7309, 7310, 7, 11, 0, 0, 7310, 1112, 1, 0, 0, 0, 7311, 7312, 7, 25, 0, 0, 7312, 7313, 7, 8, 0, 0, 7313, 7314, 7, 7, 0, 0, 7314, 7315, 7, 14, 0, 0, 7315, 7316, 7, 7, 0, 0, 7316, 7317, 7, 4, 0, 0, 7317, 7318, 7, 15, 0, 0, 7318, 7319, 7, 12, 0, 0, 7319, 7320, 7, 22, 0, 0, 7320, 1114, 1, 0, 0, 0, 7321, 7322, 7, 25, 0, 0, 7322, 7323, 7, 8, 0, 0, 7323, 7324, 7, 7, 0, 0, 7324, 7325, 7, 25, 0, 0, 7325, 7326, 7, 3, 0, 0, 7326, 7327, 7, 8, 0, 0, 7327, 7328, 7, 7, 0, 0, 7328, 1116, 1, 0, 0, 0, 7329, 7330, 7, 25, 0, 0, 7330, 7331, 7, 8, 0, 0, 7331, 7332, 7, 7, 0, 0, 7332, 7333, 7, 11, 0, 0, 7333, 7334, 7, 7, 0, 0, 7334, 7335, 7, 8, 0, 0, 7335, 7336, 7, 24, 0, 0, 7336, 7337, 7, 7, 0, 0, 7337, 1118, 1, 0, 0, 0, 7338, 7339, 7, 25, 0, 0, 7339, 7340, 7, 8, 0, 0, 7340, 7341, 7, 7, 0, 0, 7341, 7342, 7, 24, 0, 0, 7342, 1120, 1, 0, 0, 0, 7343, 7344, 7, 25, 0, 0, 7344, 7345, 7, 8, 0, 0, 7345, 7346, 7, 19, 0, 0, 7346, 7347, 7, 14, 0, 0, 7347, 7348, 7, 7, 0, 0, 7348, 7349, 7, 11, 0, 0, 7349, 7350, 7, 11, 0, 0, 7350, 7351, 7, 5, 0, 0, 7351, 7352, 7, 15, 0, 0, 7352, 7353, 7, 11, 0, 0, 7353, 7354, 7, 6, 0, 0, 7354, 1122, 1, 0, 0, 0, 7355, 7356, 7, 25, 0, 0, 7356, 7357, 7, 8, 0, 0, 7357, 7358, 7, 19, 0, 0, 7358, 7359, 7, 18, 0, 0, 7359, 7360, 7, 15, 0, 0, 7360, 7361, 7, 5, 0, 0, 7361, 7362, 7, 7, 0, 0, 7362, 1124, 1, 0, 0, 0, 7363, 7364, 7, 25, 0, 0, 7364, 7365, 7, 8, 0, 0, 7365, 7366, 7, 19, 0, 0, 7366, 7367, 7, 18, 0, 0, 7367, 7368, 7, 15, 0, 0, 7368, 7369, 7, 5, 0, 0, 7369, 7370, 7, 7, 0, 0, 7370, 7371, 7, 11, 0, 0, 7371, 1126, 1, 0, 0, 0, 7372, 7373, 7, 25, 0, 0, 7373, 7374, 7, 8, 0, 0, 7374, 7375, 7, 19, 0, 0, 7375, 7376, 7, 26, 0, 0, 7376, 7377, 7, 10, 0, 0, 7377, 1128, 1, 0, 0, 0, 7378, 7379, 7, 28, 0, 0, 7379, 7380, 7, 17, 0, 0, 7380, 7381, 7, 7, 0, 0, 7381, 7382, 7, 8, 0, 0, 7382, 7383, 7, 10, 0, 0, 7383, 1130, 1, 0, 0, 0, 7384, 7385, 7, 28, 0, 0, 7385, 7386, 7, 17, 0, 0, 7386, 7387, 7, 15, 0, 0, 7387, 7388, 7, 14, 0, 0, 7388, 7389, 7, 21, 0, 0, 7389, 1132, 1, 0, 0, 0, 7390, 7391, 7, 8, 0, 0, 7391, 7392, 7, 7, 0, 0, 7392, 7393, 7, 16, 0, 0, 7393, 7394, 7, 17, 0, 0, 7394, 7395, 7, 15, 0, 0, 7395, 7396, 7, 5, 0, 0, 7396, 7397, 7, 4, 0, 0, 7397, 1134, 1, 0, 0, 0, 7398, 7399, 7, 8, 0, 0, 7399, 7400, 7, 7, 0, 0, 7400, 7401, 7, 14, 0, 0, 7401, 7402, 7, 19, 0, 0, 7402, 7403, 7, 24, 0, 0, 7403, 7404, 7, 7, 0, 0, 7404, 7405, 7, 8, 0, 0, 7405, 1136, 1, 0, 0, 0, 7406, 7407, 7, 8, 0, 0, 7407, 7408, 7, 7, 0, 0, 7408, 7409, 7, 14, 0, 0, 7409, 7410, 7, 17, 0, 0, 7410, 7411, 7, 8, 0, 0, 7411, 7412, 7, 11, 0, 0, 7412, 7413, 7, 15, 0, 0, 7413, 7414, 7, 24, 0, 0, 7414, 7415, 7, 7, 0, 0, 7415, 1138, 1, 0, 0, 0, 7416, 7417, 7, 8, 0, 0, 7417, 7418, 7, 7, 0, 0, 7418, 7419, 7, 4, 0, 0, 7419, 7420, 7, 19, 0, 0, 7420, 7421, 5, 95, 0, 0, 7421, 7422, 7, 16, 0, 0, 7422, 7423, 7, 17, 0, 0, 7423, 7424, 7, 18, 0, 0, 7424, 7425, 7, 18, 0, 0, 7425, 7426, 7, 7, 0, 0, 7426, 7427, 7, 8, 0, 0, 7427, 7428, 5, 95, 0, 0, 7428, 7429, 7, 11, 0, 0, 7429, 7430, 7, 15, 0, 0, 7430, 7431, 7, 13, 0, 0, 7431, 7432, 7, 7, 0, 0, 7432, 1140, 1, 0, 0, 0, 7433, 7434, 7, 8, 0, 0, 7434, 7435, 7, 7, 0, 0, 7435, 7436, 7, 4, 0, 0, 7436, 7437, 7, 17, 0, 0, 7437, 7438, 7, 12, 0, 0, 7438, 7439, 7, 4, 0, 0, 7439, 7440, 7, 3, 0, 0, 7440, 7441, 7, 12, 0, 0, 7441, 7442, 7, 6, 0, 0, 7442, 1142, 1, 0, 0, 0, 7443, 7444, 7, 8, 0, 0, 7444, 7445, 7, 7, 0, 0, 7445, 7446, 7, 5, 0, 0, 7446, 7447, 7, 3, 0, 0, 7447, 7448, 7, 10, 0, 0, 7448, 1144, 1, 0, 0, 0, 7449, 7450, 7, 8, 0, 0, 7450, 7451, 7, 7, 0, 0, 7451, 7452, 7, 5, 0, 0, 7452, 7453, 7, 3, 0, 0, 7453, 7454, 7, 10, 0, 0, 7454, 7455, 5, 95, 0, 0, 7455, 7456, 7, 5, 0, 0, 7456, 7457, 7, 19, 0, 0, 7457, 7458, 7, 22, 0, 0, 7458, 7459, 5, 95, 0, 0, 7459, 7460, 7, 18, 0, 0, 7460, 7461, 7, 15, 0, 0, 7461, 7462, 7, 5, 0, 0, 7462, 7463, 7, 7, 0, 0, 7463, 1146, 1, 0, 0, 0, 7464, 7465, 7, 8, 0, 0, 7465, 7466, 7, 7, 0, 0, 7466, 7467, 7, 5, 0, 0, 7467, 7468, 7, 3, 0, 0, 7468, 7469, 7, 10, 0, 0, 7469, 7470, 5, 95, 0, 0, 7470, 7471, 7, 5, 0, 0, 7471, 7472, 7, 19, 0, 0, 7472, 7473, 7, 22, 0, 0, 7473, 7474, 5, 95, 0, 0, 7474, 7475, 7, 25, 0, 0, 7475, 7476, 7, 19, 0, 0, 7476, 7477, 7, 11, 0, 0, 7477, 1148, 1, 0, 0, 0, 7478, 7479, 7, 8, 0, 0, 7479, 7480, 7, 7, 0, 0, 7480, 7481, 7, 5, 0, 0, 7481, 7482, 7, 3, 0, 0, 7482, 7483, 7, 10, 0, 0, 7483, 7484, 7, 5, 0, 0, 7484, 7485, 7, 19, 0, 0, 7485, 7486, 7, 22, 0, 0, 7486, 1150, 1, 0, 0, 0, 7487, 7488, 7, 8, 0, 0, 7488, 7489, 7, 7, 0, 0, 7489, 7490, 7, 23, 0, 0, 7490, 7491, 7, 19, 0, 0, 7491, 7492, 7, 24, 0, 0, 7492, 7493, 7, 7, 0, 0, 7493, 1152, 1, 0, 0, 0, 7494, 7495, 7, 8, 0, 0, 7495, 7496, 7, 7, 0, 0, 7496, 7497, 7, 19, 0, 0, 7497, 7498, 7, 8, 0, 0, 7498, 7499, 7, 22, 0, 0, 7499, 7500, 7, 3, 0, 0, 7500, 7501, 7, 12, 0, 0, 7501, 7502, 7, 15, 0, 0, 7502, 7503, 7, 13, 0, 0, 7503, 7504, 7, 7, 0, 0, 7504, 1154, 1, 0, 0, 0, 7505, 7506, 7, 8, 0, 0, 7506, 7507, 7, 7, 0, 0, 7507, 7508, 7, 25, 0, 0, 7508, 7509, 7, 3, 0, 0, 7509, 7510, 7, 15, 0, 0, 7510, 7511, 7, 8, 0, 0, 7511, 1156, 1, 0, 0, 0, 7512, 7513, 7, 8, 0, 0, 7513, 7514, 7, 7, 0, 0, 7514, 7515, 7, 25, 0, 0, 7515, 7516, 7, 5, 0, 0, 7516, 7517, 7, 15, 0, 0, 7517, 7518, 7, 14, 0, 0, 7518, 7519, 7, 3, 0, 0, 7519, 7520, 7, 6, 0, 0, 7520, 7521, 7, 7, 0, 0, 7521, 7522, 5, 95, 0, 0, 7522, 7523, 7, 4, 0, 0, 7523, 7524, 7, 19, 0, 0, 7524, 7525, 5, 95, 0, 0, 7525, 7526, 7, 4, 0, 0, 7526, 7527, 7, 16, 0, 0, 7527, 1158, 1, 0, 0, 0, 7528, 7529, 7, 8, 0, 0, 7529, 7530, 7, 7, 0, 0, 7530, 7531, 7, 25, 0, 0, 7531, 7532, 7, 5, 0, 0, 7532, 7533, 7, 15, 0, 0, 7533, 7534, 7, 14, 0, 0, 7534, 7535, 7, 3, 0, 0, 7535, 7536, 7, 6, 0, 0, 7536, 7537, 7, 7, 0, 0, 7537, 7538, 5, 95, 0, 0, 7538, 7539, 7, 4, 0, 0, 7539, 7540, 7, 19, 0, 0, 7540, 7541, 5, 95, 0, 0, 7541, 7542, 7, 6, 0, 0, 7542, 7543, 7, 3, 0, 0, 7543, 7544, 7, 16, 0, 0, 7544, 7545, 7, 5, 0, 0, 7545, 7546, 7, 7, 0, 0, 7546, 1160, 1, 0, 0, 0, 7547, 7548, 7, 8, 0, 0, 7548, 7549, 7, 7, 0, 0, 7549, 7550, 7, 25, 0, 0, 7550, 7551, 7, 5, 0, 0, 7551, 7552, 7, 15, 0, 0, 7552, 7553, 7, 14, 0, 0, 7553, 7554, 7, 3, 0, 0, 7554, 7555, 7, 6, 0, 0, 7555, 7556, 7, 7, 0, 0, 7556, 7557, 5, 95, 0, 0, 7557, 7558, 7, 15, 0, 0, 7558, 7559, 7, 22, 0, 0, 7559, 7560, 7, 12, 0, 0, 7560, 7561, 7, 19, 0, 0, 7561, 7562, 7, 8, 0, 0, 7562, 7563, 7, 7, 0, 0, 7563, 7564, 5, 95, 0, 0, 7564, 7565, 7, 4, 0, 0, 7565, 7566, 7, 16, 0, 0, 7566, 1162, 1, 0, 0, 0, 7567, 7568, 7, 8, 0, 0, 7568, 7569, 7, 7, 0, 0, 7569, 7570, 7, 25, 0, 0, 7570, 7571, 7, 5, 0, 0, 7571, 7572, 7, 15, 0, 0, 7572, 7573, 7, 14, 0, 0, 7573, 7574, 7, 3, 0, 0, 7574, 7575, 7, 6, 0, 0, 7575, 7576, 7, 7, 0, 0, 7576, 7577, 5, 95, 0, 0, 7577, 7578, 7, 15, 0, 0, 7578, 7579, 7, 22, 0, 0, 7579, 7580, 7, 12, 0, 0, 7580, 7581, 7, 19, 0, 0, 7581, 7582, 7, 8, 0, 0, 7582, 7583, 7, 7, 0, 0, 7583, 7584, 5, 95, 0, 0, 7584, 7585, 7, 6, 0, 0, 7585, 7586, 7, 3, 0, 0, 7586, 7587, 7, 16, 0, 0, 7587, 7588, 7, 5, 0, 0, 7588, 7589, 7, 7, 0, 0, 7589, 1164, 1, 0, 0, 0, 7590, 7591, 7, 8, 0, 0, 7591, 7592, 7, 7, 0, 0, 7592, 7593, 7, 25, 0, 0, 7593, 7594, 7, 5, 0, 0, 7594, 7595, 7, 15, 0, 0, 7595, 7596, 7, 14, 0, 0, 7596, 7597, 7, 3, 0, 0, 7597, 7598, 7, 6, 0, 0, 7598, 7599, 7, 7, 0, 0, 7599, 7600, 5, 95, 0, 0, 7600, 7601, 7, 8, 0, 0, 7601, 7602, 7, 7, 0, 0, 7602, 7603, 7, 9, 0, 0, 7603, 7604, 7, 8, 0, 0, 7604, 7605, 7, 15, 0, 0, 7605, 7606, 7, 6, 0, 0, 7606, 7607, 7, 7, 0, 0, 7607, 7608, 5, 95, 0, 0, 7608, 7609, 7, 4, 0, 0, 7609, 7610, 7, 16, 0, 0, 7610, 1166, 1, 0, 0, 0, 7611, 7612, 7, 8, 0, 0, 7612, 7613, 7, 7, 0, 0, 7613, 7614, 7, 25, 0, 0, 7614, 7615, 7, 5, 0, 0, 7615, 7616, 7, 15, 0, 0, 7616, 7617, 7, 14, 0, 0, 7617, 7618, 7, 3, 0, 0, 7618, 7619, 7, 6, 0, 0, 7619, 7620, 7, 7, 0, 0, 7620, 7621, 5, 95, 0, 0, 7621, 7622, 7, 9, 0, 0, 7622, 7623, 7, 15, 0, 0, 7623, 7624, 7, 5, 0, 0, 7624, 7625, 7, 4, 0, 0, 7625, 7626, 5, 95, 0, 0, 7626, 7627, 7, 4, 0, 0, 7627, 7628, 7, 19, 0, 0, 7628, 7629, 5, 95, 0, 0, 7629, 7630, 7, 6, 0, 0, 7630, 7631, 7, 3, 0, 0, 7631, 7632, 7, 16, 0, 0, 7632, 7633, 7, 5, 0, 0, 7633, 7634, 7, 7, 0, 0, 7634, 1168, 1, 0, 0, 0, 7635, 7636, 7, 8, 0, 0, 7636, 7637, 7, 7, 0, 0, 7637, 7638, 7, 25, 0, 0, 7638, 7639, 7, 5, 0, 0, 7639, 7640, 7, 15, 0, 0, 7640, 7641, 7, 14, 0, 0, 7641, 7642, 7, 3, 0, 0, 7642, 7643, 7, 6, 0, 0, 7643, 7644, 7, 7, 0, 0, 7644, 7645, 5, 95, 0, 0, 7645, 7646, 7, 9, 0, 0, 7646, 7647, 7, 15, 0, 0, 7647, 7648, 7, 5, 0, 0, 7648, 7649, 7, 4, 0, 0, 7649, 7650, 5, 95, 0, 0, 7650, 7651, 7, 15, 0, 0, 7651, 7652, 7, 22, 0, 0, 7652, 7653, 7, 12, 0, 0, 7653, 7654, 7, 19, 0, 0, 7654, 7655, 7, 8, 0, 0, 7655, 7656, 7, 7, 0, 0, 7656, 7657, 5, 95, 0, 0, 7657, 7658, 7, 6, 0, 0, 7658, 7659, 7, 3, 0, 0, 7659, 7660, 7, 16, 0, 0, 7660, 7661, 7, 5, 0, 0, 7661, 7662, 7, 7, 0, 0, 7662, 1170, 1, 0, 0, 0, 7663, 7664, 7, 8, 0, 0, 7664, 7665, 7, 7, 0, 0, 7665, 7666, 7, 25, 0, 0, 7666, 7667, 7, 5, 0, 0, 7667, 7668, 7, 15, 0, 0, 7668, 7669, 7, 14, 0, 0, 7669, 7670, 7, 3, 0, 0, 7670, 7671, 7, 6, 0, 0, 7671, 7672, 7, 15, 0, 0, 7672, 7673, 7, 19, 0, 0, 7673, 7674, 7, 12, 0, 0, 7674, 1172, 1, 0, 0, 0, 7675, 7676, 7, 8, 0, 0, 7676, 7677, 7, 7, 0, 0, 7677, 7678, 7, 11, 0, 0, 7678, 7679, 7, 7, 0, 0, 7679, 7680, 7, 6, 0, 0, 7680, 1174, 1, 0, 0, 0, 7681, 7682, 7, 8, 0, 0, 7682, 7683, 7, 7, 0, 0, 7683, 7684, 7, 11, 0, 0, 7684, 7685, 7, 6, 0, 0, 7685, 7686, 7, 3, 0, 0, 7686, 7687, 7, 8, 0, 0, 7687, 7688, 7, 6, 0, 0, 7688, 1176, 1, 0, 0, 0, 7689, 7690, 7, 8, 0, 0, 7690, 7691, 7, 7, 0, 0, 7691, 7692, 7, 11, 0, 0, 7692, 7693, 7, 17, 0, 0, 7693, 7694, 7, 23, 0, 0, 7694, 7695, 7, 7, 0, 0, 7695, 1178, 1, 0, 0, 0, 7696, 7697, 7, 8, 0, 0, 7697, 7698, 7, 7, 0, 0, 7698, 7699, 7, 6, 0, 0, 7699, 7700, 7, 17, 0, 0, 7700, 7701, 7, 8, 0, 0, 7701, 7702, 7, 12, 0, 0, 7702, 7703, 7, 7, 0, 0, 7703, 7704, 7, 4, 0, 0, 7704, 7705, 5, 95, 0, 0, 7705, 7706, 7, 11, 0, 0, 7706, 7707, 7, 28, 0, 0, 7707, 7708, 7, 5, 0, 0, 7708, 7709, 7, 11, 0, 0, 7709, 7710, 7, 6, 0, 0, 7710, 7711, 7, 3, 0, 0, 7711, 7712, 7, 6, 0, 0, 7712, 7713, 7, 7, 0, 0, 7713, 1180, 1, 0, 0, 0, 7714, 7715, 7, 8, 0, 0, 7715, 7716, 7, 7, 0, 0, 7716, 7717, 7, 6, 0, 0, 7717, 7718, 7, 17, 0, 0, 7718, 7719, 7, 8, 0, 0, 7719, 7720, 7, 12, 0, 0, 7720, 7721, 7, 15, 0, 0, 7721, 7722, 7, 12, 0, 0, 7722, 7723, 7, 22, 0, 0, 7723, 1182, 1, 0, 0, 0, 7724, 7725, 7, 8, 0, 0, 7725, 7726, 7, 7, 0, 0, 7726, 7727, 7, 6, 0, 0, 7727, 7728, 7, 17, 0, 0, 7728, 7729, 7, 8, 0, 0, 7729, 7730, 7, 12, 0, 0, 7730, 7731, 7, 11, 0, 0, 7731, 1184, 1, 0, 0, 0, 7732, 7733, 7, 8, 0, 0, 7733, 7734, 7, 7, 0, 0, 7734, 7735, 7, 17, 0, 0, 7735, 7736, 7, 11, 0, 0, 7736, 7737, 7, 7, 0, 0, 7737, 1186, 1, 0, 0, 0, 7738, 7739, 7, 8, 0, 0, 7739, 7740, 7, 19, 0, 0, 7740, 7741, 7, 5, 0, 0, 7741, 7742, 7, 7, 0, 0, 7742, 1188, 1, 0, 0, 0, 7743, 7744, 7, 8, 0, 0, 7744, 7745, 7, 19, 0, 0, 7745, 7746, 7, 5, 0, 0, 7746, 7747, 7, 5, 0, 0, 7747, 7748, 7, 16, 0, 0, 7748, 7749, 7, 3, 0, 0, 7749, 7750, 7, 14, 0, 0, 7750, 7751, 7, 21, 0, 0, 7751, 1190, 1, 0, 0, 0, 7752, 7753, 7, 8, 0, 0, 7753, 7754, 7, 19, 0, 0, 7754, 7755, 7, 5, 0, 0, 7755, 7756, 7, 5, 0, 0, 7756, 7757, 7, 17, 0, 0, 7757, 7758, 7, 25, 0, 0, 7758, 1192, 1, 0, 0, 0, 7759, 7760, 7, 8, 0, 0, 7760, 7761, 7, 19, 0, 0, 7761, 7762, 7, 6, 0, 0, 7762, 7763, 7, 3, 0, 0, 7763, 7764, 7, 6, 0, 0, 7764, 7765, 7, 7, 0, 0, 7765, 1194, 1, 0, 0, 0, 7766, 7767, 7, 8, 0, 0, 7767, 7768, 7, 19, 0, 0, 7768, 7769, 7, 9, 0, 0, 7769, 1196, 1, 0, 0, 0, 7770, 7771, 7, 8, 0, 0, 7771, 7772, 7, 19, 0, 0, 7772, 7773, 7, 9, 0, 0, 7773, 7774, 7, 11, 0, 0, 7774, 1198, 1, 0, 0, 0, 7775, 7776, 7, 8, 0, 0, 7776, 7777, 7, 19, 0, 0, 7777, 7778, 7, 9, 0, 0, 7778, 7779, 5, 95, 0, 0, 7779, 7780, 7, 18, 0, 0, 7780, 7781, 7, 19, 0, 0, 7781, 7782, 7, 8, 0, 0, 7782, 7783, 7, 23, 0, 0, 7783, 7784, 7, 3, 0, 0, 7784, 7785, 7, 6, 0, 0, 7785, 1200, 1, 0, 0, 0, 7786, 7787, 7, 8, 0, 0, 7787, 7788, 7, 6, 0, 0, 7788, 7789, 7, 8, 0, 0, 7789, 7790, 7, 7, 0, 0, 7790, 7791, 7, 7, 0, 0, 7791, 1202, 1, 0, 0, 0, 7792, 7793, 7, 11, 0, 0, 7793, 7794, 7, 3, 0, 0, 7794, 7795, 7, 24, 0, 0, 7795, 7796, 7, 7, 0, 0, 7796, 7797, 7, 25, 0, 0, 7797, 7798, 7, 19, 0, 0, 7798, 7799, 7, 15, 0, 0, 7799, 7800, 7, 12, 0, 0, 7800, 7801, 7, 6, 0, 0, 7801, 1204, 1, 0, 0, 0, 7802, 7803, 7, 11, 0, 0, 7803, 7804, 7, 14, 0, 0, 7804, 7805, 7, 20, 0, 0, 7805, 7806, 7, 7, 0, 0, 7806, 7807, 7, 4, 0, 0, 7807, 7808, 7, 17, 0, 0, 7808, 7809, 7, 5, 0, 0, 7809, 7810, 7, 7, 0, 0, 7810, 1206, 1, 0, 0, 0, 7811, 7812, 7, 11, 0, 0, 7812, 7813, 7, 7, 0, 0, 7813, 7814, 7, 14, 0, 0, 7814, 7815, 7, 17, 0, 0, 7815, 7816, 7, 8, 0, 0, 7816, 7817, 7, 15, 0, 0, 7817, 7818, 7, 6, 0, 0, 7818, 7819, 7, 10, 0, 0, 7819, 1208, 1, 0, 0, 0, 7820, 7821, 7, 11, 0, 0, 7821, 7822, 7, 7, 0, 0, 7822, 7823, 7, 28, 0, 0, 7823, 7824, 7, 17, 0, 0, 7824, 7825, 7, 7, 0, 0, 7825, 7826, 7, 12, 0, 0, 7826, 7827, 7, 14, 0, 0, 7827, 7828, 7, 7, 0, 0, 7828, 1210, 1, 0, 0, 0, 7829, 7830, 7, 11, 0, 0, 7830, 7831, 7, 7, 0, 0, 7831, 7832, 7, 8, 0, 0, 7832, 7833, 7, 24, 0, 0, 7833, 7834, 7, 7, 0, 0, 7834, 7835, 7, 8, 0, 0, 7835, 1212, 1, 0, 0, 0, 7836, 7837, 7, 11, 0, 0, 7837, 7838, 7, 7, 0, 0, 7838, 7839, 7, 11, 0, 0, 7839, 7840, 7, 11, 0, 0, 7840, 7841, 7, 15, 0, 0, 7841, 7842, 7, 19, 0, 0, 7842, 7843, 7, 12, 0, 0, 7843, 1214, 1, 0, 0, 0, 7844, 7845, 7, 11, 0, 0, 7845, 7846, 7, 20, 0, 0, 7846, 7847, 7, 3, 0, 0, 7847, 7848, 7, 8, 0, 0, 7848, 7849, 7, 7, 0, 0, 7849, 1216, 1, 0, 0, 0, 7850, 7851, 7, 11, 0, 0, 7851, 7852, 7, 20, 0, 0, 7852, 7853, 7, 3, 0, 0, 7853, 7854, 7, 8, 0, 0, 7854, 7855, 7, 7, 0, 0, 7855, 7856, 7, 4, 0, 0, 7856, 1218, 1, 0, 0, 0, 7857, 7858, 7, 11, 0, 0, 7858, 7859, 7, 15, 0, 0, 7859, 7860, 7, 22, 0, 0, 7860, 7861, 7, 12, 0, 0, 7861, 7862, 7, 7, 0, 0, 7862, 7863, 7, 4, 0, 0, 7863, 1220, 1, 0, 0, 0, 7864, 7865, 7, 11, 0, 0, 7865, 7866, 7, 15, 0, 0, 7866, 7867, 7, 23, 0, 0, 7867, 7868, 7, 25, 0, 0, 7868, 7869, 7, 5, 0, 0, 7869, 7870, 7, 7, 0, 0, 7870, 1222, 1, 0, 0, 0, 7871, 7872, 7, 11, 0, 0, 7872, 7873, 7, 5, 0, 0, 7873, 7874, 7, 3, 0, 0, 7874, 7875, 7, 24, 0, 0, 7875, 7876, 7, 7, 0, 0, 7876, 1224, 1, 0, 0, 0, 7877, 7878, 7, 11, 0, 0, 7878, 7879, 7, 5, 0, 0, 7879, 7880, 7, 19, 0, 0, 7880, 7881, 7, 9, 0, 0, 7881, 1226, 1, 0, 0, 0, 7882, 7883, 7, 11, 0, 0, 7883, 7884, 7, 12, 0, 0, 7884, 7885, 7, 3, 0, 0, 7885, 7886, 7, 25, 0, 0, 7886, 7887, 7, 11, 0, 0, 7887, 7888, 7, 20, 0, 0, 7888, 7889, 7, 19, 0, 0, 7889, 7890, 7, 6, 0, 0, 7890, 1228, 1, 0, 0, 0, 7891, 7892, 7, 11, 0, 0, 7892, 7893, 7, 19, 0, 0, 7893, 7894, 7, 14, 0, 0, 7894, 7895, 7, 21, 0, 0, 7895, 7896, 7, 7, 0, 0, 7896, 7897, 7, 6, 0, 0, 7897, 1230, 1, 0, 0, 0, 7898, 7899, 7, 11, 0, 0, 7899, 7900, 7, 19, 0, 0, 7900, 7901, 7, 23, 0, 0, 7901, 7902, 7, 7, 0, 0, 7902, 1232, 1, 0, 0, 0, 7903, 7904, 7, 11, 0, 0, 7904, 7905, 7, 19, 0, 0, 7905, 7906, 7, 12, 0, 0, 7906, 7907, 7, 3, 0, 0, 7907, 7908, 7, 23, 0, 0, 7908, 7909, 7, 7, 0, 0, 7909, 1234, 1, 0, 0, 0, 7910, 7911, 7, 11, 0, 0, 7911, 7912, 7, 19, 0, 0, 7912, 7913, 7, 17, 0, 0, 7913, 7914, 7, 12, 0, 0, 7914, 7915, 7, 4, 0, 0, 7915, 7916, 7, 11, 0, 0, 7916, 1236, 1, 0, 0, 0, 7917, 7918, 7, 11, 0, 0, 7918, 7919, 7, 19, 0, 0, 7919, 7920, 7, 17, 0, 0, 7920, 7921, 7, 8, 0, 0, 7921, 7922, 7, 14, 0, 0, 7922, 7923, 7, 7, 0, 0, 7923, 1238, 1, 0, 0, 0, 7924, 7925, 7, 11, 0, 0, 7925, 7926, 7, 28, 0, 0, 7926, 7927, 7, 5, 0, 0, 7927, 7928, 5, 95, 0, 0, 7928, 7929, 7, 3, 0, 0, 7929, 7930, 7, 18, 0, 0, 7930, 7931, 7, 6, 0, 0, 7931, 7932, 7, 7, 0, 0, 7932, 7933, 7, 8, 0, 0, 7933, 7934, 5, 95, 0, 0, 7934, 7935, 7, 22, 0, 0, 7935, 7936, 7, 6, 0, 0, 7936, 7937, 7, 15, 0, 0, 7937, 7938, 7, 4, 0, 0, 7938, 7939, 7, 11, 0, 0, 7939, 1240, 1, 0, 0, 0, 7940, 7941, 7, 11, 0, 0, 7941, 7942, 7, 28, 0, 0, 7942, 7943, 7, 5, 0, 0, 7943, 7944, 5, 95, 0, 0, 7944, 7945, 7, 3, 0, 0, 7945, 7946, 7, 18, 0, 0, 7946, 7947, 7, 6, 0, 0, 7947, 7948, 7, 7, 0, 0, 7948, 7949, 7, 8, 0, 0, 7949, 7950, 5, 95, 0, 0, 7950, 7951, 7, 23, 0, 0, 7951, 7952, 7, 6, 0, 0, 7952, 7953, 7, 11, 0, 0, 7953, 7954, 5, 95, 0, 0, 7954, 7955, 7, 22, 0, 0, 7955, 7956, 7, 3, 0, 0, 7956, 7957, 7, 25, 0, 0, 7957, 7958, 7, 11, 0, 0, 7958, 1242, 1, 0, 0, 0, 7959, 7960, 7, 11, 0, 0, 7960, 7961, 7, 28, 0, 0, 7961, 7962, 7, 5, 0, 0, 7962, 7963, 5, 95, 0, 0, 7963, 7964, 7, 16, 0, 0, 7964, 7965, 7, 7, 0, 0, 7965, 7966, 7, 18, 0, 0, 7966, 7967, 7, 19, 0, 0, 7967, 7968, 7, 8, 0, 0, 7968, 7969, 7, 7, 0, 0, 7969, 7970, 5, 95, 0, 0, 7970, 7971, 7, 22, 0, 0, 7971, 7972, 7, 6, 0, 0, 7972, 7973, 7, 15, 0, 0, 7973, 7974, 7, 4, 0, 0, 7974, 7975, 7, 11, 0, 0, 7975, 1244, 1, 0, 0, 0, 7976, 7977, 7, 11, 0, 0, 7977, 7978, 7, 28, 0, 0, 7978, 7979, 7, 5, 0, 0, 7979, 7980, 5, 95, 0, 0, 7980, 7981, 7, 16, 0, 0, 7981, 7982, 7, 17, 0, 0, 7982, 7983, 7, 18, 0, 0, 7983, 7984, 7, 18, 0, 0, 7984, 7985, 7, 7, 0, 0, 7985, 7986, 7, 8, 0, 0, 7986, 7987, 5, 95, 0, 0, 7987, 7988, 7, 8, 0, 0, 7988, 7989, 7, 7, 0, 0, 7989, 7990, 7, 11, 0, 0, 7990, 7991, 7, 17, 0, 0, 7991, 7992, 7, 5, 0, 0, 7992, 7993, 7, 6, 0, 0, 7993, 1246, 1, 0, 0, 0, 7994, 7995, 7, 11, 0, 0, 7995, 7996, 7, 28, 0, 0, 7996, 7997, 7, 5, 0, 0, 7997, 7998, 5, 95, 0, 0, 7998, 7999, 7, 14, 0, 0, 7999, 8000, 7, 3, 0, 0, 8000, 8001, 7, 14, 0, 0, 8001, 8002, 7, 20, 0, 0, 8002, 8003, 7, 7, 0, 0, 8003, 1248, 1, 0, 0, 0, 8004, 8005, 7, 11, 0, 0, 8005, 8006, 7, 28, 0, 0, 8006, 8007, 7, 5, 0, 0, 8007, 8008, 5, 95, 0, 0, 8008, 8009, 7, 12, 0, 0, 8009, 8010, 7, 19, 0, 0, 8010, 8011, 5, 95, 0, 0, 8011, 8012, 7, 14, 0, 0, 8012, 8013, 7, 3, 0, 0, 8013, 8014, 7, 14, 0, 0, 8014, 8015, 7, 20, 0, 0, 8015, 8016, 7, 7, 0, 0, 8016, 1250, 1, 0, 0, 0, 8017, 8018, 7, 11, 0, 0, 8018, 8019, 7, 28, 0, 0, 8019, 8020, 7, 5, 0, 0, 8020, 8021, 5, 95, 0, 0, 8021, 8022, 7, 6, 0, 0, 8022, 8023, 7, 20, 0, 0, 8023, 8024, 7, 8, 0, 0, 8024, 8025, 7, 7, 0, 0, 8025, 8026, 7, 3, 0, 0, 8026, 8027, 7, 4, 0, 0, 8027, 1252, 1, 0, 0, 0, 8028, 8029, 7, 11, 0, 0, 8029, 8030, 7, 6, 0, 0, 8030, 8031, 7, 3, 0, 0, 8031, 8032, 7, 8, 0, 0, 8032, 8033, 7, 6, 0, 0, 8033, 1254, 1, 0, 0, 0, 8034, 8035, 7, 11, 0, 0, 8035, 8036, 7, 6, 0, 0, 8036, 8037, 7, 3, 0, 0, 8037, 8038, 7, 8, 0, 0, 8038, 8039, 7, 6, 0, 0, 8039, 8040, 7, 11, 0, 0, 8040, 1256, 1, 0, 0, 0, 8041, 8042, 7, 11, 0, 0, 8042, 8043, 7, 6, 0, 0, 8043, 8044, 7, 3, 0, 0, 8044, 8045, 7, 6, 0, 0, 8045, 8046, 7, 11, 0, 0, 8046, 8047, 5, 95, 0, 0, 8047, 8048, 7, 3, 0, 0, 8048, 8049, 7, 17, 0, 0, 8049, 8050, 7, 6, 0, 0, 8050, 8051, 7, 19, 0, 0, 8051, 8052, 5, 95, 0, 0, 8052, 8053, 7, 8, 0, 0, 8053, 8054, 7, 7, 0, 0, 8054, 8055, 7, 14, 0, 0, 8055, 8056, 7, 3, 0, 0, 8056, 8057, 7, 5, 0, 0, 8057, 8058, 7, 14, 0, 0, 8058, 1258, 1, 0, 0, 0, 8059, 8060, 7, 11, 0, 0, 8060, 8061, 7, 6, 0, 0, 8061, 8062, 7, 3, 0, 0, 8062, 8063, 7, 6, 0, 0, 8063, 8064, 7, 11, 0, 0, 8064, 8065, 5, 95, 0, 0, 8065, 8066, 7, 25, 0, 0, 8066, 8067, 7, 7, 0, 0, 8067, 8068, 7, 8, 0, 0, 8068, 8069, 7, 11, 0, 0, 8069, 8070, 7, 15, 0, 0, 8070, 8071, 7, 11, 0, 0, 8071, 8072, 7, 6, 0, 0, 8072, 8073, 7, 7, 0, 0, 8073, 8074, 7, 12, 0, 0, 8074, 8075, 7, 6, 0, 0, 8075, 1260, 1, 0, 0, 0, 8076, 8077, 7, 11, 0, 0, 8077, 8078, 7, 6, 0, 0, 8078, 8079, 7, 3, 0, 0, 8079, 8080, 7, 6, 0, 0, 8080, 8081, 7, 11, 0, 0, 8081, 8082, 5, 95, 0, 0, 8082, 8083, 7, 11, 0, 0, 8083, 8084, 7, 3, 0, 0, 8084, 8085, 7, 23, 0, 0, 8085, 8086, 7, 25, 0, 0, 8086, 8087, 7, 5, 0, 0, 8087, 8088, 7, 7, 0, 0, 8088, 8089, 5, 95, 0, 0, 8089, 8090, 7, 25, 0, 0, 8090, 8091, 7, 3, 0, 0, 8091, 8092, 7, 22, 0, 0, 8092, 8093, 7, 7, 0, 0, 8093, 8094, 7, 11, 0, 0, 8094, 1262, 1, 0, 0, 0, 8095, 8096, 7, 11, 0, 0, 8096, 8097, 7, 6, 0, 0, 8097, 8098, 7, 3, 0, 0, 8098, 8099, 7, 6, 0, 0, 8099, 8100, 7, 17, 0, 0, 8100, 8101, 7, 11, 0, 0, 8101, 1264, 1, 0, 0, 0, 8102, 8103, 7, 11, 0, 0, 8103, 8104, 7, 6, 0, 0, 8104, 8105, 7, 19, 0, 0, 8105, 8106, 7, 25, 0, 0, 8106, 1266, 1, 0, 0, 0, 8107, 8108, 7, 11, 0, 0, 8108, 8109, 7, 6, 0, 0, 8109, 8110, 7, 19, 0, 0, 8110, 8111, 7, 8, 0, 0, 8111, 8112, 7, 3, 0, 0, 8112, 8113, 7, 22, 0, 0, 8113, 8114, 7, 7, 0, 0, 8114, 1268, 1, 0, 0, 0, 8115, 8116, 7, 11, 0, 0, 8116, 8117, 7, 6, 0, 0, 8117, 8118, 7, 19, 0, 0, 8118, 8119, 7, 8, 0, 0, 8119, 8120, 7, 7, 0, 0, 8120, 8121, 7, 4, 0, 0, 8121, 1270, 1, 0, 0, 0, 8122, 8123, 7, 11, 0, 0, 8123, 8124, 7, 6, 0, 0, 8124, 8125, 7, 8, 0, 0, 8125, 8126, 7, 15, 0, 0, 8126, 8127, 7, 12, 0, 0, 8127, 8128, 7, 22, 0, 0, 8128, 1272, 1, 0, 0, 0, 8129, 8130, 7, 11, 0, 0, 8130, 8131, 7, 17, 0, 0, 8131, 8132, 7, 16, 0, 0, 8132, 8133, 7, 14, 0, 0, 8133, 8134, 7, 5, 0, 0, 8134, 8135, 7, 3, 0, 0, 8135, 8136, 7, 11, 0, 0, 8136, 8137, 7, 11, 0, 0, 8137, 8138, 5, 95, 0, 0, 8138, 8139, 7, 19, 0, 0, 8139, 8140, 7, 8, 0, 0, 8140, 8141, 7, 15, 0, 0, 8141, 8142, 7, 22, 0, 0, 8142, 8143, 7, 15, 0, 0, 8143, 8144, 7, 12, 0, 0, 8144, 1274, 1, 0, 0, 0, 8145, 8146, 7, 11, 0, 0, 8146, 8147, 7, 17, 0, 0, 8147, 8148, 7, 16, 0, 0, 8148, 8149, 7, 27, 0, 0, 8149, 8150, 7, 7, 0, 0, 8150, 8151, 7, 14, 0, 0, 8151, 8152, 7, 6, 0, 0, 8152, 1276, 1, 0, 0, 0, 8153, 8154, 7, 11, 0, 0, 8154, 8155, 7, 17, 0, 0, 8155, 8156, 7, 16, 0, 0, 8156, 8157, 7, 25, 0, 0, 8157, 8158, 7, 3, 0, 0, 8158, 8159, 7, 8, 0, 0, 8159, 8160, 7, 6, 0, 0, 8160, 8161, 7, 15, 0, 0, 8161, 8162, 7, 6, 0, 0, 8162, 8163, 7, 15, 0, 0, 8163, 8164, 7, 19, 0, 0, 8164, 8165, 7, 12, 0, 0, 8165, 1278, 1, 0, 0, 0, 8166, 8167, 7, 11, 0, 0, 8167, 8168, 7, 17, 0, 0, 8168, 8169, 7, 16, 0, 0, 8169, 8170, 7, 25, 0, 0, 8170, 8171, 7, 3, 0, 0, 8171, 8172, 7, 8, 0, 0, 8172, 8173, 7, 6, 0, 0, 8173, 8174, 7, 15, 0, 0, 8174, 8175, 7, 6, 0, 0, 8175, 8176, 7, 15, 0, 0, 8176, 8177, 7, 19, 0, 0, 8177, 8178, 7, 12, 0, 0, 8178, 8179, 7, 11, 0, 0, 8179, 1280, 1, 0, 0, 0, 8180, 8181, 7, 11, 0, 0, 8181, 8182, 7, 17, 0, 0, 8182, 8183, 7, 11, 0, 0, 8183, 8184, 7, 25, 0, 0, 8184, 8185, 7, 7, 0, 0, 8185, 8186, 7, 12, 0, 0, 8186, 8187, 7, 4, 0, 0, 8187, 1282, 1, 0, 0, 0, 8188, 8189, 7, 11, 0, 0, 8189, 8190, 7, 9, 0, 0, 8190, 8191, 7, 3, 0, 0, 8191, 8192, 7, 25, 0, 0, 8192, 8193, 7, 11, 0, 0, 8193, 1284, 1, 0, 0, 0, 8194, 8195, 7, 11, 0, 0, 8195, 8196, 7, 9, 0, 0, 8196, 8197, 7, 15, 0, 0, 8197, 8198, 7, 6, 0, 0, 8198, 8199, 7, 14, 0, 0, 8199, 8200, 7, 20, 0, 0, 8200, 8201, 7, 7, 0, 0, 8201, 8202, 7, 11, 0, 0, 8202, 1286, 1, 0, 0, 0, 8203, 8204, 7, 6, 0, 0, 8204, 8205, 7, 3, 0, 0, 8205, 8206, 7, 16, 0, 0, 8206, 8207, 7, 5, 0, 0, 8207, 8208, 7, 7, 0, 0, 8208, 8209, 5, 95, 0, 0, 8209, 8210, 7, 12, 0, 0, 8210, 8211, 7, 3, 0, 0, 8211, 8212, 7, 23, 0, 0, 8212, 8213, 7, 7, 0, 0, 8213, 1288, 1, 0, 0, 0, 8214, 8215, 7, 6, 0, 0, 8215, 8216, 7, 3, 0, 0, 8216, 8217, 7, 16, 0, 0, 8217, 8218, 7, 5, 0, 0, 8218, 8219, 7, 7, 0, 0, 8219, 8220, 7, 11, 0, 0, 8220, 8221, 7, 25, 0, 0, 8221, 8222, 7, 3, 0, 0, 8222, 8223, 7, 14, 0, 0, 8223, 8224, 7, 7, 0, 0, 8224, 1290, 1, 0, 0, 0, 8225, 8226, 7, 6, 0, 0, 8226, 8227, 7, 3, 0, 0, 8227, 8228, 7, 16, 0, 0, 8228, 8229, 7, 5, 0, 0, 8229, 8230, 7, 7, 0, 0, 8230, 8231, 5, 95, 0, 0, 8231, 8232, 7, 6, 0, 0, 8232, 8233, 7, 10, 0, 0, 8233, 8234, 7, 25, 0, 0, 8234, 8235, 7, 7, 0, 0, 8235, 1292, 1, 0, 0, 0, 8236, 8237, 7, 6, 0, 0, 8237, 8238, 7, 7, 0, 0, 8238, 8239, 7, 23, 0, 0, 8239, 8240, 7, 25, 0, 0, 8240, 8241, 7, 19, 0, 0, 8241, 8242, 7, 8, 0, 0, 8242, 8243, 7, 3, 0, 0, 8243, 8244, 7, 8, 0, 0, 8244, 8245, 7, 10, 0, 0, 8245, 1294, 1, 0, 0, 0, 8246, 8247, 7, 6, 0, 0, 8247, 8248, 7, 7, 0, 0, 8248, 8249, 7, 23, 0, 0, 8249, 8250, 7, 25, 0, 0, 8250, 8251, 7, 6, 0, 0, 8251, 8252, 7, 3, 0, 0, 8252, 8253, 7, 16, 0, 0, 8253, 8254, 7, 5, 0, 0, 8254, 8255, 7, 7, 0, 0, 8255, 1296, 1, 0, 0, 0, 8256, 8257, 7, 6, 0, 0, 8257, 8258, 7, 20, 0, 0, 8258, 8259, 7, 3, 0, 0, 8259, 8260, 7, 12, 0, 0, 8260, 1298, 1, 0, 0, 0, 8261, 8262, 7, 6, 0, 0, 8262, 8263, 7, 8, 0, 0, 8263, 8264, 7, 3, 0, 0, 8264, 8265, 7, 4, 0, 0, 8265, 8266, 7, 15, 0, 0, 8266, 8267, 7, 6, 0, 0, 8267, 8268, 7, 15, 0, 0, 8268, 8269, 7, 19, 0, 0, 8269, 8270, 7, 12, 0, 0, 8270, 8271, 7, 3, 0, 0, 8271, 8272, 7, 5, 0, 0, 8272, 1300, 1, 0, 0, 0, 8273, 8274, 7, 6, 0, 0, 8274, 8275, 7, 8, 0, 0, 8275, 8276, 7, 3, 0, 0, 8276, 8277, 7, 12, 0, 0, 8277, 8278, 7, 11, 0, 0, 8278, 8279, 7, 3, 0, 0, 8279, 8280, 7, 14, 0, 0, 8280, 8281, 7, 6, 0, 0, 8281, 8282, 7, 15, 0, 0, 8282, 8283, 7, 19, 0, 0, 8283, 8284, 7, 12, 0, 0, 8284, 1302, 1, 0, 0, 0, 8285, 8286, 7, 6, 0, 0, 8286, 8287, 7, 8, 0, 0, 8287, 8288, 7, 3, 0, 0, 8288, 8289, 7, 12, 0, 0, 8289, 8290, 7, 11, 0, 0, 8290, 8291, 7, 3, 0, 0, 8291, 8292, 7, 14, 0, 0, 8292, 8293, 7, 6, 0, 0, 8293, 8294, 7, 15, 0, 0, 8294, 8295, 7, 19, 0, 0, 8295, 8296, 7, 12, 0, 0, 8296, 8297, 7, 3, 0, 0, 8297, 8298, 7, 5, 0, 0, 8298, 1304, 1, 0, 0, 0, 8299, 8300, 7, 6, 0, 0, 8300, 8301, 7, 8, 0, 0, 8301, 8302, 7, 15, 0, 0, 8302, 8303, 7, 22, 0, 0, 8303, 8304, 7, 22, 0, 0, 8304, 8305, 7, 7, 0, 0, 8305, 8306, 7, 8, 0, 0, 8306, 8307, 7, 11, 0, 0, 8307, 1306, 1, 0, 0, 0, 8308, 8309, 7, 6, 0, 0, 8309, 8310, 7, 8, 0, 0, 8310, 8311, 7, 17, 0, 0, 8311, 8312, 7, 12, 0, 0, 8312, 8313, 7, 14, 0, 0, 8313, 8314, 7, 3, 0, 0, 8314, 8315, 7, 6, 0, 0, 8315, 8316, 7, 7, 0, 0, 8316, 1308, 1, 0, 0, 0, 8317, 8318, 7, 17, 0, 0, 8318, 8319, 7, 12, 0, 0, 8319, 8320, 7, 16, 0, 0, 8320, 8321, 7, 19, 0, 0, 8321, 8322, 7, 17, 0, 0, 8322, 8323, 7, 12, 0, 0, 8323, 8324, 7, 4, 0, 0, 8324, 8325, 7, 7, 0, 0, 8325, 8326, 7, 4, 0, 0, 8326, 1310, 1, 0, 0, 0, 8327, 8328, 7, 17, 0, 0, 8328, 8329, 7, 12, 0, 0, 8329, 8330, 7, 4, 0, 0, 8330, 8331, 7, 7, 0, 0, 8331, 8332, 7, 18, 0, 0, 8332, 8333, 7, 15, 0, 0, 8333, 8334, 7, 12, 0, 0, 8334, 8335, 7, 7, 0, 0, 8335, 8336, 7, 4, 0, 0, 8336, 1312, 1, 0, 0, 0, 8337, 8338, 7, 17, 0, 0, 8338, 8339, 7, 12, 0, 0, 8339, 8340, 7, 4, 0, 0, 8340, 8341, 7, 19, 0, 0, 8341, 8342, 7, 18, 0, 0, 8342, 8343, 7, 15, 0, 0, 8343, 8344, 7, 5, 0, 0, 8344, 8345, 7, 7, 0, 0, 8345, 1314, 1, 0, 0, 0, 8346, 8347, 7, 17, 0, 0, 8347, 8348, 7, 12, 0, 0, 8348, 8349, 7, 4, 0, 0, 8349, 8350, 7, 19, 0, 0, 8350, 8351, 5, 95, 0, 0, 8351, 8352, 7, 16, 0, 0, 8352, 8353, 7, 17, 0, 0, 8353, 8354, 7, 18, 0, 0, 8354, 8355, 7, 18, 0, 0, 8355, 8356, 7, 7, 0, 0, 8356, 8357, 7, 8, 0, 0, 8357, 8358, 5, 95, 0, 0, 8358, 8359, 7, 11, 0, 0, 8359, 8360, 7, 15, 0, 0, 8360, 8361, 7, 13, 0, 0, 8361, 8362, 7, 7, 0, 0, 8362, 1316, 1, 0, 0, 0, 8363, 8364, 7, 17, 0, 0, 8364, 8365, 7, 12, 0, 0, 8365, 8366, 7, 15, 0, 0, 8366, 8367, 7, 12, 0, 0, 8367, 8368, 7, 11, 0, 0, 8368, 8369, 7, 6, 0, 0, 8369, 8370, 7, 3, 0, 0, 8370, 8371, 7, 5, 0, 0, 8371, 8372, 7, 5, 0, 0, 8372, 1318, 1, 0, 0, 0, 8373, 8374, 7, 17, 0, 0, 8374, 8375, 7, 12, 0, 0, 8375, 8376, 7, 21, 0, 0, 8376, 8377, 7, 12, 0, 0, 8377, 8378, 7, 19, 0, 0, 8378, 8379, 7, 9, 0, 0, 8379, 8380, 7, 12, 0, 0, 8380, 1320, 1, 0, 0, 0, 8381, 8382, 7, 17, 0, 0, 8382, 8383, 7, 12, 0, 0, 8383, 8384, 7, 6, 0, 0, 8384, 8385, 7, 15, 0, 0, 8385, 8386, 7, 5, 0, 0, 8386, 1322, 1, 0, 0, 0, 8387, 8388, 7, 17, 0, 0, 8388, 8389, 7, 25, 0, 0, 8389, 8390, 7, 22, 0, 0, 8390, 8391, 7, 8, 0, 0, 8391, 8392, 7, 3, 0, 0, 8392, 8393, 7, 4, 0, 0, 8393, 8394, 7, 7, 0, 0, 8394, 1324, 1, 0, 0, 0, 8395, 8396, 7, 17, 0, 0, 8396, 8397, 7, 11, 0, 0, 8397, 8398, 7, 7, 0, 0, 8398, 8399, 7, 8, 0, 0, 8399, 1326, 1, 0, 0, 0, 8400, 8401, 7, 17, 0, 0, 8401, 8402, 7, 11, 0, 0, 8402, 8403, 7, 7, 0, 0, 8403, 8404, 5, 95, 0, 0, 8404, 8405, 7, 18, 0, 0, 8405, 8406, 7, 8, 0, 0, 8406, 8407, 7, 23, 0, 0, 8407, 1328, 1, 0, 0, 0, 8408, 8409, 7, 17, 0, 0, 8409, 8410, 7, 11, 0, 0, 8410, 8411, 7, 7, 0, 0, 8411, 8412, 7, 8, 0, 0, 8412, 8413, 5, 95, 0, 0, 8413, 8414, 7, 8, 0, 0, 8414, 8415, 7, 7, 0, 0, 8415, 8416, 7, 11, 0, 0, 8416, 8417, 7, 19, 0, 0, 8417, 8418, 7, 17, 0, 0, 8418, 8419, 7, 8, 0, 0, 8419, 8420, 7, 14, 0, 0, 8420, 8421, 7, 7, 0, 0, 8421, 8422, 7, 11, 0, 0, 8422, 1330, 1, 0, 0, 0, 8423, 8424, 7, 24, 0, 0, 8424, 8425, 7, 3, 0, 0, 8425, 8426, 7, 5, 0, 0, 8426, 8427, 7, 15, 0, 0, 8427, 8428, 7, 4, 0, 0, 8428, 8429, 7, 3, 0, 0, 8429, 8430, 7, 6, 0, 0, 8430, 8431, 7, 15, 0, 0, 8431, 8432, 7, 19, 0, 0, 8432, 8433, 7, 12, 0, 0, 8433, 1332, 1, 0, 0, 0, 8434, 8435, 7, 24, 0, 0, 8435, 8436, 7, 3, 0, 0, 8436, 8437, 7, 5, 0, 0, 8437, 8438, 7, 17, 0, 0, 8438, 8439, 7, 7, 0, 0, 8439, 1334, 1, 0, 0, 0, 8440, 8441, 7, 24, 0, 0, 8441, 8442, 7, 3, 0, 0, 8442, 8443, 7, 8, 0, 0, 8443, 8444, 7, 15, 0, 0, 8444, 8445, 7, 3, 0, 0, 8445, 8446, 7, 16, 0, 0, 8446, 8447, 7, 5, 0, 0, 8447, 8448, 7, 7, 0, 0, 8448, 8449, 7, 11, 0, 0, 8449, 1336, 1, 0, 0, 0, 8450, 8451, 7, 24, 0, 0, 8451, 8452, 7, 15, 0, 0, 8452, 8453, 7, 7, 0, 0, 8453, 8454, 7, 9, 0, 0, 8454, 1338, 1, 0, 0, 0, 8455, 8456, 7, 24, 0, 0, 8456, 8457, 7, 15, 0, 0, 8457, 8458, 7, 8, 0, 0, 8458, 8459, 7, 6, 0, 0, 8459, 8460, 7, 17, 0, 0, 8460, 8461, 7, 3, 0, 0, 8461, 8462, 7, 5, 0, 0, 8462, 1340, 1, 0, 0, 0, 8463, 8464, 7, 24, 0, 0, 8464, 8465, 7, 15, 0, 0, 8465, 8466, 7, 11, 0, 0, 8466, 8467, 7, 15, 0, 0, 8467, 8468, 7, 16, 0, 0, 8468, 8469, 7, 5, 0, 0, 8469, 8470, 7, 7, 0, 0, 8470, 1342, 1, 0, 0, 0, 8471, 8472, 7, 9, 0, 0, 8472, 8473, 7, 3, 0, 0, 8473, 8474, 7, 15, 0, 0, 8474, 8475, 7, 6, 0, 0, 8475, 1344, 1, 0, 0, 0, 8476, 8477, 7, 9, 0, 0, 8477, 8478, 7, 3, 0, 0, 8478, 8479, 7, 8, 0, 0, 8479, 8480, 7, 12, 0, 0, 8480, 8481, 7, 15, 0, 0, 8481, 8482, 7, 12, 0, 0, 8482, 8483, 7, 22, 0, 0, 8483, 8484, 7, 11, 0, 0, 8484, 1346, 1, 0, 0, 0, 8485, 8486, 7, 9, 0, 0, 8486, 8487, 7, 15, 0, 0, 8487, 8488, 7, 12, 0, 0, 8488, 8489, 7, 4, 0, 0, 8489, 8490, 7, 19, 0, 0, 8490, 8491, 7, 9, 0, 0, 8491, 1348, 1, 0, 0, 0, 8492, 8493, 7, 9, 0, 0, 8493, 8494, 7, 15, 0, 0, 8494, 8495, 7, 6, 0, 0, 8495, 8496, 7, 20, 0, 0, 8496, 8497, 7, 19, 0, 0, 8497, 8498, 7, 17, 0, 0, 8498, 8499, 7, 6, 0, 0, 8499, 1350, 1, 0, 0, 0, 8500, 8501, 7, 9, 0, 0, 8501, 8502, 7, 19, 0, 0, 8502, 8503, 7, 8, 0, 0, 8503, 8504, 7, 21, 0, 0, 8504, 1352, 1, 0, 0, 0, 8505, 8506, 7, 9, 0, 0, 8506, 8507, 7, 8, 0, 0, 8507, 8508, 7, 3, 0, 0, 8508, 8509, 7, 25, 0, 0, 8509, 8510, 7, 25, 0, 0, 8510, 8511, 7, 7, 0, 0, 8511, 8512, 7, 8, 0, 0, 8512, 1354, 1, 0, 0, 0, 8513, 8514, 7, 26, 0, 0, 8514, 8515, 5, 53, 0, 0, 8515, 8516, 5, 48, 0, 0, 8516, 8517, 5, 57, 0, 0, 8517, 1356, 1, 0, 0, 0, 8518, 8519, 7, 26, 0, 0, 8519, 8520, 7, 3, 0, 0, 8520, 1358, 1, 0, 0, 0, 8521, 8522, 7, 26, 0, 0, 8522, 8523, 7, 23, 0, 0, 8523, 8524, 7, 5, 0, 0, 8524, 1360, 1, 0, 0, 0, 8525, 8526, 7, 10, 0, 0, 8526, 8527, 7, 7, 0, 0, 8527, 8528, 7, 11, 0, 0, 8528, 1362, 1, 0, 0, 0, 8529, 8530, 7, 7, 0, 0, 8530, 8531, 7, 17, 0, 0, 8531, 8532, 7, 8, 0, 0, 8532, 1364, 1, 0, 0, 0, 8533, 8534, 7, 17, 0, 0, 8534, 8535, 7, 11, 0, 0, 8535, 8536, 7, 3, 0, 0, 8536, 1366, 1, 0, 0, 0, 8537, 8538, 7, 27, 0, 0, 8538, 8539, 7, 15, 0, 0, 8539, 8540, 7, 11, 0, 0, 8540, 1368, 1, 0, 0, 0, 8541, 8542, 7, 15, 0, 0, 8542, 8543, 7, 11, 0, 0, 8543, 8544, 7, 19, 0, 0, 8544, 1370, 1, 0, 0, 0, 8545, 8546, 7, 15, 0, 0, 8546, 8547, 7, 12, 0, 0, 8547, 8548, 7, 6, 0, 0, 8548, 8549, 7, 7, 0, 0, 8549, 8550, 7, 8, 0, 0, 8550, 8551, 7, 12, 0, 0, 8551, 8552, 7, 3, 0, 0, 8552, 8553, 7, 5, 0, 0, 8553, 1372, 1, 0, 0, 0, 8554, 8555, 7, 28, 0, 0, 8555, 8556, 7, 17, 0, 0, 8556, 8557, 7, 3, 0, 0, 8557, 8558, 7, 8, 0, 0, 8558, 8559, 7, 6, 0, 0, 8559, 8560, 7, 7, 0, 0, 8560, 8561, 7, 8, 0, 0, 8561, 1374, 1, 0, 0, 0, 8562, 8563, 7, 23, 0, 0, 8563, 8564, 7, 19, 0, 0, 8564, 8565, 7, 12, 0, 0, 8565, 8566, 7, 6, 0, 0, 8566, 8567, 7, 20, 0, 0, 8567, 1376, 1, 0, 0, 0, 8568, 8569, 7, 4, 0, 0, 8569, 8570, 7, 3, 0, 0, 8570, 8571, 7, 10, 0, 0, 8571, 1378, 1, 0, 0, 0, 8572, 8573, 7, 20, 0, 0, 8573, 8574, 7, 19, 0, 0, 8574, 8575, 7, 17, 0, 0, 8575, 8576, 7, 8, 0, 0, 8576, 1380, 1, 0, 0, 0, 8577, 8578, 7, 23, 0, 0, 8578, 8579, 7, 15, 0, 0, 8579, 8580, 7, 12, 0, 0, 8580, 8581, 7, 17, 0, 0, 8581, 8582, 7, 6, 0, 0, 8582, 8583, 7, 7, 0, 0, 8583, 1382, 1, 0, 0, 0, 8584, 8585, 7, 9, 0, 0, 8585, 8586, 7, 7, 0, 0, 8586, 8587, 7, 7, 0, 0, 8587, 8588, 7, 21, 0, 0, 8588, 1384, 1, 0, 0, 0, 8589, 8590, 7, 11, 0, 0, 8590, 8591, 7, 7, 0, 0, 8591, 8592, 7, 14, 0, 0, 8592, 8593, 7, 19, 0, 0, 8593, 8594, 7, 12, 0, 0, 8594, 8595, 7, 4, 0, 0, 8595, 1386, 1, 0, 0, 0, 8596, 8597, 7, 23, 0, 0, 8597, 8598, 7, 15, 0, 0, 8598, 8599, 7, 14, 0, 0, 8599, 8600, 7, 8, 0, 0, 8600, 8601, 7, 19, 0, 0, 8601, 8602, 7, 11, 0, 0, 8602, 8603, 7, 7, 0, 0, 8603, 8604, 7, 14, 0, 0, 8604, 8605, 7, 19, 0, 0, 8605, 8606, 7, 12, 0, 0, 8606, 8607, 7, 4, 0, 0, 8607, 1388, 1, 0, 0, 0, 8608, 8609, 7, 3, 0, 0, 8609, 8610, 7, 4, 0, 0, 8610, 8611, 7, 23, 0, 0, 8611, 8612, 7, 15, 0, 0, 8612, 8613, 7, 12, 0, 0, 8613, 1390, 1, 0, 0, 0, 8614, 8615, 7, 3, 0, 0, 8615, 8616, 7, 25, 0, 0, 8616, 8617, 7, 25, 0, 0, 8617, 8618, 7, 5, 0, 0, 8618, 8619, 7, 15, 0, 0, 8619, 8620, 7, 14, 0, 0, 8620, 8621, 7, 3, 0, 0, 8621, 8622, 7, 6, 0, 0, 8622, 8623, 7, 15, 0, 0, 8623, 8624, 7, 19, 0, 0, 8624, 8625, 7, 12, 0, 0, 8625, 8626, 5, 95, 0, 0, 8626, 8627, 7, 25, 0, 0, 8627, 8628, 7, 3, 0, 0, 8628, 8629, 7, 11, 0, 0, 8629, 8630, 7, 11, 0, 0, 8630, 8631, 7, 9, 0, 0, 8631, 8632, 7, 19, 0, 0, 8632, 8633, 7, 8, 0, 0, 8633, 8634, 7, 4, 0, 0, 8634, 8635, 5, 95, 0, 0, 8635, 8636, 7, 3, 0, 0, 8636, 8637, 7, 4, 0, 0, 8637, 8638, 7, 23, 0, 0, 8638, 8639, 7, 15, 0, 0, 8639, 8640, 7, 12, 0, 0, 8640, 1392, 1, 0, 0, 0, 8641, 8642, 7, 3, 0, 0, 8642, 8643, 7, 17, 0, 0, 8643, 8644, 7, 4, 0, 0, 8644, 8645, 7, 15, 0, 0, 8645, 8646, 7, 6, 0, 0, 8646, 8647, 5, 95, 0, 0, 8647, 8648, 7, 3, 0, 0, 8648, 8649, 7, 4, 0, 0, 8649, 8650, 7, 23, 0, 0, 8650, 8651, 7, 15, 0, 0, 8651, 8652, 7, 12, 0, 0, 8652, 1394, 1, 0, 0, 0, 8653, 8654, 7, 16, 0, 0, 8654, 8655, 7, 3, 0, 0, 8655, 8656, 7, 14, 0, 0, 8656, 8657, 7, 21, 0, 0, 8657, 8658, 7, 17, 0, 0, 8658, 8659, 7, 25, 0, 0, 8659, 8660, 5, 95, 0, 0, 8660, 8661, 7, 3, 0, 0, 8661, 8662, 7, 4, 0, 0, 8662, 8663, 7, 23, 0, 0, 8663, 8664, 7, 15, 0, 0, 8664, 8665, 7, 12, 0, 0, 8665, 1396, 1, 0, 0, 0, 8666, 8667, 7, 16, 0, 0, 8667, 8668, 7, 15, 0, 0, 8668, 8669, 7, 12, 0, 0, 8669, 8670, 7, 5, 0, 0, 8670, 8671, 7, 19, 0, 0, 8671, 8672, 7, 22, 0, 0, 8672, 8673, 5, 95, 0, 0, 8673, 8674, 7, 3, 0, 0, 8674, 8675, 7, 4, 0, 0, 8675, 8676, 7, 23, 0, 0, 8676, 8677, 7, 15, 0, 0, 8677, 8678, 7, 12, 0, 0, 8678, 1398, 1, 0, 0, 0, 8679, 8680, 7, 16, 0, 0, 8680, 8681, 7, 15, 0, 0, 8681, 8682, 7, 12, 0, 0, 8682, 8683, 7, 5, 0, 0, 8683, 8684, 7, 19, 0, 0, 8684, 8685, 7, 22, 0, 0, 8685, 8686, 5, 95, 0, 0, 8686, 8687, 7, 7, 0, 0, 8687, 8688, 7, 12, 0, 0, 8688, 8689, 7, 14, 0, 0, 8689, 8690, 7, 8, 0, 0, 8690, 8691, 7, 10, 0, 0, 8691, 8692, 7, 25, 0, 0, 8692, 8693, 7, 6, 0, 0, 8693, 8694, 7, 15, 0, 0, 8694, 8695, 7, 19, 0, 0, 8695, 8696, 7, 12, 0, 0, 8696, 8697, 5, 95, 0, 0, 8697, 8698, 7, 3, 0, 0, 8698, 8699, 7, 4, 0, 0, 8699, 8700, 7, 23, 0, 0, 8700, 8701, 7, 15, 0, 0, 8701, 8702, 7, 12, 0, 0, 8702, 1400, 1, 0, 0, 0, 8703, 8704, 7, 14, 0, 0, 8704, 8705, 7, 5, 0, 0, 8705, 8706, 7, 19, 0, 0, 8706, 8707, 7, 12, 0, 0, 8707, 8708, 7, 7, 0, 0, 8708, 8709, 5, 95, 0, 0, 8709, 8710, 7, 3, 0, 0, 8710, 8711, 7, 4, 0, 0, 8711, 8712, 7, 23, 0, 0, 8712, 8713, 7, 15, 0, 0, 8713, 8714, 7, 12, 0, 0, 8714, 1402, 1, 0, 0, 0, 8715, 8716, 7, 14, 0, 0, 8716, 8717, 7, 19, 0, 0, 8717, 8718, 7, 12, 0, 0, 8718, 8719, 7, 12, 0, 0, 8719, 8720, 7, 7, 0, 0, 8720, 8721, 7, 14, 0, 0, 8721, 8722, 7, 6, 0, 0, 8722, 8723, 7, 15, 0, 0, 8723, 8724, 7, 19, 0, 0, 8724, 8725, 7, 12, 0, 0, 8725, 8726, 5, 95, 0, 0, 8726, 8727, 7, 3, 0, 0, 8727, 8728, 7, 4, 0, 0, 8728, 8729, 7, 23, 0, 0, 8729, 8730, 7, 15, 0, 0, 8730, 8731, 7, 12, 0, 0, 8731, 1404, 1, 0, 0, 0, 8732, 8733, 7, 7, 0, 0, 8733, 8734, 7, 12, 0, 0, 8734, 8735, 7, 14, 0, 0, 8735, 8736, 7, 8, 0, 0, 8736, 8737, 7, 10, 0, 0, 8737, 8738, 7, 25, 0, 0, 8738, 8739, 7, 6, 0, 0, 8739, 8740, 7, 15, 0, 0, 8740, 8741, 7, 19, 0, 0, 8741, 8742, 7, 12, 0, 0, 8742, 8743, 5, 95, 0, 0, 8743, 8744, 7, 21, 0, 0, 8744, 8745, 7, 7, 0, 0, 8745, 8746, 7, 10, 0, 0, 8746, 8747, 5, 95, 0, 0, 8747, 8748, 7, 3, 0, 0, 8748, 8749, 7, 4, 0, 0, 8749, 8750, 7, 23, 0, 0, 8750, 8751, 7, 15, 0, 0, 8751, 8752, 7, 12, 0, 0, 8752, 1406, 1, 0, 0, 0, 8753, 8754, 7, 7, 0, 0, 8754, 8755, 7, 26, 0, 0, 8755, 8756, 7, 7, 0, 0, 8756, 8757, 7, 14, 0, 0, 8757, 8758, 7, 17, 0, 0, 8758, 8759, 7, 6, 0, 0, 8759, 8760, 7, 7, 0, 0, 8760, 1408, 1, 0, 0, 0, 8761, 8762, 7, 18, 0, 0, 8762, 8763, 7, 15, 0, 0, 8763, 8764, 7, 5, 0, 0, 8764, 8765, 7, 7, 0, 0, 8765, 1410, 1, 0, 0, 0, 8766, 8767, 7, 18, 0, 0, 8767, 8768, 7, 15, 0, 0, 8768, 8769, 7, 8, 0, 0, 8769, 8770, 7, 7, 0, 0, 8770, 8771, 7, 9, 0, 0, 8771, 8772, 7, 3, 0, 0, 8772, 8773, 7, 5, 0, 0, 8773, 8774, 7, 5, 0, 0, 8774, 8775, 5, 95, 0, 0, 8775, 8776, 7, 3, 0, 0, 8776, 8777, 7, 4, 0, 0, 8777, 8778, 7, 23, 0, 0, 8778, 8779, 7, 15, 0, 0, 8779, 8780, 7, 12, 0, 0, 8780, 1412, 1, 0, 0, 0, 8781, 8782, 7, 18, 0, 0, 8782, 8783, 7, 15, 0, 0, 8783, 8784, 7, 8, 0, 0, 8784, 8785, 7, 7, 0, 0, 8785, 8786, 7, 9, 0, 0, 8786, 8787, 7, 3, 0, 0, 8787, 8788, 7, 5, 0, 0, 8788, 8789, 7, 5, 0, 0, 8789, 8790, 5, 95, 0, 0, 8790, 8791, 7, 17, 0, 0, 8791, 8792, 7, 11, 0, 0, 8792, 8793, 7, 7, 0, 0, 8793, 8794, 7, 8, 0, 0, 8794, 1414, 1, 0, 0, 0, 8795, 8796, 7, 18, 0, 0, 8796, 8797, 7, 5, 0, 0, 8797, 8798, 7, 17, 0, 0, 8798, 8799, 7, 11, 0, 0, 8799, 8800, 7, 20, 0, 0, 8800, 8801, 5, 95, 0, 0, 8801, 8802, 7, 19, 0, 0, 8802, 8803, 7, 25, 0, 0, 8803, 8804, 7, 6, 0, 0, 8804, 8805, 7, 15, 0, 0, 8805, 8806, 7, 23, 0, 0, 8806, 8807, 7, 15, 0, 0, 8807, 8808, 7, 13, 0, 0, 8808, 8809, 7, 7, 0, 0, 8809, 8810, 7, 8, 0, 0, 8810, 8811, 5, 95, 0, 0, 8811, 8812, 7, 14, 0, 0, 8812, 8813, 7, 19, 0, 0, 8813, 8814, 7, 11, 0, 0, 8814, 8815, 7, 6, 0, 0, 8815, 8816, 7, 11, 0, 0, 8816, 1416, 1, 0, 0, 0, 8817, 8818, 7, 18, 0, 0, 8818, 8819, 7, 5, 0, 0, 8819, 8820, 7, 17, 0, 0, 8820, 8821, 7, 11, 0, 0, 8821, 8822, 7, 20, 0, 0, 8822, 8823, 5, 95, 0, 0, 8823, 8824, 7, 11, 0, 0, 8824, 8825, 7, 6, 0, 0, 8825, 8826, 7, 3, 0, 0, 8826, 8827, 7, 6, 0, 0, 8827, 8828, 7, 17, 0, 0, 8828, 8829, 7, 11, 0, 0, 8829, 1418, 1, 0, 0, 0, 8830, 8831, 7, 18, 0, 0, 8831, 8832, 7, 5, 0, 0, 8832, 8833, 7, 17, 0, 0, 8833, 8834, 7, 11, 0, 0, 8834, 8835, 7, 20, 0, 0, 8835, 8836, 5, 95, 0, 0, 8836, 8837, 7, 6, 0, 0, 8837, 8838, 7, 3, 0, 0, 8838, 8839, 7, 16, 0, 0, 8839, 8840, 7, 5, 0, 0, 8840, 8841, 7, 7, 0, 0, 8841, 8842, 7, 11, 0, 0, 8842, 1420, 1, 0, 0, 0, 8843, 8844, 7, 18, 0, 0, 8844, 8845, 7, 5, 0, 0, 8845, 8846, 7, 17, 0, 0, 8846, 8847, 7, 11, 0, 0, 8847, 8848, 7, 20, 0, 0, 8848, 8849, 5, 95, 0, 0, 8849, 8850, 7, 17, 0, 0, 8850, 8851, 7, 11, 0, 0, 8851, 8852, 7, 7, 0, 0, 8852, 8853, 7, 8, 0, 0, 8853, 8854, 5, 95, 0, 0, 8854, 8855, 7, 8, 0, 0, 8855, 8856, 7, 7, 0, 0, 8856, 8857, 7, 11, 0, 0, 8857, 8858, 7, 19, 0, 0, 8858, 8859, 7, 17, 0, 0, 8859, 8860, 7, 8, 0, 0, 8860, 8861, 7, 14, 0, 0, 8861, 8862, 7, 7, 0, 0, 8862, 8863, 7, 11, 0, 0, 8863, 1422, 1, 0, 0, 0, 8864, 8865, 7, 22, 0, 0, 8865, 8866, 7, 8, 0, 0, 8866, 8867, 7, 19, 0, 0, 8867, 8868, 7, 17, 0, 0, 8868, 8869, 7, 25, 0, 0, 8869, 8870, 5, 95, 0, 0, 8870, 8871, 7, 8, 0, 0, 8871, 8872, 7, 7, 0, 0, 8872, 8873, 7, 25, 0, 0, 8873, 8874, 7, 5, 0, 0, 8874, 8875, 7, 15, 0, 0, 8875, 8876, 7, 14, 0, 0, 8876, 8877, 7, 3, 0, 0, 8877, 8878, 7, 6, 0, 0, 8878, 8879, 7, 15, 0, 0, 8879, 8880, 7, 19, 0, 0, 8880, 8881, 7, 12, 0, 0, 8881, 8882, 5, 95, 0, 0, 8882, 8883, 7, 3, 0, 0, 8883, 8884, 7, 4, 0, 0, 8884, 8885, 7, 23, 0, 0, 8885, 8886, 7, 15, 0, 0, 8886, 8887, 7, 12, 0, 0, 8887, 1424, 1, 0, 0, 0, 8888, 8889, 7, 15, 0, 0, 8889, 8890, 7, 12, 0, 0, 8890, 8891, 7, 12, 0, 0, 8891, 8892, 7, 19, 0, 0, 8892, 8893, 7, 4, 0, 0, 8893, 8894, 7, 16, 0, 0, 8894, 8895, 5, 95, 0, 0, 8895, 8896, 7, 8, 0, 0, 8896, 8897, 7, 7, 0, 0, 8897, 8898, 7, 4, 0, 0, 8898, 8899, 7, 19, 0, 0, 8899, 8900, 5, 95, 0, 0, 8900, 8901, 7, 5, 0, 0, 8901, 8902, 7, 19, 0, 0, 8902, 8903, 7, 22, 0, 0, 8903, 8904, 5, 95, 0, 0, 8904, 8905, 7, 3, 0, 0, 8905, 8906, 7, 8, 0, 0, 8906, 8907, 7, 14, 0, 0, 8907, 8908, 7, 20, 0, 0, 8908, 8909, 7, 15, 0, 0, 8909, 8910, 7, 24, 0, 0, 8910, 8911, 7, 7, 0, 0, 8911, 1426, 1, 0, 0, 0, 8912, 8913, 7, 15, 0, 0, 8913, 8914, 7, 12, 0, 0, 8914, 8915, 7, 12, 0, 0, 8915, 8916, 7, 19, 0, 0, 8916, 8917, 7, 4, 0, 0, 8917, 8918, 7, 16, 0, 0, 8918, 8919, 5, 95, 0, 0, 8919, 8920, 7, 8, 0, 0, 8920, 8921, 7, 7, 0, 0, 8921, 8922, 7, 4, 0, 0, 8922, 8923, 7, 19, 0, 0, 8923, 8924, 5, 95, 0, 0, 8924, 8925, 7, 5, 0, 0, 8925, 8926, 7, 19, 0, 0, 8926, 8927, 7, 22, 0, 0, 8927, 8928, 5, 95, 0, 0, 8928, 8929, 7, 7, 0, 0, 8929, 8930, 7, 12, 0, 0, 8930, 8931, 7, 3, 0, 0, 8931, 8932, 7, 16, 0, 0, 8932, 8933, 7, 5, 0, 0, 8933, 8934, 7, 7, 0, 0, 8934, 1428, 1, 0, 0, 0, 8935, 8936, 7, 15, 0, 0, 8936, 8937, 7, 12, 0, 0, 8937, 8938, 7, 24, 0, 0, 8938, 8939, 7, 19, 0, 0, 8939, 8940, 7, 21, 0, 0, 8940, 8941, 7, 7, 0, 0, 8941, 1430, 1, 0, 0, 0, 8942, 8943, 7, 5, 0, 0, 8943, 8944, 7, 3, 0, 0, 8944, 8945, 7, 23, 0, 0, 8945, 8946, 7, 16, 0, 0, 8946, 8947, 7, 4, 0, 0, 8947, 8948, 7, 3, 0, 0, 8948, 1432, 1, 0, 0, 0, 8949, 8950, 7, 12, 0, 0, 8950, 8951, 7, 4, 0, 0, 8951, 8952, 7, 16, 0, 0, 8952, 8953, 5, 95, 0, 0, 8953, 8954, 7, 11, 0, 0, 8954, 8955, 7, 6, 0, 0, 8955, 8956, 7, 19, 0, 0, 8956, 8957, 7, 8, 0, 0, 8957, 8958, 7, 7, 0, 0, 8958, 8959, 7, 4, 0, 0, 8959, 8960, 5, 95, 0, 0, 8960, 8961, 7, 17, 0, 0, 8961, 8962, 7, 11, 0, 0, 8962, 8963, 7, 7, 0, 0, 8963, 8964, 7, 8, 0, 0, 8964, 1434, 1, 0, 0, 0, 8965, 8966, 7, 25, 0, 0, 8966, 8967, 7, 3, 0, 0, 8967, 8968, 7, 11, 0, 0, 8968, 8969, 7, 11, 0, 0, 8969, 8970, 7, 9, 0, 0, 8970, 8971, 7, 19, 0, 0, 8971, 8972, 7, 8, 0, 0, 8972, 8973, 7, 4, 0, 0, 8973, 8974, 7, 5, 0, 0, 8974, 8975, 7, 7, 0, 0, 8975, 8976, 7, 11, 0, 0, 8976, 8977, 7, 11, 0, 0, 8977, 8978, 5, 95, 0, 0, 8978, 8979, 7, 17, 0, 0, 8979, 8980, 7, 11, 0, 0, 8980, 8981, 7, 7, 0, 0, 8981, 8982, 7, 8, 0, 0, 8982, 8983, 5, 95, 0, 0, 8983, 8984, 7, 3, 0, 0, 8984, 8985, 7, 4, 0, 0, 8985, 8986, 7, 23, 0, 0, 8986, 8987, 7, 15, 0, 0, 8987, 8988, 7, 12, 0, 0, 8988, 1436, 1, 0, 0, 0, 8989, 8990, 7, 25, 0, 0, 8990, 8991, 7, 7, 0, 0, 8991, 8992, 7, 8, 0, 0, 8992, 8993, 7, 11, 0, 0, 8993, 8994, 7, 15, 0, 0, 8994, 8995, 7, 11, 0, 0, 8995, 8996, 7, 6, 0, 0, 8996, 8997, 5, 95, 0, 0, 8997, 8998, 7, 8, 0, 0, 8998, 8999, 7, 19, 0, 0, 8999, 9000, 5, 95, 0, 0, 9000, 9001, 7, 24, 0, 0, 9001, 9002, 7, 3, 0, 0, 9002, 9003, 7, 8, 0, 0, 9003, 9004, 7, 15, 0, 0, 9004, 9005, 7, 3, 0, 0, 9005, 9006, 7, 16, 0, 0, 9006, 9007, 7, 5, 0, 0, 9007, 9008, 7, 7, 0, 0, 9008, 9009, 7, 11, 0, 0, 9009, 9010, 5, 95, 0, 0, 9010, 9011, 7, 3, 0, 0, 9011, 9012, 7, 4, 0, 0, 9012, 9013, 7, 23, 0, 0, 9013, 9014, 7, 15, 0, 0, 9014, 9015, 7, 12, 0, 0, 9015, 1438, 1, 0, 0, 0, 9016, 9017, 7, 25, 0, 0, 9017, 9018, 7, 8, 0, 0, 9018, 9019, 7, 15, 0, 0, 9019, 9020, 7, 24, 0, 0, 9020, 9021, 7, 15, 0, 0, 9021, 9022, 7, 5, 0, 0, 9022, 9023, 7, 7, 0, 0, 9023, 9024, 7, 22, 0, 0, 9024, 9025, 7, 7, 0, 0, 9025, 9026, 7, 11, 0, 0, 9026, 1440, 1, 0, 0, 0, 9027, 9028, 7, 25, 0, 0, 9028, 9029, 7, 8, 0, 0, 9029, 9030, 7, 19, 0, 0, 9030, 9031, 7, 14, 0, 0, 9031, 9032, 7, 7, 0, 0, 9032, 9033, 7, 11, 0, 0, 9033, 9034, 7, 11, 0, 0, 9034, 1442, 1, 0, 0, 0, 9035, 9036, 7, 8, 0, 0, 9036, 9037, 7, 7, 0, 0, 9037, 9038, 7, 5, 0, 0, 9038, 9039, 7, 19, 0, 0, 9039, 9040, 7, 3, 0, 0, 9040, 9041, 7, 4, 0, 0, 9041, 1444, 1, 0, 0, 0, 9042, 9043, 7, 8, 0, 0, 9043, 9044, 7, 7, 0, 0, 9044, 9045, 7, 25, 0, 0, 9045, 9046, 7, 5, 0, 0, 9046, 9047, 7, 15, 0, 0, 9047, 9048, 7, 14, 0, 0, 9048, 9049, 7, 3, 0, 0, 9049, 9050, 7, 6, 0, 0, 9050, 9051, 7, 15, 0, 0, 9051, 9052, 7, 19, 0, 0, 9052, 9053, 7, 12, 0, 0, 9053, 9054, 5, 95, 0, 0, 9054, 9055, 7, 3, 0, 0, 9055, 9056, 7, 25, 0, 0, 9056, 9057, 7, 25, 0, 0, 9057, 9058, 7, 5, 0, 0, 9058, 9059, 7, 15, 0, 0, 9059, 9060, 7, 7, 0, 0, 9060, 9061, 7, 8, 0, 0, 9061, 1446, 1, 0, 0, 0, 9062, 9063, 7, 8, 0, 0, 9063, 9064, 7, 7, 0, 0, 9064, 9065, 7, 25, 0, 0, 9065, 9066, 7, 5, 0, 0, 9066, 9067, 7, 15, 0, 0, 9067, 9068, 7, 14, 0, 0, 9068, 9069, 7, 3, 0, 0, 9069, 9070, 7, 6, 0, 0, 9070, 9071, 7, 15, 0, 0, 9071, 9072, 7, 19, 0, 0, 9072, 9073, 7, 12, 0, 0, 9073, 9074, 5, 95, 0, 0, 9074, 9075, 7, 11, 0, 0, 9075, 9076, 7, 5, 0, 0, 9076, 9077, 7, 3, 0, 0, 9077, 9078, 7, 24, 0, 0, 9078, 9079, 7, 7, 0, 0, 9079, 9080, 5, 95, 0, 0, 9080, 9081, 7, 3, 0, 0, 9081, 9082, 7, 4, 0, 0, 9082, 9083, 7, 23, 0, 0, 9083, 9084, 7, 15, 0, 0, 9084, 9085, 7, 12, 0, 0, 9085, 1448, 1, 0, 0, 0, 9086, 9087, 7, 8, 0, 0, 9087, 9088, 7, 7, 0, 0, 9088, 9089, 7, 11, 0, 0, 9089, 9090, 7, 19, 0, 0, 9090, 9091, 7, 17, 0, 0, 9091, 9092, 7, 8, 0, 0, 9092, 9093, 7, 14, 0, 0, 9093, 9094, 7, 7, 0, 0, 9094, 9095, 5, 95, 0, 0, 9095, 9096, 7, 22, 0, 0, 9096, 9097, 7, 8, 0, 0, 9097, 9098, 7, 19, 0, 0, 9098, 9099, 7, 17, 0, 0, 9099, 9100, 7, 25, 0, 0, 9100, 9101, 5, 95, 0, 0, 9101, 9102, 7, 3, 0, 0, 9102, 9103, 7, 4, 0, 0, 9103, 9104, 7, 23, 0, 0, 9104, 9105, 7, 15, 0, 0, 9105, 9106, 7, 12, 0, 0, 9106, 1450, 1, 0, 0, 0, 9107, 9108, 7, 8, 0, 0, 9108, 9109, 7, 7, 0, 0, 9109, 9110, 7, 11, 0, 0, 9110, 9111, 7, 19, 0, 0, 9111, 9112, 7, 17, 0, 0, 9112, 9113, 7, 8, 0, 0, 9113, 9114, 7, 14, 0, 0, 9114, 9115, 7, 7, 0, 0, 9115, 9116, 5, 95, 0, 0, 9116, 9117, 7, 22, 0, 0, 9117, 9118, 7, 8, 0, 0, 9118, 9119, 7, 19, 0, 0, 9119, 9120, 7, 17, 0, 0, 9120, 9121, 7, 25, 0, 0, 9121, 9122, 5, 95, 0, 0, 9122, 9123, 7, 17, 0, 0, 9123, 9124, 7, 11, 0, 0, 9124, 9125, 7, 7, 0, 0, 9125, 9126, 7, 8, 0, 0, 9126, 1452, 1, 0, 0, 0, 9127, 9128, 7, 8, 0, 0, 9128, 9129, 7, 19, 0, 0, 9129, 9130, 7, 5, 0, 0, 9130, 9131, 7, 7, 0, 0, 9131, 9132, 5, 95, 0, 0, 9132, 9133, 7, 3, 0, 0, 9133, 9134, 7, 4, 0, 0, 9134, 9135, 7, 23, 0, 0, 9135, 9136, 7, 15, 0, 0, 9136, 9137, 7, 12, 0, 0, 9137, 1454, 1, 0, 0, 0, 9138, 9139, 7, 8, 0, 0, 9139, 9140, 7, 19, 0, 0, 9140, 9141, 7, 17, 0, 0, 9141, 9142, 7, 6, 0, 0, 9142, 9143, 7, 15, 0, 0, 9143, 9144, 7, 12, 0, 0, 9144, 9145, 7, 7, 0, 0, 9145, 1456, 1, 0, 0, 0, 9146, 9147, 7, 11, 0, 0, 9147, 9148, 5, 51, 0, 0, 9148, 1458, 1, 0, 0, 0, 9149, 9150, 7, 11, 0, 0, 9150, 9151, 7, 7, 0, 0, 9151, 9152, 7, 8, 0, 0, 9152, 9153, 7, 24, 0, 0, 9153, 9154, 7, 15, 0, 0, 9154, 9155, 7, 14, 0, 0, 9155, 9156, 7, 7, 0, 0, 9156, 9157, 5, 95, 0, 0, 9157, 9158, 7, 14, 0, 0, 9158, 9159, 7, 19, 0, 0, 9159, 9160, 7, 12, 0, 0, 9160, 9161, 7, 12, 0, 0, 9161, 9162, 7, 7, 0, 0, 9162, 9163, 7, 14, 0, 0, 9163, 9164, 7, 6, 0, 0, 9164, 9165, 7, 15, 0, 0, 9165, 9166, 7, 19, 0, 0, 9166, 9167, 7, 12, 0, 0, 9167, 9168, 5, 95, 0, 0, 9168, 9169, 7, 3, 0, 0, 9169, 9170, 7, 4, 0, 0, 9170, 9171, 7, 23, 0, 0, 9171, 9172, 7, 15, 0, 0, 9172, 9173, 7, 12, 0, 0, 9173, 1460, 1, 0, 0, 0, 9174, 9176, 3, 2275, 1137, 0, 9175, 9174, 1, 0, 0, 0, 9175, 9176, 1, 0, 0, 0, 9176, 9177, 1, 0, 0, 0, 9177, 9178, 7, 11, 0, 0, 9178, 9179, 7, 7, 0, 0, 9179, 9180, 7, 11, 0, 0, 9180, 9181, 7, 11, 0, 0, 9181, 9182, 7, 15, 0, 0, 9182, 9183, 7, 19, 0, 0, 9183, 9184, 7, 12, 0, 0, 9184, 9185, 5, 95, 0, 0, 9185, 9186, 7, 24, 0, 0, 9186, 9187, 7, 3, 0, 0, 9187, 9188, 7, 8, 0, 0, 9188, 9189, 7, 15, 0, 0, 9189, 9190, 7, 3, 0, 0, 9190, 9191, 7, 16, 0, 0, 9191, 9192, 7, 5, 0, 0, 9192, 9193, 7, 7, 0, 0, 9193, 9194, 7, 11, 0, 0, 9194, 9195, 5, 95, 0, 0, 9195, 9196, 7, 3, 0, 0, 9196, 9197, 7, 4, 0, 0, 9197, 9198, 7, 23, 0, 0, 9198, 9199, 7, 15, 0, 0, 9199, 9200, 7, 12, 0, 0, 9200, 9202, 1, 0, 0, 0, 9201, 9203, 3, 2275, 1137, 0, 9202, 9201, 1, 0, 0, 0, 9202, 9203, 1, 0, 0, 0, 9203, 1462, 1, 0, 0, 0, 9204, 9205, 7, 11, 0, 0, 9205, 9206, 7, 7, 0, 0, 9206, 9207, 7, 6, 0, 0, 9207, 9208, 5, 95, 0, 0, 9208, 9209, 7, 17, 0, 0, 9209, 9210, 7, 11, 0, 0, 9210, 9211, 7, 7, 0, 0, 9211, 9212, 7, 8, 0, 0, 9212, 9213, 5, 95, 0, 0, 9213, 9214, 7, 15, 0, 0, 9214, 9215, 7, 4, 0, 0, 9215, 1464, 1, 0, 0, 0, 9216, 9217, 7, 11, 0, 0, 9217, 9218, 7, 20, 0, 0, 9218, 9219, 7, 19, 0, 0, 9219, 9220, 7, 9, 0, 0, 9220, 9221, 5, 95, 0, 0, 9221, 9222, 7, 8, 0, 0, 9222, 9223, 7, 19, 0, 0, 9223, 9224, 7, 17, 0, 0, 9224, 9225, 7, 6, 0, 0, 9225, 9226, 7, 15, 0, 0, 9226, 9227, 7, 12, 0, 0, 9227, 9228, 7, 7, 0, 0, 9228, 1466, 1, 0, 0, 0, 9229, 9230, 7, 11, 0, 0, 9230, 9231, 7, 20, 0, 0, 9231, 9232, 7, 17, 0, 0, 9232, 9233, 7, 6, 0, 0, 9233, 9234, 7, 4, 0, 0, 9234, 9235, 7, 19, 0, 0, 9235, 9236, 7, 9, 0, 0, 9236, 9237, 7, 12, 0, 0, 9237, 1468, 1, 0, 0, 0, 9238, 9239, 7, 11, 0, 0, 9239, 9240, 7, 17, 0, 0, 9240, 9241, 7, 25, 0, 0, 9241, 9242, 7, 7, 0, 0, 9242, 9243, 7, 8, 0, 0, 9243, 1470, 1, 0, 0, 0, 9244, 9245, 7, 11, 0, 0, 9245, 9246, 7, 10, 0, 0, 9246, 9247, 7, 11, 0, 0, 9247, 9248, 7, 6, 0, 0, 9248, 9249, 7, 7, 0, 0, 9249, 9250, 7, 23, 0, 0, 9250, 9251, 5, 95, 0, 0, 9251, 9252, 7, 24, 0, 0, 9252, 9253, 7, 3, 0, 0, 9253, 9254, 7, 8, 0, 0, 9254, 9255, 7, 15, 0, 0, 9255, 9256, 7, 3, 0, 0, 9256, 9257, 7, 16, 0, 0, 9257, 9258, 7, 5, 0, 0, 9258, 9259, 7, 7, 0, 0, 9259, 9260, 7, 11, 0, 0, 9260, 9261, 5, 95, 0, 0, 9261, 9262, 7, 3, 0, 0, 9262, 9263, 7, 4, 0, 0, 9263, 9264, 7, 23, 0, 0, 9264, 9265, 7, 15, 0, 0, 9265, 9266, 7, 12, 0, 0, 9266, 1472, 1, 0, 0, 0, 9267, 9268, 7, 6, 0, 0, 9268, 9269, 7, 3, 0, 0, 9269, 9270, 7, 16, 0, 0, 9270, 9271, 7, 5, 0, 0, 9271, 9272, 7, 7, 0, 0, 9272, 9273, 7, 11, 0, 0, 9273, 1474, 1, 0, 0, 0, 9274, 9275, 7, 6, 0, 0, 9275, 9276, 7, 3, 0, 0, 9276, 9277, 7, 16, 0, 0, 9277, 9278, 7, 5, 0, 0, 9278, 9279, 7, 7, 0, 0, 9279, 9280, 5, 95, 0, 0, 9280, 9281, 7, 7, 0, 0, 9281, 9282, 7, 12, 0, 0, 9282, 9283, 7, 14, 0, 0, 9283, 9284, 7, 8, 0, 0, 9284, 9285, 7, 10, 0, 0, 9285, 9286, 7, 25, 0, 0, 9286, 9287, 7, 6, 0, 0, 9287, 9288, 7, 15, 0, 0, 9288, 9289, 7, 19, 0, 0, 9289, 9290, 7, 12, 0, 0, 9290, 9291, 5, 95, 0, 0, 9291, 9292, 7, 3, 0, 0, 9292, 9293, 7, 4, 0, 0, 9293, 9294, 7, 23, 0, 0, 9294, 9295, 7, 15, 0, 0, 9295, 9296, 7, 12, 0, 0, 9296, 1476, 1, 0, 0, 0, 9297, 9298, 7, 24, 0, 0, 9298, 9299, 7, 7, 0, 0, 9299, 9300, 7, 8, 0, 0, 9300, 9301, 7, 11, 0, 0, 9301, 9302, 7, 15, 0, 0, 9302, 9303, 7, 19, 0, 0, 9303, 9304, 7, 12, 0, 0, 9304, 9305, 5, 95, 0, 0, 9305, 9306, 7, 6, 0, 0, 9306, 9307, 7, 19, 0, 0, 9307, 9308, 7, 21, 0, 0, 9308, 9309, 7, 7, 0, 0, 9309, 9310, 7, 12, 0, 0, 9310, 9311, 5, 95, 0, 0, 9311, 9312, 7, 3, 0, 0, 9312, 9313, 7, 4, 0, 0, 9313, 9314, 7, 23, 0, 0, 9314, 9315, 7, 15, 0, 0, 9315, 9316, 7, 12, 0, 0, 9316, 1478, 1, 0, 0, 0, 9317, 9318, 7, 26, 0, 0, 9318, 9319, 7, 3, 0, 0, 9319, 9320, 5, 95, 0, 0, 9320, 9321, 7, 8, 0, 0, 9321, 9322, 7, 7, 0, 0, 9322, 9323, 7, 14, 0, 0, 9323, 9324, 7, 19, 0, 0, 9324, 9325, 7, 24, 0, 0, 9325, 9326, 7, 7, 0, 0, 9326, 9327, 7, 8, 0, 0, 9327, 9328, 5, 95, 0, 0, 9328, 9329, 7, 3, 0, 0, 9329, 9330, 7, 4, 0, 0, 9330, 9331, 7, 23, 0, 0, 9331, 9332, 7, 15, 0, 0, 9332, 9333, 7, 12, 0, 0, 9333, 1480, 1, 0, 0, 0, 9334, 9335, 7, 3, 0, 0, 9335, 9336, 7, 8, 0, 0, 9336, 9337, 7, 23, 0, 0, 9337, 9338, 7, 11, 0, 0, 9338, 9339, 7, 14, 0, 0, 9339, 9340, 7, 15, 0, 0, 9340, 9341, 7, 15, 0, 0, 9341, 9342, 5, 56, 0, 0, 9342, 1482, 1, 0, 0, 0, 9343, 9344, 7, 3, 0, 0, 9344, 9345, 7, 11, 0, 0, 9345, 9346, 7, 14, 0, 0, 9346, 9347, 7, 15, 0, 0, 9347, 9348, 7, 15, 0, 0, 9348, 1484, 1, 0, 0, 0, 9349, 9350, 7, 16, 0, 0, 9350, 9351, 7, 15, 0, 0, 9351, 9352, 7, 22, 0, 0, 9352, 9353, 5, 53, 0, 0, 9353, 1486, 1, 0, 0, 0, 9354, 9355, 7, 14, 0, 0, 9355, 9356, 7, 25, 0, 0, 9356, 9357, 5, 49, 0, 0, 9357, 9358, 5, 50, 0, 0, 9358, 9359, 5, 53, 0, 0, 9359, 9360, 5, 48, 0, 0, 9360, 1488, 1, 0, 0, 0, 9361, 9362, 7, 14, 0, 0, 9362, 9363, 7, 25, 0, 0, 9363, 9364, 5, 49, 0, 0, 9364, 9365, 5, 50, 0, 0, 9365, 9366, 5, 53, 0, 0, 9366, 9367, 5, 49, 0, 0, 9367, 1490, 1, 0, 0, 0, 9368, 9369, 7, 14, 0, 0, 9369, 9370, 7, 25, 0, 0, 9370, 9371, 5, 49, 0, 0, 9371, 9372, 5, 50, 0, 0, 9372, 9373, 5, 53, 0, 0, 9373, 9374, 5, 54, 0, 0, 9374, 1492, 1, 0, 0, 0, 9375, 9376, 7, 14, 0, 0, 9376, 9377, 7, 25, 0, 0, 9377, 9378, 5, 49, 0, 0, 9378, 9379, 5, 50, 0, 0, 9379, 9380, 5, 53, 0, 0, 9380, 9381, 5, 55, 0, 0, 9381, 1494, 1, 0, 0, 0, 9382, 9383, 7, 14, 0, 0, 9383, 9384, 7, 25, 0, 0, 9384, 9385, 5, 56, 0, 0, 9385, 9386, 5, 53, 0, 0, 9386, 9387, 5, 48, 0, 0, 9387, 1496, 1, 0, 0, 0, 9388, 9389, 7, 14, 0, 0, 9389, 9390, 7, 25, 0, 0, 9390, 9391, 5, 56, 0, 0, 9391, 9392, 5, 53, 0, 0, 9392, 9393, 5, 50, 0, 0, 9393, 1498, 1, 0, 0, 0, 9394, 9395, 7, 14, 0, 0, 9395, 9396, 7, 25, 0, 0, 9396, 9397, 5, 56, 0, 0, 9397, 9398, 5, 54, 0, 0, 9398, 9399, 5, 54, 0, 0, 9399, 1500, 1, 0, 0, 0, 9400, 9401, 7, 14, 0, 0, 9401, 9402, 7, 25, 0, 0, 9402, 9403, 5, 57, 0, 0, 9403, 9404, 5, 51, 0, 0, 9404, 9405, 5, 50, 0, 0, 9405, 1502, 1, 0, 0, 0, 9406, 9407, 7, 4, 0, 0, 9407, 9408, 7, 7, 0, 0, 9408, 9409, 7, 14, 0, 0, 9409, 9410, 5, 56, 0, 0, 9410, 1504, 1, 0, 0, 0, 9411, 9412, 7, 7, 0, 0, 9412, 9413, 7, 17, 0, 0, 9413, 9414, 7, 14, 0, 0, 9414, 9415, 7, 27, 0, 0, 9415, 9416, 7, 25, 0, 0, 9416, 9417, 7, 23, 0, 0, 9417, 9418, 7, 11, 0, 0, 9418, 1506, 1, 0, 0, 0, 9419, 9420, 7, 7, 0, 0, 9420, 9421, 7, 17, 0, 0, 9421, 9422, 7, 14, 0, 0, 9422, 9423, 7, 21, 0, 0, 9423, 9424, 7, 8, 0, 0, 9424, 1508, 1, 0, 0, 0, 9425, 9426, 7, 22, 0, 0, 9426, 9427, 7, 16, 0, 0, 9427, 9428, 5, 49, 0, 0, 9428, 9429, 5, 56, 0, 0, 9429, 9430, 5, 48, 0, 0, 9430, 9431, 5, 51, 0, 0, 9431, 9432, 5, 48, 0, 0, 9432, 1510, 1, 0, 0, 0, 9433, 9434, 7, 22, 0, 0, 9434, 9435, 7, 16, 0, 0, 9435, 9436, 5, 50, 0, 0, 9436, 9437, 5, 51, 0, 0, 9437, 9438, 5, 49, 0, 0, 9438, 9439, 5, 50, 0, 0, 9439, 1512, 1, 0, 0, 0, 9440, 9441, 7, 22, 0, 0, 9441, 9442, 7, 16, 0, 0, 9442, 9443, 7, 21, 0, 0, 9443, 1514, 1, 0, 0, 0, 9444, 9445, 7, 22, 0, 0, 9445, 9446, 7, 7, 0, 0, 9446, 9447, 7, 19, 0, 0, 9447, 9448, 7, 11, 0, 0, 9448, 9449, 7, 6, 0, 0, 9449, 9450, 7, 4, 0, 0, 9450, 9451, 5, 56, 0, 0, 9451, 1516, 1, 0, 0, 0, 9452, 9453, 7, 22, 0, 0, 9453, 9454, 7, 8, 0, 0, 9454, 9455, 7, 7, 0, 0, 9455, 9456, 7, 7, 0, 0, 9456, 9457, 7, 21, 0, 0, 9457, 1518, 1, 0, 0, 0, 9458, 9459, 7, 20, 0, 0, 9459, 9460, 7, 7, 0, 0, 9460, 9461, 7, 16, 0, 0, 9461, 9462, 7, 8, 0, 0, 9462, 9463, 7, 7, 0, 0, 9463, 9464, 7, 9, 0, 0, 9464, 1520, 1, 0, 0, 0, 9465, 9466, 7, 20, 0, 0, 9466, 9467, 7, 25, 0, 0, 9467, 9468, 5, 56, 0, 0, 9468, 1522, 1, 0, 0, 0, 9469, 9470, 7, 21, 0, 0, 9470, 9471, 7, 7, 0, 0, 9471, 9472, 7, 10, 0, 0, 9472, 9473, 7, 16, 0, 0, 9473, 9474, 7, 14, 0, 0, 9474, 9475, 7, 11, 0, 0, 9475, 9476, 5, 50, 0, 0, 9476, 1524, 1, 0, 0, 0, 9477, 9478, 7, 21, 0, 0, 9478, 9479, 7, 19, 0, 0, 9479, 9480, 7, 15, 0, 0, 9480, 9481, 5, 56, 0, 0, 9481, 9482, 7, 8, 0, 0, 9482, 1526, 1, 0, 0, 0, 9483, 9484, 7, 21, 0, 0, 9484, 9485, 7, 19, 0, 0, 9485, 9486, 7, 15, 0, 0, 9486, 9487, 5, 56, 0, 0, 9487, 9488, 7, 17, 0, 0, 9488, 1528, 1, 0, 0, 0, 9489, 9490, 7, 5, 0, 0, 9490, 9491, 7, 3, 0, 0, 9491, 9492, 7, 6, 0, 0, 9492, 9493, 7, 15, 0, 0, 9493, 9494, 7, 12, 0, 0, 9494, 9495, 5, 49, 0, 0, 9495, 1530, 1, 0, 0, 0, 9496, 9497, 7, 5, 0, 0, 9497, 9498, 7, 3, 0, 0, 9498, 9499, 7, 6, 0, 0, 9499, 9500, 7, 15, 0, 0, 9500, 9501, 7, 12, 0, 0, 9501, 9502, 5, 50, 0, 0, 9502, 1532, 1, 0, 0, 0, 9503, 9504, 7, 5, 0, 0, 9504, 9505, 7, 3, 0, 0, 9505, 9506, 7, 6, 0, 0, 9506, 9507, 7, 15, 0, 0, 9507, 9508, 7, 12, 0, 0, 9508, 9509, 5, 53, 0, 0, 9509, 1534, 1, 0, 0, 0, 9510, 9511, 7, 5, 0, 0, 9511, 9512, 7, 3, 0, 0, 9512, 9513, 7, 6, 0, 0, 9513, 9514, 7, 15, 0, 0, 9514, 9515, 7, 12, 0, 0, 9515, 9516, 5, 55, 0, 0, 9516, 1536, 1, 0, 0, 0, 9517, 9518, 7, 23, 0, 0, 9518, 9519, 7, 3, 0, 0, 9519, 9520, 7, 14, 0, 0, 9520, 9521, 7, 14, 0, 0, 9521, 9522, 7, 7, 0, 0, 9522, 1538, 1, 0, 0, 0, 9523, 9524, 7, 23, 0, 0, 9524, 9525, 7, 3, 0, 0, 9525, 9526, 7, 14, 0, 0, 9526, 9527, 7, 8, 0, 0, 9527, 9528, 7, 19, 0, 0, 9528, 9529, 7, 23, 0, 0, 9529, 9530, 7, 3, 0, 0, 9530, 9531, 7, 12, 0, 0, 9531, 1540, 1, 0, 0, 0, 9532, 9533, 7, 11, 0, 0, 9533, 9534, 7, 27, 0, 0, 9534, 9535, 7, 15, 0, 0, 9535, 9536, 7, 11, 0, 0, 9536, 1542, 1, 0, 0, 0, 9537, 9538, 7, 11, 0, 0, 9538, 9539, 7, 9, 0, 0, 9539, 9540, 7, 7, 0, 0, 9540, 9541, 5, 55, 0, 0, 9541, 1544, 1, 0, 0, 0, 9542, 9543, 7, 6, 0, 0, 9543, 9544, 7, 15, 0, 0, 9544, 9545, 7, 11, 0, 0, 9545, 9546, 5, 54, 0, 0, 9546, 9547, 5, 50, 0, 0, 9547, 9548, 5, 48, 0, 0, 9548, 1546, 1, 0, 0, 0, 9549, 9550, 7, 17, 0, 0, 9550, 9551, 7, 14, 0, 0, 9551, 9552, 7, 11, 0, 0, 9552, 9553, 5, 50, 0, 0, 9553, 1548, 1, 0, 0, 0, 9554, 9555, 7, 17, 0, 0, 9555, 9556, 7, 27, 0, 0, 9556, 9557, 7, 15, 0, 0, 9557, 9558, 7, 11, 0, 0, 9558, 1550, 1, 0, 0, 0, 9559, 9560, 7, 17, 0, 0, 9560, 9561, 7, 6, 0, 0, 9561, 9562, 7, 18, 0, 0, 9562, 9563, 5, 49, 0, 0, 9563, 9564, 5, 54, 0, 0, 9564, 1552, 1, 0, 0, 0, 9565, 9566, 7, 17, 0, 0, 9566, 9567, 7, 6, 0, 0, 9567, 9568, 7, 18, 0, 0, 9568, 9569, 5, 49, 0, 0, 9569, 9570, 5, 54, 0, 0, 9570, 9571, 7, 5, 0, 0, 9571, 9572, 7, 7, 0, 0, 9572, 1554, 1, 0, 0, 0, 9573, 9574, 7, 17, 0, 0, 9574, 9575, 7, 6, 0, 0, 9575, 9576, 7, 18, 0, 0, 9576, 9577, 5, 51, 0, 0, 9577, 9578, 5, 50, 0, 0, 9578, 1556, 1, 0, 0, 0, 9579, 9580, 7, 17, 0, 0, 9580, 9581, 7, 6, 0, 0, 9581, 9582, 7, 18, 0, 0, 9582, 9583, 5, 56, 0, 0, 9583, 1558, 1, 0, 0, 0, 9584, 9585, 7, 17, 0, 0, 9585, 9586, 7, 6, 0, 0, 9586, 9587, 7, 18, 0, 0, 9587, 9588, 5, 56, 0, 0, 9588, 9589, 7, 23, 0, 0, 9589, 9590, 7, 16, 0, 0, 9590, 9591, 5, 51, 0, 0, 9591, 1560, 1, 0, 0, 0, 9592, 9593, 7, 17, 0, 0, 9593, 9594, 7, 6, 0, 0, 9594, 9595, 7, 18, 0, 0, 9595, 9596, 5, 56, 0, 0, 9596, 9597, 7, 23, 0, 0, 9597, 9598, 7, 16, 0, 0, 9598, 9599, 5, 52, 0, 0, 9599, 1562, 1, 0, 0, 0, 9600, 9601, 7, 3, 0, 0, 9601, 9602, 7, 8, 0, 0, 9602, 9603, 7, 14, 0, 0, 9603, 9604, 7, 20, 0, 0, 9604, 9605, 7, 15, 0, 0, 9605, 9606, 7, 24, 0, 0, 9606, 9607, 7, 7, 0, 0, 9607, 1564, 1, 0, 0, 0, 9608, 9609, 7, 16, 0, 0, 9609, 9610, 7, 5, 0, 0, 9610, 9611, 7, 3, 0, 0, 9611, 9612, 7, 14, 0, 0, 9612, 9613, 7, 21, 0, 0, 9613, 9614, 7, 20, 0, 0, 9614, 9615, 7, 19, 0, 0, 9615, 9616, 7, 5, 0, 0, 9616, 9617, 7, 7, 0, 0, 9617, 1566, 1, 0, 0, 0, 9618, 9619, 7, 14, 0, 0, 9619, 9620, 7, 11, 0, 0, 9620, 9621, 7, 24, 0, 0, 9621, 1568, 1, 0, 0, 0, 9622, 9623, 7, 18, 0, 0, 9623, 9624, 7, 7, 0, 0, 9624, 9625, 7, 4, 0, 0, 9625, 9626, 7, 7, 0, 0, 9626, 9627, 7, 8, 0, 0, 9627, 9628, 7, 3, 0, 0, 9628, 9629, 7, 6, 0, 0, 9629, 9630, 7, 7, 0, 0, 9630, 9631, 7, 4, 0, 0, 9631, 1570, 1, 0, 0, 0, 9632, 9633, 7, 15, 0, 0, 9633, 9634, 7, 12, 0, 0, 9634, 9635, 7, 12, 0, 0, 9635, 9636, 7, 19, 0, 0, 9636, 9637, 7, 4, 0, 0, 9637, 9638, 7, 16, 0, 0, 9638, 1572, 1, 0, 0, 0, 9639, 9640, 7, 23, 0, 0, 9640, 9641, 7, 7, 0, 0, 9641, 9642, 7, 23, 0, 0, 9642, 9643, 7, 19, 0, 0, 9643, 9644, 7, 8, 0, 0, 9644, 9645, 7, 10, 0, 0, 9645, 1574, 1, 0, 0, 0, 9646, 9647, 7, 23, 0, 0, 9647, 9648, 7, 8, 0, 0, 9648, 9649, 7, 22, 0, 0, 9649, 9650, 5, 95, 0, 0, 9650, 9651, 7, 23, 0, 0, 9651, 9652, 7, 10, 0, 0, 9652, 9653, 7, 15, 0, 0, 9653, 9654, 7, 11, 0, 0, 9654, 9655, 7, 3, 0, 0, 9655, 9656, 7, 23, 0, 0, 9656, 1576, 1, 0, 0, 0, 9657, 9658, 7, 23, 0, 0, 9658, 9659, 7, 10, 0, 0, 9659, 9660, 7, 15, 0, 0, 9660, 9661, 7, 11, 0, 0, 9661, 9662, 7, 3, 0, 0, 9662, 9663, 7, 23, 0, 0, 9663, 1578, 1, 0, 0, 0, 9664, 9665, 7, 12, 0, 0, 9665, 9666, 7, 4, 0, 0, 9666, 9667, 7, 16, 0, 0, 9667, 1580, 1, 0, 0, 0, 9668, 9669, 7, 12, 0, 0, 9669, 9670, 7, 4, 0, 0, 9670, 9671, 7, 16, 0, 0, 9671, 9672, 7, 14, 0, 0, 9672, 9673, 7, 5, 0, 0, 9673, 9674, 7, 17, 0, 0, 9674, 9675, 7, 11, 0, 0, 9675, 9676, 7, 6, 0, 0, 9676, 9677, 7, 7, 0, 0, 9677, 9678, 7, 8, 0, 0, 9678, 1582, 1, 0, 0, 0, 9679, 9680, 7, 25, 0, 0, 9680, 9681, 7, 7, 0, 0, 9681, 9682, 7, 8, 0, 0, 9682, 9683, 7, 18, 0, 0, 9683, 9684, 7, 19, 0, 0, 9684, 9685, 7, 8, 0, 0, 9685, 9686, 7, 23, 0, 0, 9686, 9687, 7, 3, 0, 0, 9687, 9688, 7, 12, 0, 0, 9688, 9689, 7, 14, 0, 0, 9689, 9690, 7, 7, 0, 0, 9690, 9691, 5, 95, 0, 0, 9691, 9692, 7, 11, 0, 0, 9692, 9693, 7, 14, 0, 0, 9693, 9694, 7, 20, 0, 0, 9694, 9695, 7, 7, 0, 0, 9695, 9696, 7, 23, 0, 0, 9696, 9697, 7, 3, 0, 0, 9697, 1584, 1, 0, 0, 0, 9698, 9699, 7, 6, 0, 0, 9699, 9700, 7, 19, 0, 0, 9700, 9701, 7, 21, 0, 0, 9701, 9702, 7, 17, 0, 0, 9702, 9703, 7, 4, 0, 0, 9703, 9704, 7, 16, 0, 0, 9704, 1586, 1, 0, 0, 0, 9705, 9706, 7, 8, 0, 0, 9706, 9707, 7, 7, 0, 0, 9707, 9708, 7, 25, 0, 0, 9708, 9709, 7, 7, 0, 0, 9709, 9710, 7, 3, 0, 0, 9710, 9711, 7, 6, 0, 0, 9711, 9712, 7, 3, 0, 0, 9712, 9713, 7, 16, 0, 0, 9713, 9714, 7, 5, 0, 0, 9714, 9715, 7, 7, 0, 0, 9715, 1588, 1, 0, 0, 0, 9716, 9717, 7, 14, 0, 0, 9717, 9718, 7, 19, 0, 0, 9718, 9719, 7, 23, 0, 0, 9719, 9720, 7, 23, 0, 0, 9720, 9721, 7, 15, 0, 0, 9721, 9722, 7, 6, 0, 0, 9722, 9723, 7, 6, 0, 0, 9723, 9724, 7, 7, 0, 0, 9724, 9725, 7, 4, 0, 0, 9725, 1590, 1, 0, 0, 0, 9726, 9727, 7, 17, 0, 0, 9727, 9728, 7, 12, 0, 0, 9728, 9729, 7, 14, 0, 0, 9729, 9730, 7, 19, 0, 0, 9730, 9731, 7, 23, 0, 0, 9731, 9732, 7, 23, 0, 0, 9732, 9733, 7, 15, 0, 0, 9733, 9734, 7, 6, 0, 0, 9734, 9735, 7, 6, 0, 0, 9735, 9736, 7, 7, 0, 0, 9736, 9737, 7, 4, 0, 0, 9737, 1592, 1, 0, 0, 0, 9738, 9739, 7, 11, 0, 0, 9739, 9740, 7, 7, 0, 0, 9740, 9741, 7, 8, 0, 0, 9741, 9742, 7, 15, 0, 0, 9742, 9743, 7, 3, 0, 0, 9743, 9744, 7, 5, 0, 0, 9744, 9745, 7, 15, 0, 0, 9745, 9746, 7, 13, 0, 0, 9746, 9747, 7, 3, 0, 0, 9747, 9748, 7, 16, 0, 0, 9748, 9749, 7, 5, 0, 0, 9749, 9750, 7, 7, 0, 0, 9750, 1594, 1, 0, 0, 0, 9751, 9752, 7, 22, 0, 0, 9752, 9753, 7, 7, 0, 0, 9753, 9754, 7, 19, 0, 0, 9754, 9755, 7, 23, 0, 0, 9755, 9756, 7, 7, 0, 0, 9756, 9757, 7, 6, 0, 0, 9757, 9758, 7, 8, 0, 0, 9758, 9759, 7, 10, 0, 0, 9759, 9760, 7, 14, 0, 0, 9760, 9761, 7, 19, 0, 0, 9761, 9762, 7, 5, 0, 0, 9762, 9763, 7, 5, 0, 0, 9763, 9764, 7, 7, 0, 0, 9764, 9765, 7, 14, 0, 0, 9765, 9766, 7, 6, 0, 0, 9766, 9767, 7, 15, 0, 0, 9767, 9768, 7, 19, 0, 0, 9768, 9769, 7, 12, 0, 0, 9769, 1596, 1, 0, 0, 0, 9770, 9771, 7, 22, 0, 0, 9771, 9772, 7, 7, 0, 0, 9772, 9773, 7, 19, 0, 0, 9773, 9774, 7, 23, 0, 0, 9774, 9775, 7, 14, 0, 0, 9775, 9776, 7, 19, 0, 0, 9776, 9777, 7, 5, 0, 0, 9777, 9778, 7, 5, 0, 0, 9778, 9779, 7, 7, 0, 0, 9779, 9780, 7, 14, 0, 0, 9780, 9781, 7, 6, 0, 0, 9781, 9782, 7, 15, 0, 0, 9782, 9783, 7, 19, 0, 0, 9783, 9784, 7, 12, 0, 0, 9784, 1598, 1, 0, 0, 0, 9785, 9786, 7, 22, 0, 0, 9786, 9787, 7, 7, 0, 0, 9787, 9788, 7, 19, 0, 0, 9788, 9789, 7, 23, 0, 0, 9789, 9790, 7, 7, 0, 0, 9790, 9791, 7, 6, 0, 0, 9791, 9792, 7, 8, 0, 0, 9792, 9793, 7, 10, 0, 0, 9793, 1600, 1, 0, 0, 0, 9794, 9795, 7, 5, 0, 0, 9795, 9796, 7, 15, 0, 0, 9796, 9797, 7, 12, 0, 0, 9797, 9798, 7, 7, 0, 0, 9798, 9799, 7, 11, 0, 0, 9799, 9800, 7, 6, 0, 0, 9800, 9801, 7, 8, 0, 0, 9801, 9802, 7, 15, 0, 0, 9802, 9803, 7, 12, 0, 0, 9803, 9804, 7, 22, 0, 0, 9804, 1602, 1, 0, 0, 0, 9805, 9806, 7, 23, 0, 0, 9806, 9807, 7, 17, 0, 0, 9807, 9808, 7, 5, 0, 0, 9808, 9809, 7, 6, 0, 0, 9809, 9810, 7, 15, 0, 0, 9810, 9811, 7, 5, 0, 0, 9811, 9812, 7, 15, 0, 0, 9812, 9813, 7, 12, 0, 0, 9813, 9814, 7, 7, 0, 0, 9814, 9815, 7, 11, 0, 0, 9815, 9816, 7, 6, 0, 0, 9816, 9817, 7, 8, 0, 0, 9817, 9818, 7, 15, 0, 0, 9818, 9819, 7, 12, 0, 0, 9819, 9820, 7, 22, 0, 0, 9820, 1604, 1, 0, 0, 0, 9821, 9822, 7, 23, 0, 0, 9822, 9823, 7, 17, 0, 0, 9823, 9824, 7, 5, 0, 0, 9824, 9825, 7, 6, 0, 0, 9825, 9826, 7, 15, 0, 0, 9826, 9827, 7, 25, 0, 0, 9827, 9828, 7, 19, 0, 0, 9828, 9829, 7, 15, 0, 0, 9829, 9830, 7, 12, 0, 0, 9830, 9831, 7, 6, 0, 0, 9831, 1606, 1, 0, 0, 0, 9832, 9833, 7, 23, 0, 0, 9833, 9834, 7, 17, 0, 0, 9834, 9835, 7, 5, 0, 0, 9835, 9836, 7, 6, 0, 0, 9836, 9837, 7, 15, 0, 0, 9837, 9838, 7, 25, 0, 0, 9838, 9839, 7, 19, 0, 0, 9839, 9840, 7, 5, 0, 0, 9840, 9841, 7, 10, 0, 0, 9841, 9842, 7, 22, 0, 0, 9842, 9843, 7, 19, 0, 0, 9843, 9844, 7, 12, 0, 0, 9844, 1608, 1, 0, 0, 0, 9845, 9846, 7, 25, 0, 0, 9846, 9847, 7, 19, 0, 0, 9847, 9848, 7, 15, 0, 0, 9848, 9849, 7, 12, 0, 0, 9849, 9850, 7, 6, 0, 0, 9850, 1610, 1, 0, 0, 0, 9851, 9852, 7, 25, 0, 0, 9852, 9853, 7, 19, 0, 0, 9853, 9854, 7, 5, 0, 0, 9854, 9855, 7, 10, 0, 0, 9855, 9856, 7, 22, 0, 0, 9856, 9857, 7, 19, 0, 0, 9857, 9858, 7, 12, 0, 0, 9858, 1612, 1, 0, 0, 0, 9859, 9860, 7, 3, 0, 0, 9860, 9861, 7, 16, 0, 0, 9861, 9862, 7, 11, 0, 0, 9862, 1614, 1, 0, 0, 0, 9863, 9864, 7, 3, 0, 0, 9864, 9865, 7, 14, 0, 0, 9865, 9866, 7, 19, 0, 0, 9866, 9867, 7, 11, 0, 0, 9867, 1616, 1, 0, 0, 0, 9868, 9869, 7, 3, 0, 0, 9869, 9870, 7, 4, 0, 0, 9870, 9871, 7, 4, 0, 0, 9871, 9872, 7, 4, 0, 0, 9872, 9873, 7, 3, 0, 0, 9873, 9874, 7, 6, 0, 0, 9874, 9875, 7, 7, 0, 0, 9875, 1618, 1, 0, 0, 0, 9876, 9877, 7, 3, 0, 0, 9877, 9878, 7, 4, 0, 0, 9878, 9879, 7, 4, 0, 0, 9879, 9880, 7, 6, 0, 0, 9880, 9881, 7, 15, 0, 0, 9881, 9882, 7, 23, 0, 0, 9882, 9883, 7, 7, 0, 0, 9883, 1620, 1, 0, 0, 0, 9884, 9885, 7, 3, 0, 0, 9885, 9886, 7, 7, 0, 0, 9886, 9887, 7, 11, 0, 0, 9887, 9888, 5, 95, 0, 0, 9888, 9889, 7, 4, 0, 0, 9889, 9890, 7, 7, 0, 0, 9890, 9891, 7, 14, 0, 0, 9891, 9892, 7, 8, 0, 0, 9892, 9893, 7, 10, 0, 0, 9893, 9894, 7, 25, 0, 0, 9894, 9895, 7, 6, 0, 0, 9895, 1622, 1, 0, 0, 0, 9896, 9897, 7, 3, 0, 0, 9897, 9898, 7, 7, 0, 0, 9898, 9899, 7, 11, 0, 0, 9899, 9900, 5, 95, 0, 0, 9900, 9901, 7, 7, 0, 0, 9901, 9902, 7, 12, 0, 0, 9902, 9903, 7, 14, 0, 0, 9903, 9904, 7, 8, 0, 0, 9904, 9905, 7, 10, 0, 0, 9905, 9906, 7, 25, 0, 0, 9906, 9907, 7, 6, 0, 0, 9907, 1624, 1, 0, 0, 0, 9908, 9909, 7, 3, 0, 0, 9909, 9910, 7, 8, 0, 0, 9910, 9911, 7, 7, 0, 0, 9911, 9912, 7, 3, 0, 0, 9912, 1626, 1, 0, 0, 0, 9913, 9914, 7, 3, 0, 0, 9914, 9915, 7, 11, 0, 0, 9915, 9916, 7, 16, 0, 0, 9916, 9917, 7, 15, 0, 0, 9917, 9918, 7, 12, 0, 0, 9918, 9919, 7, 3, 0, 0, 9919, 9920, 7, 8, 0, 0, 9920, 9921, 7, 10, 0, 0, 9921, 1628, 1, 0, 0, 0, 9922, 9923, 7, 3, 0, 0, 9923, 9924, 7, 11, 0, 0, 9924, 9925, 7, 15, 0, 0, 9925, 9926, 7, 12, 0, 0, 9926, 1630, 1, 0, 0, 0, 9927, 9928, 7, 3, 0, 0, 9928, 9929, 7, 11, 0, 0, 9929, 9930, 7, 6, 0, 0, 9930, 9931, 7, 7, 0, 0, 9931, 9932, 7, 26, 0, 0, 9932, 9933, 7, 6, 0, 0, 9933, 1632, 1, 0, 0, 0, 9934, 9935, 7, 3, 0, 0, 9935, 9936, 7, 11, 0, 0, 9936, 9937, 7, 9, 0, 0, 9937, 9938, 7, 21, 0, 0, 9938, 9939, 7, 16, 0, 0, 9939, 1634, 1, 0, 0, 0, 9940, 9941, 7, 3, 0, 0, 9941, 9942, 7, 11, 0, 0, 9942, 9943, 7, 9, 0, 0, 9943, 9944, 7, 21, 0, 0, 9944, 9945, 7, 6, 0, 0, 9945, 1636, 1, 0, 0, 0, 9946, 9947, 7, 3, 0, 0, 9947, 9948, 7, 11, 0, 0, 9948, 9949, 7, 10, 0, 0, 9949, 9950, 7, 23, 0, 0, 9950, 9951, 7, 23, 0, 0, 9951, 9952, 7, 7, 0, 0, 9952, 9953, 7, 6, 0, 0, 9953, 9954, 7, 8, 0, 0, 9954, 9955, 7, 15, 0, 0, 9955, 9956, 7, 14, 0, 0, 9956, 9957, 5, 95, 0, 0, 9957, 9958, 7, 4, 0, 0, 9958, 9959, 7, 7, 0, 0, 9959, 9960, 7, 14, 0, 0, 9960, 9961, 7, 8, 0, 0, 9961, 9962, 7, 10, 0, 0, 9962, 9963, 7, 25, 0, 0, 9963, 9964, 7, 6, 0, 0, 9964, 1638, 1, 0, 0, 0, 9965, 9966, 7, 3, 0, 0, 9966, 9967, 7, 11, 0, 0, 9967, 9968, 7, 10, 0, 0, 9968, 9969, 7, 23, 0, 0, 9969, 9970, 7, 23, 0, 0, 9970, 9971, 7, 7, 0, 0, 9971, 9972, 7, 6, 0, 0, 9972, 9973, 7, 8, 0, 0, 9973, 9974, 7, 15, 0, 0, 9974, 9975, 7, 14, 0, 0, 9975, 9976, 5, 95, 0, 0, 9976, 9977, 7, 4, 0, 0, 9977, 9978, 7, 7, 0, 0, 9978, 9979, 7, 8, 0, 0, 9979, 9980, 7, 15, 0, 0, 9980, 9981, 7, 24, 0, 0, 9981, 9982, 7, 7, 0, 0, 9982, 1640, 1, 0, 0, 0, 9983, 9984, 7, 3, 0, 0, 9984, 9985, 7, 11, 0, 0, 9985, 9986, 7, 10, 0, 0, 9986, 9987, 7, 23, 0, 0, 9987, 9988, 7, 23, 0, 0, 9988, 9989, 7, 7, 0, 0, 9989, 9990, 7, 6, 0, 0, 9990, 9991, 7, 8, 0, 0, 9991, 9992, 7, 15, 0, 0, 9992, 9993, 7, 14, 0, 0, 9993, 9994, 5, 95, 0, 0, 9994, 9995, 7, 7, 0, 0, 9995, 9996, 7, 12, 0, 0, 9996, 9997, 7, 14, 0, 0, 9997, 9998, 7, 8, 0, 0, 9998, 9999, 7, 10, 0, 0, 9999, 10000, 7, 25, 0, 0, 10000, 10001, 7, 6, 0, 0, 10001, 1642, 1, 0, 0, 0, 10002, 10003, 7, 3, 0, 0, 10003, 10004, 7, 11, 0, 0, 10004, 10005, 7, 10, 0, 0, 10005, 10006, 7, 23, 0, 0, 10006, 10007, 7, 23, 0, 0, 10007, 10008, 7, 7, 0, 0, 10008, 10009, 7, 6, 0, 0, 10009, 10010, 7, 8, 0, 0, 10010, 10011, 7, 15, 0, 0, 10011, 10012, 7, 14, 0, 0, 10012, 10013, 5, 95, 0, 0, 10013, 10014, 7, 11, 0, 0, 10014, 10015, 7, 15, 0, 0, 10015, 10016, 7, 22, 0, 0, 10016, 10017, 7, 12, 0, 0, 10017, 1644, 1, 0, 0, 0, 10018, 10019, 7, 3, 0, 0, 10019, 10020, 7, 11, 0, 0, 10020, 10021, 7, 10, 0, 0, 10021, 10022, 7, 23, 0, 0, 10022, 10023, 7, 23, 0, 0, 10023, 10024, 7, 7, 0, 0, 10024, 10025, 7, 6, 0, 0, 10025, 10026, 7, 8, 0, 0, 10026, 10027, 7, 15, 0, 0, 10027, 10028, 7, 14, 0, 0, 10028, 10029, 5, 95, 0, 0, 10029, 10030, 7, 24, 0, 0, 10030, 10031, 7, 7, 0, 0, 10031, 10032, 7, 8, 0, 0, 10032, 10033, 7, 15, 0, 0, 10033, 10034, 7, 18, 0, 0, 10034, 10035, 7, 10, 0, 0, 10035, 1646, 1, 0, 0, 0, 10036, 10037, 7, 3, 0, 0, 10037, 10038, 7, 6, 0, 0, 10038, 10039, 7, 3, 0, 0, 10039, 10040, 7, 12, 0, 0, 10040, 1648, 1, 0, 0, 0, 10041, 10042, 7, 3, 0, 0, 10042, 10043, 7, 6, 0, 0, 10043, 10044, 7, 3, 0, 0, 10044, 10045, 7, 12, 0, 0, 10045, 10046, 5, 50, 0, 0, 10046, 1650, 1, 0, 0, 0, 10047, 10048, 7, 16, 0, 0, 10048, 10049, 7, 7, 0, 0, 10049, 10050, 7, 12, 0, 0, 10050, 10051, 7, 14, 0, 0, 10051, 10052, 7, 20, 0, 0, 10052, 10053, 7, 23, 0, 0, 10053, 10054, 7, 3, 0, 0, 10054, 10055, 7, 8, 0, 0, 10055, 10056, 7, 21, 0, 0, 10056, 1652, 1, 0, 0, 0, 10057, 10058, 7, 16, 0, 0, 10058, 10059, 7, 15, 0, 0, 10059, 10060, 7, 12, 0, 0, 10060, 1654, 1, 0, 0, 0, 10061, 10062, 7, 16, 0, 0, 10062, 10063, 7, 15, 0, 0, 10063, 10064, 7, 6, 0, 0, 10064, 10065, 5, 95, 0, 0, 10065, 10066, 7, 14, 0, 0, 10066, 10067, 7, 19, 0, 0, 10067, 10068, 7, 17, 0, 0, 10068, 10069, 7, 12, 0, 0, 10069, 10070, 7, 6, 0, 0, 10070, 1656, 1, 0, 0, 0, 10071, 10072, 7, 16, 0, 0, 10072, 10073, 7, 15, 0, 0, 10073, 10074, 7, 6, 0, 0, 10074, 10075, 5, 95, 0, 0, 10075, 10076, 7, 5, 0, 0, 10076, 10077, 7, 7, 0, 0, 10077, 10078, 7, 12, 0, 0, 10078, 10079, 7, 22, 0, 0, 10079, 10080, 7, 6, 0, 0, 10080, 10081, 7, 20, 0, 0, 10081, 1658, 1, 0, 0, 0, 10082, 10083, 7, 16, 0, 0, 10083, 10084, 7, 17, 0, 0, 10084, 10085, 7, 18, 0, 0, 10085, 10086, 7, 18, 0, 0, 10086, 10087, 7, 7, 0, 0, 10087, 10088, 7, 8, 0, 0, 10088, 1660, 1, 0, 0, 0, 10089, 10090, 7, 14, 0, 0, 10090, 10091, 7, 3, 0, 0, 10091, 10092, 7, 6, 0, 0, 10092, 10093, 7, 3, 0, 0, 10093, 10094, 7, 5, 0, 0, 10094, 10095, 7, 19, 0, 0, 10095, 10096, 7, 22, 0, 0, 10096, 10097, 5, 95, 0, 0, 10097, 10098, 7, 12, 0, 0, 10098, 10099, 7, 3, 0, 0, 10099, 10100, 7, 23, 0, 0, 10100, 10101, 7, 7, 0, 0, 10101, 1662, 1, 0, 0, 0, 10102, 10103, 7, 14, 0, 0, 10103, 10104, 7, 7, 0, 0, 10104, 10105, 7, 15, 0, 0, 10105, 10106, 7, 5, 0, 0, 10106, 1664, 1, 0, 0, 0, 10107, 10108, 7, 14, 0, 0, 10108, 10109, 7, 7, 0, 0, 10109, 10110, 7, 15, 0, 0, 10110, 10111, 7, 5, 0, 0, 10111, 10112, 7, 15, 0, 0, 10112, 10113, 7, 12, 0, 0, 10113, 10114, 7, 22, 0, 0, 10114, 1666, 1, 0, 0, 0, 10115, 10116, 7, 14, 0, 0, 10116, 10117, 7, 7, 0, 0, 10117, 10118, 7, 12, 0, 0, 10118, 10119, 7, 6, 0, 0, 10119, 10120, 7, 8, 0, 0, 10120, 10121, 7, 19, 0, 0, 10121, 10122, 7, 15, 0, 0, 10122, 10123, 7, 4, 0, 0, 10123, 1668, 1, 0, 0, 0, 10124, 10125, 7, 14, 0, 0, 10125, 10126, 7, 20, 0, 0, 10126, 10127, 7, 3, 0, 0, 10127, 10128, 7, 8, 0, 0, 10128, 10129, 7, 3, 0, 0, 10129, 10130, 7, 14, 0, 0, 10130, 10131, 7, 6, 0, 0, 10131, 10132, 7, 7, 0, 0, 10132, 10133, 7, 8, 0, 0, 10133, 10134, 5, 95, 0, 0, 10134, 10135, 7, 5, 0, 0, 10135, 10136, 7, 7, 0, 0, 10136, 10137, 7, 12, 0, 0, 10137, 10138, 7, 22, 0, 0, 10138, 10139, 7, 6, 0, 0, 10139, 10140, 7, 20, 0, 0, 10140, 1670, 1, 0, 0, 0, 10141, 10142, 7, 14, 0, 0, 10142, 10143, 7, 20, 0, 0, 10143, 10144, 7, 3, 0, 0, 10144, 10145, 7, 8, 0, 0, 10145, 10146, 7, 11, 0, 0, 10146, 10147, 7, 7, 0, 0, 10147, 10148, 7, 6, 0, 0, 10148, 1672, 1, 0, 0, 0, 10149, 10150, 7, 14, 0, 0, 10150, 10151, 7, 20, 0, 0, 10151, 10152, 7, 3, 0, 0, 10152, 10153, 7, 8, 0, 0, 10153, 10154, 5, 95, 0, 0, 10154, 10155, 7, 5, 0, 0, 10155, 10156, 7, 7, 0, 0, 10156, 10157, 7, 12, 0, 0, 10157, 10158, 7, 22, 0, 0, 10158, 10159, 7, 6, 0, 0, 10159, 10160, 7, 20, 0, 0, 10160, 1674, 1, 0, 0, 0, 10161, 10162, 7, 14, 0, 0, 10162, 10163, 7, 19, 0, 0, 10163, 10164, 7, 7, 0, 0, 10164, 10165, 7, 8, 0, 0, 10165, 10166, 7, 14, 0, 0, 10166, 10167, 7, 15, 0, 0, 10167, 10168, 7, 16, 0, 0, 10168, 10169, 7, 15, 0, 0, 10169, 10170, 7, 5, 0, 0, 10170, 10171, 7, 15, 0, 0, 10171, 10172, 7, 6, 0, 0, 10172, 10173, 7, 10, 0, 0, 10173, 1676, 1, 0, 0, 0, 10174, 10175, 7, 14, 0, 0, 10175, 10176, 7, 19, 0, 0, 10176, 10177, 7, 5, 0, 0, 10177, 10178, 7, 5, 0, 0, 10178, 10179, 7, 3, 0, 0, 10179, 10180, 7, 6, 0, 0, 10180, 10181, 7, 15, 0, 0, 10181, 10182, 7, 19, 0, 0, 10182, 10183, 7, 12, 0, 0, 10183, 1678, 1, 0, 0, 0, 10184, 10185, 7, 14, 0, 0, 10185, 10186, 7, 19, 0, 0, 10186, 10187, 7, 23, 0, 0, 10187, 10188, 7, 25, 0, 0, 10188, 10189, 7, 8, 0, 0, 10189, 10190, 7, 7, 0, 0, 10190, 10191, 7, 11, 0, 0, 10191, 10192, 7, 11, 0, 0, 10192, 1680, 1, 0, 0, 0, 10193, 10194, 7, 14, 0, 0, 10194, 10195, 7, 19, 0, 0, 10195, 10196, 7, 12, 0, 0, 10196, 10197, 7, 14, 0, 0, 10197, 10198, 7, 3, 0, 0, 10198, 10199, 7, 6, 0, 0, 10199, 1682, 1, 0, 0, 0, 10200, 10201, 7, 14, 0, 0, 10201, 10202, 7, 19, 0, 0, 10202, 10203, 7, 12, 0, 0, 10203, 10204, 7, 14, 0, 0, 10204, 10205, 7, 3, 0, 0, 10205, 10206, 7, 6, 0, 0, 10206, 10207, 5, 95, 0, 0, 10207, 10208, 7, 9, 0, 0, 10208, 10209, 7, 11, 0, 0, 10209, 1684, 1, 0, 0, 0, 10210, 10211, 7, 14, 0, 0, 10211, 10212, 7, 19, 0, 0, 10212, 10213, 7, 12, 0, 0, 10213, 10214, 7, 12, 0, 0, 10214, 10215, 7, 7, 0, 0, 10215, 10216, 7, 14, 0, 0, 10216, 10217, 7, 6, 0, 0, 10217, 10218, 7, 15, 0, 0, 10218, 10219, 7, 19, 0, 0, 10219, 10220, 7, 12, 0, 0, 10220, 10221, 5, 95, 0, 0, 10221, 10222, 7, 15, 0, 0, 10222, 10223, 7, 4, 0, 0, 10223, 1686, 1, 0, 0, 0, 10224, 10225, 7, 14, 0, 0, 10225, 10226, 7, 19, 0, 0, 10226, 10227, 7, 12, 0, 0, 10227, 10228, 7, 24, 0, 0, 10228, 1688, 1, 0, 0, 0, 10229, 10230, 7, 14, 0, 0, 10230, 10231, 7, 19, 0, 0, 10231, 10232, 7, 12, 0, 0, 10232, 10233, 7, 24, 0, 0, 10233, 10234, 7, 7, 0, 0, 10234, 10235, 7, 8, 0, 0, 10235, 10236, 7, 6, 0, 0, 10236, 10237, 5, 95, 0, 0, 10237, 10238, 7, 6, 0, 0, 10238, 10239, 7, 13, 0, 0, 10239, 1690, 1, 0, 0, 0, 10240, 10241, 7, 14, 0, 0, 10241, 10242, 7, 19, 0, 0, 10242, 10243, 7, 11, 0, 0, 10243, 1692, 1, 0, 0, 0, 10244, 10245, 7, 14, 0, 0, 10245, 10246, 7, 19, 0, 0, 10246, 10247, 7, 6, 0, 0, 10247, 1694, 1, 0, 0, 0, 10248, 10249, 7, 14, 0, 0, 10249, 10250, 7, 8, 0, 0, 10250, 10251, 7, 14, 0, 0, 10251, 10252, 5, 51, 0, 0, 10252, 10253, 5, 50, 0, 0, 10253, 1696, 1, 0, 0, 0, 10254, 10255, 7, 14, 0, 0, 10255, 10256, 7, 8, 0, 0, 10256, 10257, 7, 7, 0, 0, 10257, 10258, 7, 3, 0, 0, 10258, 10259, 7, 6, 0, 0, 10259, 10260, 7, 7, 0, 0, 10260, 10261, 5, 95, 0, 0, 10261, 10262, 7, 3, 0, 0, 10262, 10263, 7, 11, 0, 0, 10263, 10264, 7, 10, 0, 0, 10264, 10265, 7, 23, 0, 0, 10265, 10266, 7, 23, 0, 0, 10266, 10267, 7, 7, 0, 0, 10267, 10268, 7, 6, 0, 0, 10268, 10269, 7, 8, 0, 0, 10269, 10270, 7, 15, 0, 0, 10270, 10271, 7, 14, 0, 0, 10271, 10272, 5, 95, 0, 0, 10272, 10273, 7, 25, 0, 0, 10273, 10274, 7, 8, 0, 0, 10274, 10275, 7, 15, 0, 0, 10275, 10276, 7, 24, 0, 0, 10276, 10277, 5, 95, 0, 0, 10277, 10278, 7, 21, 0, 0, 10278, 10279, 7, 7, 0, 0, 10279, 10280, 7, 10, 0, 0, 10280, 1698, 1, 0, 0, 0, 10281, 10282, 7, 14, 0, 0, 10282, 10283, 7, 8, 0, 0, 10283, 10284, 7, 7, 0, 0, 10284, 10285, 7, 3, 0, 0, 10285, 10286, 7, 6, 0, 0, 10286, 10287, 7, 7, 0, 0, 10287, 10288, 5, 95, 0, 0, 10288, 10289, 7, 3, 0, 0, 10289, 10290, 7, 11, 0, 0, 10290, 10291, 7, 10, 0, 0, 10291, 10292, 7, 23, 0, 0, 10292, 10293, 7, 23, 0, 0, 10293, 10294, 7, 7, 0, 0, 10294, 10295, 7, 6, 0, 0, 10295, 10296, 7, 8, 0, 0, 10296, 10297, 7, 15, 0, 0, 10297, 10298, 7, 14, 0, 0, 10298, 10299, 5, 95, 0, 0, 10299, 10300, 7, 25, 0, 0, 10300, 10301, 7, 17, 0, 0, 10301, 10302, 7, 16, 0, 0, 10302, 10303, 5, 95, 0, 0, 10303, 10304, 7, 21, 0, 0, 10304, 10305, 7, 7, 0, 0, 10305, 10306, 7, 10, 0, 0, 10306, 1700, 1, 0, 0, 0, 10307, 10308, 7, 14, 0, 0, 10308, 10309, 7, 8, 0, 0, 10309, 10310, 7, 7, 0, 0, 10310, 10311, 7, 3, 0, 0, 10311, 10312, 7, 6, 0, 0, 10312, 10313, 7, 7, 0, 0, 10313, 10314, 5, 95, 0, 0, 10314, 10315, 7, 4, 0, 0, 10315, 10316, 7, 20, 0, 0, 10316, 10317, 5, 95, 0, 0, 10317, 10318, 7, 25, 0, 0, 10318, 10319, 7, 3, 0, 0, 10319, 10320, 7, 8, 0, 0, 10320, 10321, 7, 3, 0, 0, 10321, 10322, 7, 23, 0, 0, 10322, 10323, 7, 7, 0, 0, 10323, 10324, 7, 6, 0, 0, 10324, 10325, 7, 7, 0, 0, 10325, 10326, 7, 8, 0, 0, 10326, 10327, 7, 11, 0, 0, 10327, 1702, 1, 0, 0, 0, 10328, 10329, 7, 14, 0, 0, 10329, 10330, 7, 8, 0, 0, 10330, 10331, 7, 7, 0, 0, 10331, 10332, 7, 3, 0, 0, 10332, 10333, 7, 6, 0, 0, 10333, 10334, 7, 7, 0, 0, 10334, 10335, 5, 95, 0, 0, 10335, 10336, 7, 4, 0, 0, 10336, 10337, 7, 15, 0, 0, 10337, 10338, 7, 22, 0, 0, 10338, 10339, 7, 7, 0, 0, 10339, 10340, 7, 11, 0, 0, 10340, 10341, 7, 6, 0, 0, 10341, 1704, 1, 0, 0, 0, 10342, 10343, 7, 14, 0, 0, 10343, 10344, 7, 8, 0, 0, 10344, 10345, 7, 19, 0, 0, 10345, 10346, 7, 11, 0, 0, 10346, 10347, 7, 11, 0, 0, 10347, 10348, 7, 7, 0, 0, 10348, 10349, 7, 11, 0, 0, 10349, 1706, 1, 0, 0, 0, 10350, 10351, 7, 4, 0, 0, 10351, 10352, 7, 3, 0, 0, 10352, 10353, 7, 6, 0, 0, 10353, 10354, 7, 7, 0, 0, 10354, 10355, 7, 4, 0, 0, 10355, 10356, 7, 15, 0, 0, 10356, 10357, 7, 18, 0, 0, 10357, 10358, 7, 18, 0, 0, 10358, 1708, 1, 0, 0, 0, 10359, 10360, 7, 4, 0, 0, 10360, 10361, 7, 3, 0, 0, 10361, 10362, 7, 6, 0, 0, 10362, 10363, 7, 7, 0, 0, 10363, 10364, 5, 95, 0, 0, 10364, 10365, 7, 18, 0, 0, 10365, 10366, 7, 19, 0, 0, 10366, 10367, 7, 8, 0, 0, 10367, 10368, 7, 23, 0, 0, 10368, 10369, 7, 3, 0, 0, 10369, 10370, 7, 6, 0, 0, 10370, 1710, 1, 0, 0, 0, 10371, 10372, 7, 4, 0, 0, 10372, 10373, 7, 3, 0, 0, 10373, 10374, 7, 10, 0, 0, 10374, 10375, 7, 12, 0, 0, 10375, 10376, 7, 3, 0, 0, 10376, 10377, 7, 23, 0, 0, 10377, 10378, 7, 7, 0, 0, 10378, 1712, 1, 0, 0, 0, 10379, 10380, 7, 4, 0, 0, 10380, 10381, 7, 3, 0, 0, 10381, 10382, 7, 10, 0, 0, 10382, 10383, 7, 19, 0, 0, 10383, 10384, 7, 18, 0, 0, 10384, 10385, 7, 23, 0, 0, 10385, 10386, 7, 19, 0, 0, 10386, 10387, 7, 12, 0, 0, 10387, 10388, 7, 6, 0, 0, 10388, 10389, 7, 20, 0, 0, 10389, 1714, 1, 0, 0, 0, 10390, 10391, 7, 4, 0, 0, 10391, 10392, 7, 3, 0, 0, 10392, 10393, 7, 10, 0, 0, 10393, 10394, 7, 19, 0, 0, 10394, 10395, 7, 18, 0, 0, 10395, 10396, 7, 9, 0, 0, 10396, 10397, 7, 7, 0, 0, 10397, 10398, 7, 7, 0, 0, 10398, 10399, 7, 21, 0, 0, 10399, 1716, 1, 0, 0, 0, 10400, 10401, 7, 4, 0, 0, 10401, 10402, 7, 3, 0, 0, 10402, 10403, 7, 10, 0, 0, 10403, 10404, 7, 19, 0, 0, 10404, 10405, 7, 18, 0, 0, 10405, 10406, 7, 10, 0, 0, 10406, 10407, 7, 7, 0, 0, 10407, 10408, 7, 3, 0, 0, 10408, 10409, 7, 8, 0, 0, 10409, 1718, 1, 0, 0, 0, 10410, 10411, 7, 4, 0, 0, 10411, 10412, 7, 7, 0, 0, 10412, 10413, 7, 14, 0, 0, 10413, 10414, 7, 19, 0, 0, 10414, 10415, 7, 4, 0, 0, 10415, 10416, 7, 7, 0, 0, 10416, 1720, 1, 0, 0, 0, 10417, 10418, 7, 4, 0, 0, 10418, 10419, 7, 7, 0, 0, 10419, 10420, 7, 22, 0, 0, 10420, 10421, 7, 8, 0, 0, 10421, 10422, 7, 7, 0, 0, 10422, 10423, 7, 7, 0, 0, 10423, 10424, 7, 11, 0, 0, 10424, 1722, 1, 0, 0, 0, 10425, 10426, 7, 4, 0, 0, 10426, 10427, 7, 7, 0, 0, 10427, 10428, 7, 11, 0, 0, 10428, 10429, 5, 95, 0, 0, 10429, 10430, 7, 4, 0, 0, 10430, 10431, 7, 7, 0, 0, 10431, 10432, 7, 14, 0, 0, 10432, 10433, 7, 8, 0, 0, 10433, 10434, 7, 10, 0, 0, 10434, 10435, 7, 25, 0, 0, 10435, 10436, 7, 6, 0, 0, 10436, 1724, 1, 0, 0, 0, 10437, 10438, 7, 4, 0, 0, 10438, 10439, 7, 7, 0, 0, 10439, 10440, 7, 11, 0, 0, 10440, 10441, 5, 95, 0, 0, 10441, 10442, 7, 7, 0, 0, 10442, 10443, 7, 12, 0, 0, 10443, 10444, 7, 14, 0, 0, 10444, 10445, 7, 8, 0, 0, 10445, 10446, 7, 10, 0, 0, 10446, 10447, 7, 25, 0, 0, 10447, 10448, 7, 6, 0, 0, 10448, 1726, 1, 0, 0, 0, 10449, 10450, 7, 4, 0, 0, 10450, 10451, 7, 15, 0, 0, 10451, 10452, 7, 23, 0, 0, 10452, 10453, 7, 7, 0, 0, 10453, 10454, 7, 12, 0, 0, 10454, 10455, 7, 11, 0, 0, 10455, 10456, 7, 15, 0, 0, 10456, 10457, 7, 19, 0, 0, 10457, 10458, 7, 12, 0, 0, 10458, 1728, 1, 0, 0, 0, 10459, 10460, 7, 4, 0, 0, 10460, 10461, 7, 15, 0, 0, 10461, 10462, 7, 11, 0, 0, 10462, 10463, 7, 27, 0, 0, 10463, 10464, 7, 19, 0, 0, 10464, 10465, 7, 15, 0, 0, 10465, 10466, 7, 12, 0, 0, 10466, 10467, 7, 6, 0, 0, 10467, 1730, 1, 0, 0, 0, 10468, 10469, 7, 7, 0, 0, 10469, 10470, 7, 5, 0, 0, 10470, 10471, 7, 6, 0, 0, 10471, 1732, 1, 0, 0, 0, 10472, 10473, 7, 7, 0, 0, 10473, 10474, 7, 12, 0, 0, 10474, 10475, 7, 14, 0, 0, 10475, 10476, 7, 19, 0, 0, 10476, 10477, 7, 4, 0, 0, 10477, 10478, 7, 7, 0, 0, 10478, 1734, 1, 0, 0, 0, 10479, 10480, 7, 7, 0, 0, 10480, 10481, 7, 12, 0, 0, 10481, 10482, 7, 14, 0, 0, 10482, 10483, 7, 8, 0, 0, 10483, 10484, 7, 10, 0, 0, 10484, 10485, 7, 25, 0, 0, 10485, 10486, 7, 6, 0, 0, 10486, 1736, 1, 0, 0, 0, 10487, 10488, 7, 7, 0, 0, 10488, 10489, 7, 12, 0, 0, 10489, 10490, 7, 4, 0, 0, 10490, 10491, 7, 25, 0, 0, 10491, 10492, 7, 19, 0, 0, 10492, 10493, 7, 15, 0, 0, 10493, 10494, 7, 12, 0, 0, 10494, 10495, 7, 6, 0, 0, 10495, 1738, 1, 0, 0, 0, 10496, 10497, 7, 7, 0, 0, 10497, 10498, 7, 12, 0, 0, 10498, 10499, 7, 22, 0, 0, 10499, 10500, 7, 15, 0, 0, 10500, 10501, 7, 12, 0, 0, 10501, 10502, 7, 7, 0, 0, 10502, 10503, 5, 95, 0, 0, 10503, 10504, 7, 3, 0, 0, 10504, 10505, 7, 6, 0, 0, 10505, 10506, 7, 6, 0, 0, 10506, 10507, 7, 8, 0, 0, 10507, 10508, 7, 15, 0, 0, 10508, 10509, 7, 16, 0, 0, 10509, 10510, 7, 17, 0, 0, 10510, 10511, 7, 6, 0, 0, 10511, 10512, 7, 7, 0, 0, 10512, 1740, 1, 0, 0, 0, 10513, 10514, 7, 7, 0, 0, 10514, 10515, 7, 12, 0, 0, 10515, 10516, 7, 24, 0, 0, 10516, 10517, 7, 7, 0, 0, 10517, 10518, 7, 5, 0, 0, 10518, 10519, 7, 19, 0, 0, 10519, 10520, 7, 25, 0, 0, 10520, 10521, 7, 7, 0, 0, 10521, 1742, 1, 0, 0, 0, 10522, 10523, 7, 7, 0, 0, 10523, 10524, 7, 28, 0, 0, 10524, 10525, 7, 17, 0, 0, 10525, 10526, 7, 3, 0, 0, 10526, 10527, 7, 5, 0, 0, 10527, 10528, 7, 11, 0, 0, 10528, 1744, 1, 0, 0, 0, 10529, 10530, 7, 7, 0, 0, 10530, 10531, 7, 26, 0, 0, 10531, 10532, 7, 25, 0, 0, 10532, 1746, 1, 0, 0, 0, 10533, 10534, 7, 7, 0, 0, 10534, 10535, 7, 26, 0, 0, 10535, 10536, 7, 25, 0, 0, 10536, 10537, 7, 19, 0, 0, 10537, 10538, 7, 8, 0, 0, 10538, 10539, 7, 6, 0, 0, 10539, 10540, 5, 95, 0, 0, 10540, 10541, 7, 11, 0, 0, 10541, 10542, 7, 7, 0, 0, 10542, 10543, 7, 6, 0, 0, 10543, 1748, 1, 0, 0, 0, 10544, 10545, 7, 7, 0, 0, 10545, 10546, 7, 26, 0, 0, 10546, 10547, 7, 6, 0, 0, 10547, 10548, 7, 7, 0, 0, 10548, 10549, 7, 8, 0, 0, 10549, 10550, 7, 15, 0, 0, 10550, 10551, 7, 19, 0, 0, 10551, 10552, 7, 8, 0, 0, 10552, 10553, 7, 8, 0, 0, 10553, 10554, 7, 15, 0, 0, 10554, 10555, 7, 12, 0, 0, 10555, 10556, 7, 22, 0, 0, 10556, 1750, 1, 0, 0, 0, 10557, 10558, 7, 7, 0, 0, 10558, 10559, 7, 26, 0, 0, 10559, 10560, 7, 6, 0, 0, 10560, 10561, 7, 8, 0, 0, 10561, 10562, 7, 3, 0, 0, 10562, 10563, 7, 14, 0, 0, 10563, 10564, 7, 6, 0, 0, 10564, 10565, 7, 24, 0, 0, 10565, 10566, 7, 3, 0, 0, 10566, 10567, 7, 5, 0, 0, 10567, 10568, 7, 17, 0, 0, 10568, 10569, 7, 7, 0, 0, 10569, 1752, 1, 0, 0, 0, 10570, 10571, 7, 18, 0, 0, 10571, 10572, 7, 15, 0, 0, 10572, 10573, 7, 7, 0, 0, 10573, 10574, 7, 5, 0, 0, 10574, 10575, 7, 4, 0, 0, 10575, 1754, 1, 0, 0, 0, 10576, 10577, 7, 18, 0, 0, 10577, 10578, 7, 15, 0, 0, 10578, 10579, 7, 12, 0, 0, 10579, 10580, 7, 4, 0, 0, 10580, 10581, 5, 95, 0, 0, 10581, 10582, 7, 15, 0, 0, 10582, 10583, 7, 12, 0, 0, 10583, 10584, 5, 95, 0, 0, 10584, 10585, 7, 11, 0, 0, 10585, 10586, 7, 7, 0, 0, 10586, 10587, 7, 6, 0, 0, 10587, 1756, 1, 0, 0, 0, 10588, 10589, 7, 18, 0, 0, 10589, 10590, 7, 5, 0, 0, 10590, 10591, 7, 19, 0, 0, 10591, 10592, 7, 19, 0, 0, 10592, 10593, 7, 8, 0, 0, 10593, 1758, 1, 0, 0, 0, 10594, 10595, 7, 18, 0, 0, 10595, 10596, 7, 19, 0, 0, 10596, 10597, 7, 8, 0, 0, 10597, 10598, 7, 23, 0, 0, 10598, 10599, 7, 3, 0, 0, 10599, 10600, 7, 6, 0, 0, 10600, 1760, 1, 0, 0, 0, 10601, 10602, 7, 18, 0, 0, 10602, 10603, 7, 19, 0, 0, 10603, 10604, 7, 17, 0, 0, 10604, 10605, 7, 12, 0, 0, 10605, 10606, 7, 4, 0, 0, 10606, 10607, 5, 95, 0, 0, 10607, 10608, 7, 8, 0, 0, 10608, 10609, 7, 19, 0, 0, 10609, 10610, 7, 9, 0, 0, 10610, 10611, 7, 11, 0, 0, 10611, 1762, 1, 0, 0, 0, 10612, 10613, 7, 18, 0, 0, 10613, 10614, 7, 8, 0, 0, 10614, 10615, 7, 19, 0, 0, 10615, 10616, 7, 23, 0, 0, 10616, 10617, 5, 95, 0, 0, 10617, 10618, 7, 16, 0, 0, 10618, 10619, 7, 3, 0, 0, 10619, 10620, 7, 11, 0, 0, 10620, 10621, 7, 7, 0, 0, 10621, 10622, 5, 54, 0, 0, 10622, 10623, 5, 52, 0, 0, 10623, 1764, 1, 0, 0, 0, 10624, 10625, 7, 18, 0, 0, 10625, 10626, 7, 8, 0, 0, 10626, 10627, 7, 19, 0, 0, 10627, 10628, 7, 23, 0, 0, 10628, 10629, 5, 95, 0, 0, 10629, 10630, 7, 4, 0, 0, 10630, 10631, 7, 3, 0, 0, 10631, 10632, 7, 10, 0, 0, 10632, 10633, 7, 11, 0, 0, 10633, 1766, 1, 0, 0, 0, 10634, 10635, 7, 18, 0, 0, 10635, 10636, 7, 8, 0, 0, 10636, 10637, 7, 19, 0, 0, 10637, 10638, 7, 23, 0, 0, 10638, 10639, 5, 95, 0, 0, 10639, 10640, 7, 17, 0, 0, 10640, 10641, 7, 12, 0, 0, 10641, 10642, 7, 15, 0, 0, 10642, 10643, 7, 26, 0, 0, 10643, 10644, 7, 6, 0, 0, 10644, 10645, 7, 15, 0, 0, 10645, 10646, 7, 23, 0, 0, 10646, 10647, 7, 7, 0, 0, 10647, 1768, 1, 0, 0, 0, 10648, 10649, 7, 22, 0, 0, 10649, 10650, 7, 7, 0, 0, 10650, 10651, 7, 19, 0, 0, 10651, 10652, 7, 23, 0, 0, 10652, 10653, 7, 14, 0, 0, 10653, 10654, 7, 19, 0, 0, 10654, 10655, 7, 5, 0, 0, 10655, 10656, 7, 5, 0, 0, 10656, 10657, 7, 18, 0, 0, 10657, 10658, 7, 8, 0, 0, 10658, 10659, 7, 19, 0, 0, 10659, 10660, 7, 23, 0, 0, 10660, 10661, 7, 6, 0, 0, 10661, 10662, 7, 7, 0, 0, 10662, 10663, 7, 26, 0, 0, 10663, 10664, 7, 6, 0, 0, 10664, 1770, 1, 0, 0, 0, 10665, 10666, 7, 22, 0, 0, 10666, 10667, 7, 7, 0, 0, 10667, 10668, 7, 19, 0, 0, 10668, 10669, 7, 23, 0, 0, 10669, 10670, 7, 14, 0, 0, 10670, 10671, 7, 19, 0, 0, 10671, 10672, 7, 5, 0, 0, 10672, 10673, 7, 5, 0, 0, 10673, 10674, 7, 18, 0, 0, 10674, 10675, 7, 8, 0, 0, 10675, 10676, 7, 19, 0, 0, 10676, 10677, 7, 23, 0, 0, 10677, 10678, 7, 9, 0, 0, 10678, 10679, 7, 21, 0, 0, 10679, 10680, 7, 16, 0, 0, 10680, 1772, 1, 0, 0, 0, 10681, 10682, 7, 22, 0, 0, 10682, 10683, 7, 7, 0, 0, 10683, 10684, 7, 19, 0, 0, 10684, 10685, 7, 23, 0, 0, 10685, 10686, 7, 7, 0, 0, 10686, 10687, 7, 6, 0, 0, 10687, 10688, 7, 8, 0, 0, 10688, 10689, 7, 10, 0, 0, 10689, 10690, 7, 14, 0, 0, 10690, 10691, 7, 19, 0, 0, 10691, 10692, 7, 5, 0, 0, 10692, 10693, 7, 5, 0, 0, 10693, 10694, 7, 7, 0, 0, 10694, 10695, 7, 14, 0, 0, 10695, 10696, 7, 6, 0, 0, 10696, 10697, 7, 15, 0, 0, 10697, 10698, 7, 19, 0, 0, 10698, 10699, 7, 12, 0, 0, 10699, 10700, 7, 18, 0, 0, 10700, 10701, 7, 8, 0, 0, 10701, 10702, 7, 19, 0, 0, 10702, 10703, 7, 23, 0, 0, 10703, 10704, 7, 6, 0, 0, 10704, 10705, 7, 7, 0, 0, 10705, 10706, 7, 26, 0, 0, 10706, 10707, 7, 6, 0, 0, 10707, 1774, 1, 0, 0, 0, 10708, 10709, 7, 22, 0, 0, 10709, 10710, 7, 7, 0, 0, 10710, 10711, 7, 19, 0, 0, 10711, 10712, 7, 23, 0, 0, 10712, 10713, 7, 7, 0, 0, 10713, 10714, 7, 6, 0, 0, 10714, 10715, 7, 8, 0, 0, 10715, 10716, 7, 10, 0, 0, 10716, 10717, 7, 14, 0, 0, 10717, 10718, 7, 19, 0, 0, 10718, 10719, 7, 5, 0, 0, 10719, 10720, 7, 5, 0, 0, 10720, 10721, 7, 7, 0, 0, 10721, 10722, 7, 14, 0, 0, 10722, 10723, 7, 6, 0, 0, 10723, 10724, 7, 15, 0, 0, 10724, 10725, 7, 19, 0, 0, 10725, 10726, 7, 12, 0, 0, 10726, 10727, 7, 18, 0, 0, 10727, 10728, 7, 8, 0, 0, 10728, 10729, 7, 19, 0, 0, 10729, 10730, 7, 23, 0, 0, 10730, 10731, 7, 9, 0, 0, 10731, 10732, 7, 21, 0, 0, 10732, 10733, 7, 16, 0, 0, 10733, 1776, 1, 0, 0, 0, 10734, 10735, 7, 22, 0, 0, 10735, 10736, 7, 7, 0, 0, 10736, 10737, 7, 19, 0, 0, 10737, 10738, 7, 23, 0, 0, 10738, 10739, 7, 7, 0, 0, 10739, 10740, 7, 6, 0, 0, 10740, 10741, 7, 8, 0, 0, 10741, 10742, 7, 10, 0, 0, 10742, 10743, 7, 18, 0, 0, 10743, 10744, 7, 8, 0, 0, 10744, 10745, 7, 19, 0, 0, 10745, 10746, 7, 23, 0, 0, 10746, 10747, 7, 6, 0, 0, 10747, 10748, 7, 7, 0, 0, 10748, 10749, 7, 26, 0, 0, 10749, 10750, 7, 6, 0, 0, 10750, 1778, 1, 0, 0, 0, 10751, 10752, 7, 22, 0, 0, 10752, 10753, 7, 7, 0, 0, 10753, 10754, 7, 19, 0, 0, 10754, 10755, 7, 23, 0, 0, 10755, 10756, 7, 7, 0, 0, 10756, 10757, 7, 6, 0, 0, 10757, 10758, 7, 8, 0, 0, 10758, 10759, 7, 10, 0, 0, 10759, 10760, 7, 18, 0, 0, 10760, 10761, 7, 8, 0, 0, 10761, 10762, 7, 19, 0, 0, 10762, 10763, 7, 23, 0, 0, 10763, 10764, 7, 9, 0, 0, 10764, 10765, 7, 21, 0, 0, 10765, 10766, 7, 16, 0, 0, 10766, 1780, 1, 0, 0, 0, 10767, 10768, 7, 22, 0, 0, 10768, 10769, 7, 7, 0, 0, 10769, 10770, 7, 19, 0, 0, 10770, 10771, 7, 23, 0, 0, 10771, 10772, 7, 7, 0, 0, 10772, 10773, 7, 6, 0, 0, 10773, 10774, 7, 8, 0, 0, 10774, 10775, 7, 10, 0, 0, 10775, 10776, 7, 12, 0, 0, 10776, 1782, 1, 0, 0, 0, 10777, 10778, 7, 22, 0, 0, 10778, 10779, 7, 7, 0, 0, 10779, 10780, 7, 19, 0, 0, 10780, 10781, 7, 23, 0, 0, 10781, 10782, 7, 7, 0, 0, 10782, 10783, 7, 6, 0, 0, 10783, 10784, 7, 8, 0, 0, 10784, 10785, 7, 10, 0, 0, 10785, 10786, 7, 6, 0, 0, 10786, 10787, 7, 10, 0, 0, 10787, 10788, 7, 25, 0, 0, 10788, 10789, 7, 7, 0, 0, 10789, 1784, 1, 0, 0, 0, 10790, 10791, 7, 22, 0, 0, 10791, 10792, 7, 7, 0, 0, 10792, 10793, 7, 19, 0, 0, 10793, 10794, 7, 23, 0, 0, 10794, 10795, 7, 18, 0, 0, 10795, 10796, 7, 8, 0, 0, 10796, 10797, 7, 19, 0, 0, 10797, 10798, 7, 23, 0, 0, 10798, 10799, 7, 6, 0, 0, 10799, 10800, 7, 7, 0, 0, 10800, 10801, 7, 26, 0, 0, 10801, 10802, 7, 6, 0, 0, 10802, 1786, 1, 0, 0, 0, 10803, 10804, 7, 22, 0, 0, 10804, 10805, 7, 7, 0, 0, 10805, 10806, 7, 19, 0, 0, 10806, 10807, 7, 23, 0, 0, 10807, 10808, 7, 18, 0, 0, 10808, 10809, 7, 8, 0, 0, 10809, 10810, 7, 19, 0, 0, 10810, 10811, 7, 23, 0, 0, 10811, 10812, 7, 9, 0, 0, 10812, 10813, 7, 21, 0, 0, 10813, 10814, 7, 16, 0, 0, 10814, 1788, 1, 0, 0, 0, 10815, 10816, 7, 22, 0, 0, 10816, 10817, 7, 7, 0, 0, 10817, 10818, 7, 6, 0, 0, 10818, 10819, 5, 95, 0, 0, 10819, 10820, 7, 18, 0, 0, 10820, 10821, 7, 19, 0, 0, 10821, 10822, 7, 8, 0, 0, 10822, 10823, 7, 23, 0, 0, 10823, 10824, 7, 3, 0, 0, 10824, 10825, 7, 6, 0, 0, 10825, 1790, 1, 0, 0, 0, 10826, 10827, 7, 22, 0, 0, 10827, 10828, 7, 7, 0, 0, 10828, 10829, 7, 6, 0, 0, 10829, 10830, 5, 95, 0, 0, 10830, 10831, 7, 5, 0, 0, 10831, 10832, 7, 19, 0, 0, 10832, 10833, 7, 14, 0, 0, 10833, 10834, 7, 21, 0, 0, 10834, 1792, 1, 0, 0, 0, 10835, 10836, 7, 22, 0, 0, 10836, 10837, 7, 5, 0, 0, 10837, 10838, 7, 7, 0, 0, 10838, 10839, 7, 12, 0, 0, 10839, 10840, 7, 22, 0, 0, 10840, 10841, 7, 6, 0, 0, 10841, 10842, 7, 20, 0, 0, 10842, 1794, 1, 0, 0, 0, 10843, 10844, 7, 22, 0, 0, 10844, 10845, 7, 8, 0, 0, 10845, 10846, 7, 7, 0, 0, 10846, 10847, 7, 3, 0, 0, 10847, 10848, 7, 6, 0, 0, 10848, 10849, 7, 7, 0, 0, 10849, 10850, 7, 11, 0, 0, 10850, 10851, 7, 6, 0, 0, 10851, 1796, 1, 0, 0, 0, 10852, 10853, 7, 22, 0, 0, 10853, 10854, 7, 6, 0, 0, 10854, 10855, 7, 15, 0, 0, 10855, 10856, 7, 4, 0, 0, 10856, 10857, 5, 95, 0, 0, 10857, 10858, 7, 11, 0, 0, 10858, 10859, 7, 17, 0, 0, 10859, 10860, 7, 16, 0, 0, 10860, 10861, 7, 11, 0, 0, 10861, 10862, 7, 7, 0, 0, 10862, 10863, 7, 6, 0, 0, 10863, 1798, 1, 0, 0, 0, 10864, 10865, 7, 22, 0, 0, 10865, 10866, 7, 6, 0, 0, 10866, 10867, 7, 15, 0, 0, 10867, 10868, 7, 4, 0, 0, 10868, 10869, 5, 95, 0, 0, 10869, 10870, 7, 11, 0, 0, 10870, 10871, 7, 17, 0, 0, 10871, 10872, 7, 16, 0, 0, 10872, 10873, 7, 6, 0, 0, 10873, 10874, 7, 8, 0, 0, 10874, 10875, 7, 3, 0, 0, 10875, 10876, 7, 14, 0, 0, 10876, 10877, 7, 6, 0, 0, 10877, 1800, 1, 0, 0, 0, 10878, 10879, 7, 20, 0, 0, 10879, 10880, 7, 7, 0, 0, 10880, 10881, 7, 26, 0, 0, 10881, 1802, 1, 0, 0, 0, 10882, 10883, 7, 15, 0, 0, 10883, 10884, 7, 18, 0, 0, 10884, 10885, 7, 12, 0, 0, 10885, 10886, 7, 17, 0, 0, 10886, 10887, 7, 5, 0, 0, 10887, 10888, 7, 5, 0, 0, 10888, 1804, 1, 0, 0, 0, 10889, 10890, 7, 15, 0, 0, 10890, 10891, 7, 12, 0, 0, 10891, 10892, 7, 7, 0, 0, 10892, 10893, 7, 6, 0, 0, 10893, 10894, 5, 54, 0, 0, 10894, 10895, 5, 95, 0, 0, 10895, 10896, 7, 3, 0, 0, 10896, 10897, 7, 6, 0, 0, 10897, 10898, 7, 19, 0, 0, 10898, 10899, 7, 12, 0, 0, 10899, 1806, 1, 0, 0, 0, 10900, 10901, 7, 15, 0, 0, 10901, 10902, 7, 12, 0, 0, 10902, 10903, 7, 7, 0, 0, 10903, 10904, 7, 6, 0, 0, 10904, 10905, 5, 54, 0, 0, 10905, 10906, 5, 95, 0, 0, 10906, 10907, 7, 12, 0, 0, 10907, 10908, 7, 6, 0, 0, 10908, 10909, 7, 19, 0, 0, 10909, 10910, 7, 3, 0, 0, 10910, 1808, 1, 0, 0, 0, 10911, 10912, 7, 15, 0, 0, 10912, 10913, 7, 12, 0, 0, 10913, 10914, 7, 7, 0, 0, 10914, 10915, 7, 6, 0, 0, 10915, 10916, 5, 95, 0, 0, 10916, 10917, 7, 3, 0, 0, 10917, 10918, 7, 6, 0, 0, 10918, 10919, 7, 19, 0, 0, 10919, 10920, 7, 12, 0, 0, 10920, 1810, 1, 0, 0, 0, 10921, 10922, 7, 15, 0, 0, 10922, 10923, 7, 12, 0, 0, 10923, 10924, 7, 7, 0, 0, 10924, 10925, 7, 6, 0, 0, 10925, 10926, 5, 95, 0, 0, 10926, 10927, 7, 12, 0, 0, 10927, 10928, 7, 6, 0, 0, 10928, 10929, 7, 19, 0, 0, 10929, 10930, 7, 3, 0, 0, 10930, 1812, 1, 0, 0, 0, 10931, 10932, 7, 15, 0, 0, 10932, 10933, 7, 12, 0, 0, 10933, 10934, 7, 11, 0, 0, 10934, 10935, 7, 6, 0, 0, 10935, 10936, 7, 8, 0, 0, 10936, 1814, 1, 0, 0, 0, 10937, 10938, 7, 15, 0, 0, 10938, 10939, 7, 12, 0, 0, 10939, 10940, 7, 6, 0, 0, 10940, 10941, 7, 7, 0, 0, 10941, 10942, 7, 8, 0, 0, 10942, 10943, 7, 15, 0, 0, 10943, 10944, 7, 19, 0, 0, 10944, 10945, 7, 8, 0, 0, 10945, 10946, 7, 8, 0, 0, 10946, 10947, 7, 15, 0, 0, 10947, 10948, 7, 12, 0, 0, 10948, 10949, 7, 22, 0, 0, 10949, 10950, 7, 12, 0, 0, 10950, 1816, 1, 0, 0, 0, 10951, 10952, 7, 15, 0, 0, 10952, 10953, 7, 12, 0, 0, 10953, 10954, 7, 6, 0, 0, 10954, 10955, 7, 7, 0, 0, 10955, 10956, 7, 8, 0, 0, 10956, 10957, 7, 11, 0, 0, 10957, 10958, 7, 7, 0, 0, 10958, 10959, 7, 14, 0, 0, 10959, 10960, 7, 6, 0, 0, 10960, 10961, 7, 11, 0, 0, 10961, 1818, 1, 0, 0, 0, 10962, 10963, 7, 15, 0, 0, 10963, 10964, 7, 11, 0, 0, 10964, 10965, 7, 14, 0, 0, 10965, 10966, 7, 5, 0, 0, 10966, 10967, 7, 19, 0, 0, 10967, 10968, 7, 11, 0, 0, 10968, 10969, 7, 7, 0, 0, 10969, 10970, 7, 4, 0, 0, 10970, 1820, 1, 0, 0, 0, 10971, 10972, 7, 15, 0, 0, 10972, 10973, 7, 11, 0, 0, 10973, 10974, 7, 7, 0, 0, 10974, 10975, 7, 23, 0, 0, 10975, 10976, 7, 25, 0, 0, 10976, 10977, 7, 6, 0, 0, 10977, 10978, 7, 10, 0, 0, 10978, 1822, 1, 0, 0, 0, 10979, 10980, 7, 15, 0, 0, 10980, 10981, 7, 11, 0, 0, 10981, 10982, 7, 12, 0, 0, 10982, 10983, 7, 17, 0, 0, 10983, 10984, 7, 5, 0, 0, 10984, 10985, 7, 5, 0, 0, 10985, 1824, 1, 0, 0, 0, 10986, 10987, 7, 15, 0, 0, 10987, 10988, 7, 11, 0, 0, 10988, 10989, 7, 11, 0, 0, 10989, 10990, 7, 15, 0, 0, 10990, 10991, 7, 23, 0, 0, 10991, 10992, 7, 25, 0, 0, 10992, 10993, 7, 5, 0, 0, 10993, 10994, 7, 7, 0, 0, 10994, 1826, 1, 0, 0, 0, 10995, 10996, 7, 15, 0, 0, 10996, 10997, 7, 11, 0, 0, 10997, 10998, 5, 95, 0, 0, 10998, 10999, 7, 18, 0, 0, 10999, 11000, 7, 8, 0, 0, 11000, 11001, 7, 7, 0, 0, 11001, 11002, 7, 7, 0, 0, 11002, 11003, 5, 95, 0, 0, 11003, 11004, 7, 5, 0, 0, 11004, 11005, 7, 19, 0, 0, 11005, 11006, 7, 14, 0, 0, 11006, 11007, 7, 21, 0, 0, 11007, 1828, 1, 0, 0, 0, 11008, 11009, 7, 15, 0, 0, 11009, 11010, 7, 11, 0, 0, 11010, 11011, 5, 95, 0, 0, 11011, 11012, 7, 15, 0, 0, 11012, 11013, 7, 25, 0, 0, 11013, 11014, 7, 24, 0, 0, 11014, 11015, 5, 52, 0, 0, 11015, 1830, 1, 0, 0, 0, 11016, 11017, 7, 15, 0, 0, 11017, 11018, 7, 11, 0, 0, 11018, 11019, 5, 95, 0, 0, 11019, 11020, 7, 15, 0, 0, 11020, 11021, 7, 25, 0, 0, 11021, 11022, 7, 24, 0, 0, 11022, 11023, 5, 52, 0, 0, 11023, 11024, 5, 95, 0, 0, 11024, 11025, 7, 14, 0, 0, 11025, 11026, 7, 19, 0, 0, 11026, 11027, 7, 23, 0, 0, 11027, 11028, 7, 25, 0, 0, 11028, 11029, 7, 3, 0, 0, 11029, 11030, 7, 6, 0, 0, 11030, 1832, 1, 0, 0, 0, 11031, 11032, 7, 15, 0, 0, 11032, 11033, 7, 11, 0, 0, 11033, 11034, 5, 95, 0, 0, 11034, 11035, 7, 15, 0, 0, 11035, 11036, 7, 25, 0, 0, 11036, 11037, 7, 24, 0, 0, 11037, 11038, 5, 52, 0, 0, 11038, 11039, 5, 95, 0, 0, 11039, 11040, 7, 23, 0, 0, 11040, 11041, 7, 3, 0, 0, 11041, 11042, 7, 25, 0, 0, 11042, 11043, 7, 25, 0, 0, 11043, 11044, 7, 7, 0, 0, 11044, 11045, 7, 4, 0, 0, 11045, 1834, 1, 0, 0, 0, 11046, 11047, 7, 15, 0, 0, 11047, 11048, 7, 11, 0, 0, 11048, 11049, 5, 95, 0, 0, 11049, 11050, 7, 15, 0, 0, 11050, 11051, 7, 25, 0, 0, 11051, 11052, 7, 24, 0, 0, 11052, 11053, 5, 54, 0, 0, 11053, 1836, 1, 0, 0, 0, 11054, 11055, 7, 15, 0, 0, 11055, 11056, 7, 11, 0, 0, 11056, 11057, 5, 95, 0, 0, 11057, 11058, 7, 17, 0, 0, 11058, 11059, 7, 11, 0, 0, 11059, 11060, 7, 7, 0, 0, 11060, 11061, 7, 4, 0, 0, 11061, 11062, 5, 95, 0, 0, 11062, 11063, 7, 5, 0, 0, 11063, 11064, 7, 19, 0, 0, 11064, 11065, 7, 14, 0, 0, 11065, 11066, 7, 21, 0, 0, 11066, 1838, 1, 0, 0, 0, 11067, 11068, 7, 5, 0, 0, 11068, 11069, 7, 3, 0, 0, 11069, 11070, 7, 11, 0, 0, 11070, 11071, 7, 6, 0, 0, 11071, 11072, 5, 95, 0, 0, 11072, 11073, 7, 15, 0, 0, 11073, 11074, 7, 12, 0, 0, 11074, 11075, 7, 11, 0, 0, 11075, 11076, 7, 7, 0, 0, 11076, 11077, 7, 8, 0, 0, 11077, 11078, 7, 6, 0, 0, 11078, 11079, 5, 95, 0, 0, 11079, 11080, 7, 15, 0, 0, 11080, 11081, 7, 4, 0, 0, 11081, 1840, 1, 0, 0, 0, 11082, 11083, 7, 5, 0, 0, 11083, 11084, 7, 14, 0, 0, 11084, 11085, 7, 3, 0, 0, 11085, 11086, 7, 11, 0, 0, 11086, 11087, 7, 7, 0, 0, 11087, 1842, 1, 0, 0, 0, 11088, 11089, 7, 5, 0, 0, 11089, 11090, 7, 7, 0, 0, 11090, 11091, 7, 3, 0, 0, 11091, 11092, 7, 11, 0, 0, 11092, 11093, 7, 6, 0, 0, 11093, 1844, 1, 0, 0, 0, 11094, 11095, 7, 5, 0, 0, 11095, 11096, 7, 7, 0, 0, 11096, 11097, 7, 12, 0, 0, 11097, 11098, 7, 22, 0, 0, 11098, 11099, 7, 6, 0, 0, 11099, 11100, 7, 20, 0, 0, 11100, 1846, 1, 0, 0, 0, 11101, 11102, 7, 5, 0, 0, 11102, 11103, 7, 15, 0, 0, 11103, 11104, 7, 12, 0, 0, 11104, 11105, 7, 7, 0, 0, 11105, 11106, 7, 18, 0, 0, 11106, 11107, 7, 8, 0, 0, 11107, 11108, 7, 19, 0, 0, 11108, 11109, 7, 23, 0, 0, 11109, 11110, 7, 6, 0, 0, 11110, 11111, 7, 7, 0, 0, 11111, 11112, 7, 26, 0, 0, 11112, 11113, 7, 6, 0, 0, 11113, 1848, 1, 0, 0, 0, 11114, 11115, 7, 5, 0, 0, 11115, 11116, 7, 15, 0, 0, 11116, 11117, 7, 12, 0, 0, 11117, 11118, 7, 7, 0, 0, 11118, 11119, 7, 18, 0, 0, 11119, 11120, 7, 8, 0, 0, 11120, 11121, 7, 19, 0, 0, 11121, 11122, 7, 23, 0, 0, 11122, 11123, 7, 9, 0, 0, 11123, 11124, 7, 21, 0, 0, 11124, 11125, 7, 16, 0, 0, 11125, 1850, 1, 0, 0, 0, 11126, 11127, 7, 5, 0, 0, 11127, 11128, 7, 15, 0, 0, 11128, 11129, 7, 12, 0, 0, 11129, 11130, 7, 7, 0, 0, 11130, 11131, 7, 11, 0, 0, 11131, 11132, 7, 6, 0, 0, 11132, 11133, 7, 8, 0, 0, 11133, 11134, 7, 15, 0, 0, 11134, 11135, 7, 12, 0, 0, 11135, 11136, 7, 22, 0, 0, 11136, 11137, 7, 18, 0, 0, 11137, 11138, 7, 8, 0, 0, 11138, 11139, 7, 19, 0, 0, 11139, 11140, 7, 23, 0, 0, 11140, 11141, 7, 6, 0, 0, 11141, 11142, 7, 7, 0, 0, 11142, 11143, 7, 26, 0, 0, 11143, 11144, 7, 6, 0, 0, 11144, 1852, 1, 0, 0, 0, 11145, 11146, 7, 5, 0, 0, 11146, 11147, 7, 15, 0, 0, 11147, 11148, 7, 12, 0, 0, 11148, 11149, 7, 7, 0, 0, 11149, 11150, 7, 11, 0, 0, 11150, 11151, 7, 6, 0, 0, 11151, 11152, 7, 8, 0, 0, 11152, 11153, 7, 15, 0, 0, 11153, 11154, 7, 12, 0, 0, 11154, 11155, 7, 22, 0, 0, 11155, 11156, 7, 18, 0, 0, 11156, 11157, 7, 8, 0, 0, 11157, 11158, 7, 19, 0, 0, 11158, 11159, 7, 23, 0, 0, 11159, 11160, 7, 9, 0, 0, 11160, 11161, 7, 21, 0, 0, 11161, 11162, 7, 16, 0, 0, 11162, 1854, 1, 0, 0, 0, 11163, 11164, 7, 5, 0, 0, 11164, 11165, 7, 12, 0, 0, 11165, 1856, 1, 0, 0, 0, 11166, 11167, 7, 5, 0, 0, 11167, 11168, 7, 19, 0, 0, 11168, 11169, 7, 3, 0, 0, 11169, 11170, 7, 4, 0, 0, 11170, 11171, 5, 95, 0, 0, 11171, 11172, 7, 18, 0, 0, 11172, 11173, 7, 15, 0, 0, 11173, 11174, 7, 5, 0, 0, 11174, 11175, 7, 7, 0, 0, 11175, 1858, 1, 0, 0, 0, 11176, 11177, 7, 5, 0, 0, 11177, 11178, 7, 19, 0, 0, 11178, 11179, 7, 14, 0, 0, 11179, 11180, 7, 3, 0, 0, 11180, 11181, 7, 6, 0, 0, 11181, 11182, 7, 7, 0, 0, 11182, 1860, 1, 0, 0, 0, 11183, 11184, 7, 5, 0, 0, 11184, 11185, 7, 19, 0, 0, 11185, 11186, 7, 22, 0, 0, 11186, 1862, 1, 0, 0, 0, 11187, 11188, 7, 5, 0, 0, 11188, 11189, 7, 19, 0, 0, 11189, 11190, 7, 22, 0, 0, 11190, 11191, 5, 49, 0, 0, 11191, 11192, 5, 48, 0, 0, 11192, 1864, 1, 0, 0, 0, 11193, 11194, 7, 5, 0, 0, 11194, 11195, 7, 19, 0, 0, 11195, 11196, 7, 22, 0, 0, 11196, 11197, 5, 50, 0, 0, 11197, 1866, 1, 0, 0, 0, 11198, 11199, 7, 5, 0, 0, 11199, 11200, 7, 19, 0, 0, 11200, 11201, 7, 9, 0, 0, 11201, 11202, 7, 7, 0, 0, 11202, 11203, 7, 8, 0, 0, 11203, 1868, 1, 0, 0, 0, 11204, 11205, 7, 5, 0, 0, 11205, 11206, 7, 25, 0, 0, 11206, 11207, 7, 3, 0, 0, 11207, 11208, 7, 4, 0, 0, 11208, 1870, 1, 0, 0, 0, 11209, 11210, 7, 5, 0, 0, 11210, 11211, 7, 6, 0, 0, 11211, 11212, 7, 8, 0, 0, 11212, 11213, 7, 15, 0, 0, 11213, 11214, 7, 23, 0, 0, 11214, 1872, 1, 0, 0, 0, 11215, 11216, 7, 23, 0, 0, 11216, 11217, 7, 3, 0, 0, 11217, 11218, 7, 21, 0, 0, 11218, 11219, 7, 7, 0, 0, 11219, 11220, 7, 4, 0, 0, 11220, 11221, 7, 3, 0, 0, 11221, 11222, 7, 6, 0, 0, 11222, 11223, 7, 7, 0, 0, 11223, 1874, 1, 0, 0, 0, 11224, 11225, 7, 23, 0, 0, 11225, 11226, 7, 3, 0, 0, 11226, 11227, 7, 21, 0, 0, 11227, 11228, 7, 7, 0, 0, 11228, 11229, 7, 6, 0, 0, 11229, 11230, 7, 15, 0, 0, 11230, 11231, 7, 23, 0, 0, 11231, 11232, 7, 7, 0, 0, 11232, 1876, 1, 0, 0, 0, 11233, 11234, 7, 23, 0, 0, 11234, 11235, 7, 3, 0, 0, 11235, 11236, 7, 21, 0, 0, 11236, 11237, 7, 7, 0, 0, 11237, 11238, 5, 95, 0, 0, 11238, 11239, 7, 11, 0, 0, 11239, 11240, 7, 7, 0, 0, 11240, 11241, 7, 6, 0, 0, 11241, 1878, 1, 0, 0, 0, 11242, 11243, 7, 23, 0, 0, 11243, 11244, 7, 3, 0, 0, 11244, 11245, 7, 11, 0, 0, 11245, 11246, 7, 6, 0, 0, 11246, 11247, 7, 7, 0, 0, 11247, 11248, 7, 8, 0, 0, 11248, 11249, 5, 95, 0, 0, 11249, 11250, 7, 25, 0, 0, 11250, 11251, 7, 19, 0, 0, 11251, 11252, 7, 11, 0, 0, 11252, 11253, 5, 95, 0, 0, 11253, 11254, 7, 9, 0, 0, 11254, 11255, 7, 3, 0, 0, 11255, 11256, 7, 15, 0, 0, 11256, 11257, 7, 6, 0, 0, 11257, 1880, 1, 0, 0, 0, 11258, 11259, 7, 23, 0, 0, 11259, 11260, 7, 16, 0, 0, 11260, 11261, 7, 8, 0, 0, 11261, 11262, 7, 14, 0, 0, 11262, 11263, 7, 19, 0, 0, 11263, 11264, 7, 12, 0, 0, 11264, 11265, 7, 6, 0, 0, 11265, 11266, 7, 3, 0, 0, 11266, 11267, 7, 15, 0, 0, 11267, 11268, 7, 12, 0, 0, 11268, 11269, 7, 11, 0, 0, 11269, 1882, 1, 0, 0, 0, 11270, 11271, 7, 23, 0, 0, 11271, 11272, 7, 16, 0, 0, 11272, 11273, 7, 8, 0, 0, 11273, 11274, 7, 4, 0, 0, 11274, 11275, 7, 15, 0, 0, 11275, 11276, 7, 11, 0, 0, 11276, 11277, 7, 27, 0, 0, 11277, 11278, 7, 19, 0, 0, 11278, 11279, 7, 15, 0, 0, 11279, 11280, 7, 12, 0, 0, 11280, 11281, 7, 6, 0, 0, 11281, 1884, 1, 0, 0, 0, 11282, 11283, 7, 23, 0, 0, 11283, 11284, 7, 16, 0, 0, 11284, 11285, 7, 8, 0, 0, 11285, 11286, 7, 7, 0, 0, 11286, 11287, 7, 28, 0, 0, 11287, 11288, 7, 17, 0, 0, 11288, 11289, 7, 3, 0, 0, 11289, 11290, 7, 5, 0, 0, 11290, 1886, 1, 0, 0, 0, 11291, 11292, 7, 23, 0, 0, 11292, 11293, 7, 16, 0, 0, 11293, 11294, 7, 8, 0, 0, 11294, 11295, 7, 15, 0, 0, 11295, 11296, 7, 12, 0, 0, 11296, 11297, 7, 6, 0, 0, 11297, 11298, 7, 7, 0, 0, 11298, 11299, 7, 8, 0, 0, 11299, 11300, 7, 11, 0, 0, 11300, 11301, 7, 7, 0, 0, 11301, 11302, 7, 14, 0, 0, 11302, 11303, 7, 6, 0, 0, 11303, 11304, 7, 11, 0, 0, 11304, 1888, 1, 0, 0, 0, 11305, 11306, 7, 23, 0, 0, 11306, 11307, 7, 16, 0, 0, 11307, 11308, 7, 8, 0, 0, 11308, 11309, 7, 19, 0, 0, 11309, 11310, 7, 24, 0, 0, 11310, 11311, 7, 7, 0, 0, 11311, 11312, 7, 8, 0, 0, 11312, 11313, 7, 5, 0, 0, 11313, 11314, 7, 3, 0, 0, 11314, 11315, 7, 25, 0, 0, 11315, 11316, 7, 11, 0, 0, 11316, 1890, 1, 0, 0, 0, 11317, 11318, 7, 23, 0, 0, 11318, 11319, 7, 16, 0, 0, 11319, 11320, 7, 8, 0, 0, 11320, 11321, 7, 6, 0, 0, 11321, 11322, 7, 19, 0, 0, 11322, 11323, 7, 17, 0, 0, 11323, 11324, 7, 14, 0, 0, 11324, 11325, 7, 20, 0, 0, 11325, 11326, 7, 7, 0, 0, 11326, 11327, 7, 11, 0, 0, 11327, 1892, 1, 0, 0, 0, 11328, 11329, 7, 23, 0, 0, 11329, 11330, 7, 16, 0, 0, 11330, 11331, 7, 8, 0, 0, 11331, 11332, 7, 9, 0, 0, 11332, 11333, 7, 15, 0, 0, 11333, 11334, 7, 6, 0, 0, 11334, 11335, 7, 20, 0, 0, 11335, 11336, 7, 15, 0, 0, 11336, 11337, 7, 12, 0, 0, 11337, 1894, 1, 0, 0, 0, 11338, 11339, 7, 23, 0, 0, 11339, 11340, 7, 4, 0, 0, 11340, 11341, 5, 53, 0, 0, 11341, 1896, 1, 0, 0, 0, 11342, 11343, 7, 23, 0, 0, 11343, 11344, 7, 5, 0, 0, 11344, 11345, 7, 15, 0, 0, 11345, 11346, 7, 12, 0, 0, 11346, 11347, 7, 7, 0, 0, 11347, 11348, 7, 18, 0, 0, 11348, 11349, 7, 8, 0, 0, 11349, 11350, 7, 19, 0, 0, 11350, 11351, 7, 23, 0, 0, 11351, 11352, 7, 6, 0, 0, 11352, 11353, 7, 7, 0, 0, 11353, 11354, 7, 26, 0, 0, 11354, 11355, 7, 6, 0, 0, 11355, 1898, 1, 0, 0, 0, 11356, 11357, 7, 23, 0, 0, 11357, 11358, 7, 5, 0, 0, 11358, 11359, 7, 15, 0, 0, 11359, 11360, 7, 12, 0, 0, 11360, 11361, 7, 7, 0, 0, 11361, 11362, 7, 18, 0, 0, 11362, 11363, 7, 8, 0, 0, 11363, 11364, 7, 19, 0, 0, 11364, 11365, 7, 23, 0, 0, 11365, 11366, 7, 9, 0, 0, 11366, 11367, 7, 21, 0, 0, 11367, 11368, 7, 16, 0, 0, 11368, 1900, 1, 0, 0, 0, 11369, 11370, 7, 23, 0, 0, 11370, 11371, 7, 19, 0, 0, 11371, 11372, 7, 12, 0, 0, 11372, 11373, 7, 6, 0, 0, 11373, 11374, 7, 20, 0, 0, 11374, 11375, 7, 12, 0, 0, 11375, 11376, 7, 3, 0, 0, 11376, 11377, 7, 23, 0, 0, 11377, 11378, 7, 7, 0, 0, 11378, 1902, 1, 0, 0, 0, 11379, 11380, 7, 23, 0, 0, 11380, 11381, 7, 25, 0, 0, 11381, 11382, 7, 19, 0, 0, 11382, 11383, 7, 15, 0, 0, 11383, 11384, 7, 12, 0, 0, 11384, 11385, 7, 6, 0, 0, 11385, 11386, 7, 18, 0, 0, 11386, 11387, 7, 8, 0, 0, 11387, 11388, 7, 19, 0, 0, 11388, 11389, 7, 23, 0, 0, 11389, 11390, 7, 6, 0, 0, 11390, 11391, 7, 7, 0, 0, 11391, 11392, 7, 26, 0, 0, 11392, 11393, 7, 6, 0, 0, 11393, 1904, 1, 0, 0, 0, 11394, 11395, 7, 23, 0, 0, 11395, 11396, 7, 25, 0, 0, 11396, 11397, 7, 19, 0, 0, 11397, 11398, 7, 15, 0, 0, 11398, 11399, 7, 12, 0, 0, 11399, 11400, 7, 6, 0, 0, 11400, 11401, 7, 18, 0, 0, 11401, 11402, 7, 8, 0, 0, 11402, 11403, 7, 19, 0, 0, 11403, 11404, 7, 23, 0, 0, 11404, 11405, 7, 9, 0, 0, 11405, 11406, 7, 21, 0, 0, 11406, 11407, 7, 16, 0, 0, 11407, 1906, 1, 0, 0, 0, 11408, 11409, 7, 23, 0, 0, 11409, 11410, 7, 25, 0, 0, 11410, 11411, 7, 19, 0, 0, 11411, 11412, 7, 5, 0, 0, 11412, 11413, 7, 10, 0, 0, 11413, 11414, 7, 18, 0, 0, 11414, 11415, 7, 8, 0, 0, 11415, 11416, 7, 19, 0, 0, 11416, 11417, 7, 23, 0, 0, 11417, 11418, 7, 6, 0, 0, 11418, 11419, 7, 7, 0, 0, 11419, 11420, 7, 26, 0, 0, 11420, 11421, 7, 6, 0, 0, 11421, 1908, 1, 0, 0, 0, 11422, 11423, 7, 23, 0, 0, 11423, 11424, 7, 25, 0, 0, 11424, 11425, 7, 19, 0, 0, 11425, 11426, 7, 5, 0, 0, 11426, 11427, 7, 10, 0, 0, 11427, 11428, 7, 18, 0, 0, 11428, 11429, 7, 8, 0, 0, 11429, 11430, 7, 19, 0, 0, 11430, 11431, 7, 23, 0, 0, 11431, 11432, 7, 9, 0, 0, 11432, 11433, 7, 21, 0, 0, 11433, 11434, 7, 16, 0, 0, 11434, 1910, 1, 0, 0, 0, 11435, 11436, 7, 23, 0, 0, 11436, 11437, 7, 17, 0, 0, 11437, 11438, 7, 5, 0, 0, 11438, 11439, 7, 6, 0, 0, 11439, 11440, 7, 15, 0, 0, 11440, 11441, 7, 5, 0, 0, 11441, 11442, 7, 15, 0, 0, 11442, 11443, 7, 12, 0, 0, 11443, 11444, 7, 7, 0, 0, 11444, 11445, 7, 11, 0, 0, 11445, 11446, 7, 6, 0, 0, 11446, 11447, 7, 8, 0, 0, 11447, 11448, 7, 15, 0, 0, 11448, 11449, 7, 12, 0, 0, 11449, 11450, 7, 22, 0, 0, 11450, 11451, 7, 18, 0, 0, 11451, 11452, 7, 8, 0, 0, 11452, 11453, 7, 19, 0, 0, 11453, 11454, 7, 23, 0, 0, 11454, 11455, 7, 6, 0, 0, 11455, 11456, 7, 7, 0, 0, 11456, 11457, 7, 26, 0, 0, 11457, 11458, 7, 6, 0, 0, 11458, 1912, 1, 0, 0, 0, 11459, 11460, 7, 23, 0, 0, 11460, 11461, 7, 17, 0, 0, 11461, 11462, 7, 5, 0, 0, 11462, 11463, 7, 6, 0, 0, 11463, 11464, 7, 15, 0, 0, 11464, 11465, 7, 5, 0, 0, 11465, 11466, 7, 15, 0, 0, 11466, 11467, 7, 12, 0, 0, 11467, 11468, 7, 7, 0, 0, 11468, 11469, 7, 11, 0, 0, 11469, 11470, 7, 6, 0, 0, 11470, 11471, 7, 8, 0, 0, 11471, 11472, 7, 15, 0, 0, 11472, 11473, 7, 12, 0, 0, 11473, 11474, 7, 22, 0, 0, 11474, 11475, 7, 18, 0, 0, 11475, 11476, 7, 8, 0, 0, 11476, 11477, 7, 19, 0, 0, 11477, 11478, 7, 23, 0, 0, 11478, 11479, 7, 9, 0, 0, 11479, 11480, 7, 21, 0, 0, 11480, 11481, 7, 16, 0, 0, 11481, 1914, 1, 0, 0, 0, 11482, 11483, 7, 23, 0, 0, 11483, 11484, 7, 17, 0, 0, 11484, 11485, 7, 5, 0, 0, 11485, 11486, 7, 6, 0, 0, 11486, 11487, 7, 15, 0, 0, 11487, 11488, 7, 25, 0, 0, 11488, 11489, 7, 19, 0, 0, 11489, 11490, 7, 15, 0, 0, 11490, 11491, 7, 12, 0, 0, 11491, 11492, 7, 6, 0, 0, 11492, 11493, 7, 18, 0, 0, 11493, 11494, 7, 8, 0, 0, 11494, 11495, 7, 19, 0, 0, 11495, 11496, 7, 23, 0, 0, 11496, 11497, 7, 6, 0, 0, 11497, 11498, 7, 7, 0, 0, 11498, 11499, 7, 26, 0, 0, 11499, 11500, 7, 6, 0, 0, 11500, 1916, 1, 0, 0, 0, 11501, 11502, 7, 23, 0, 0, 11502, 11503, 7, 17, 0, 0, 11503, 11504, 7, 5, 0, 0, 11504, 11505, 7, 6, 0, 0, 11505, 11506, 7, 15, 0, 0, 11506, 11507, 7, 25, 0, 0, 11507, 11508, 7, 19, 0, 0, 11508, 11509, 7, 15, 0, 0, 11509, 11510, 7, 12, 0, 0, 11510, 11511, 7, 6, 0, 0, 11511, 11512, 7, 18, 0, 0, 11512, 11513, 7, 8, 0, 0, 11513, 11514, 7, 19, 0, 0, 11514, 11515, 7, 23, 0, 0, 11515, 11516, 7, 9, 0, 0, 11516, 11517, 7, 21, 0, 0, 11517, 11518, 7, 16, 0, 0, 11518, 1918, 1, 0, 0, 0, 11519, 11520, 7, 23, 0, 0, 11520, 11521, 7, 17, 0, 0, 11521, 11522, 7, 5, 0, 0, 11522, 11523, 7, 6, 0, 0, 11523, 11524, 7, 15, 0, 0, 11524, 11525, 7, 25, 0, 0, 11525, 11526, 7, 19, 0, 0, 11526, 11527, 7, 5, 0, 0, 11527, 11528, 7, 10, 0, 0, 11528, 11529, 7, 22, 0, 0, 11529, 11530, 7, 19, 0, 0, 11530, 11531, 7, 12, 0, 0, 11531, 11532, 7, 18, 0, 0, 11532, 11533, 7, 8, 0, 0, 11533, 11534, 7, 19, 0, 0, 11534, 11535, 7, 23, 0, 0, 11535, 11536, 7, 6, 0, 0, 11536, 11537, 7, 7, 0, 0, 11537, 11538, 7, 26, 0, 0, 11538, 11539, 7, 6, 0, 0, 11539, 1920, 1, 0, 0, 0, 11540, 11541, 7, 23, 0, 0, 11541, 11542, 7, 17, 0, 0, 11542, 11543, 7, 5, 0, 0, 11543, 11544, 7, 6, 0, 0, 11544, 11545, 7, 15, 0, 0, 11545, 11546, 7, 25, 0, 0, 11546, 11547, 7, 19, 0, 0, 11547, 11548, 7, 5, 0, 0, 11548, 11549, 7, 10, 0, 0, 11549, 11550, 7, 22, 0, 0, 11550, 11551, 7, 19, 0, 0, 11551, 11552, 7, 12, 0, 0, 11552, 11553, 7, 18, 0, 0, 11553, 11554, 7, 8, 0, 0, 11554, 11555, 7, 19, 0, 0, 11555, 11556, 7, 23, 0, 0, 11556, 11557, 7, 9, 0, 0, 11557, 11558, 7, 21, 0, 0, 11558, 11559, 7, 16, 0, 0, 11559, 1922, 1, 0, 0, 0, 11560, 11561, 7, 12, 0, 0, 11561, 11562, 7, 3, 0, 0, 11562, 11563, 7, 23, 0, 0, 11563, 11564, 7, 7, 0, 0, 11564, 11565, 5, 95, 0, 0, 11565, 11566, 7, 14, 0, 0, 11566, 11567, 7, 19, 0, 0, 11567, 11568, 7, 12, 0, 0, 11568, 11569, 7, 11, 0, 0, 11569, 11570, 7, 6, 0, 0, 11570, 1924, 1, 0, 0, 0, 11571, 11572, 7, 12, 0, 0, 11572, 11573, 7, 17, 0, 0, 11573, 11574, 7, 5, 0, 0, 11574, 11575, 7, 5, 0, 0, 11575, 11576, 7, 15, 0, 0, 11576, 11577, 7, 18, 0, 0, 11577, 1926, 1, 0, 0, 0, 11578, 11579, 7, 12, 0, 0, 11579, 11580, 7, 17, 0, 0, 11580, 11581, 7, 23, 0, 0, 11581, 11582, 7, 22, 0, 0, 11582, 11583, 7, 7, 0, 0, 11583, 11584, 7, 19, 0, 0, 11584, 11585, 7, 23, 0, 0, 11585, 11586, 7, 7, 0, 0, 11586, 11587, 7, 6, 0, 0, 11587, 11588, 7, 8, 0, 0, 11588, 11589, 7, 15, 0, 0, 11589, 11590, 7, 7, 0, 0, 11590, 11591, 7, 11, 0, 0, 11591, 1928, 1, 0, 0, 0, 11592, 11593, 7, 12, 0, 0, 11593, 11594, 7, 17, 0, 0, 11594, 11595, 7, 23, 0, 0, 11595, 11596, 7, 15, 0, 0, 11596, 11597, 7, 12, 0, 0, 11597, 11598, 7, 6, 0, 0, 11598, 11599, 7, 7, 0, 0, 11599, 11600, 7, 8, 0, 0, 11600, 11601, 7, 15, 0, 0, 11601, 11602, 7, 19, 0, 0, 11602, 11603, 7, 8, 0, 0, 11603, 11604, 7, 8, 0, 0, 11604, 11605, 7, 15, 0, 0, 11605, 11606, 7, 12, 0, 0, 11606, 11607, 7, 22, 0, 0, 11607, 11608, 7, 11, 0, 0, 11608, 1930, 1, 0, 0, 0, 11609, 11610, 7, 12, 0, 0, 11610, 11611, 7, 17, 0, 0, 11611, 11612, 7, 23, 0, 0, 11612, 11613, 7, 25, 0, 0, 11613, 11614, 7, 19, 0, 0, 11614, 11615, 7, 15, 0, 0, 11615, 11616, 7, 12, 0, 0, 11616, 11617, 7, 6, 0, 0, 11617, 11618, 7, 11, 0, 0, 11618, 1932, 1, 0, 0, 0, 11619, 11620, 7, 19, 0, 0, 11620, 11621, 7, 14, 0, 0, 11621, 11622, 7, 6, 0, 0, 11622, 1934, 1, 0, 0, 0, 11623, 11624, 7, 19, 0, 0, 11624, 11625, 7, 14, 0, 0, 11625, 11626, 7, 6, 0, 0, 11626, 11627, 7, 7, 0, 0, 11627, 11628, 7, 6, 0, 0, 11628, 11629, 5, 95, 0, 0, 11629, 11630, 7, 5, 0, 0, 11630, 11631, 7, 7, 0, 0, 11631, 11632, 7, 12, 0, 0, 11632, 11633, 7, 22, 0, 0, 11633, 11634, 7, 6, 0, 0, 11634, 11635, 7, 20, 0, 0, 11635, 1936, 1, 0, 0, 0, 11636, 11637, 7, 19, 0, 0, 11637, 11638, 7, 8, 0, 0, 11638, 11639, 7, 4, 0, 0, 11639, 1938, 1, 0, 0, 0, 11640, 11641, 7, 19, 0, 0, 11641, 11642, 7, 24, 0, 0, 11642, 11643, 7, 7, 0, 0, 11643, 11644, 7, 8, 0, 0, 11644, 11645, 7, 5, 0, 0, 11645, 11646, 7, 3, 0, 0, 11646, 11647, 7, 25, 0, 0, 11647, 11648, 7, 11, 0, 0, 11648, 1940, 1, 0, 0, 0, 11649, 11650, 7, 25, 0, 0, 11650, 11651, 7, 7, 0, 0, 11651, 11652, 7, 8, 0, 0, 11652, 11653, 7, 15, 0, 0, 11653, 11654, 7, 19, 0, 0, 11654, 11655, 7, 4, 0, 0, 11655, 11656, 5, 95, 0, 0, 11656, 11657, 7, 3, 0, 0, 11657, 11658, 7, 4, 0, 0, 11658, 11659, 7, 4, 0, 0, 11659, 1942, 1, 0, 0, 0, 11660, 11661, 7, 25, 0, 0, 11661, 11662, 7, 7, 0, 0, 11662, 11663, 7, 8, 0, 0, 11663, 11664, 7, 15, 0, 0, 11664, 11665, 7, 19, 0, 0, 11665, 11666, 7, 4, 0, 0, 11666, 11667, 5, 95, 0, 0, 11667, 11668, 7, 4, 0, 0, 11668, 11669, 7, 15, 0, 0, 11669, 11670, 7, 18, 0, 0, 11670, 11671, 7, 18, 0, 0, 11671, 1944, 1, 0, 0, 0, 11672, 11673, 7, 25, 0, 0, 11673, 11674, 7, 15, 0, 0, 11674, 1946, 1, 0, 0, 0, 11675, 11676, 7, 25, 0, 0, 11676, 11677, 7, 19, 0, 0, 11677, 11678, 7, 15, 0, 0, 11678, 11679, 7, 12, 0, 0, 11679, 11680, 7, 6, 0, 0, 11680, 11681, 7, 18, 0, 0, 11681, 11682, 7, 8, 0, 0, 11682, 11683, 7, 19, 0, 0, 11683, 11684, 7, 23, 0, 0, 11684, 11685, 7, 6, 0, 0, 11685, 11686, 7, 7, 0, 0, 11686, 11687, 7, 26, 0, 0, 11687, 11688, 7, 6, 0, 0, 11688, 1948, 1, 0, 0, 0, 11689, 11690, 7, 25, 0, 0, 11690, 11691, 7, 19, 0, 0, 11691, 11692, 7, 15, 0, 0, 11692, 11693, 7, 12, 0, 0, 11693, 11694, 7, 6, 0, 0, 11694, 11695, 7, 18, 0, 0, 11695, 11696, 7, 8, 0, 0, 11696, 11697, 7, 19, 0, 0, 11697, 11698, 7, 23, 0, 0, 11698, 11699, 7, 9, 0, 0, 11699, 11700, 7, 21, 0, 0, 11700, 11701, 7, 16, 0, 0, 11701, 1950, 1, 0, 0, 0, 11702, 11703, 7, 25, 0, 0, 11703, 11704, 7, 19, 0, 0, 11704, 11705, 7, 15, 0, 0, 11705, 11706, 7, 12, 0, 0, 11706, 11707, 7, 6, 0, 0, 11707, 11708, 7, 12, 0, 0, 11708, 1952, 1, 0, 0, 0, 11709, 11710, 7, 25, 0, 0, 11710, 11711, 7, 19, 0, 0, 11711, 11712, 7, 5, 0, 0, 11712, 11713, 7, 10, 0, 0, 11713, 11714, 7, 18, 0, 0, 11714, 11715, 7, 8, 0, 0, 11715, 11716, 7, 19, 0, 0, 11716, 11717, 7, 23, 0, 0, 11717, 11718, 7, 6, 0, 0, 11718, 11719, 7, 7, 0, 0, 11719, 11720, 7, 26, 0, 0, 11720, 11721, 7, 6, 0, 0, 11721, 1954, 1, 0, 0, 0, 11722, 11723, 7, 25, 0, 0, 11723, 11724, 7, 19, 0, 0, 11724, 11725, 7, 5, 0, 0, 11725, 11726, 7, 10, 0, 0, 11726, 11727, 7, 18, 0, 0, 11727, 11728, 7, 8, 0, 0, 11728, 11729, 7, 19, 0, 0, 11729, 11730, 7, 23, 0, 0, 11730, 11731, 7, 9, 0, 0, 11731, 11732, 7, 21, 0, 0, 11732, 11733, 7, 16, 0, 0, 11733, 1956, 1, 0, 0, 0, 11734, 11735, 7, 25, 0, 0, 11735, 11736, 7, 19, 0, 0, 11736, 11737, 7, 5, 0, 0, 11737, 11738, 7, 10, 0, 0, 11738, 11739, 7, 22, 0, 0, 11739, 11740, 7, 19, 0, 0, 11740, 11741, 7, 12, 0, 0, 11741, 11742, 7, 18, 0, 0, 11742, 11743, 7, 8, 0, 0, 11743, 11744, 7, 19, 0, 0, 11744, 11745, 7, 23, 0, 0, 11745, 11746, 7, 6, 0, 0, 11746, 11747, 7, 7, 0, 0, 11747, 11748, 7, 26, 0, 0, 11748, 11749, 7, 6, 0, 0, 11749, 1958, 1, 0, 0, 0, 11750, 11751, 7, 25, 0, 0, 11751, 11752, 7, 19, 0, 0, 11752, 11753, 7, 5, 0, 0, 11753, 11754, 7, 10, 0, 0, 11754, 11755, 7, 22, 0, 0, 11755, 11756, 7, 19, 0, 0, 11756, 11757, 7, 12, 0, 0, 11757, 11758, 7, 18, 0, 0, 11758, 11759, 7, 8, 0, 0, 11759, 11760, 7, 19, 0, 0, 11760, 11761, 7, 23, 0, 0, 11761, 11762, 7, 9, 0, 0, 11762, 11763, 7, 21, 0, 0, 11763, 11764, 7, 16, 0, 0, 11764, 1960, 1, 0, 0, 0, 11765, 11766, 7, 25, 0, 0, 11766, 11767, 7, 19, 0, 0, 11767, 11768, 7, 9, 0, 0, 11768, 1962, 1, 0, 0, 0, 11769, 11770, 7, 25, 0, 0, 11770, 11771, 7, 19, 0, 0, 11771, 11772, 7, 9, 0, 0, 11772, 11773, 7, 7, 0, 0, 11773, 11774, 7, 8, 0, 0, 11774, 1964, 1, 0, 0, 0, 11775, 11776, 7, 28, 0, 0, 11776, 11777, 7, 17, 0, 0, 11777, 11778, 7, 19, 0, 0, 11778, 11779, 7, 6, 0, 0, 11779, 11780, 7, 7, 0, 0, 11780, 1966, 1, 0, 0, 0, 11781, 11782, 7, 8, 0, 0, 11782, 11783, 7, 3, 0, 0, 11783, 11784, 7, 4, 0, 0, 11784, 11785, 7, 15, 0, 0, 11785, 11786, 7, 3, 0, 0, 11786, 11787, 7, 12, 0, 0, 11787, 11788, 7, 11, 0, 0, 11788, 1968, 1, 0, 0, 0, 11789, 11790, 7, 8, 0, 0, 11790, 11791, 7, 3, 0, 0, 11791, 11792, 7, 12, 0, 0, 11792, 11793, 7, 4, 0, 0, 11793, 1970, 1, 0, 0, 0, 11794, 11795, 7, 8, 0, 0, 11795, 11796, 7, 3, 0, 0, 11796, 11797, 7, 12, 0, 0, 11797, 11798, 7, 4, 0, 0, 11798, 11799, 7, 19, 0, 0, 11799, 11800, 7, 23, 0, 0, 11800, 11801, 5, 95, 0, 0, 11801, 11802, 7, 16, 0, 0, 11802, 11803, 7, 10, 0, 0, 11803, 11804, 7, 6, 0, 0, 11804, 11805, 7, 7, 0, 0, 11805, 11806, 7, 11, 0, 0, 11806, 1972, 1, 0, 0, 0, 11807, 11808, 7, 8, 0, 0, 11808, 11809, 7, 7, 0, 0, 11809, 11810, 7, 5, 0, 0, 11810, 11811, 7, 7, 0, 0, 11811, 11812, 7, 3, 0, 0, 11812, 11813, 7, 11, 0, 0, 11813, 11814, 7, 7, 0, 0, 11814, 11815, 5, 95, 0, 0, 11815, 11816, 7, 5, 0, 0, 11816, 11817, 7, 19, 0, 0, 11817, 11818, 7, 14, 0, 0, 11818, 11819, 7, 21, 0, 0, 11819, 1974, 1, 0, 0, 0, 11820, 11821, 7, 8, 0, 0, 11821, 11822, 7, 7, 0, 0, 11822, 11823, 7, 24, 0, 0, 11823, 11824, 7, 7, 0, 0, 11824, 11825, 7, 8, 0, 0, 11825, 11826, 7, 11, 0, 0, 11826, 11827, 7, 7, 0, 0, 11827, 1976, 1, 0, 0, 0, 11828, 11829, 7, 8, 0, 0, 11829, 11830, 7, 19, 0, 0, 11830, 11831, 7, 17, 0, 0, 11831, 11832, 7, 12, 0, 0, 11832, 11833, 7, 4, 0, 0, 11833, 1978, 1, 0, 0, 0, 11834, 11835, 7, 8, 0, 0, 11835, 11836, 7, 19, 0, 0, 11836, 11837, 7, 9, 0, 0, 11837, 11838, 5, 95, 0, 0, 11838, 11839, 7, 14, 0, 0, 11839, 11840, 7, 19, 0, 0, 11840, 11841, 7, 17, 0, 0, 11841, 11842, 7, 12, 0, 0, 11842, 11843, 7, 6, 0, 0, 11843, 1980, 1, 0, 0, 0, 11844, 11845, 7, 8, 0, 0, 11845, 11846, 7, 25, 0, 0, 11846, 11847, 7, 3, 0, 0, 11847, 11848, 7, 4, 0, 0, 11848, 1982, 1, 0, 0, 0, 11849, 11850, 7, 8, 0, 0, 11850, 11851, 7, 6, 0, 0, 11851, 11852, 7, 8, 0, 0, 11852, 11853, 7, 15, 0, 0, 11853, 11854, 7, 23, 0, 0, 11854, 1984, 1, 0, 0, 0, 11855, 11856, 7, 11, 0, 0, 11856, 11857, 7, 7, 0, 0, 11857, 11858, 7, 14, 0, 0, 11858, 11859, 5, 95, 0, 0, 11859, 11860, 7, 6, 0, 0, 11860, 11861, 7, 19, 0, 0, 11861, 11862, 5, 95, 0, 0, 11862, 11863, 7, 6, 0, 0, 11863, 11864, 7, 15, 0, 0, 11864, 11865, 7, 23, 0, 0, 11865, 11866, 7, 7, 0, 0, 11866, 1986, 1, 0, 0, 0, 11867, 11868, 7, 11, 0, 0, 11868, 11869, 7, 7, 0, 0, 11869, 11870, 7, 14, 0, 0, 11870, 11871, 7, 19, 0, 0, 11871, 11872, 7, 12, 0, 0, 11872, 11873, 7, 4, 0, 0, 11873, 11874, 7, 3, 0, 0, 11874, 11875, 7, 8, 0, 0, 11875, 11876, 7, 10, 0, 0, 11876, 11877, 5, 95, 0, 0, 11877, 11878, 7, 7, 0, 0, 11878, 11879, 7, 12, 0, 0, 11879, 11880, 7, 22, 0, 0, 11880, 11881, 7, 15, 0, 0, 11881, 11882, 7, 12, 0, 0, 11882, 11883, 7, 7, 0, 0, 11883, 11884, 5, 95, 0, 0, 11884, 11885, 7, 3, 0, 0, 11885, 11886, 7, 6, 0, 0, 11886, 11887, 7, 6, 0, 0, 11887, 11888, 7, 8, 0, 0, 11888, 11889, 7, 15, 0, 0, 11889, 11890, 7, 16, 0, 0, 11890, 11891, 7, 17, 0, 0, 11891, 11892, 7, 6, 0, 0, 11892, 11893, 7, 7, 0, 0, 11893, 1988, 1, 0, 0, 0, 11894, 11895, 7, 11, 0, 0, 11895, 11896, 7, 7, 0, 0, 11896, 11897, 7, 11, 0, 0, 11897, 11898, 7, 11, 0, 0, 11898, 11899, 7, 15, 0, 0, 11899, 11900, 7, 19, 0, 0, 11900, 11901, 7, 12, 0, 0, 11901, 11902, 5, 95, 0, 0, 11902, 11903, 7, 17, 0, 0, 11903, 11904, 7, 11, 0, 0, 11904, 11905, 7, 7, 0, 0, 11905, 11906, 7, 8, 0, 0, 11906, 1990, 1, 0, 0, 0, 11907, 11908, 7, 11, 0, 0, 11908, 11909, 7, 20, 0, 0, 11909, 11910, 7, 3, 0, 0, 11910, 1992, 1, 0, 0, 0, 11911, 11912, 7, 11, 0, 0, 11912, 11913, 7, 20, 0, 0, 11913, 11914, 7, 3, 0, 0, 11914, 11915, 5, 49, 0, 0, 11915, 1994, 1, 0, 0, 0, 11916, 11917, 7, 11, 0, 0, 11917, 11918, 7, 20, 0, 0, 11918, 11919, 7, 3, 0, 0, 11919, 11920, 5, 50, 0, 0, 11920, 1996, 1, 0, 0, 0, 11921, 11922, 7, 11, 0, 0, 11922, 11923, 7, 14, 0, 0, 11923, 11924, 7, 20, 0, 0, 11924, 11925, 7, 7, 0, 0, 11925, 11926, 7, 23, 0, 0, 11926, 11927, 7, 3, 0, 0, 11927, 11928, 5, 95, 0, 0, 11928, 11929, 7, 12, 0, 0, 11929, 11930, 7, 3, 0, 0, 11930, 11931, 7, 23, 0, 0, 11931, 11932, 7, 7, 0, 0, 11932, 1998, 1, 0, 0, 0, 11933, 11934, 7, 11, 0, 0, 11934, 11935, 7, 15, 0, 0, 11935, 11936, 7, 22, 0, 0, 11936, 11937, 7, 12, 0, 0, 11937, 2000, 1, 0, 0, 0, 11938, 11939, 7, 11, 0, 0, 11939, 11940, 7, 15, 0, 0, 11940, 11941, 7, 12, 0, 0, 11941, 2002, 1, 0, 0, 0, 11942, 11943, 7, 11, 0, 0, 11943, 11944, 7, 5, 0, 0, 11944, 11945, 7, 7, 0, 0, 11945, 11946, 7, 7, 0, 0, 11946, 11947, 7, 25, 0, 0, 11947, 2004, 1, 0, 0, 0, 11948, 11949, 7, 11, 0, 0, 11949, 11950, 7, 19, 0, 0, 11950, 11951, 7, 17, 0, 0, 11951, 11952, 7, 12, 0, 0, 11952, 11953, 7, 4, 0, 0, 11953, 11954, 7, 7, 0, 0, 11954, 11955, 7, 26, 0, 0, 11955, 2006, 1, 0, 0, 0, 11956, 11957, 7, 11, 0, 0, 11957, 11958, 7, 28, 0, 0, 11958, 11959, 7, 5, 0, 0, 11959, 11960, 5, 95, 0, 0, 11960, 11961, 7, 6, 0, 0, 11961, 11962, 7, 20, 0, 0, 11962, 11963, 7, 8, 0, 0, 11963, 11964, 7, 7, 0, 0, 11964, 11965, 7, 3, 0, 0, 11965, 11966, 7, 4, 0, 0, 11966, 11967, 5, 95, 0, 0, 11967, 11968, 7, 9, 0, 0, 11968, 11969, 7, 3, 0, 0, 11969, 11970, 7, 15, 0, 0, 11970, 11971, 7, 6, 0, 0, 11971, 11972, 5, 95, 0, 0, 11972, 11973, 7, 3, 0, 0, 11973, 11974, 7, 18, 0, 0, 11974, 11975, 7, 6, 0, 0, 11975, 11976, 7, 7, 0, 0, 11976, 11977, 7, 8, 0, 0, 11977, 11978, 5, 95, 0, 0, 11978, 11979, 7, 22, 0, 0, 11979, 11980, 7, 6, 0, 0, 11980, 11981, 7, 15, 0, 0, 11981, 11982, 7, 4, 0, 0, 11982, 11983, 7, 11, 0, 0, 11983, 2008, 1, 0, 0, 0, 11984, 11985, 7, 11, 0, 0, 11985, 11986, 7, 28, 0, 0, 11986, 11987, 7, 8, 0, 0, 11987, 11988, 7, 6, 0, 0, 11988, 2010, 1, 0, 0, 0, 11989, 11990, 7, 11, 0, 0, 11990, 11991, 7, 8, 0, 0, 11991, 11992, 7, 15, 0, 0, 11992, 11993, 7, 4, 0, 0, 11993, 2012, 1, 0, 0, 0, 11994, 11995, 7, 11, 0, 0, 11995, 11996, 7, 6, 0, 0, 11996, 11997, 7, 3, 0, 0, 11997, 11998, 7, 8, 0, 0, 11998, 11999, 7, 6, 0, 0, 11999, 12000, 7, 25, 0, 0, 12000, 12001, 7, 19, 0, 0, 12001, 12002, 7, 15, 0, 0, 12002, 12003, 7, 12, 0, 0, 12003, 12004, 7, 6, 0, 0, 12004, 2014, 1, 0, 0, 0, 12005, 12006, 7, 11, 0, 0, 12006, 12007, 7, 6, 0, 0, 12007, 12008, 7, 8, 0, 0, 12008, 12009, 7, 14, 0, 0, 12009, 12010, 7, 23, 0, 0, 12010, 12011, 7, 25, 0, 0, 12011, 2016, 1, 0, 0, 0, 12012, 12013, 7, 11, 0, 0, 12013, 12014, 7, 6, 0, 0, 12014, 12015, 7, 8, 0, 0, 12015, 12016, 5, 95, 0, 0, 12016, 12017, 7, 6, 0, 0, 12017, 12018, 7, 19, 0, 0, 12018, 12019, 5, 95, 0, 0, 12019, 12020, 7, 4, 0, 0, 12020, 12021, 7, 3, 0, 0, 12021, 12022, 7, 6, 0, 0, 12022, 12023, 7, 7, 0, 0, 12023, 2018, 1, 0, 0, 0, 12024, 12025, 7, 11, 0, 0, 12025, 12026, 7, 6, 0, 0, 12026, 12027, 5, 95, 0, 0, 12027, 12028, 7, 3, 0, 0, 12028, 12029, 7, 8, 0, 0, 12029, 12030, 7, 7, 0, 0, 12030, 12031, 7, 3, 0, 0, 12031, 2020, 1, 0, 0, 0, 12032, 12033, 7, 11, 0, 0, 12033, 12034, 7, 6, 0, 0, 12034, 12035, 5, 95, 0, 0, 12035, 12036, 7, 3, 0, 0, 12036, 12037, 7, 11, 0, 0, 12037, 12038, 7, 16, 0, 0, 12038, 12039, 7, 15, 0, 0, 12039, 12040, 7, 12, 0, 0, 12040, 12041, 7, 3, 0, 0, 12041, 12042, 7, 8, 0, 0, 12042, 12043, 7, 10, 0, 0, 12043, 2022, 1, 0, 0, 0, 12044, 12045, 7, 11, 0, 0, 12045, 12046, 7, 6, 0, 0, 12046, 12047, 5, 95, 0, 0, 12047, 12048, 7, 3, 0, 0, 12048, 12049, 7, 11, 0, 0, 12049, 12050, 7, 6, 0, 0, 12050, 12051, 7, 7, 0, 0, 12051, 12052, 7, 26, 0, 0, 12052, 12053, 7, 6, 0, 0, 12053, 2024, 1, 0, 0, 0, 12054, 12055, 7, 11, 0, 0, 12055, 12056, 7, 6, 0, 0, 12056, 12057, 5, 95, 0, 0, 12057, 12058, 7, 3, 0, 0, 12058, 12059, 7, 11, 0, 0, 12059, 12060, 7, 9, 0, 0, 12060, 12061, 7, 21, 0, 0, 12061, 12062, 7, 16, 0, 0, 12062, 2026, 1, 0, 0, 0, 12063, 12064, 7, 11, 0, 0, 12064, 12065, 7, 6, 0, 0, 12065, 12066, 5, 95, 0, 0, 12066, 12067, 7, 3, 0, 0, 12067, 12068, 7, 11, 0, 0, 12068, 12069, 7, 9, 0, 0, 12069, 12070, 7, 21, 0, 0, 12070, 12071, 7, 6, 0, 0, 12071, 2028, 1, 0, 0, 0, 12072, 12073, 7, 11, 0, 0, 12073, 12074, 7, 6, 0, 0, 12074, 12075, 5, 95, 0, 0, 12075, 12076, 7, 16, 0, 0, 12076, 12077, 7, 17, 0, 0, 12077, 12078, 7, 18, 0, 0, 12078, 12079, 7, 18, 0, 0, 12079, 12080, 7, 7, 0, 0, 12080, 12081, 7, 8, 0, 0, 12081, 2030, 1, 0, 0, 0, 12082, 12083, 7, 11, 0, 0, 12083, 12084, 7, 6, 0, 0, 12084, 12085, 5, 95, 0, 0, 12085, 12086, 7, 14, 0, 0, 12086, 12087, 7, 7, 0, 0, 12087, 12088, 7, 12, 0, 0, 12088, 12089, 7, 6, 0, 0, 12089, 12090, 7, 8, 0, 0, 12090, 12091, 7, 19, 0, 0, 12091, 12092, 7, 15, 0, 0, 12092, 12093, 7, 4, 0, 0, 12093, 2032, 1, 0, 0, 0, 12094, 12095, 7, 11, 0, 0, 12095, 12096, 7, 6, 0, 0, 12096, 12097, 5, 95, 0, 0, 12097, 12098, 7, 14, 0, 0, 12098, 12099, 7, 19, 0, 0, 12099, 12100, 7, 12, 0, 0, 12100, 12101, 7, 6, 0, 0, 12101, 12102, 7, 3, 0, 0, 12102, 12103, 7, 15, 0, 0, 12103, 12104, 7, 12, 0, 0, 12104, 12105, 7, 11, 0, 0, 12105, 2034, 1, 0, 0, 0, 12106, 12107, 7, 11, 0, 0, 12107, 12108, 7, 6, 0, 0, 12108, 12109, 5, 95, 0, 0, 12109, 12110, 7, 14, 0, 0, 12110, 12111, 7, 8, 0, 0, 12111, 12112, 7, 19, 0, 0, 12112, 12113, 7, 11, 0, 0, 12113, 12114, 7, 11, 0, 0, 12114, 12115, 7, 7, 0, 0, 12115, 12116, 7, 11, 0, 0, 12116, 2036, 1, 0, 0, 0, 12117, 12118, 7, 11, 0, 0, 12118, 12119, 7, 6, 0, 0, 12119, 12120, 5, 95, 0, 0, 12120, 12121, 7, 4, 0, 0, 12121, 12122, 7, 15, 0, 0, 12122, 12123, 7, 18, 0, 0, 12123, 12124, 7, 18, 0, 0, 12124, 12125, 7, 7, 0, 0, 12125, 12126, 7, 8, 0, 0, 12126, 12127, 7, 7, 0, 0, 12127, 12128, 7, 12, 0, 0, 12128, 12129, 7, 14, 0, 0, 12129, 12130, 7, 7, 0, 0, 12130, 2038, 1, 0, 0, 0, 12131, 12132, 7, 11, 0, 0, 12132, 12133, 7, 6, 0, 0, 12133, 12134, 5, 95, 0, 0, 12134, 12135, 7, 4, 0, 0, 12135, 12136, 7, 15, 0, 0, 12136, 12137, 7, 23, 0, 0, 12137, 12138, 7, 7, 0, 0, 12138, 12139, 7, 12, 0, 0, 12139, 12140, 7, 11, 0, 0, 12140, 12141, 7, 15, 0, 0, 12141, 12142, 7, 19, 0, 0, 12142, 12143, 7, 12, 0, 0, 12143, 2040, 1, 0, 0, 0, 12144, 12145, 7, 11, 0, 0, 12145, 12146, 7, 6, 0, 0, 12146, 12147, 5, 95, 0, 0, 12147, 12148, 7, 4, 0, 0, 12148, 12149, 7, 15, 0, 0, 12149, 12150, 7, 11, 0, 0, 12150, 12151, 7, 27, 0, 0, 12151, 12152, 7, 19, 0, 0, 12152, 12153, 7, 15, 0, 0, 12153, 12154, 7, 12, 0, 0, 12154, 12155, 7, 6, 0, 0, 12155, 2042, 1, 0, 0, 0, 12156, 12157, 7, 11, 0, 0, 12157, 12158, 7, 6, 0, 0, 12158, 12159, 5, 95, 0, 0, 12159, 12160, 7, 4, 0, 0, 12160, 12161, 7, 15, 0, 0, 12161, 12162, 7, 11, 0, 0, 12162, 12163, 7, 6, 0, 0, 12163, 12164, 7, 3, 0, 0, 12164, 12165, 7, 12, 0, 0, 12165, 12166, 7, 14, 0, 0, 12166, 12167, 7, 7, 0, 0, 12167, 2044, 1, 0, 0, 0, 12168, 12169, 7, 11, 0, 0, 12169, 12170, 7, 6, 0, 0, 12170, 12171, 5, 95, 0, 0, 12171, 12172, 7, 7, 0, 0, 12172, 12173, 7, 12, 0, 0, 12173, 12174, 7, 4, 0, 0, 12174, 12175, 7, 25, 0, 0, 12175, 12176, 7, 19, 0, 0, 12176, 12177, 7, 15, 0, 0, 12177, 12178, 7, 12, 0, 0, 12178, 12179, 7, 6, 0, 0, 12179, 2046, 1, 0, 0, 0, 12180, 12181, 7, 11, 0, 0, 12181, 12182, 7, 6, 0, 0, 12182, 12183, 5, 95, 0, 0, 12183, 12184, 7, 7, 0, 0, 12184, 12185, 7, 12, 0, 0, 12185, 12186, 7, 24, 0, 0, 12186, 12187, 7, 7, 0, 0, 12187, 12188, 7, 5, 0, 0, 12188, 12189, 7, 19, 0, 0, 12189, 12190, 7, 25, 0, 0, 12190, 12191, 7, 7, 0, 0, 12191, 2048, 1, 0, 0, 0, 12192, 12193, 7, 11, 0, 0, 12193, 12194, 7, 6, 0, 0, 12194, 12195, 5, 95, 0, 0, 12195, 12196, 7, 7, 0, 0, 12196, 12197, 7, 28, 0, 0, 12197, 12198, 7, 17, 0, 0, 12198, 12199, 7, 3, 0, 0, 12199, 12200, 7, 5, 0, 0, 12200, 12201, 7, 11, 0, 0, 12201, 2050, 1, 0, 0, 0, 12202, 12203, 7, 11, 0, 0, 12203, 12204, 7, 6, 0, 0, 12204, 12205, 5, 95, 0, 0, 12205, 12206, 7, 7, 0, 0, 12206, 12207, 7, 26, 0, 0, 12207, 12208, 7, 6, 0, 0, 12208, 12209, 7, 7, 0, 0, 12209, 12210, 7, 8, 0, 0, 12210, 12211, 7, 15, 0, 0, 12211, 12212, 7, 19, 0, 0, 12212, 12213, 7, 8, 0, 0, 12213, 12214, 7, 8, 0, 0, 12214, 12215, 7, 15, 0, 0, 12215, 12216, 7, 12, 0, 0, 12216, 12217, 7, 22, 0, 0, 12217, 2052, 1, 0, 0, 0, 12218, 12219, 7, 11, 0, 0, 12219, 12220, 7, 6, 0, 0, 12220, 12221, 5, 95, 0, 0, 12221, 12222, 7, 22, 0, 0, 12222, 12223, 7, 7, 0, 0, 12223, 12224, 7, 19, 0, 0, 12224, 12225, 7, 23, 0, 0, 12225, 12226, 7, 14, 0, 0, 12226, 12227, 7, 19, 0, 0, 12227, 12228, 7, 5, 0, 0, 12228, 12229, 7, 5, 0, 0, 12229, 12230, 7, 18, 0, 0, 12230, 12231, 7, 8, 0, 0, 12231, 12232, 7, 19, 0, 0, 12232, 12233, 7, 23, 0, 0, 12233, 12234, 7, 6, 0, 0, 12234, 12235, 7, 7, 0, 0, 12235, 12236, 7, 26, 0, 0, 12236, 12237, 7, 6, 0, 0, 12237, 2054, 1, 0, 0, 0, 12238, 12239, 7, 11, 0, 0, 12239, 12240, 7, 6, 0, 0, 12240, 12241, 5, 95, 0, 0, 12241, 12242, 7, 22, 0, 0, 12242, 12243, 7, 7, 0, 0, 12243, 12244, 7, 19, 0, 0, 12244, 12245, 7, 23, 0, 0, 12245, 12246, 7, 14, 0, 0, 12246, 12247, 7, 19, 0, 0, 12247, 12248, 7, 5, 0, 0, 12248, 12249, 7, 5, 0, 0, 12249, 12250, 7, 18, 0, 0, 12250, 12251, 7, 8, 0, 0, 12251, 12252, 7, 19, 0, 0, 12252, 12253, 7, 23, 0, 0, 12253, 12254, 7, 6, 0, 0, 12254, 12255, 7, 26, 0, 0, 12255, 12256, 7, 6, 0, 0, 12256, 2056, 1, 0, 0, 0, 12257, 12258, 7, 11, 0, 0, 12258, 12259, 7, 6, 0, 0, 12259, 12260, 5, 95, 0, 0, 12260, 12261, 7, 22, 0, 0, 12261, 12262, 7, 7, 0, 0, 12262, 12263, 7, 19, 0, 0, 12263, 12264, 7, 23, 0, 0, 12264, 12265, 7, 14, 0, 0, 12265, 12266, 7, 19, 0, 0, 12266, 12267, 7, 5, 0, 0, 12267, 12268, 7, 5, 0, 0, 12268, 12269, 7, 18, 0, 0, 12269, 12270, 7, 8, 0, 0, 12270, 12271, 7, 19, 0, 0, 12271, 12272, 7, 23, 0, 0, 12272, 12273, 7, 9, 0, 0, 12273, 12274, 7, 21, 0, 0, 12274, 12275, 7, 16, 0, 0, 12275, 2058, 1, 0, 0, 0, 12276, 12277, 7, 11, 0, 0, 12277, 12278, 7, 6, 0, 0, 12278, 12279, 5, 95, 0, 0, 12279, 12280, 7, 22, 0, 0, 12280, 12281, 7, 7, 0, 0, 12281, 12282, 7, 19, 0, 0, 12282, 12283, 7, 23, 0, 0, 12283, 12284, 7, 7, 0, 0, 12284, 12285, 7, 6, 0, 0, 12285, 12286, 7, 8, 0, 0, 12286, 12287, 7, 10, 0, 0, 12287, 12288, 7, 14, 0, 0, 12288, 12289, 7, 19, 0, 0, 12289, 12290, 7, 5, 0, 0, 12290, 12291, 7, 5, 0, 0, 12291, 12292, 7, 7, 0, 0, 12292, 12293, 7, 14, 0, 0, 12293, 12294, 7, 6, 0, 0, 12294, 12295, 7, 15, 0, 0, 12295, 12296, 7, 19, 0, 0, 12296, 12297, 7, 12, 0, 0, 12297, 12298, 7, 18, 0, 0, 12298, 12299, 7, 8, 0, 0, 12299, 12300, 7, 19, 0, 0, 12300, 12301, 7, 23, 0, 0, 12301, 12302, 7, 6, 0, 0, 12302, 12303, 7, 7, 0, 0, 12303, 12304, 7, 26, 0, 0, 12304, 12305, 7, 6, 0, 0, 12305, 2060, 1, 0, 0, 0, 12306, 12307, 7, 11, 0, 0, 12307, 12308, 7, 6, 0, 0, 12308, 12309, 5, 95, 0, 0, 12309, 12310, 7, 22, 0, 0, 12310, 12311, 7, 7, 0, 0, 12311, 12312, 7, 19, 0, 0, 12312, 12313, 7, 23, 0, 0, 12313, 12314, 7, 7, 0, 0, 12314, 12315, 7, 6, 0, 0, 12315, 12316, 7, 8, 0, 0, 12316, 12317, 7, 10, 0, 0, 12317, 12318, 7, 14, 0, 0, 12318, 12319, 7, 19, 0, 0, 12319, 12320, 7, 5, 0, 0, 12320, 12321, 7, 5, 0, 0, 12321, 12322, 7, 7, 0, 0, 12322, 12323, 7, 14, 0, 0, 12323, 12324, 7, 6, 0, 0, 12324, 12325, 7, 15, 0, 0, 12325, 12326, 7, 19, 0, 0, 12326, 12327, 7, 12, 0, 0, 12327, 12328, 7, 18, 0, 0, 12328, 12329, 7, 8, 0, 0, 12329, 12330, 7, 19, 0, 0, 12330, 12331, 7, 23, 0, 0, 12331, 12332, 7, 9, 0, 0, 12332, 12333, 7, 21, 0, 0, 12333, 12334, 7, 16, 0, 0, 12334, 2062, 1, 0, 0, 0, 12335, 12336, 7, 11, 0, 0, 12336, 12337, 7, 6, 0, 0, 12337, 12338, 5, 95, 0, 0, 12338, 12339, 7, 22, 0, 0, 12339, 12340, 7, 7, 0, 0, 12340, 12341, 7, 19, 0, 0, 12341, 12342, 7, 23, 0, 0, 12342, 12343, 7, 7, 0, 0, 12343, 12344, 7, 6, 0, 0, 12344, 12345, 7, 8, 0, 0, 12345, 12346, 7, 10, 0, 0, 12346, 12347, 7, 18, 0, 0, 12347, 12348, 7, 8, 0, 0, 12348, 12349, 7, 19, 0, 0, 12349, 12350, 7, 23, 0, 0, 12350, 12351, 7, 6, 0, 0, 12351, 12352, 7, 7, 0, 0, 12352, 12353, 7, 26, 0, 0, 12353, 12354, 7, 6, 0, 0, 12354, 2064, 1, 0, 0, 0, 12355, 12356, 7, 11, 0, 0, 12356, 12357, 7, 6, 0, 0, 12357, 12358, 5, 95, 0, 0, 12358, 12359, 7, 22, 0, 0, 12359, 12360, 7, 7, 0, 0, 12360, 12361, 7, 19, 0, 0, 12361, 12362, 7, 23, 0, 0, 12362, 12363, 7, 7, 0, 0, 12363, 12364, 7, 6, 0, 0, 12364, 12365, 7, 8, 0, 0, 12365, 12366, 7, 10, 0, 0, 12366, 12367, 7, 18, 0, 0, 12367, 12368, 7, 8, 0, 0, 12368, 12369, 7, 19, 0, 0, 12369, 12370, 7, 23, 0, 0, 12370, 12371, 7, 9, 0, 0, 12371, 12372, 7, 21, 0, 0, 12372, 12373, 7, 16, 0, 0, 12373, 2066, 1, 0, 0, 0, 12374, 12375, 7, 11, 0, 0, 12375, 12376, 7, 6, 0, 0, 12376, 12377, 5, 95, 0, 0, 12377, 12378, 7, 22, 0, 0, 12378, 12379, 7, 7, 0, 0, 12379, 12380, 7, 19, 0, 0, 12380, 12381, 7, 23, 0, 0, 12381, 12382, 7, 7, 0, 0, 12382, 12383, 7, 6, 0, 0, 12383, 12384, 7, 8, 0, 0, 12384, 12385, 7, 10, 0, 0, 12385, 12386, 7, 12, 0, 0, 12386, 2068, 1, 0, 0, 0, 12387, 12388, 7, 11, 0, 0, 12388, 12389, 7, 6, 0, 0, 12389, 12390, 5, 95, 0, 0, 12390, 12391, 7, 22, 0, 0, 12391, 12392, 7, 7, 0, 0, 12392, 12393, 7, 19, 0, 0, 12393, 12394, 7, 23, 0, 0, 12394, 12395, 7, 7, 0, 0, 12395, 12396, 7, 6, 0, 0, 12396, 12397, 7, 8, 0, 0, 12397, 12398, 7, 10, 0, 0, 12398, 12399, 7, 6, 0, 0, 12399, 12400, 7, 10, 0, 0, 12400, 12401, 7, 25, 0, 0, 12401, 12402, 7, 7, 0, 0, 12402, 2070, 1, 0, 0, 0, 12403, 12404, 7, 11, 0, 0, 12404, 12405, 7, 6, 0, 0, 12405, 12406, 5, 95, 0, 0, 12406, 12407, 7, 22, 0, 0, 12407, 12408, 7, 7, 0, 0, 12408, 12409, 7, 19, 0, 0, 12409, 12410, 7, 23, 0, 0, 12410, 12411, 7, 18, 0, 0, 12411, 12412, 7, 8, 0, 0, 12412, 12413, 7, 19, 0, 0, 12413, 12414, 7, 23, 0, 0, 12414, 12415, 7, 6, 0, 0, 12415, 12416, 7, 7, 0, 0, 12416, 12417, 7, 26, 0, 0, 12417, 12418, 7, 6, 0, 0, 12418, 2072, 1, 0, 0, 0, 12419, 12420, 7, 11, 0, 0, 12420, 12421, 7, 6, 0, 0, 12421, 12422, 5, 95, 0, 0, 12422, 12423, 7, 22, 0, 0, 12423, 12424, 7, 7, 0, 0, 12424, 12425, 7, 19, 0, 0, 12425, 12426, 7, 23, 0, 0, 12426, 12427, 7, 18, 0, 0, 12427, 12428, 7, 8, 0, 0, 12428, 12429, 7, 19, 0, 0, 12429, 12430, 7, 23, 0, 0, 12430, 12431, 7, 9, 0, 0, 12431, 12432, 7, 21, 0, 0, 12432, 12433, 7, 16, 0, 0, 12433, 2074, 1, 0, 0, 0, 12434, 12435, 7, 11, 0, 0, 12435, 12436, 7, 6, 0, 0, 12436, 12437, 5, 95, 0, 0, 12437, 12438, 7, 15, 0, 0, 12438, 12439, 7, 12, 0, 0, 12439, 12440, 7, 6, 0, 0, 12440, 12441, 7, 7, 0, 0, 12441, 12442, 7, 8, 0, 0, 12442, 12443, 7, 15, 0, 0, 12443, 12444, 7, 19, 0, 0, 12444, 12445, 7, 8, 0, 0, 12445, 12446, 7, 8, 0, 0, 12446, 12447, 7, 15, 0, 0, 12447, 12448, 7, 12, 0, 0, 12448, 12449, 7, 22, 0, 0, 12449, 12450, 7, 12, 0, 0, 12450, 2076, 1, 0, 0, 0, 12451, 12452, 7, 11, 0, 0, 12452, 12453, 7, 6, 0, 0, 12453, 12454, 5, 95, 0, 0, 12454, 12455, 7, 15, 0, 0, 12455, 12456, 7, 12, 0, 0, 12456, 12457, 7, 6, 0, 0, 12457, 12458, 7, 7, 0, 0, 12458, 12459, 7, 8, 0, 0, 12459, 12460, 7, 11, 0, 0, 12460, 12461, 7, 7, 0, 0, 12461, 12462, 7, 14, 0, 0, 12462, 12463, 7, 6, 0, 0, 12463, 12464, 7, 15, 0, 0, 12464, 12465, 7, 19, 0, 0, 12465, 12466, 7, 12, 0, 0, 12466, 2078, 1, 0, 0, 0, 12467, 12468, 7, 11, 0, 0, 12468, 12469, 7, 6, 0, 0, 12469, 12470, 5, 95, 0, 0, 12470, 12471, 7, 15, 0, 0, 12471, 12472, 7, 12, 0, 0, 12472, 12473, 7, 6, 0, 0, 12473, 12474, 7, 7, 0, 0, 12474, 12475, 7, 8, 0, 0, 12475, 12476, 7, 11, 0, 0, 12476, 12477, 7, 7, 0, 0, 12477, 12478, 7, 14, 0, 0, 12478, 12479, 7, 6, 0, 0, 12479, 12480, 7, 11, 0, 0, 12480, 2080, 1, 0, 0, 0, 12481, 12482, 7, 11, 0, 0, 12482, 12483, 7, 6, 0, 0, 12483, 12484, 5, 95, 0, 0, 12484, 12485, 7, 15, 0, 0, 12485, 12486, 7, 11, 0, 0, 12486, 12487, 7, 14, 0, 0, 12487, 12488, 7, 5, 0, 0, 12488, 12489, 7, 19, 0, 0, 12489, 12490, 7, 11, 0, 0, 12490, 12491, 7, 7, 0, 0, 12491, 12492, 7, 4, 0, 0, 12492, 2082, 1, 0, 0, 0, 12493, 12494, 7, 11, 0, 0, 12494, 12495, 7, 6, 0, 0, 12495, 12496, 5, 95, 0, 0, 12496, 12497, 7, 15, 0, 0, 12497, 12498, 7, 11, 0, 0, 12498, 12499, 7, 7, 0, 0, 12499, 12500, 7, 23, 0, 0, 12500, 12501, 7, 25, 0, 0, 12501, 12502, 7, 6, 0, 0, 12502, 12503, 7, 10, 0, 0, 12503, 2084, 1, 0, 0, 0, 12504, 12505, 7, 11, 0, 0, 12505, 12506, 7, 6, 0, 0, 12506, 12507, 5, 95, 0, 0, 12507, 12508, 7, 15, 0, 0, 12508, 12509, 7, 11, 0, 0, 12509, 12510, 7, 11, 0, 0, 12510, 12511, 7, 15, 0, 0, 12511, 12512, 7, 23, 0, 0, 12512, 12513, 7, 25, 0, 0, 12513, 12514, 7, 5, 0, 0, 12514, 12515, 7, 7, 0, 0, 12515, 2086, 1, 0, 0, 0, 12516, 12517, 7, 11, 0, 0, 12517, 12518, 7, 6, 0, 0, 12518, 12519, 5, 95, 0, 0, 12519, 12520, 7, 5, 0, 0, 12520, 12521, 7, 15, 0, 0, 12521, 12522, 7, 12, 0, 0, 12522, 12523, 7, 7, 0, 0, 12523, 12524, 7, 18, 0, 0, 12524, 12525, 7, 8, 0, 0, 12525, 12526, 7, 19, 0, 0, 12526, 12527, 7, 23, 0, 0, 12527, 12528, 7, 6, 0, 0, 12528, 12529, 7, 7, 0, 0, 12529, 12530, 7, 26, 0, 0, 12530, 12531, 7, 6, 0, 0, 12531, 2088, 1, 0, 0, 0, 12532, 12533, 7, 11, 0, 0, 12533, 12534, 7, 6, 0, 0, 12534, 12535, 5, 95, 0, 0, 12535, 12536, 7, 5, 0, 0, 12536, 12537, 7, 15, 0, 0, 12537, 12538, 7, 12, 0, 0, 12538, 12539, 7, 7, 0, 0, 12539, 12540, 7, 18, 0, 0, 12540, 12541, 7, 8, 0, 0, 12541, 12542, 7, 19, 0, 0, 12542, 12543, 7, 23, 0, 0, 12543, 12544, 7, 9, 0, 0, 12544, 12545, 7, 21, 0, 0, 12545, 12546, 7, 16, 0, 0, 12546, 2090, 1, 0, 0, 0, 12547, 12548, 7, 11, 0, 0, 12548, 12549, 7, 6, 0, 0, 12549, 12550, 5, 95, 0, 0, 12550, 12551, 7, 5, 0, 0, 12551, 12552, 7, 15, 0, 0, 12552, 12553, 7, 12, 0, 0, 12553, 12554, 7, 7, 0, 0, 12554, 12555, 7, 11, 0, 0, 12555, 12556, 7, 6, 0, 0, 12556, 12557, 7, 8, 0, 0, 12557, 12558, 7, 15, 0, 0, 12558, 12559, 7, 12, 0, 0, 12559, 12560, 7, 22, 0, 0, 12560, 12561, 7, 18, 0, 0, 12561, 12562, 7, 8, 0, 0, 12562, 12563, 7, 19, 0, 0, 12563, 12564, 7, 23, 0, 0, 12564, 12565, 7, 6, 0, 0, 12565, 12566, 7, 7, 0, 0, 12566, 12567, 7, 26, 0, 0, 12567, 12568, 7, 6, 0, 0, 12568, 2092, 1, 0, 0, 0, 12569, 12570, 7, 11, 0, 0, 12570, 12571, 7, 6, 0, 0, 12571, 12572, 5, 95, 0, 0, 12572, 12573, 7, 5, 0, 0, 12573, 12574, 7, 15, 0, 0, 12574, 12575, 7, 12, 0, 0, 12575, 12576, 7, 7, 0, 0, 12576, 12577, 7, 11, 0, 0, 12577, 12578, 7, 6, 0, 0, 12578, 12579, 7, 8, 0, 0, 12579, 12580, 7, 15, 0, 0, 12580, 12581, 7, 12, 0, 0, 12581, 12582, 7, 22, 0, 0, 12582, 12583, 7, 18, 0, 0, 12583, 12584, 7, 8, 0, 0, 12584, 12585, 7, 19, 0, 0, 12585, 12586, 7, 23, 0, 0, 12586, 12587, 7, 9, 0, 0, 12587, 12588, 7, 21, 0, 0, 12588, 12589, 7, 16, 0, 0, 12589, 2094, 1, 0, 0, 0, 12590, 12591, 7, 11, 0, 0, 12591, 12592, 7, 6, 0, 0, 12592, 12593, 5, 95, 0, 0, 12593, 12594, 7, 12, 0, 0, 12594, 12595, 7, 17, 0, 0, 12595, 12596, 7, 23, 0, 0, 12596, 12597, 7, 22, 0, 0, 12597, 12598, 7, 7, 0, 0, 12598, 12599, 7, 19, 0, 0, 12599, 12600, 7, 23, 0, 0, 12600, 12601, 7, 7, 0, 0, 12601, 12602, 7, 6, 0, 0, 12602, 12603, 7, 8, 0, 0, 12603, 12604, 7, 15, 0, 0, 12604, 12605, 7, 7, 0, 0, 12605, 12606, 7, 11, 0, 0, 12606, 2096, 1, 0, 0, 0, 12607, 12608, 7, 11, 0, 0, 12608, 12609, 7, 6, 0, 0, 12609, 12610, 5, 95, 0, 0, 12610, 12611, 7, 12, 0, 0, 12611, 12612, 7, 17, 0, 0, 12612, 12613, 7, 23, 0, 0, 12613, 12614, 7, 15, 0, 0, 12614, 12615, 7, 12, 0, 0, 12615, 12616, 7, 6, 0, 0, 12616, 12617, 7, 7, 0, 0, 12617, 12618, 7, 8, 0, 0, 12618, 12619, 7, 15, 0, 0, 12619, 12620, 7, 19, 0, 0, 12620, 12621, 7, 8, 0, 0, 12621, 12622, 7, 8, 0, 0, 12622, 12623, 7, 15, 0, 0, 12623, 12624, 7, 12, 0, 0, 12624, 12625, 7, 22, 0, 0, 12625, 2098, 1, 0, 0, 0, 12626, 12627, 7, 11, 0, 0, 12627, 12628, 7, 6, 0, 0, 12628, 12629, 5, 95, 0, 0, 12629, 12630, 7, 12, 0, 0, 12630, 12631, 7, 17, 0, 0, 12631, 12632, 7, 23, 0, 0, 12632, 12633, 7, 15, 0, 0, 12633, 12634, 7, 12, 0, 0, 12634, 12635, 7, 6, 0, 0, 12635, 12636, 7, 7, 0, 0, 12636, 12637, 7, 8, 0, 0, 12637, 12638, 7, 15, 0, 0, 12638, 12639, 7, 19, 0, 0, 12639, 12640, 7, 8, 0, 0, 12640, 12641, 7, 8, 0, 0, 12641, 12642, 7, 15, 0, 0, 12642, 12643, 7, 12, 0, 0, 12643, 12644, 7, 22, 0, 0, 12644, 12645, 7, 11, 0, 0, 12645, 2100, 1, 0, 0, 0, 12646, 12647, 7, 11, 0, 0, 12647, 12648, 7, 6, 0, 0, 12648, 12649, 5, 95, 0, 0, 12649, 12650, 7, 12, 0, 0, 12650, 12651, 7, 17, 0, 0, 12651, 12652, 7, 23, 0, 0, 12652, 12653, 7, 25, 0, 0, 12653, 12654, 7, 19, 0, 0, 12654, 12655, 7, 15, 0, 0, 12655, 12656, 7, 12, 0, 0, 12656, 12657, 7, 6, 0, 0, 12657, 12658, 7, 11, 0, 0, 12658, 2102, 1, 0, 0, 0, 12659, 12660, 7, 11, 0, 0, 12660, 12661, 7, 6, 0, 0, 12661, 12662, 5, 95, 0, 0, 12662, 12663, 7, 19, 0, 0, 12663, 12664, 7, 24, 0, 0, 12664, 12665, 7, 7, 0, 0, 12665, 12666, 7, 8, 0, 0, 12666, 12667, 7, 5, 0, 0, 12667, 12668, 7, 3, 0, 0, 12668, 12669, 7, 25, 0, 0, 12669, 12670, 7, 11, 0, 0, 12670, 2104, 1, 0, 0, 0, 12671, 12672, 7, 11, 0, 0, 12672, 12673, 7, 6, 0, 0, 12673, 12674, 5, 95, 0, 0, 12674, 12675, 7, 25, 0, 0, 12675, 12676, 7, 19, 0, 0, 12676, 12677, 7, 15, 0, 0, 12677, 12678, 7, 12, 0, 0, 12678, 12679, 7, 6, 0, 0, 12679, 12680, 7, 18, 0, 0, 12680, 12681, 7, 8, 0, 0, 12681, 12682, 7, 19, 0, 0, 12682, 12683, 7, 23, 0, 0, 12683, 12684, 7, 6, 0, 0, 12684, 12685, 7, 7, 0, 0, 12685, 12686, 7, 26, 0, 0, 12686, 12687, 7, 6, 0, 0, 12687, 2106, 1, 0, 0, 0, 12688, 12689, 7, 11, 0, 0, 12689, 12690, 7, 6, 0, 0, 12690, 12691, 5, 95, 0, 0, 12691, 12692, 7, 25, 0, 0, 12692, 12693, 7, 19, 0, 0, 12693, 12694, 7, 15, 0, 0, 12694, 12695, 7, 12, 0, 0, 12695, 12696, 7, 6, 0, 0, 12696, 12697, 7, 18, 0, 0, 12697, 12698, 7, 8, 0, 0, 12698, 12699, 7, 19, 0, 0, 12699, 12700, 7, 23, 0, 0, 12700, 12701, 7, 9, 0, 0, 12701, 12702, 7, 21, 0, 0, 12702, 12703, 7, 16, 0, 0, 12703, 2108, 1, 0, 0, 0, 12704, 12705, 7, 11, 0, 0, 12705, 12706, 7, 6, 0, 0, 12706, 12707, 5, 95, 0, 0, 12707, 12708, 7, 25, 0, 0, 12708, 12709, 7, 19, 0, 0, 12709, 12710, 7, 15, 0, 0, 12710, 12711, 7, 12, 0, 0, 12711, 12712, 7, 6, 0, 0, 12712, 12713, 7, 12, 0, 0, 12713, 2110, 1, 0, 0, 0, 12714, 12715, 7, 11, 0, 0, 12715, 12716, 7, 6, 0, 0, 12716, 12717, 5, 95, 0, 0, 12717, 12718, 7, 25, 0, 0, 12718, 12719, 7, 19, 0, 0, 12719, 12720, 7, 5, 0, 0, 12720, 12721, 7, 10, 0, 0, 12721, 12722, 7, 18, 0, 0, 12722, 12723, 7, 8, 0, 0, 12723, 12724, 7, 19, 0, 0, 12724, 12725, 7, 23, 0, 0, 12725, 12726, 7, 6, 0, 0, 12726, 12727, 7, 7, 0, 0, 12727, 12728, 7, 26, 0, 0, 12728, 12729, 7, 6, 0, 0, 12729, 2112, 1, 0, 0, 0, 12730, 12731, 7, 11, 0, 0, 12731, 12732, 7, 6, 0, 0, 12732, 12733, 5, 95, 0, 0, 12733, 12734, 7, 25, 0, 0, 12734, 12735, 7, 19, 0, 0, 12735, 12736, 7, 5, 0, 0, 12736, 12737, 7, 10, 0, 0, 12737, 12738, 7, 18, 0, 0, 12738, 12739, 7, 8, 0, 0, 12739, 12740, 7, 19, 0, 0, 12740, 12741, 7, 23, 0, 0, 12741, 12742, 7, 9, 0, 0, 12742, 12743, 7, 21, 0, 0, 12743, 12744, 7, 16, 0, 0, 12744, 2114, 1, 0, 0, 0, 12745, 12746, 7, 11, 0, 0, 12746, 12747, 7, 6, 0, 0, 12747, 12748, 5, 95, 0, 0, 12748, 12749, 7, 25, 0, 0, 12749, 12750, 7, 19, 0, 0, 12750, 12751, 7, 5, 0, 0, 12751, 12752, 7, 10, 0, 0, 12752, 12753, 7, 22, 0, 0, 12753, 12754, 7, 19, 0, 0, 12754, 12755, 7, 12, 0, 0, 12755, 12756, 7, 18, 0, 0, 12756, 12757, 7, 8, 0, 0, 12757, 12758, 7, 19, 0, 0, 12758, 12759, 7, 23, 0, 0, 12759, 12760, 7, 6, 0, 0, 12760, 12761, 7, 7, 0, 0, 12761, 12762, 7, 26, 0, 0, 12762, 12763, 7, 6, 0, 0, 12763, 2116, 1, 0, 0, 0, 12764, 12765, 7, 11, 0, 0, 12765, 12766, 7, 6, 0, 0, 12766, 12767, 5, 95, 0, 0, 12767, 12768, 7, 25, 0, 0, 12768, 12769, 7, 19, 0, 0, 12769, 12770, 7, 5, 0, 0, 12770, 12771, 7, 10, 0, 0, 12771, 12772, 7, 22, 0, 0, 12772, 12773, 7, 19, 0, 0, 12773, 12774, 7, 12, 0, 0, 12774, 12775, 7, 18, 0, 0, 12775, 12776, 7, 8, 0, 0, 12776, 12777, 7, 19, 0, 0, 12777, 12778, 7, 23, 0, 0, 12778, 12779, 7, 9, 0, 0, 12779, 12780, 7, 21, 0, 0, 12780, 12781, 7, 16, 0, 0, 12781, 2118, 1, 0, 0, 0, 12782, 12783, 7, 11, 0, 0, 12783, 12784, 7, 6, 0, 0, 12784, 12785, 5, 95, 0, 0, 12785, 12786, 7, 11, 0, 0, 12786, 12787, 7, 8, 0, 0, 12787, 12788, 7, 15, 0, 0, 12788, 12789, 7, 4, 0, 0, 12789, 2120, 1, 0, 0, 0, 12790, 12791, 7, 11, 0, 0, 12791, 12792, 7, 6, 0, 0, 12792, 12793, 5, 95, 0, 0, 12793, 12794, 7, 11, 0, 0, 12794, 12795, 7, 6, 0, 0, 12795, 12796, 7, 3, 0, 0, 12796, 12797, 7, 8, 0, 0, 12797, 12798, 7, 6, 0, 0, 12798, 12799, 7, 25, 0, 0, 12799, 12800, 7, 19, 0, 0, 12800, 12801, 7, 15, 0, 0, 12801, 12802, 7, 12, 0, 0, 12802, 12803, 7, 6, 0, 0, 12803, 2122, 1, 0, 0, 0, 12804, 12805, 7, 11, 0, 0, 12805, 12806, 7, 6, 0, 0, 12806, 12807, 5, 95, 0, 0, 12807, 12808, 7, 11, 0, 0, 12808, 12809, 7, 10, 0, 0, 12809, 12810, 7, 23, 0, 0, 12810, 12811, 7, 4, 0, 0, 12811, 12812, 7, 15, 0, 0, 12812, 12813, 7, 18, 0, 0, 12813, 12814, 7, 18, 0, 0, 12814, 12815, 7, 7, 0, 0, 12815, 12816, 7, 8, 0, 0, 12816, 12817, 7, 7, 0, 0, 12817, 12818, 7, 12, 0, 0, 12818, 12819, 7, 14, 0, 0, 12819, 12820, 7, 7, 0, 0, 12820, 2124, 1, 0, 0, 0, 12821, 12822, 7, 11, 0, 0, 12822, 12823, 7, 6, 0, 0, 12823, 12824, 5, 95, 0, 0, 12824, 12825, 7, 6, 0, 0, 12825, 12826, 7, 19, 0, 0, 12826, 12827, 7, 17, 0, 0, 12827, 12828, 7, 14, 0, 0, 12828, 12829, 7, 20, 0, 0, 12829, 12830, 7, 7, 0, 0, 12830, 12831, 7, 11, 0, 0, 12831, 2126, 1, 0, 0, 0, 12832, 12833, 7, 11, 0, 0, 12833, 12834, 7, 6, 0, 0, 12834, 12835, 5, 95, 0, 0, 12835, 12836, 7, 17, 0, 0, 12836, 12837, 7, 12, 0, 0, 12837, 12838, 7, 15, 0, 0, 12838, 12839, 7, 19, 0, 0, 12839, 12840, 7, 12, 0, 0, 12840, 2128, 1, 0, 0, 0, 12841, 12842, 7, 11, 0, 0, 12842, 12843, 7, 6, 0, 0, 12843, 12844, 5, 95, 0, 0, 12844, 12845, 7, 9, 0, 0, 12845, 12846, 7, 15, 0, 0, 12846, 12847, 7, 6, 0, 0, 12847, 12848, 7, 20, 0, 0, 12848, 12849, 7, 15, 0, 0, 12849, 12850, 7, 12, 0, 0, 12850, 2130, 1, 0, 0, 0, 12851, 12852, 7, 11, 0, 0, 12852, 12853, 7, 6, 0, 0, 12853, 12854, 5, 95, 0, 0, 12854, 12855, 7, 26, 0, 0, 12855, 2132, 1, 0, 0, 0, 12856, 12857, 7, 11, 0, 0, 12857, 12858, 7, 6, 0, 0, 12858, 12859, 5, 95, 0, 0, 12859, 12860, 7, 10, 0, 0, 12860, 2134, 1, 0, 0, 0, 12861, 12862, 7, 11, 0, 0, 12862, 12863, 7, 17, 0, 0, 12863, 12864, 7, 16, 0, 0, 12864, 12865, 7, 4, 0, 0, 12865, 12866, 7, 3, 0, 0, 12866, 12867, 7, 6, 0, 0, 12867, 12868, 7, 7, 0, 0, 12868, 2136, 1, 0, 0, 0, 12869, 12870, 7, 11, 0, 0, 12870, 12871, 7, 17, 0, 0, 12871, 12872, 7, 16, 0, 0, 12872, 12873, 7, 11, 0, 0, 12873, 12874, 7, 6, 0, 0, 12874, 12875, 7, 8, 0, 0, 12875, 12876, 7, 15, 0, 0, 12876, 12877, 7, 12, 0, 0, 12877, 12878, 7, 22, 0, 0, 12878, 12879, 5, 95, 0, 0, 12879, 12880, 7, 15, 0, 0, 12880, 12881, 7, 12, 0, 0, 12881, 12882, 7, 4, 0, 0, 12882, 12883, 7, 7, 0, 0, 12883, 12884, 7, 26, 0, 0, 12884, 2138, 1, 0, 0, 0, 12885, 12886, 7, 11, 0, 0, 12886, 12887, 7, 17, 0, 0, 12887, 12888, 7, 16, 0, 0, 12888, 12889, 7, 6, 0, 0, 12889, 12890, 7, 15, 0, 0, 12890, 12891, 7, 23, 0, 0, 12891, 12892, 7, 7, 0, 0, 12892, 2140, 1, 0, 0, 0, 12893, 12894, 7, 11, 0, 0, 12894, 12895, 7, 10, 0, 0, 12895, 12896, 7, 11, 0, 0, 12896, 12897, 7, 6, 0, 0, 12897, 12898, 7, 7, 0, 0, 12898, 12899, 7, 23, 0, 0, 12899, 12900, 5, 95, 0, 0, 12900, 12901, 7, 17, 0, 0, 12901, 12902, 7, 11, 0, 0, 12902, 12903, 7, 7, 0, 0, 12903, 12904, 7, 8, 0, 0, 12904, 2142, 1, 0, 0, 0, 12905, 12906, 7, 6, 0, 0, 12906, 12907, 7, 3, 0, 0, 12907, 12908, 7, 12, 0, 0, 12908, 2144, 1, 0, 0, 0, 12909, 12910, 7, 6, 0, 0, 12910, 12911, 7, 15, 0, 0, 12911, 12912, 7, 23, 0, 0, 12912, 12913, 7, 7, 0, 0, 12913, 12914, 7, 4, 0, 0, 12914, 12915, 7, 15, 0, 0, 12915, 12916, 7, 18, 0, 0, 12916, 12917, 7, 18, 0, 0, 12917, 2146, 1, 0, 0, 0, 12918, 12919, 7, 6, 0, 0, 12919, 12920, 7, 15, 0, 0, 12920, 12921, 7, 23, 0, 0, 12921, 12922, 7, 7, 0, 0, 12922, 12923, 7, 11, 0, 0, 12923, 12924, 7, 6, 0, 0, 12924, 12925, 7, 3, 0, 0, 12925, 12926, 7, 23, 0, 0, 12926, 12927, 7, 25, 0, 0, 12927, 12928, 7, 3, 0, 0, 12928, 12929, 7, 4, 0, 0, 12929, 12930, 7, 4, 0, 0, 12930, 2148, 1, 0, 0, 0, 12931, 12932, 7, 6, 0, 0, 12932, 12933, 7, 15, 0, 0, 12933, 12934, 7, 23, 0, 0, 12934, 12935, 7, 7, 0, 0, 12935, 12936, 7, 11, 0, 0, 12936, 12937, 7, 6, 0, 0, 12937, 12938, 7, 3, 0, 0, 12938, 12939, 7, 23, 0, 0, 12939, 12940, 7, 25, 0, 0, 12940, 12941, 7, 4, 0, 0, 12941, 12942, 7, 15, 0, 0, 12942, 12943, 7, 18, 0, 0, 12943, 12944, 7, 18, 0, 0, 12944, 2150, 1, 0, 0, 0, 12945, 12946, 7, 6, 0, 0, 12946, 12947, 7, 15, 0, 0, 12947, 12948, 7, 23, 0, 0, 12948, 12949, 7, 7, 0, 0, 12949, 12950, 5, 95, 0, 0, 12950, 12951, 7, 18, 0, 0, 12951, 12952, 7, 19, 0, 0, 12952, 12953, 7, 8, 0, 0, 12953, 12954, 7, 23, 0, 0, 12954, 12955, 7, 3, 0, 0, 12955, 12956, 7, 6, 0, 0, 12956, 2152, 1, 0, 0, 0, 12957, 12958, 7, 6, 0, 0, 12958, 12959, 7, 15, 0, 0, 12959, 12960, 7, 23, 0, 0, 12960, 12961, 7, 7, 0, 0, 12961, 12962, 5, 95, 0, 0, 12962, 12963, 7, 6, 0, 0, 12963, 12964, 7, 19, 0, 0, 12964, 12965, 5, 95, 0, 0, 12965, 12966, 7, 11, 0, 0, 12966, 12967, 7, 7, 0, 0, 12967, 12968, 7, 14, 0, 0, 12968, 2154, 1, 0, 0, 0, 12969, 12970, 7, 6, 0, 0, 12970, 12971, 7, 19, 0, 0, 12971, 12972, 7, 17, 0, 0, 12972, 12973, 7, 14, 0, 0, 12973, 12974, 7, 20, 0, 0, 12974, 12975, 7, 7, 0, 0, 12975, 12976, 7, 11, 0, 0, 12976, 2156, 1, 0, 0, 0, 12977, 12978, 7, 6, 0, 0, 12978, 12979, 7, 19, 0, 0, 12979, 12980, 5, 95, 0, 0, 12980, 12981, 7, 16, 0, 0, 12981, 12982, 7, 3, 0, 0, 12982, 12983, 7, 11, 0, 0, 12983, 12984, 7, 7, 0, 0, 12984, 12985, 5, 54, 0, 0, 12985, 12986, 5, 52, 0, 0, 12986, 2158, 1, 0, 0, 0, 12987, 12988, 7, 6, 0, 0, 12988, 12989, 7, 19, 0, 0, 12989, 12990, 5, 95, 0, 0, 12990, 12991, 7, 4, 0, 0, 12991, 12992, 7, 3, 0, 0, 12992, 12993, 7, 10, 0, 0, 12993, 12994, 7, 11, 0, 0, 12994, 2160, 1, 0, 0, 0, 12995, 12996, 7, 6, 0, 0, 12996, 12997, 7, 19, 0, 0, 12997, 12998, 5, 95, 0, 0, 12998, 12999, 7, 11, 0, 0, 12999, 13000, 7, 7, 0, 0, 13000, 13001, 7, 14, 0, 0, 13001, 13002, 7, 19, 0, 0, 13002, 13003, 7, 12, 0, 0, 13003, 13004, 7, 4, 0, 0, 13004, 13005, 7, 11, 0, 0, 13005, 2162, 1, 0, 0, 0, 13006, 13007, 7, 17, 0, 0, 13007, 13008, 7, 14, 0, 0, 13008, 13009, 7, 3, 0, 0, 13009, 13010, 7, 11, 0, 0, 13010, 13011, 7, 7, 0, 0, 13011, 2164, 1, 0, 0, 0, 13012, 13013, 7, 17, 0, 0, 13013, 13014, 7, 12, 0, 0, 13014, 13015, 7, 14, 0, 0, 13015, 13016, 7, 19, 0, 0, 13016, 13017, 7, 23, 0, 0, 13017, 13018, 7, 25, 0, 0, 13018, 13019, 7, 8, 0, 0, 13019, 13020, 7, 7, 0, 0, 13020, 13021, 7, 11, 0, 0, 13021, 13022, 7, 11, 0, 0, 13022, 2166, 1, 0, 0, 0, 13023, 13024, 7, 17, 0, 0, 13024, 13025, 7, 12, 0, 0, 13025, 13026, 7, 14, 0, 0, 13026, 13027, 7, 19, 0, 0, 13027, 13028, 7, 23, 0, 0, 13028, 13029, 7, 25, 0, 0, 13029, 13030, 7, 8, 0, 0, 13030, 13031, 7, 7, 0, 0, 13031, 13032, 7, 11, 0, 0, 13032, 13033, 7, 11, 0, 0, 13033, 13034, 7, 7, 0, 0, 13034, 13035, 7, 4, 0, 0, 13035, 13036, 5, 95, 0, 0, 13036, 13037, 7, 5, 0, 0, 13037, 13038, 7, 7, 0, 0, 13038, 13039, 7, 12, 0, 0, 13039, 13040, 7, 22, 0, 0, 13040, 13041, 7, 6, 0, 0, 13041, 13042, 7, 20, 0, 0, 13042, 2168, 1, 0, 0, 0, 13043, 13044, 7, 17, 0, 0, 13044, 13045, 7, 12, 0, 0, 13045, 13046, 7, 20, 0, 0, 13046, 13047, 7, 7, 0, 0, 13047, 13048, 7, 26, 0, 0, 13048, 2170, 1, 0, 0, 0, 13049, 13050, 7, 17, 0, 0, 13050, 13051, 7, 12, 0, 0, 13051, 13052, 7, 15, 0, 0, 13052, 13053, 7, 26, 0, 0, 13053, 13054, 5, 95, 0, 0, 13054, 13055, 7, 6, 0, 0, 13055, 13056, 7, 15, 0, 0, 13056, 13057, 7, 23, 0, 0, 13057, 13058, 7, 7, 0, 0, 13058, 13059, 7, 11, 0, 0, 13059, 13060, 7, 6, 0, 0, 13060, 13061, 7, 3, 0, 0, 13061, 13062, 7, 23, 0, 0, 13062, 13063, 7, 25, 0, 0, 13063, 2172, 1, 0, 0, 0, 13064, 13065, 7, 17, 0, 0, 13065, 13066, 7, 25, 0, 0, 13066, 13067, 7, 4, 0, 0, 13067, 13068, 7, 3, 0, 0, 13068, 13069, 7, 6, 0, 0, 13069, 13070, 7, 7, 0, 0, 13070, 13071, 7, 26, 0, 0, 13071, 13072, 7, 23, 0, 0, 13072, 13073, 7, 5, 0, 0, 13073, 2174, 1, 0, 0, 0, 13074, 13075, 7, 17, 0, 0, 13075, 13076, 7, 25, 0, 0, 13076, 13077, 7, 25, 0, 0, 13077, 13078, 7, 7, 0, 0, 13078, 13079, 7, 8, 0, 0, 13079, 2176, 1, 0, 0, 0, 13080, 13081, 7, 17, 0, 0, 13081, 13082, 7, 17, 0, 0, 13082, 13083, 7, 15, 0, 0, 13083, 13084, 7, 4, 0, 0, 13084, 2178, 1, 0, 0, 0, 13085, 13086, 7, 17, 0, 0, 13086, 13087, 7, 17, 0, 0, 13087, 13088, 7, 15, 0, 0, 13088, 13089, 7, 4, 0, 0, 13089, 13090, 5, 95, 0, 0, 13090, 13091, 7, 11, 0, 0, 13091, 13092, 7, 20, 0, 0, 13092, 13093, 7, 19, 0, 0, 13093, 13094, 7, 8, 0, 0, 13094, 13095, 7, 6, 0, 0, 13095, 2180, 1, 0, 0, 0, 13096, 13097, 7, 24, 0, 0, 13097, 13098, 7, 3, 0, 0, 13098, 13099, 7, 5, 0, 0, 13099, 13100, 7, 15, 0, 0, 13100, 13101, 7, 4, 0, 0, 13101, 13102, 7, 3, 0, 0, 13102, 13103, 7, 6, 0, 0, 13103, 13104, 7, 7, 0, 0, 13104, 13105, 5, 95, 0, 0, 13105, 13106, 7, 25, 0, 0, 13106, 13107, 7, 3, 0, 0, 13107, 13108, 7, 11, 0, 0, 13108, 13109, 7, 11, 0, 0, 13109, 13110, 7, 9, 0, 0, 13110, 13111, 7, 19, 0, 0, 13111, 13112, 7, 8, 0, 0, 13112, 13113, 7, 4, 0, 0, 13113, 13114, 5, 95, 0, 0, 13114, 13115, 7, 11, 0, 0, 13115, 13116, 7, 6, 0, 0, 13116, 13117, 7, 8, 0, 0, 13117, 13118, 7, 7, 0, 0, 13118, 13119, 7, 12, 0, 0, 13119, 13120, 7, 22, 0, 0, 13120, 13121, 7, 6, 0, 0, 13121, 13122, 7, 20, 0, 0, 13122, 2182, 1, 0, 0, 0, 13123, 13124, 7, 24, 0, 0, 13124, 13125, 7, 7, 0, 0, 13125, 13126, 7, 8, 0, 0, 13126, 13127, 7, 11, 0, 0, 13127, 13128, 7, 15, 0, 0, 13128, 13129, 7, 19, 0, 0, 13129, 13130, 7, 12, 0, 0, 13130, 2184, 1, 0, 0, 0, 13131, 13132, 7, 9, 0, 0, 13132, 13133, 7, 3, 0, 0, 13133, 13134, 7, 15, 0, 0, 13134, 13135, 7, 6, 0, 0, 13135, 13136, 5, 95, 0, 0, 13136, 13137, 7, 17, 0, 0, 13137, 13138, 7, 12, 0, 0, 13138, 13139, 7, 6, 0, 0, 13139, 13140, 7, 15, 0, 0, 13140, 13141, 7, 5, 0, 0, 13141, 13142, 5, 95, 0, 0, 13142, 13143, 7, 11, 0, 0, 13143, 13144, 7, 28, 0, 0, 13144, 13145, 7, 5, 0, 0, 13145, 13146, 5, 95, 0, 0, 13146, 13147, 7, 6, 0, 0, 13147, 13148, 7, 20, 0, 0, 13148, 13149, 7, 8, 0, 0, 13149, 13150, 7, 7, 0, 0, 13150, 13151, 7, 3, 0, 0, 13151, 13152, 7, 4, 0, 0, 13152, 13153, 5, 95, 0, 0, 13153, 13154, 7, 3, 0, 0, 13154, 13155, 7, 18, 0, 0, 13155, 13156, 7, 6, 0, 0, 13156, 13157, 7, 7, 0, 0, 13157, 13158, 7, 8, 0, 0, 13158, 13159, 5, 95, 0, 0, 13159, 13160, 7, 22, 0, 0, 13160, 13161, 7, 6, 0, 0, 13161, 13162, 7, 15, 0, 0, 13162, 13163, 7, 4, 0, 0, 13163, 13164, 7, 11, 0, 0, 13164, 2186, 1, 0, 0, 0, 13165, 13166, 7, 9, 0, 0, 13166, 13167, 7, 7, 0, 0, 13167, 13168, 7, 7, 0, 0, 13168, 13169, 7, 21, 0, 0, 13169, 13170, 7, 4, 0, 0, 13170, 13171, 7, 3, 0, 0, 13171, 13172, 7, 10, 0, 0, 13172, 2188, 1, 0, 0, 0, 13173, 13174, 7, 9, 0, 0, 13174, 13175, 7, 7, 0, 0, 13175, 13176, 7, 7, 0, 0, 13176, 13177, 7, 21, 0, 0, 13177, 13178, 7, 19, 0, 0, 13178, 13179, 7, 18, 0, 0, 13179, 13180, 7, 10, 0, 0, 13180, 13181, 7, 7, 0, 0, 13181, 13182, 7, 3, 0, 0, 13182, 13183, 7, 8, 0, 0, 13183, 2190, 1, 0, 0, 0, 13184, 13185, 7, 9, 0, 0, 13185, 13186, 7, 7, 0, 0, 13186, 13187, 7, 15, 0, 0, 13187, 13188, 7, 22, 0, 0, 13188, 13189, 7, 20, 0, 0, 13189, 13190, 7, 6, 0, 0, 13190, 13191, 5, 95, 0, 0, 13191, 13192, 7, 11, 0, 0, 13192, 13193, 7, 6, 0, 0, 13193, 13194, 7, 8, 0, 0, 13194, 13195, 7, 15, 0, 0, 13195, 13196, 7, 12, 0, 0, 13196, 13197, 7, 22, 0, 0, 13197, 2192, 1, 0, 0, 0, 13198, 13199, 7, 9, 0, 0, 13199, 13200, 7, 15, 0, 0, 13200, 13201, 7, 6, 0, 0, 13201, 13202, 7, 20, 0, 0, 13202, 13203, 7, 15, 0, 0, 13203, 13204, 7, 12, 0, 0, 13204, 2194, 1, 0, 0, 0, 13205, 13206, 7, 10, 0, 0, 13206, 13207, 7, 7, 0, 0, 13207, 13208, 7, 3, 0, 0, 13208, 13209, 7, 8, 0, 0, 13209, 13210, 7, 9, 0, 0, 13210, 13211, 7, 7, 0, 0, 13211, 13212, 7, 7, 0, 0, 13212, 13213, 7, 21, 0, 0, 13213, 2196, 1, 0, 0, 0, 13214, 13215, 7, 10, 0, 0, 13215, 2198, 1, 0, 0, 0, 13216, 13217, 7, 26, 0, 0, 13217, 2200, 1, 0, 0, 0, 13218, 13219, 5, 58, 0, 0, 13219, 13220, 5, 61, 0, 0, 13220, 2202, 1, 0, 0, 0, 13221, 13222, 5, 43, 0, 0, 13222, 13223, 5, 61, 0, 0, 13223, 2204, 1, 0, 0, 0, 13224, 13225, 5, 45, 0, 0, 13225, 13226, 5, 61, 0, 0, 13226, 2206, 1, 0, 0, 0, 13227, 13228, 5, 42, 0, 0, 13228, 13229, 5, 61, 0, 0, 13229, 2208, 1, 0, 0, 0, 13230, 13231, 5, 47, 0, 0, 13231, 13232, 5, 61, 0, 0, 13232, 2210, 1, 0, 0, 0, 13233, 13234, 5, 37, 0, 0, 13234, 13235, 5, 61, 0, 0, 13235, 2212, 1, 0, 0, 0, 13236, 13237, 5, 38, 0, 0, 13237, 13238, 5, 61, 0, 0, 13238, 2214, 1, 0, 0, 0, 13239, 13240, 5, 94, 0, 0, 13240, 13241, 5, 61, 0, 0, 13241, 2216, 1, 0, 0, 0, 13242, 13243, 5, 124, 0, 0, 13243, 13244, 5, 61, 0, 0, 13244, 2218, 1, 0, 0, 0, 13245, 13246, 5, 42, 0, 0, 13246, 2220, 1, 0, 0, 0, 13247, 13248, 5, 47, 0, 0, 13248, 2222, 1, 0, 0, 0, 13249, 13250, 5, 37, 0, 0, 13250, 2224, 1, 0, 0, 0, 13251, 13252, 5, 43, 0, 0, 13252, 2226, 1, 0, 0, 0, 13253, 13254, 5, 45, 0, 0, 13254, 2228, 1, 0, 0, 0, 13255, 13256, 7, 4, 0, 0, 13256, 13257, 7, 15, 0, 0, 13257, 13258, 7, 24, 0, 0, 13258, 2230, 1, 0, 0, 0, 13259, 13260, 7, 23, 0, 0, 13260, 13261, 7, 19, 0, 0, 13261, 13262, 7, 4, 0, 0, 13262, 2232, 1, 0, 0, 0, 13263, 13264, 5, 61, 0, 0, 13264, 2234, 1, 0, 0, 0, 13265, 13266, 5, 62, 0, 0, 13266, 2236, 1, 0, 0, 0, 13267, 13268, 5, 60, 0, 0, 13268, 2238, 1, 0, 0, 0, 13269, 13270, 5, 33, 0, 0, 13270, 2240, 1, 0, 0, 0, 13271, 13272, 5, 126, 0, 0, 13272, 2242, 1, 0, 0, 0, 13273, 13274, 5, 124, 0, 0, 13274, 2244, 1, 0, 0, 0, 13275, 13276, 5, 38, 0, 0, 13276, 2246, 1, 0, 0, 0, 13277, 13278, 5, 94, 0, 0, 13278, 2248, 1, 0, 0, 0, 13279, 13280, 5, 46, 0, 0, 13280, 2250, 1, 0, 0, 0, 13281, 13282, 5, 40, 0, 0, 13282, 2252, 1, 0, 0, 0, 13283, 13284, 5, 41, 0, 0, 13284, 2254, 1, 0, 0, 0, 13285, 13286, 5, 44, 0, 0, 13286, 2256, 1, 0, 0, 0, 13287, 13288, 5, 59, 0, 0, 13288, 2258, 1, 0, 0, 0, 13289, 13290, 5, 64, 0, 0, 13290, 2260, 1, 0, 0, 0, 13291, 13292, 5, 48, 0, 0, 13292, 2262, 1, 0, 0, 0, 13293, 13294, 5, 49, 0, 0, 13294, 2264, 1, 0, 0, 0, 13295, 13296, 5, 50, 0, 0, 13296, 2266, 1, 0, 0, 0, 13297, 13298, 5, 39, 0, 0, 13298, 2268, 1, 0, 0, 0, 13299, 13300, 5, 34, 0, 0, 13300, 2270, 1, 0, 0, 0, 13301, 13302, 5, 96, 0, 0, 13302, 2272, 1, 0, 0, 0, 13303, 13304, 5, 58, 0, 0, 13304, 2274, 1, 0, 0, 0, 13305, 13309, 3, 2267, 1133, 0, 13306, 13309, 3, 2269, 1134, 0, 13307, 13309, 3, 2271, 1135, 0, 13308, 13305, 1, 0, 0, 0, 13308, 13306, 1, 0, 0, 0, 13308, 13307, 1, 0, 0, 0, 13309, 2276, 1, 0, 0, 0, 13310, 13311, 5, 96, 0, 0, 13311, 13312, 3, 2311, 1155, 0, 13312, 13313, 5, 96, 0, 0, 13313, 2278, 1, 0, 0, 0, 13314, 13316, 3, 2325, 1162, 0, 13315, 13314, 1, 0, 0, 0, 13316, 13317, 1, 0, 0, 0, 13317, 13315, 1, 0, 0, 0, 13317, 13318, 1, 0, 0, 0, 13318, 13319, 1, 0, 0, 0, 13319, 13320, 7, 29, 0, 0, 13320, 2280, 1, 0, 0, 0, 13321, 13322, 7, 12, 0, 0, 13322, 13323, 3, 2319, 1159, 0, 13323, 2282, 1, 0, 0, 0, 13324, 13328, 3, 2317, 1158, 0, 13325, 13328, 3, 2319, 1159, 0, 13326, 13328, 3, 2321, 1160, 0, 13327, 13324, 1, 0, 0, 0, 13327, 13325, 1, 0, 0, 0, 13327, 13326, 1, 0, 0, 0, 13328, 2284, 1, 0, 0, 0, 13329, 13331, 3, 2325, 1162, 0, 13330, 13329, 1, 0, 0, 0, 13331, 13332, 1, 0, 0, 0, 13332, 13330, 1, 0, 0, 0, 13332, 13333, 1, 0, 0, 0, 13333, 2286, 1, 0, 0, 0, 13334, 13335, 7, 26, 0, 0, 13335, 13339, 5, 39, 0, 0, 13336, 13337, 3, 2323, 1161, 0, 13337, 13338, 3, 2323, 1161, 0, 13338, 13340, 1, 0, 0, 0, 13339, 13336, 1, 0, 0, 0, 13340, 13341, 1, 0, 0, 0, 13341, 13339, 1, 0, 0, 0, 13341, 13342, 1, 0, 0, 0, 13342, 13343, 1, 0, 0, 0, 13343, 13344, 5, 39, 0, 0, 13344, 13354, 1, 0, 0, 0, 13345, 13346, 5, 48, 0, 0, 13346, 13347, 7, 26, 0, 0, 13347, 13349, 1, 0, 0, 0, 13348, 13350, 3, 2323, 1161, 0, 13349, 13348, 1, 0, 0, 0, 13350, 13351, 1, 0, 0, 0, 13351, 13349, 1, 0, 0, 0, 13351, 13352, 1, 0, 0, 0, 13352, 13354, 1, 0, 0, 0, 13353, 13334, 1, 0, 0, 0, 13353, 13345, 1, 0, 0, 0, 13354, 2288, 1, 0, 0, 0, 13355, 13357, 3, 2325, 1162, 0, 13356, 13355, 1, 0, 0, 0, 13357, 13358, 1, 0, 0, 0, 13358, 13356, 1, 0, 0, 0, 13358, 13359, 1, 0, 0, 0, 13359, 13361, 1, 0, 0, 0, 13360, 13356, 1, 0, 0, 0, 13360, 13361, 1, 0, 0, 0, 13361, 13362, 1, 0, 0, 0, 13362, 13364, 5, 46, 0, 0, 13363, 13365, 3, 2325, 1162, 0, 13364, 13363, 1, 0, 0, 0, 13365, 13366, 1, 0, 0, 0, 13366, 13364, 1, 0, 0, 0, 13366, 13367, 1, 0, 0, 0, 13367, 13399, 1, 0, 0, 0, 13368, 13370, 3, 2325, 1162, 0, 13369, 13368, 1, 0, 0, 0, 13370, 13371, 1, 0, 0, 0, 13371, 13369, 1, 0, 0, 0, 13371, 13372, 1, 0, 0, 0, 13372, 13373, 1, 0, 0, 0, 13373, 13374, 5, 46, 0, 0, 13374, 13375, 3, 2313, 1156, 0, 13375, 13399, 1, 0, 0, 0, 13376, 13378, 3, 2325, 1162, 0, 13377, 13376, 1, 0, 0, 0, 13378, 13379, 1, 0, 0, 0, 13379, 13377, 1, 0, 0, 0, 13379, 13380, 1, 0, 0, 0, 13380, 13382, 1, 0, 0, 0, 13381, 13377, 1, 0, 0, 0, 13381, 13382, 1, 0, 0, 0, 13382, 13383, 1, 0, 0, 0, 13383, 13385, 5, 46, 0, 0, 13384, 13386, 3, 2325, 1162, 0, 13385, 13384, 1, 0, 0, 0, 13386, 13387, 1, 0, 0, 0, 13387, 13385, 1, 0, 0, 0, 13387, 13388, 1, 0, 0, 0, 13388, 13389, 1, 0, 0, 0, 13389, 13390, 3, 2313, 1156, 0, 13390, 13399, 1, 0, 0, 0, 13391, 13393, 3, 2325, 1162, 0, 13392, 13391, 1, 0, 0, 0, 13393, 13394, 1, 0, 0, 0, 13394, 13392, 1, 0, 0, 0, 13394, 13395, 1, 0, 0, 0, 13395, 13396, 1, 0, 0, 0, 13396, 13397, 3, 2313, 1156, 0, 13397, 13399, 1, 0, 0, 0, 13398, 13360, 1, 0, 0, 0, 13398, 13369, 1, 0, 0, 0, 13398, 13381, 1, 0, 0, 0, 13398, 13392, 1, 0, 0, 0, 13399, 2290, 1, 0, 0, 0, 13400, 13401, 5, 92, 0, 0, 13401, 13402, 7, 12, 0, 0, 13402, 2292, 1, 0, 0, 0, 13403, 13404, 3, 2327, 1163, 0, 13404, 2294, 1, 0, 0, 0, 13405, 13406, 5, 95, 0, 0, 13406, 13407, 3, 2311, 1155, 0, 13407, 2296, 1, 0, 0, 0, 13408, 13409, 5, 46, 0, 0, 13409, 13410, 3, 2315, 1157, 0, 13410, 2298, 1, 0, 0, 0, 13411, 13412, 3, 2315, 1157, 0, 13412, 2300, 1, 0, 0, 0, 13413, 13415, 5, 96, 0, 0, 13414, 13416, 8, 30, 0, 0, 13415, 13414, 1, 0, 0, 0, 13416, 13417, 1, 0, 0, 0, 13417, 13415, 1, 0, 0, 0, 13417, 13418, 1, 0, 0, 0, 13418, 13419, 1, 0, 0, 0, 13419, 13420, 5, 96, 0, 0, 13420, 2302, 1, 0, 0, 0, 13421, 13426, 3, 2319, 1159, 0, 13422, 13426, 3, 2317, 1158, 0, 13423, 13426, 3, 2321, 1160, 0, 13424, 13426, 3, 2315, 1157, 0, 13425, 13421, 1, 0, 0, 0, 13425, 13422, 1, 0, 0, 0, 13425, 13423, 1, 0, 0, 0, 13425, 13424, 1, 0, 0, 0, 13426, 13427, 1, 0, 0, 0, 13427, 13433, 5, 64, 0, 0, 13428, 13434, 3, 2319, 1159, 0, 13429, 13434, 3, 2317, 1158, 0, 13430, 13434, 3, 2321, 1160, 0, 13431, 13434, 3, 2315, 1157, 0, 13432, 13434, 3, 2305, 1152, 0, 13433, 13428, 1, 0, 0, 0, 13433, 13429, 1, 0, 0, 0, 13433, 13430, 1, 0, 0, 0, 13433, 13431, 1, 0, 0, 0, 13433, 13432, 1, 0, 0, 0, 13434, 2304, 1, 0, 0, 0, 13435, 13437, 7, 31, 0, 0, 13436, 13435, 1, 0, 0, 0, 13437, 13438, 1, 0, 0, 0, 13438, 13436, 1, 0, 0, 0, 13438, 13439, 1, 0, 0, 0, 13439, 13440, 1, 0, 0, 0, 13440, 13442, 5, 46, 0, 0, 13441, 13443, 7, 32, 0, 0, 13442, 13441, 1, 0, 0, 0, 13443, 13444, 1, 0, 0, 0, 13444, 13442, 1, 0, 0, 0, 13444, 13445, 1, 0, 0, 0, 13445, 13458, 1, 0, 0, 0, 13446, 13448, 7, 33, 0, 0, 13447, 13446, 1, 0, 0, 0, 13448, 13449, 1, 0, 0, 0, 13449, 13447, 1, 0, 0, 0, 13449, 13450, 1, 0, 0, 0, 13450, 13451, 1, 0, 0, 0, 13451, 13453, 5, 58, 0, 0, 13452, 13454, 7, 33, 0, 0, 13453, 13452, 1, 0, 0, 0, 13454, 13455, 1, 0, 0, 0, 13455, 13453, 1, 0, 0, 0, 13455, 13456, 1, 0, 0, 0, 13456, 13458, 1, 0, 0, 0, 13457, 13436, 1, 0, 0, 0, 13457, 13447, 1, 0, 0, 0, 13458, 2306, 1, 0, 0, 0, 13459, 13468, 5, 64, 0, 0, 13460, 13462, 7, 34, 0, 0, 13461, 13460, 1, 0, 0, 0, 13462, 13463, 1, 0, 0, 0, 13463, 13461, 1, 0, 0, 0, 13463, 13464, 1, 0, 0, 0, 13464, 13469, 1, 0, 0, 0, 13465, 13469, 3, 2319, 1159, 0, 13466, 13469, 3, 2317, 1158, 0, 13467, 13469, 3, 2321, 1160, 0, 13468, 13461, 1, 0, 0, 0, 13468, 13465, 1, 0, 0, 0, 13468, 13466, 1, 0, 0, 0, 13468, 13467, 1, 0, 0, 0, 13469, 2308, 1, 0, 0, 0, 13470, 13471, 5, 64, 0, 0, 13471, 13478, 5, 64, 0, 0, 13472, 13474, 7, 34, 0, 0, 13473, 13472, 1, 0, 0, 0, 13474, 13475, 1, 0, 0, 0, 13475, 13473, 1, 0, 0, 0, 13475, 13476, 1, 0, 0, 0, 13476, 13479, 1, 0, 0, 0, 13477, 13479, 3, 2321, 1160, 0, 13478, 13473, 1, 0, 0, 0, 13478, 13477, 1, 0, 0, 0, 13479, 2310, 1, 0, 0, 0, 13480, 13522, 3, 1481, 740, 0, 13481, 13522, 3, 1483, 741, 0, 13482, 13522, 3, 1485, 742, 0, 13483, 13522, 3, 447, 223, 0, 13484, 13522, 3, 1487, 743, 0, 13485, 13522, 3, 1489, 744, 0, 13486, 13522, 3, 1491, 745, 0, 13487, 13522, 3, 1493, 746, 0, 13488, 13522, 3, 1495, 747, 0, 13489, 13522, 3, 1497, 748, 0, 13490, 13522, 3, 1499, 749, 0, 13491, 13522, 3, 1501, 750, 0, 13492, 13522, 3, 1503, 751, 0, 13493, 13522, 3, 1505, 752, 0, 13494, 13522, 3, 1507, 753, 0, 13495, 13522, 3, 1511, 755, 0, 13496, 13522, 3, 1513, 756, 0, 13497, 13522, 3, 1515, 757, 0, 13498, 13522, 3, 1517, 758, 0, 13499, 13522, 3, 1519, 759, 0, 13500, 13522, 3, 1521, 760, 0, 13501, 13522, 3, 1523, 761, 0, 13502, 13522, 3, 1525, 762, 0, 13503, 13522, 3, 1527, 763, 0, 13504, 13522, 3, 1529, 764, 0, 13505, 13522, 3, 1531, 765, 0, 13506, 13522, 3, 1533, 766, 0, 13507, 13522, 3, 1535, 767, 0, 13508, 13522, 3, 1537, 768, 0, 13509, 13522, 3, 1539, 769, 0, 13510, 13522, 3, 1541, 770, 0, 13511, 13522, 3, 1543, 771, 0, 13512, 13522, 3, 1545, 772, 0, 13513, 13522, 3, 1547, 773, 0, 13514, 13522, 3, 1549, 774, 0, 13515, 13522, 3, 1551, 775, 0, 13516, 13522, 3, 1553, 776, 0, 13517, 13522, 3, 1555, 777, 0, 13518, 13522, 3, 1557, 778, 0, 13519, 13522, 3, 1559, 779, 0, 13520, 13522, 3, 1561, 780, 0, 13521, 13480, 1, 0, 0, 0, 13521, 13481, 1, 0, 0, 0, 13521, 13482, 1, 0, 0, 0, 13521, 13483, 1, 0, 0, 0, 13521, 13484, 1, 0, 0, 0, 13521, 13485, 1, 0, 0, 0, 13521, 13486, 1, 0, 0, 0, 13521, 13487, 1, 0, 0, 0, 13521, 13488, 1, 0, 0, 0, 13521, 13489, 1, 0, 0, 0, 13521, 13490, 1, 0, 0, 0, 13521, 13491, 1, 0, 0, 0, 13521, 13492, 1, 0, 0, 0, 13521, 13493, 1, 0, 0, 0, 13521, 13494, 1, 0, 0, 0, 13521, 13495, 1, 0, 0, 0, 13521, 13496, 1, 0, 0, 0, 13521, 13497, 1, 0, 0, 0, 13521, 13498, 1, 0, 0, 0, 13521, 13499, 1, 0, 0, 0, 13521, 13500, 1, 0, 0, 0, 13521, 13501, 1, 0, 0, 0, 13521, 13502, 1, 0, 0, 0, 13521, 13503, 1, 0, 0, 0, 13521, 13504, 1, 0, 0, 0, 13521, 13505, 1, 0, 0, 0, 13521, 13506, 1, 0, 0, 0, 13521, 13507, 1, 0, 0, 0, 13521, 13508, 1, 0, 0, 0, 13521, 13509, 1, 0, 0, 0, 13521, 13510, 1, 0, 0, 0, 13521, 13511, 1, 0, 0, 0, 13521, 13512, 1, 0, 0, 0, 13521, 13513, 1, 0, 0, 0, 13521, 13514, 1, 0, 0, 0, 13521, 13515, 1, 0, 0, 0, 13521, 13516, 1, 0, 0, 0, 13521, 13517, 1, 0, 0, 0, 13521, 13518, 1, 0, 0, 0, 13521, 13519, 1, 0, 0, 0, 13521, 13520, 1, 0, 0, 0, 13522, 2312, 1, 0, 0, 0, 13523, 13525, 7, 7, 0, 0, 13524, 13526, 7, 35, 0, 0, 13525, 13524, 1, 0, 0, 0, 13525, 13526, 1, 0, 0, 0, 13526, 13528, 1, 0, 0, 0, 13527, 13529, 3, 2325, 1162, 0, 13528, 13527, 1, 0, 0, 0, 13529, 13530, 1, 0, 0, 0, 13530, 13528, 1, 0, 0, 0, 13530, 13531, 1, 0, 0, 0, 13531, 2314, 1, 0, 0, 0, 13532, 13534, 7, 36, 0, 0, 13533, 13532, 1, 0, 0, 0, 13534, 13537, 1, 0, 0, 0, 13535, 13536, 1, 0, 0, 0, 13535, 13533, 1, 0, 0, 0, 13536, 13539, 1, 0, 0, 0, 13537, 13535, 1, 0, 0, 0, 13538, 13540, 7, 37, 0, 0, 13539, 13538, 1, 0, 0, 0, 13540, 13541, 1, 0, 0, 0, 13541, 13542, 1, 0, 0, 0, 13541, 13539, 1, 0, 0, 0, 13542, 13546, 1, 0, 0, 0, 13543, 13545, 7, 36, 0, 0, 13544, 13543, 1, 0, 0, 0, 13545, 13548, 1, 0, 0, 0, 13546, 13544, 1, 0, 0, 0, 13546, 13547, 1, 0, 0, 0, 13547, 2316, 1, 0, 0, 0, 13548, 13546, 1, 0, 0, 0, 13549, 13557, 5, 34, 0, 0, 13550, 13551, 5, 92, 0, 0, 13551, 13556, 9, 0, 0, 0, 13552, 13553, 5, 34, 0, 0, 13553, 13556, 5, 34, 0, 0, 13554, 13556, 8, 38, 0, 0, 13555, 13550, 1, 0, 0, 0, 13555, 13552, 1, 0, 0, 0, 13555, 13554, 1, 0, 0, 0, 13556, 13559, 1, 0, 0, 0, 13557, 13555, 1, 0, 0, 0, 13557, 13558, 1, 0, 0, 0, 13558, 13560, 1, 0, 0, 0, 13559, 13557, 1, 0, 0, 0, 13560, 13561, 5, 34, 0, 0, 13561, 2318, 1, 0, 0, 0, 13562, 13570, 5, 39, 0, 0, 13563, 13564, 5, 92, 0, 0, 13564, 13569, 9, 0, 0, 0, 13565, 13566, 5, 39, 0, 0, 13566, 13569, 5, 39, 0, 0, 13567, 13569, 8, 39, 0, 0, 13568, 13563, 1, 0, 0, 0, 13568, 13565, 1, 0, 0, 0, 13568, 13567, 1, 0, 0, 0, 13569, 13572, 1, 0, 0, 0, 13570, 13568, 1, 0, 0, 0, 13570, 13571, 1, 0, 0, 0, 13571, 13573, 1, 0, 0, 0, 13572, 13570, 1, 0, 0, 0, 13573, 13574, 5, 39, 0, 0, 13574, 2320, 1, 0, 0, 0, 13575, 13583, 5, 96, 0, 0, 13576, 13577, 5, 92, 0, 0, 13577, 13582, 9, 0, 0, 0, 13578, 13579, 5, 96, 0, 0, 13579, 13582, 5, 96, 0, 0, 13580, 13582, 8, 40, 0, 0, 13581, 13576, 1, 0, 0, 0, 13581, 13578, 1, 0, 0, 0, 13581, 13580, 1, 0, 0, 0, 13582, 13585, 1, 0, 0, 0, 13583, 13581, 1, 0, 0, 0, 13583, 13584, 1, 0, 0, 0, 13584, 13586, 1, 0, 0, 0, 13585, 13583, 1, 0, 0, 0, 13586, 13587, 5, 96, 0, 0, 13587, 2322, 1, 0, 0, 0, 13588, 13589, 7, 41, 0, 0, 13589, 2324, 1, 0, 0, 0, 13590, 13591, 7, 31, 0, 0, 13591, 2326, 1, 0, 0, 0, 13592, 13593, 7, 16, 0, 0, 13593, 13595, 5, 39, 0, 0, 13594, 13596, 7, 42, 0, 0, 13595, 13594, 1, 0, 0, 0, 13596, 13597, 1, 0, 0, 0, 13597, 13595, 1, 0, 0, 0, 13597, 13598, 1, 0, 0, 0, 13598, 13599, 1, 0, 0, 0, 13599, 13600, 5, 39, 0, 0, 13600, 2328, 1, 0, 0, 0, 13601, 13602, 9, 0, 0, 0, 13602, 13603, 1, 0, 0, 0, 13603, 13604, 6, 1164, 2, 0, 13604, 2330, 1, 0, 0, 0, 58, 0, 2334, 2345, 2358, 2372, 2376, 2381, 2385, 2389, 2395, 2399, 2401, 5514, 5529, 5531, 9175, 9202, 13308, 13317, 13327, 13332, 13341, 13351, 13353, 13358, 13360, 13366, 13371, 13379, 13381, 13387, 13394, 13398, 13417, 13425, 13433, 13438, 13444, 13449, 13455, 13457, 13463, 13468, 13475, 13478, 13521, 13525, 13530, 13535, 13541, 13546, 13555, 13557, 13568, 13570, 13581, 13583, 13597, 3, 0, 1, 0, 0, 2, 0, 0, 3, 0] \ No newline at end of file diff --git a/internal/mysqld/parser/antlrparser/parser/MySqlLexer.tokens b/internal/mysqld/parser/antlrparser/parser/MySqlLexer.tokens new file mode 100644 index 0000000000..e371479d5f --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/MySqlLexer.tokens @@ -0,0 +1,2286 @@ +SPACE=1 +SPEC_MYSQL_COMMENT=2 +COMMENT_INPUT=3 +LINE_COMMENT=4 +ADD=5 +ALL=6 +ALTER=7 +ALWAYS=8 +ANALYZE=9 +AND=10 +ARRAY=11 +AS=12 +ASC=13 +ATTRIBUTE=14 +BEFORE=15 +BETWEEN=16 +BOTH=17 +BUCKETS=18 +BY=19 +CALL=20 +CASCADE=21 +CASE=22 +CAST=23 +CHANGE=24 +CHARACTER=25 +CHECK=26 +COLLATE=27 +COLUMN=28 +CONDITION=29 +CONSTRAINT=30 +CONTINUE=31 +CONVERT=32 +CREATE=33 +CROSS=34 +CURRENT=35 +CURRENT_ROLE=36 +CURRENT_USER=37 +CURSOR=38 +DATABASE=39 +DATABASES=40 +DECLARE=41 +DEFAULT=42 +DELAYED=43 +DELETE=44 +DESC=45 +DESCRIBE=46 +DETERMINISTIC=47 +DIAGNOSTICS=48 +DISTINCT=49 +DISTINCTROW=50 +DROP=51 +EACH=52 +ELSE=53 +ELSEIF=54 +EMPTY=55 +ENCLOSED=56 +ESCAPED=57 +EXCEPT=58 +EXISTS=59 +EXIT=60 +EXPLAIN=61 +FALSE=62 +FETCH=63 +FOR=64 +FORCE=65 +FOREIGN=66 +FROM=67 +FULLTEXT=68 +GENERATED=69 +GET=70 +GRANT=71 +GROUP=72 +HAVING=73 +HIGH_PRIORITY=74 +HISTOGRAM=75 +IF=76 +IGNORE=77 +IGNORED=78 +IN=79 +INDEX=80 +INFILE=81 +INNER=82 +INOUT=83 +INSERT=84 +INTERVAL=85 +INTO=86 +IS=87 +ITERATE=88 +JOIN=89 +KEY=90 +KEYS=91 +KILL=92 +LATERAL=93 +LEADING=94 +LEAVE=95 +LEFT=96 +LIKE=97 +LIMIT=98 +LINEAR=99 +LINES=100 +LOAD=101 +LOCK=102 +LOCKED=103 +LOOP=104 +LOW_PRIORITY=105 +MASTER_BIND=106 +MASTER_SSL_VERIFY_SERVER_CERT=107 +MATCH=108 +MAXVALUE=109 +MINVALUE=110 +MODIFIES=111 +NATURAL=112 +NOT=113 +NO_WRITE_TO_BINLOG=114 +NULL_LITERAL=115 +NUMBER=116 +ON=117 +OPTIMIZE=118 +OPTION=119 +OPTIONAL=120 +OPTIONALLY=121 +OR=122 +ORDER=123 +OUT=124 +OUTER=125 +OUTFILE=126 +OVER=127 +PARTITION=128 +PRIMARY=129 +PROCEDURE=130 +PURGE=131 +RANGE=132 +READ=133 +READS=134 +REFERENCES=135 +REGEXP=136 +RELEASE=137 +RENAME=138 +REPEAT=139 +REPLACE=140 +REQUIRE=141 +RESIGNAL=142 +RESTRICT=143 +RETAIN=144 +RETURN=145 +REVOKE=146 +RIGHT=147 +RLIKE=148 +SCHEMA=149 +SCHEMAS=150 +SELECT=151 +SET=152 +SEPARATOR=153 +SHOW=154 +SIGNAL=155 +SKIP_=156 +SPATIAL=157 +SQL=158 +SQLEXCEPTION=159 +SQLSTATE=160 +SQLWARNING=161 +SQL_BIG_RESULT=162 +SQL_CALC_FOUND_ROWS=163 +SQL_SMALL_RESULT=164 +SSL=165 +STACKED=166 +STARTING=167 +STATEMENT=168 +STRAIGHT_JOIN=169 +TABLE=170 +TERMINATED=171 +THEN=172 +TO=173 +TRAILING=174 +TRIGGER=175 +TRUE=176 +UNDO=177 +UNION=178 +UNIQUE=179 +UNLOCK=180 +UNSIGNED=181 +UPDATE=182 +USAGE=183 +USE=184 +USING=185 +VALUES=186 +WHEN=187 +WHERE=188 +WHILE=189 +WITH=190 +WRITE=191 +XOR=192 +ZEROFILL=193 +TINYINT=194 +SMALLINT=195 +MEDIUMINT=196 +MIDDLEINT=197 +INT=198 +INT1=199 +INT2=200 +INT3=201 +INT4=202 +INT8=203 +INTEGER=204 +BIGINT=205 +REAL=206 +DOUBLE=207 +PRECISION=208 +FLOAT=209 +FLOAT4=210 +FLOAT8=211 +DECIMAL=212 +DEC=213 +NUMERIC=214 +DATE=215 +TIME=216 +TIMESTAMP=217 +DATETIME=218 +YEAR=219 +CHAR=220 +VARCHAR=221 +NVARCHAR=222 +NATIONAL=223 +BINARY=224 +VARBINARY=225 +TINYBLOB=226 +BLOB=227 +MEDIUMBLOB=228 +LONG=229 +LONGBLOB=230 +TINYTEXT=231 +TEXT=232 +MEDIUMTEXT=233 +LONGTEXT=234 +ENUM=235 +VARYING=236 +SERIAL=237 +YEAR_MONTH=238 +DAY_HOUR=239 +DAY_MINUTE=240 +DAY_SECOND=241 +HOUR_MINUTE=242 +HOUR_SECOND=243 +MINUTE_SECOND=244 +SECOND_MICROSECOND=245 +MINUTE_MICROSECOND=246 +HOUR_MICROSECOND=247 +DAY_MICROSECOND=248 +JSON_ARRAY=249 +JSON_ARRAYAGG=250 +JSON_ARRAY_APPEND=251 +JSON_ARRAY_INSERT=252 +JSON_CONTAINS=253 +JSON_CONTAINS_PATH=254 +JSON_DEPTH=255 +JSON_EXTRACT=256 +JSON_INSERT=257 +JSON_KEYS=258 +JSON_LENGTH=259 +JSON_MERGE=260 +JSON_MERGE_PATCH=261 +JSON_MERGE_PRESERVE=262 +JSON_OBJECT=263 +JSON_OBJECTAGG=264 +JSON_OVERLAPS=265 +JSON_PRETTY=266 +JSON_QUOTE=267 +JSON_REMOVE=268 +JSON_REPLACE=269 +JSON_SCHEMA_VALID=270 +JSON_SCHEMA_VALIDATION_REPORT=271 +JSON_SEARCH=272 +JSON_SET=273 +JSON_STORAGE_FREE=274 +JSON_STORAGE_SIZE=275 +JSON_TABLE=276 +JSON_TYPE=277 +JSON_UNQUOTE=278 +JSON_VALID=279 +JSON_VALUE=280 +NESTED=281 +ORDINALITY=282 +PATH=283 +AVG=284 +BIT_AND=285 +BIT_OR=286 +BIT_XOR=287 +COUNT=288 +CUME_DIST=289 +DENSE_RANK=290 +FIRST_VALUE=291 +GROUP_CONCAT=292 +LAG=293 +LAST_VALUE=294 +LEAD=295 +MAX=296 +MIN=297 +NTILE=298 +NTH_VALUE=299 +PERCENT_RANK=300 +RANK=301 +ROW_NUMBER=302 +STD=303 +STDDEV=304 +STDDEV_POP=305 +STDDEV_SAMP=306 +SUM=307 +VAR_POP=308 +VAR_SAMP=309 +VARIANCE=310 +CURRENT_DATE=311 +CURRENT_TIME=312 +CURRENT_TIMESTAMP=313 +LOCALTIME=314 +CURDATE=315 +CURTIME=316 +DATE_ADD=317 +DATE_SUB=318 +EXTRACT=319 +LOCALTIMESTAMP=320 +NOW=321 +POSITION=322 +SUBSTR=323 +SUBSTRING=324 +SYSDATE=325 +TRIM=326 +UTC_DATE=327 +UTC_TIME=328 +UTC_TIMESTAMP=329 +ACCOUNT=330 +ACTION=331 +AFTER=332 +AGGREGATE=333 +ALGORITHM=334 +ANY=335 +AT=336 +AUTHORS=337 +AUTOCOMMIT=338 +AUTOEXTEND_SIZE=339 +AUTO_INCREMENT=340 +AVG_ROW_LENGTH=341 +BEGIN=342 +BINLOG=343 +BIT=344 +BLOCK=345 +BOOL=346 +BOOLEAN=347 +BTREE=348 +CACHE=349 +CASCADED=350 +CHAIN=351 +CHANGED=352 +CHANNEL=353 +CHECKSUM=354 +PAGE_CHECKSUM=355 +CIPHER=356 +CLASS_ORIGIN=357 +CLIENT=358 +CLOSE=359 +CLUSTERING=360 +COALESCE=361 +CODE=362 +COLUMNS=363 +COLUMN_FORMAT=364 +COLUMN_NAME=365 +COMMENT=366 +COMMIT=367 +COMPACT=368 +COMPLETION=369 +COMPRESSED=370 +COMPRESSION=371 +CONCURRENT=372 +CONNECT=373 +CONNECTION=374 +CONSISTENT=375 +CONSTRAINT_CATALOG=376 +CONSTRAINT_SCHEMA=377 +CONSTRAINT_NAME=378 +CONTAINS=379 +CONTEXT=380 +CONTRIBUTORS=381 +COPY=382 +CPU=383 +CYCLE=384 +CURSOR_NAME=385 +DATA=386 +DATAFILE=387 +DEALLOCATE=388 +DEFAULT_AUTH=389 +DEFINER=390 +DELAY_KEY_WRITE=391 +DES_KEY_FILE=392 +DIRECTORY=393 +DISABLE=394 +DISCARD=395 +DISK=396 +DO=397 +DUMPFILE=398 +DUPLICATE=399 +DYNAMIC=400 +ENABLE=401 +ENCRYPTED=402 +ENCRYPTION=403 +ENCRYPTION_KEY_ID=404 +END=405 +ENDS=406 +ENGINE=407 +ENGINES=408 +ERROR=409 +ERRORS=410 +ESCAPE=411 +EVEN=412 +EVENT=413 +EVENTS=414 +EVERY=415 +EXCHANGE=416 +EXCLUSIVE=417 +EXPIRE=418 +EXPORT=419 +EXTENDED=420 +EXTENT_SIZE=421 +FAILED_LOGIN_ATTEMPTS=422 +FAST=423 +FAULTS=424 +FIELDS=425 +FILE_BLOCK_SIZE=426 +FILTER=427 +FIRST=428 +FIXED=429 +FLUSH=430 +FOLLOWING=431 +FOLLOWS=432 +FOUND=433 +FULL=434 +FUNCTION=435 +GENERAL=436 +GLOBAL=437 +GRANTS=438 +GROUP_REPLICATION=439 +HANDLER=440 +HASH=441 +HELP=442 +HISTORY=443 +HOST=444 +HOSTS=445 +IDENTIFIED=446 +IGNORE_SERVER_IDS=447 +IMPORT=448 +INCREMENT=449 +INDEXES=450 +INITIAL_SIZE=451 +INPLACE=452 +INSERT_METHOD=453 +INSTALL=454 +INSTANCE=455 +INSTANT=456 +INVISIBLE=457 +INVOKER=458 +IO=459 +IO_THREAD=460 +IPC=461 +ISOLATION=462 +ISSUER=463 +JSON=464 +KEY_BLOCK_SIZE=465 +LANGUAGE=466 +LAST=467 +LEAVES=468 +LESS=469 +LEVEL=470 +LIST=471 +LOCAL=472 +LOGFILE=473 +LOGS=474 +MASTER=475 +MASTER_AUTO_POSITION=476 +MASTER_CONNECT_RETRY=477 +MASTER_DELAY=478 +MASTER_HEARTBEAT_PERIOD=479 +MASTER_HOST=480 +MASTER_LOG_FILE=481 +MASTER_LOG_POS=482 +MASTER_PASSWORD=483 +MASTER_PORT=484 +MASTER_RETRY_COUNT=485 +MASTER_SSL=486 +MASTER_SSL_CA=487 +MASTER_SSL_CAPATH=488 +MASTER_SSL_CERT=489 +MASTER_SSL_CIPHER=490 +MASTER_SSL_CRL=491 +MASTER_SSL_CRLPATH=492 +MASTER_SSL_KEY=493 +MASTER_TLS_VERSION=494 +MASTER_USER=495 +MAX_CONNECTIONS_PER_HOUR=496 +MAX_QUERIES_PER_HOUR=497 +MAX_ROWS=498 +MAX_SIZE=499 +MAX_UPDATES_PER_HOUR=500 +MAX_USER_CONNECTIONS=501 +MEDIUM=502 +MEMBER=503 +MERGE=504 +MESSAGE_TEXT=505 +MID=506 +MIGRATE=507 +MIN_ROWS=508 +MODE=509 +MODIFY=510 +MUTEX=511 +MYSQL=512 +MYSQL_ERRNO=513 +NAME=514 +NAMES=515 +NCHAR=516 +NEVER=517 +NEXT=518 +NO=519 +NOCACHE=520 +NOCOPY=521 +NOCYCLE=522 +NOMAXVALUE=523 +NOMINVALUE=524 +NOWAIT=525 +NODEGROUP=526 +NONE=527 +ODBC=528 +OFFLINE=529 +OFFSET=530 +OF=531 +OJ=532 +OLD_PASSWORD=533 +ONE=534 +ONLINE=535 +ONLY=536 +OPEN=537 +OPTIMIZER_COSTS=538 +OPTIONS=539 +OWNER=540 +PACK_KEYS=541 +PAGE=542 +PAGE_COMPRESSED=543 +PAGE_COMPRESSION_LEVEL=544 +PARSER=545 +PARTIAL=546 +PARTITIONING=547 +PARTITIONS=548 +PASSWORD=549 +PASSWORD_LOCK_TIME=550 +PHASE=551 +PLUGIN=552 +PLUGIN_DIR=553 +PLUGINS=554 +PORT=555 +PRECEDES=556 +PRECEDING=557 +PREPARE=558 +PRESERVE=559 +PREV=560 +PROCESSLIST=561 +PROFILE=562 +PROFILES=563 +PROXY=564 +QUERY=565 +QUICK=566 +REBUILD=567 +RECOVER=568 +RECURSIVE=569 +REDO_BUFFER_SIZE=570 +REDUNDANT=571 +RELAY=572 +RELAY_LOG_FILE=573 +RELAY_LOG_POS=574 +RELAYLOG=575 +REMOVE=576 +REORGANIZE=577 +REPAIR=578 +REPLICATE_DO_DB=579 +REPLICATE_DO_TABLE=580 +REPLICATE_IGNORE_DB=581 +REPLICATE_IGNORE_TABLE=582 +REPLICATE_REWRITE_DB=583 +REPLICATE_WILD_DO_TABLE=584 +REPLICATE_WILD_IGNORE_TABLE=585 +REPLICATION=586 +RESET=587 +RESTART=588 +RESUME=589 +RETURNED_SQLSTATE=590 +RETURNING=591 +RETURNS=592 +REUSE=593 +ROLE=594 +ROLLBACK=595 +ROLLUP=596 +ROTATE=597 +ROW=598 +ROWS=599 +ROW_FORMAT=600 +RTREE=601 +SAVEPOINT=602 +SCHEDULE=603 +SECURITY=604 +SEQUENCE=605 +SERVER=606 +SESSION=607 +SHARE=608 +SHARED=609 +SIGNED=610 +SIMPLE=611 +SLAVE=612 +SLOW=613 +SNAPSHOT=614 +SOCKET=615 +SOME=616 +SONAME=617 +SOUNDS=618 +SOURCE=619 +SQL_AFTER_GTIDS=620 +SQL_AFTER_MTS_GAPS=621 +SQL_BEFORE_GTIDS=622 +SQL_BUFFER_RESULT=623 +SQL_CACHE=624 +SQL_NO_CACHE=625 +SQL_THREAD=626 +START=627 +STARTS=628 +STATS_AUTO_RECALC=629 +STATS_PERSISTENT=630 +STATS_SAMPLE_PAGES=631 +STATUS=632 +STOP=633 +STORAGE=634 +STORED=635 +STRING=636 +SUBCLASS_ORIGIN=637 +SUBJECT=638 +SUBPARTITION=639 +SUBPARTITIONS=640 +SUSPEND=641 +SWAPS=642 +SWITCHES=643 +TABLE_NAME=644 +TABLESPACE=645 +TABLE_TYPE=646 +TEMPORARY=647 +TEMPTABLE=648 +THAN=649 +TRADITIONAL=650 +TRANSACTION=651 +TRANSACTIONAL=652 +TRIGGERS=653 +TRUNCATE=654 +UNBOUNDED=655 +UNDEFINED=656 +UNDOFILE=657 +UNDO_BUFFER_SIZE=658 +UNINSTALL=659 +UNKNOWN=660 +UNTIL=661 +UPGRADE=662 +USER=663 +USE_FRM=664 +USER_RESOURCES=665 +VALIDATION=666 +VALUE=667 +VARIABLES=668 +VIEW=669 +VIRTUAL=670 +VISIBLE=671 +WAIT=672 +WARNINGS=673 +WINDOW=674 +WITHOUT=675 +WORK=676 +WRAPPER=677 +X509=678 +XA=679 +XML=680 +YES=681 +EUR=682 +USA=683 +JIS=684 +ISO=685 +INTERNAL=686 +QUARTER=687 +MONTH=688 +DAY=689 +HOUR=690 +MINUTE=691 +WEEK=692 +SECOND=693 +MICROSECOND=694 +ADMIN=695 +APPLICATION_PASSWORD_ADMIN=696 +AUDIT_ADMIN=697 +BACKUP_ADMIN=698 +BINLOG_ADMIN=699 +BINLOG_ENCRYPTION_ADMIN=700 +CLONE_ADMIN=701 +CONNECTION_ADMIN=702 +ENCRYPTION_KEY_ADMIN=703 +EXECUTE=704 +FILE=705 +FIREWALL_ADMIN=706 +FIREWALL_USER=707 +FLUSH_OPTIMIZER_COSTS=708 +FLUSH_STATUS=709 +FLUSH_TABLES=710 +FLUSH_USER_RESOURCES=711 +GROUP_REPLICATION_ADMIN=712 +INNODB_REDO_LOG_ARCHIVE=713 +INNODB_REDO_LOG_ENABLE=714 +INVOKE=715 +LAMBDA=716 +NDB_STORED_USER=717 +PASSWORDLESS_USER_ADMIN=718 +PERSIST_RO_VARIABLES_ADMIN=719 +PRIVILEGES=720 +PROCESS=721 +RELOAD=722 +REPLICATION_APPLIER=723 +REPLICATION_SLAVE_ADMIN=724 +RESOURCE_GROUP_ADMIN=725 +RESOURCE_GROUP_USER=726 +ROLE_ADMIN=727 +ROUTINE=728 +S3=729 +SERVICE_CONNECTION_ADMIN=730 +SESSION_VARIABLES_ADMIN=731 +SET_USER_ID=732 +SHOW_ROUTINE=733 +SHUTDOWN=734 +SUPER=735 +SYSTEM_VARIABLES_ADMIN=736 +TABLES=737 +TABLE_ENCRYPTION_ADMIN=738 +VERSION_TOKEN_ADMIN=739 +XA_RECOVER_ADMIN=740 +ARMSCII8=741 +ASCII=742 +BIG5=743 +CP1250=744 +CP1251=745 +CP1256=746 +CP1257=747 +CP850=748 +CP852=749 +CP866=750 +CP932=751 +DEC8=752 +EUCJPMS=753 +EUCKR=754 +GB18030=755 +GB2312=756 +GBK=757 +GEOSTD8=758 +GREEK=759 +HEBREW=760 +HP8=761 +KEYBCS2=762 +KOI8R=763 +KOI8U=764 +LATIN1=765 +LATIN2=766 +LATIN5=767 +LATIN7=768 +MACCE=769 +MACROMAN=770 +SJIS=771 +SWE7=772 +TIS620=773 +UCS2=774 +UJIS=775 +UTF16=776 +UTF16LE=777 +UTF32=778 +UTF8=779 +UTF8MB3=780 +UTF8MB4=781 +ARCHIVE=782 +BLACKHOLE=783 +CSV=784 +FEDERATED=785 +INNODB=786 +MEMORY=787 +MRG_MYISAM=788 +MYISAM=789 +NDB=790 +NDBCLUSTER=791 +PERFORMANCE_SCHEMA=792 +TOKUDB=793 +REPEATABLE=794 +COMMITTED=795 +UNCOMMITTED=796 +SERIALIZABLE=797 +GEOMETRYCOLLECTION=798 +GEOMCOLLECTION=799 +GEOMETRY=800 +LINESTRING=801 +MULTILINESTRING=802 +MULTIPOINT=803 +MULTIPOLYGON=804 +POINT=805 +POLYGON=806 +ABS=807 +ACOS=808 +ADDDATE=809 +ADDTIME=810 +AES_DECRYPT=811 +AES_ENCRYPT=812 +AREA=813 +ASBINARY=814 +ASIN=815 +ASTEXT=816 +ASWKB=817 +ASWKT=818 +ASYMMETRIC_DECRYPT=819 +ASYMMETRIC_DERIVE=820 +ASYMMETRIC_ENCRYPT=821 +ASYMMETRIC_SIGN=822 +ASYMMETRIC_VERIFY=823 +ATAN=824 +ATAN2=825 +BENCHMARK=826 +BIN=827 +BIT_COUNT=828 +BIT_LENGTH=829 +BUFFER=830 +CATALOG_NAME=831 +CEIL=832 +CEILING=833 +CENTROID=834 +CHARACTER_LENGTH=835 +CHARSET=836 +CHAR_LENGTH=837 +COERCIBILITY=838 +COLLATION=839 +COMPRESS=840 +CONCAT=841 +CONCAT_WS=842 +CONNECTION_ID=843 +CONV=844 +CONVERT_TZ=845 +COS=846 +COT=847 +CRC32=848 +CREATE_ASYMMETRIC_PRIV_KEY=849 +CREATE_ASYMMETRIC_PUB_KEY=850 +CREATE_DH_PARAMETERS=851 +CREATE_DIGEST=852 +CROSSES=853 +DATEDIFF=854 +DATE_FORMAT=855 +DAYNAME=856 +DAYOFMONTH=857 +DAYOFWEEK=858 +DAYOFYEAR=859 +DECODE=860 +DEGREES=861 +DES_DECRYPT=862 +DES_ENCRYPT=863 +DIMENSION=864 +DISJOINT=865 +ELT=866 +ENCODE=867 +ENCRYPT=868 +ENDPOINT=869 +ENGINE_ATTRIBUTE=870 +ENVELOPE=871 +EQUALS=872 +EXP=873 +EXPORT_SET=874 +EXTERIORRING=875 +EXTRACTVALUE=876 +FIELD=877 +FIND_IN_SET=878 +FLOOR=879 +FORMAT=880 +FOUND_ROWS=881 +FROM_BASE64=882 +FROM_DAYS=883 +FROM_UNIXTIME=884 +GEOMCOLLFROMTEXT=885 +GEOMCOLLFROMWKB=886 +GEOMETRYCOLLECTIONFROMTEXT=887 +GEOMETRYCOLLECTIONFROMWKB=888 +GEOMETRYFROMTEXT=889 +GEOMETRYFROMWKB=890 +GEOMETRYN=891 +GEOMETRYTYPE=892 +GEOMFROMTEXT=893 +GEOMFROMWKB=894 +GET_FORMAT=895 +GET_LOCK=896 +GLENGTH=897 +GREATEST=898 +GTID_SUBSET=899 +GTID_SUBTRACT=900 +HEX=901 +IFNULL=902 +INET6_ATON=903 +INET6_NTOA=904 +INET_ATON=905 +INET_NTOA=906 +INSTR=907 +INTERIORRINGN=908 +INTERSECTS=909 +ISCLOSED=910 +ISEMPTY=911 +ISNULL=912 +ISSIMPLE=913 +IS_FREE_LOCK=914 +IS_IPV4=915 +IS_IPV4_COMPAT=916 +IS_IPV4_MAPPED=917 +IS_IPV6=918 +IS_USED_LOCK=919 +LAST_INSERT_ID=920 +LCASE=921 +LEAST=922 +LENGTH=923 +LINEFROMTEXT=924 +LINEFROMWKB=925 +LINESTRINGFROMTEXT=926 +LINESTRINGFROMWKB=927 +LN=928 +LOAD_FILE=929 +LOCATE=930 +LOG=931 +LOG10=932 +LOG2=933 +LOWER=934 +LPAD=935 +LTRIM=936 +MAKEDATE=937 +MAKETIME=938 +MAKE_SET=939 +MASTER_POS_WAIT=940 +MBRCONTAINS=941 +MBRDISJOINT=942 +MBREQUAL=943 +MBRINTERSECTS=944 +MBROVERLAPS=945 +MBRTOUCHES=946 +MBRWITHIN=947 +MD5=948 +MLINEFROMTEXT=949 +MLINEFROMWKB=950 +MONTHNAME=951 +MPOINTFROMTEXT=952 +MPOINTFROMWKB=953 +MPOLYFROMTEXT=954 +MPOLYFROMWKB=955 +MULTILINESTRINGFROMTEXT=956 +MULTILINESTRINGFROMWKB=957 +MULTIPOINTFROMTEXT=958 +MULTIPOINTFROMWKB=959 +MULTIPOLYGONFROMTEXT=960 +MULTIPOLYGONFROMWKB=961 +NAME_CONST=962 +NULLIF=963 +NUMGEOMETRIES=964 +NUMINTERIORRINGS=965 +NUMPOINTS=966 +OCT=967 +OCTET_LENGTH=968 +ORD=969 +OVERLAPS=970 +PERIOD_ADD=971 +PERIOD_DIFF=972 +PI=973 +POINTFROMTEXT=974 +POINTFROMWKB=975 +POINTN=976 +POLYFROMTEXT=977 +POLYFROMWKB=978 +POLYGONFROMTEXT=979 +POLYGONFROMWKB=980 +POW=981 +POWER=982 +QUOTE=983 +RADIANS=984 +RAND=985 +RANDOM_BYTES=986 +RELEASE_LOCK=987 +REVERSE=988 +ROUND=989 +ROW_COUNT=990 +RPAD=991 +RTRIM=992 +SEC_TO_TIME=993 +SECONDARY_ENGINE_ATTRIBUTE=994 +SESSION_USER=995 +SHA=996 +SHA1=997 +SHA2=998 +SCHEMA_NAME=999 +SIGN=1000 +SIN=1001 +SLEEP=1002 +SOUNDEX=1003 +SQL_THREAD_WAIT_AFTER_GTIDS=1004 +SQRT=1005 +SRID=1006 +STARTPOINT=1007 +STRCMP=1008 +STR_TO_DATE=1009 +ST_AREA=1010 +ST_ASBINARY=1011 +ST_ASTEXT=1012 +ST_ASWKB=1013 +ST_ASWKT=1014 +ST_BUFFER=1015 +ST_CENTROID=1016 +ST_CONTAINS=1017 +ST_CROSSES=1018 +ST_DIFFERENCE=1019 +ST_DIMENSION=1020 +ST_DISJOINT=1021 +ST_DISTANCE=1022 +ST_ENDPOINT=1023 +ST_ENVELOPE=1024 +ST_EQUALS=1025 +ST_EXTERIORRING=1026 +ST_GEOMCOLLFROMTEXT=1027 +ST_GEOMCOLLFROMTXT=1028 +ST_GEOMCOLLFROMWKB=1029 +ST_GEOMETRYCOLLECTIONFROMTEXT=1030 +ST_GEOMETRYCOLLECTIONFROMWKB=1031 +ST_GEOMETRYFROMTEXT=1032 +ST_GEOMETRYFROMWKB=1033 +ST_GEOMETRYN=1034 +ST_GEOMETRYTYPE=1035 +ST_GEOMFROMTEXT=1036 +ST_GEOMFROMWKB=1037 +ST_INTERIORRINGN=1038 +ST_INTERSECTION=1039 +ST_INTERSECTS=1040 +ST_ISCLOSED=1041 +ST_ISEMPTY=1042 +ST_ISSIMPLE=1043 +ST_LINEFROMTEXT=1044 +ST_LINEFROMWKB=1045 +ST_LINESTRINGFROMTEXT=1046 +ST_LINESTRINGFROMWKB=1047 +ST_NUMGEOMETRIES=1048 +ST_NUMINTERIORRING=1049 +ST_NUMINTERIORRINGS=1050 +ST_NUMPOINTS=1051 +ST_OVERLAPS=1052 +ST_POINTFROMTEXT=1053 +ST_POINTFROMWKB=1054 +ST_POINTN=1055 +ST_POLYFROMTEXT=1056 +ST_POLYFROMWKB=1057 +ST_POLYGONFROMTEXT=1058 +ST_POLYGONFROMWKB=1059 +ST_SRID=1060 +ST_STARTPOINT=1061 +ST_SYMDIFFERENCE=1062 +ST_TOUCHES=1063 +ST_UNION=1064 +ST_WITHIN=1065 +ST_X=1066 +ST_Y=1067 +SUBDATE=1068 +SUBSTRING_INDEX=1069 +SUBTIME=1070 +SYSTEM_USER=1071 +TAN=1072 +TIMEDIFF=1073 +TIMESTAMPADD=1074 +TIMESTAMPDIFF=1075 +TIME_FORMAT=1076 +TIME_TO_SEC=1077 +TOUCHES=1078 +TO_BASE64=1079 +TO_DAYS=1080 +TO_SECONDS=1081 +UCASE=1082 +UNCOMPRESS=1083 +UNCOMPRESSED_LENGTH=1084 +UNHEX=1085 +UNIX_TIMESTAMP=1086 +UPDATEXML=1087 +UPPER=1088 +UUID=1089 +UUID_SHORT=1090 +VALIDATE_PASSWORD_STRENGTH=1091 +VERSION=1092 +WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS=1093 +WEEKDAY=1094 +WEEKOFYEAR=1095 +WEIGHT_STRING=1096 +WITHIN=1097 +YEARWEEK=1098 +Y_FUNCTION=1099 +X_FUNCTION=1100 +VAR_ASSIGN=1101 +PLUS_ASSIGN=1102 +MINUS_ASSIGN=1103 +MULT_ASSIGN=1104 +DIV_ASSIGN=1105 +MOD_ASSIGN=1106 +AND_ASSIGN=1107 +XOR_ASSIGN=1108 +OR_ASSIGN=1109 +STAR=1110 +DIVIDE=1111 +MODULE=1112 +PLUS=1113 +MINUS=1114 +DIV=1115 +MOD=1116 +EQUAL_SYMBOL=1117 +GREATER_SYMBOL=1118 +LESS_SYMBOL=1119 +EXCLAMATION_SYMBOL=1120 +BIT_NOT_OP=1121 +BIT_OR_OP=1122 +BIT_AND_OP=1123 +BIT_XOR_OP=1124 +DOT=1125 +LR_BRACKET=1126 +RR_BRACKET=1127 +COMMA=1128 +SEMI=1129 +AT_SIGN=1130 +ZERO_DECIMAL=1131 +ONE_DECIMAL=1132 +TWO_DECIMAL=1133 +SINGLE_QUOTE_SYMB=1134 +DOUBLE_QUOTE_SYMB=1135 +REVERSE_QUOTE_SYMB=1136 +COLON_SYMB=1137 +CHARSET_REVERSE_QOUTE_STRING=1138 +FILESIZE_LITERAL=1139 +START_NATIONAL_STRING_LITERAL=1140 +STRING_LITERAL=1141 +DECIMAL_LITERAL=1142 +HEXADECIMAL_LITERAL=1143 +REAL_LITERAL=1144 +NULL_SPEC_LITERAL=1145 +BIT_STRING=1146 +STRING_CHARSET_NAME=1147 +DOT_ID=1148 +ID=1149 +REVERSE_QUOTE_ID=1150 +STRING_USER_NAME=1151 +IP_ADDRESS=1152 +LOCAL_ID=1153 +GLOBAL_ID=1154 +ERROR_RECONGNIGION=1155 +'ADD'=5 +'ALL'=6 +'ALTER'=7 +'ALWAYS'=8 +'ANALYZE'=9 +'AND'=10 +'ARRAY'=11 +'AS'=12 +'ASC'=13 +'ATTRIBUTE'=14 +'BEFORE'=15 +'BETWEEN'=16 +'BOTH'=17 +'BUCKETS'=18 +'BY'=19 +'CALL'=20 +'CASCADE'=21 +'CASE'=22 +'CAST'=23 +'CHANGE'=24 +'CHARACTER'=25 +'CHECK'=26 +'COLLATE'=27 +'COLUMN'=28 +'CONDITION'=29 +'CONSTRAINT'=30 +'CONTINUE'=31 +'CONVERT'=32 +'CREATE'=33 +'CROSS'=34 +'CURRENT'=35 +'CURRENT_ROLE'=36 +'CURRENT_USER'=37 +'CURSOR'=38 +'DATABASE'=39 +'DATABASES'=40 +'DECLARE'=41 +'DEFAULT'=42 +'DELAYED'=43 +'DELETE'=44 +'DESC'=45 +'DESCRIBE'=46 +'DETERMINISTIC'=47 +'DIAGNOSTICS'=48 +'DISTINCT'=49 +'DISTINCTROW'=50 +'DROP'=51 +'EACH'=52 +'ELSE'=53 +'ELSEIF'=54 +'EMPTY'=55 +'ENCLOSED'=56 +'ESCAPED'=57 +'EXCEPT'=58 +'EXISTS'=59 +'EXIT'=60 +'EXPLAIN'=61 +'FALSE'=62 +'FETCH'=63 +'FOR'=64 +'FORCE'=65 +'FOREIGN'=66 +'FROM'=67 +'FULLTEXT'=68 +'GENERATED'=69 +'GET'=70 +'GRANT'=71 +'GROUP'=72 +'HAVING'=73 +'HIGH_PRIORITY'=74 +'HISTOGRAM'=75 +'IF'=76 +'IGNORE'=77 +'IGNORED'=78 +'IN'=79 +'INDEX'=80 +'INFILE'=81 +'INNER'=82 +'INOUT'=83 +'INSERT'=84 +'INTERVAL'=85 +'INTO'=86 +'IS'=87 +'ITERATE'=88 +'JOIN'=89 +'KEY'=90 +'KEYS'=91 +'KILL'=92 +'LATERAL'=93 +'LEADING'=94 +'LEAVE'=95 +'LEFT'=96 +'LIKE'=97 +'LIMIT'=98 +'LINEAR'=99 +'LINES'=100 +'LOAD'=101 +'LOCK'=102 +'LOCKED'=103 +'LOOP'=104 +'LOW_PRIORITY'=105 +'MASTER_BIND'=106 +'MASTER_SSL_VERIFY_SERVER_CERT'=107 +'MATCH'=108 +'MAXVALUE'=109 +'MINVALUE'=110 +'MODIFIES'=111 +'NATURAL'=112 +'NOT'=113 +'NO_WRITE_TO_BINLOG'=114 +'NULL'=115 +'NUMBER'=116 +'ON'=117 +'OPTIMIZE'=118 +'OPTION'=119 +'OPTIONAL'=120 +'OPTIONALLY'=121 +'OR'=122 +'ORDER'=123 +'OUT'=124 +'OUTER'=125 +'OUTFILE'=126 +'OVER'=127 +'PARTITION'=128 +'PRIMARY'=129 +'PROCEDURE'=130 +'PURGE'=131 +'RANGE'=132 +'READ'=133 +'READS'=134 +'REFERENCES'=135 +'REGEXP'=136 +'RELEASE'=137 +'RENAME'=138 +'REPEAT'=139 +'REPLACE'=140 +'REQUIRE'=141 +'RESIGNAL'=142 +'RESTRICT'=143 +'RETAIN'=144 +'RETURN'=145 +'REVOKE'=146 +'RIGHT'=147 +'RLIKE'=148 +'SCHEMA'=149 +'SCHEMAS'=150 +'SELECT'=151 +'SET'=152 +'SEPARATOR'=153 +'SHOW'=154 +'SIGNAL'=155 +'SKIP'=156 +'SPATIAL'=157 +'SQL'=158 +'SQLEXCEPTION'=159 +'SQLSTATE'=160 +'SQLWARNING'=161 +'SQL_BIG_RESULT'=162 +'SQL_CALC_FOUND_ROWS'=163 +'SQL_SMALL_RESULT'=164 +'SSL'=165 +'STACKED'=166 +'STARTING'=167 +'STATEMENT'=168 +'STRAIGHT_JOIN'=169 +'TABLE'=170 +'TERMINATED'=171 +'THEN'=172 +'TO'=173 +'TRAILING'=174 +'TRIGGER'=175 +'TRUE'=176 +'UNDO'=177 +'UNION'=178 +'UNIQUE'=179 +'UNLOCK'=180 +'UNSIGNED'=181 +'UPDATE'=182 +'USAGE'=183 +'USE'=184 +'USING'=185 +'VALUES'=186 +'WHEN'=187 +'WHERE'=188 +'WHILE'=189 +'WITH'=190 +'WRITE'=191 +'XOR'=192 +'ZEROFILL'=193 +'TINYINT'=194 +'SMALLINT'=195 +'MEDIUMINT'=196 +'MIDDLEINT'=197 +'INT'=198 +'INT1'=199 +'INT2'=200 +'INT3'=201 +'INT4'=202 +'INT8'=203 +'INTEGER'=204 +'BIGINT'=205 +'REAL'=206 +'DOUBLE'=207 +'PRECISION'=208 +'FLOAT'=209 +'FLOAT4'=210 +'FLOAT8'=211 +'DECIMAL'=212 +'DEC'=213 +'NUMERIC'=214 +'DATE'=215 +'TIME'=216 +'TIMESTAMP'=217 +'DATETIME'=218 +'YEAR'=219 +'CHAR'=220 +'VARCHAR'=221 +'NVARCHAR'=222 +'NATIONAL'=223 +'BINARY'=224 +'VARBINARY'=225 +'TINYBLOB'=226 +'BLOB'=227 +'MEDIUMBLOB'=228 +'LONG'=229 +'LONGBLOB'=230 +'TINYTEXT'=231 +'TEXT'=232 +'MEDIUMTEXT'=233 +'LONGTEXT'=234 +'ENUM'=235 +'VARYING'=236 +'SERIAL'=237 +'YEAR_MONTH'=238 +'DAY_HOUR'=239 +'DAY_MINUTE'=240 +'DAY_SECOND'=241 +'HOUR_MINUTE'=242 +'HOUR_SECOND'=243 +'MINUTE_SECOND'=244 +'SECOND_MICROSECOND'=245 +'MINUTE_MICROSECOND'=246 +'HOUR_MICROSECOND'=247 +'DAY_MICROSECOND'=248 +'JSON_ARRAY'=249 +'JSON_ARRAYAGG'=250 +'JSON_ARRAY_APPEND'=251 +'JSON_ARRAY_INSERT'=252 +'JSON_CONTAINS'=253 +'JSON_CONTAINS_PATH'=254 +'JSON_DEPTH'=255 +'JSON_EXTRACT'=256 +'JSON_INSERT'=257 +'JSON_KEYS'=258 +'JSON_LENGTH'=259 +'JSON_MERGE'=260 +'JSON_MERGE_PATCH'=261 +'JSON_MERGE_PRESERVE'=262 +'JSON_OBJECT'=263 +'JSON_OBJECTAGG'=264 +'JSON_OVERLAPS'=265 +'JSON_PRETTY'=266 +'JSON_QUOTE'=267 +'JSON_REMOVE'=268 +'JSON_REPLACE'=269 +'JSON_SCHEMA_VALID'=270 +'JSON_SCHEMA_VALIDATION_REPORT'=271 +'JSON_SEARCH'=272 +'JSON_SET'=273 +'JSON_STORAGE_FREE'=274 +'JSON_STORAGE_SIZE'=275 +'JSON_TABLE'=276 +'JSON_TYPE'=277 +'JSON_UNQUOTE'=278 +'JSON_VALID'=279 +'JSON_VALUE'=280 +'NESTED'=281 +'ORDINALITY'=282 +'PATH'=283 +'AVG'=284 +'BIT_AND'=285 +'BIT_OR'=286 +'BIT_XOR'=287 +'COUNT'=288 +'CUME_DIST'=289 +'DENSE_RANK'=290 +'FIRST_VALUE'=291 +'GROUP_CONCAT'=292 +'LAG'=293 +'LAST_VALUE'=294 +'LEAD'=295 +'MAX'=296 +'MIN'=297 +'NTILE'=298 +'NTH_VALUE'=299 +'PERCENT_RANK'=300 +'RANK'=301 +'ROW_NUMBER'=302 +'STD'=303 +'STDDEV'=304 +'STDDEV_POP'=305 +'STDDEV_SAMP'=306 +'SUM'=307 +'VAR_POP'=308 +'VAR_SAMP'=309 +'VARIANCE'=310 +'CURRENT_DATE'=311 +'CURRENT_TIME'=312 +'CURRENT_TIMESTAMP'=313 +'LOCALTIME'=314 +'CURDATE'=315 +'CURTIME'=316 +'DATE_ADD'=317 +'DATE_SUB'=318 +'EXTRACT'=319 +'LOCALTIMESTAMP'=320 +'NOW'=321 +'POSITION'=322 +'SUBSTR'=323 +'SUBSTRING'=324 +'SYSDATE'=325 +'TRIM'=326 +'UTC_DATE'=327 +'UTC_TIME'=328 +'UTC_TIMESTAMP'=329 +'ACCOUNT'=330 +'ACTION'=331 +'AFTER'=332 +'AGGREGATE'=333 +'ALGORITHM'=334 +'ANY'=335 +'AT'=336 +'AUTHORS'=337 +'AUTOCOMMIT'=338 +'AUTOEXTEND_SIZE'=339 +'AUTO_INCREMENT'=340 +'AVG_ROW_LENGTH'=341 +'BEGIN'=342 +'BINLOG'=343 +'BIT'=344 +'BLOCK'=345 +'BOOL'=346 +'BOOLEAN'=347 +'BTREE'=348 +'CACHE'=349 +'CASCADED'=350 +'CHAIN'=351 +'CHANGED'=352 +'CHANNEL'=353 +'CHECKSUM'=354 +'PAGE_CHECKSUM'=355 +'CIPHER'=356 +'CLASS_ORIGIN'=357 +'CLIENT'=358 +'CLOSE'=359 +'CLUSTERING'=360 +'COALESCE'=361 +'CODE'=362 +'COLUMNS'=363 +'COLUMN_FORMAT'=364 +'COLUMN_NAME'=365 +'COMMENT'=366 +'COMMIT'=367 +'COMPACT'=368 +'COMPLETION'=369 +'COMPRESSED'=370 +'CONCURRENT'=372 +'CONNECT'=373 +'CONNECTION'=374 +'CONSISTENT'=375 +'CONSTRAINT_CATALOG'=376 +'CONSTRAINT_SCHEMA'=377 +'CONSTRAINT_NAME'=378 +'CONTAINS'=379 +'CONTEXT'=380 +'CONTRIBUTORS'=381 +'COPY'=382 +'CPU'=383 +'CYCLE'=384 +'CURSOR_NAME'=385 +'DATA'=386 +'DATAFILE'=387 +'DEALLOCATE'=388 +'DEFAULT_AUTH'=389 +'DEFINER'=390 +'DELAY_KEY_WRITE'=391 +'DES_KEY_FILE'=392 +'DIRECTORY'=393 +'DISABLE'=394 +'DISCARD'=395 +'DISK'=396 +'DO'=397 +'DUMPFILE'=398 +'DUPLICATE'=399 +'DYNAMIC'=400 +'ENABLE'=401 +'ENCRYPTED'=402 +'ENCRYPTION'=403 +'ENCRYPTION_KEY_ID'=404 +'END'=405 +'ENDS'=406 +'ENGINE'=407 +'ENGINES'=408 +'ERROR'=409 +'ERRORS'=410 +'ESCAPE'=411 +'EVEN'=412 +'EVENT'=413 +'EVENTS'=414 +'EVERY'=415 +'EXCHANGE'=416 +'EXCLUSIVE'=417 +'EXPIRE'=418 +'EXPORT'=419 +'EXTENDED'=420 +'EXTENT_SIZE'=421 +'FAILED_LOGIN_ATTEMPTS'=422 +'FAST'=423 +'FAULTS'=424 +'FIELDS'=425 +'FILE_BLOCK_SIZE'=426 +'FILTER'=427 +'FIRST'=428 +'FIXED'=429 +'FLUSH'=430 +'FOLLOWING'=431 +'FOLLOWS'=432 +'FOUND'=433 +'FULL'=434 +'FUNCTION'=435 +'GENERAL'=436 +'GLOBAL'=437 +'GRANTS'=438 +'GROUP_REPLICATION'=439 +'HANDLER'=440 +'HASH'=441 +'HELP'=442 +'HISTORY'=443 +'HOST'=444 +'HOSTS'=445 +'IDENTIFIED'=446 +'IGNORE_SERVER_IDS'=447 +'IMPORT'=448 +'INCREMENT'=449 +'INDEXES'=450 +'INITIAL_SIZE'=451 +'INPLACE'=452 +'INSERT_METHOD'=453 +'INSTALL'=454 +'INSTANCE'=455 +'INSTANT'=456 +'INVISIBLE'=457 +'INVOKER'=458 +'IO'=459 +'IO_THREAD'=460 +'IPC'=461 +'ISOLATION'=462 +'ISSUER'=463 +'JSON'=464 +'KEY_BLOCK_SIZE'=465 +'LANGUAGE'=466 +'LAST'=467 +'LEAVES'=468 +'LESS'=469 +'LEVEL'=470 +'LIST'=471 +'LOCAL'=472 +'LOGFILE'=473 +'LOGS'=474 +'MASTER'=475 +'MASTER_AUTO_POSITION'=476 +'MASTER_CONNECT_RETRY'=477 +'MASTER_DELAY'=478 +'MASTER_HEARTBEAT_PERIOD'=479 +'MASTER_HOST'=480 +'MASTER_LOG_FILE'=481 +'MASTER_LOG_POS'=482 +'MASTER_PASSWORD'=483 +'MASTER_PORT'=484 +'MASTER_RETRY_COUNT'=485 +'MASTER_SSL'=486 +'MASTER_SSL_CA'=487 +'MASTER_SSL_CAPATH'=488 +'MASTER_SSL_CERT'=489 +'MASTER_SSL_CIPHER'=490 +'MASTER_SSL_CRL'=491 +'MASTER_SSL_CRLPATH'=492 +'MASTER_SSL_KEY'=493 +'MASTER_TLS_VERSION'=494 +'MASTER_USER'=495 +'MAX_CONNECTIONS_PER_HOUR'=496 +'MAX_QUERIES_PER_HOUR'=497 +'MAX_ROWS'=498 +'MAX_SIZE'=499 +'MAX_UPDATES_PER_HOUR'=500 +'MAX_USER_CONNECTIONS'=501 +'MEDIUM'=502 +'MEMBER'=503 +'MERGE'=504 +'MESSAGE_TEXT'=505 +'MID'=506 +'MIGRATE'=507 +'MIN_ROWS'=508 +'MODE'=509 +'MODIFY'=510 +'MUTEX'=511 +'MYSQL'=512 +'MYSQL_ERRNO'=513 +'NAME'=514 +'NAMES'=515 +'NCHAR'=516 +'NEVER'=517 +'NEXT'=518 +'NO'=519 +'NOCACHE'=520 +'NOCOPY'=521 +'NOCYCLE'=522 +'NOMAXVALUE'=523 +'NOMINVALUE'=524 +'NOWAIT'=525 +'NODEGROUP'=526 +'NONE'=527 +'ODBC'=528 +'OFFLINE'=529 +'OFFSET'=530 +'OF'=531 +'OJ'=532 +'OLD_PASSWORD'=533 +'ONE'=534 +'ONLINE'=535 +'ONLY'=536 +'OPEN'=537 +'OPTIMIZER_COSTS'=538 +'OPTIONS'=539 +'OWNER'=540 +'PACK_KEYS'=541 +'PAGE'=542 +'PAGE_COMPRESSED'=543 +'PAGE_COMPRESSION_LEVEL'=544 +'PARSER'=545 +'PARTIAL'=546 +'PARTITIONING'=547 +'PARTITIONS'=548 +'PASSWORD'=549 +'PASSWORD_LOCK_TIME'=550 +'PHASE'=551 +'PLUGIN'=552 +'PLUGIN_DIR'=553 +'PLUGINS'=554 +'PORT'=555 +'PRECEDES'=556 +'PRECEDING'=557 +'PREPARE'=558 +'PRESERVE'=559 +'PREV'=560 +'PROCESSLIST'=561 +'PROFILE'=562 +'PROFILES'=563 +'PROXY'=564 +'QUERY'=565 +'QUICK'=566 +'REBUILD'=567 +'RECOVER'=568 +'RECURSIVE'=569 +'REDO_BUFFER_SIZE'=570 +'REDUNDANT'=571 +'RELAY'=572 +'RELAY_LOG_FILE'=573 +'RELAY_LOG_POS'=574 +'RELAYLOG'=575 +'REMOVE'=576 +'REORGANIZE'=577 +'REPAIR'=578 +'REPLICATE_DO_DB'=579 +'REPLICATE_DO_TABLE'=580 +'REPLICATE_IGNORE_DB'=581 +'REPLICATE_IGNORE_TABLE'=582 +'REPLICATE_REWRITE_DB'=583 +'REPLICATE_WILD_DO_TABLE'=584 +'REPLICATE_WILD_IGNORE_TABLE'=585 +'REPLICATION'=586 +'RESET'=587 +'RESTART'=588 +'RESUME'=589 +'RETURNED_SQLSTATE'=590 +'RETURNING'=591 +'RETURNS'=592 +'REUSE'=593 +'ROLE'=594 +'ROLLBACK'=595 +'ROLLUP'=596 +'ROTATE'=597 +'ROW'=598 +'ROWS'=599 +'ROW_FORMAT'=600 +'RTREE'=601 +'SAVEPOINT'=602 +'SCHEDULE'=603 +'SECURITY'=604 +'SEQUENCE'=605 +'SERVER'=606 +'SESSION'=607 +'SHARE'=608 +'SHARED'=609 +'SIGNED'=610 +'SIMPLE'=611 +'SLAVE'=612 +'SLOW'=613 +'SNAPSHOT'=614 +'SOCKET'=615 +'SOME'=616 +'SONAME'=617 +'SOUNDS'=618 +'SOURCE'=619 +'SQL_AFTER_GTIDS'=620 +'SQL_AFTER_MTS_GAPS'=621 +'SQL_BEFORE_GTIDS'=622 +'SQL_BUFFER_RESULT'=623 +'SQL_CACHE'=624 +'SQL_NO_CACHE'=625 +'SQL_THREAD'=626 +'START'=627 +'STARTS'=628 +'STATS_AUTO_RECALC'=629 +'STATS_PERSISTENT'=630 +'STATS_SAMPLE_PAGES'=631 +'STATUS'=632 +'STOP'=633 +'STORAGE'=634 +'STORED'=635 +'STRING'=636 +'SUBCLASS_ORIGIN'=637 +'SUBJECT'=638 +'SUBPARTITION'=639 +'SUBPARTITIONS'=640 +'SUSPEND'=641 +'SWAPS'=642 +'SWITCHES'=643 +'TABLE_NAME'=644 +'TABLESPACE'=645 +'TABLE_TYPE'=646 +'TEMPORARY'=647 +'TEMPTABLE'=648 +'THAN'=649 +'TRADITIONAL'=650 +'TRANSACTION'=651 +'TRANSACTIONAL'=652 +'TRIGGERS'=653 +'TRUNCATE'=654 +'UNBOUNDED'=655 +'UNDEFINED'=656 +'UNDOFILE'=657 +'UNDO_BUFFER_SIZE'=658 +'UNINSTALL'=659 +'UNKNOWN'=660 +'UNTIL'=661 +'UPGRADE'=662 +'USER'=663 +'USE_FRM'=664 +'USER_RESOURCES'=665 +'VALIDATION'=666 +'VALUE'=667 +'VARIABLES'=668 +'VIEW'=669 +'VIRTUAL'=670 +'VISIBLE'=671 +'WAIT'=672 +'WARNINGS'=673 +'WINDOW'=674 +'WITHOUT'=675 +'WORK'=676 +'WRAPPER'=677 +'X509'=678 +'XA'=679 +'XML'=680 +'YES'=681 +'EUR'=682 +'USA'=683 +'JIS'=684 +'ISO'=685 +'INTERNAL'=686 +'QUARTER'=687 +'MONTH'=688 +'DAY'=689 +'HOUR'=690 +'MINUTE'=691 +'WEEK'=692 +'SECOND'=693 +'MICROSECOND'=694 +'ADMIN'=695 +'APPLICATION_PASSWORD_ADMIN'=696 +'AUDIT_ADMIN'=697 +'BACKUP_ADMIN'=698 +'BINLOG_ADMIN'=699 +'BINLOG_ENCRYPTION_ADMIN'=700 +'CLONE_ADMIN'=701 +'CONNECTION_ADMIN'=702 +'ENCRYPTION_KEY_ADMIN'=703 +'EXECUTE'=704 +'FILE'=705 +'FIREWALL_ADMIN'=706 +'FIREWALL_USER'=707 +'FLUSH_OPTIMIZER_COSTS'=708 +'FLUSH_STATUS'=709 +'FLUSH_TABLES'=710 +'FLUSH_USER_RESOURCES'=711 +'GROUP_REPLICATION_ADMIN'=712 +'INNODB_REDO_LOG_ARCHIVE'=713 +'INNODB_REDO_LOG_ENABLE'=714 +'INVOKE'=715 +'LAMBDA'=716 +'NDB_STORED_USER'=717 +'PASSWORDLESS_USER_ADMIN'=718 +'PERSIST_RO_VARIABLES_ADMIN'=719 +'PRIVILEGES'=720 +'PROCESS'=721 +'RELOAD'=722 +'REPLICATION_APPLIER'=723 +'REPLICATION_SLAVE_ADMIN'=724 +'RESOURCE_GROUP_ADMIN'=725 +'RESOURCE_GROUP_USER'=726 +'ROLE_ADMIN'=727 +'ROUTINE'=728 +'S3'=729 +'SERVICE_CONNECTION_ADMIN'=730 +'SET_USER_ID'=732 +'SHOW_ROUTINE'=733 +'SHUTDOWN'=734 +'SUPER'=735 +'SYSTEM_VARIABLES_ADMIN'=736 +'TABLES'=737 +'TABLE_ENCRYPTION_ADMIN'=738 +'VERSION_TOKEN_ADMIN'=739 +'XA_RECOVER_ADMIN'=740 +'ARMSCII8'=741 +'ASCII'=742 +'BIG5'=743 +'CP1250'=744 +'CP1251'=745 +'CP1256'=746 +'CP1257'=747 +'CP850'=748 +'CP852'=749 +'CP866'=750 +'CP932'=751 +'DEC8'=752 +'EUCJPMS'=753 +'EUCKR'=754 +'GB18030'=755 +'GB2312'=756 +'GBK'=757 +'GEOSTD8'=758 +'GREEK'=759 +'HEBREW'=760 +'HP8'=761 +'KEYBCS2'=762 +'KOI8R'=763 +'KOI8U'=764 +'LATIN1'=765 +'LATIN2'=766 +'LATIN5'=767 +'LATIN7'=768 +'MACCE'=769 +'MACROMAN'=770 +'SJIS'=771 +'SWE7'=772 +'TIS620'=773 +'UCS2'=774 +'UJIS'=775 +'UTF16'=776 +'UTF16LE'=777 +'UTF32'=778 +'UTF8'=779 +'UTF8MB3'=780 +'UTF8MB4'=781 +'ARCHIVE'=782 +'BLACKHOLE'=783 +'CSV'=784 +'FEDERATED'=785 +'INNODB'=786 +'MEMORY'=787 +'MRG_MYISAM'=788 +'MYISAM'=789 +'NDB'=790 +'NDBCLUSTER'=791 +'PERFORMANCE_SCHEMA'=792 +'TOKUDB'=793 +'REPEATABLE'=794 +'COMMITTED'=795 +'UNCOMMITTED'=796 +'SERIALIZABLE'=797 +'GEOMETRYCOLLECTION'=798 +'GEOMCOLLECTION'=799 +'GEOMETRY'=800 +'LINESTRING'=801 +'MULTILINESTRING'=802 +'MULTIPOINT'=803 +'MULTIPOLYGON'=804 +'POINT'=805 +'POLYGON'=806 +'ABS'=807 +'ACOS'=808 +'ADDDATE'=809 +'ADDTIME'=810 +'AES_DECRYPT'=811 +'AES_ENCRYPT'=812 +'AREA'=813 +'ASBINARY'=814 +'ASIN'=815 +'ASTEXT'=816 +'ASWKB'=817 +'ASWKT'=818 +'ASYMMETRIC_DECRYPT'=819 +'ASYMMETRIC_DERIVE'=820 +'ASYMMETRIC_ENCRYPT'=821 +'ASYMMETRIC_SIGN'=822 +'ASYMMETRIC_VERIFY'=823 +'ATAN'=824 +'ATAN2'=825 +'BENCHMARK'=826 +'BIN'=827 +'BIT_COUNT'=828 +'BIT_LENGTH'=829 +'BUFFER'=830 +'CATALOG_NAME'=831 +'CEIL'=832 +'CEILING'=833 +'CENTROID'=834 +'CHARACTER_LENGTH'=835 +'CHARSET'=836 +'CHAR_LENGTH'=837 +'COERCIBILITY'=838 +'COLLATION'=839 +'COMPRESS'=840 +'CONCAT'=841 +'CONCAT_WS'=842 +'CONNECTION_ID'=843 +'CONV'=844 +'CONVERT_TZ'=845 +'COS'=846 +'COT'=847 +'CRC32'=848 +'CREATE_ASYMMETRIC_PRIV_KEY'=849 +'CREATE_ASYMMETRIC_PUB_KEY'=850 +'CREATE_DH_PARAMETERS'=851 +'CREATE_DIGEST'=852 +'CROSSES'=853 +'DATEDIFF'=854 +'DATE_FORMAT'=855 +'DAYNAME'=856 +'DAYOFMONTH'=857 +'DAYOFWEEK'=858 +'DAYOFYEAR'=859 +'DECODE'=860 +'DEGREES'=861 +'DES_DECRYPT'=862 +'DES_ENCRYPT'=863 +'DIMENSION'=864 +'DISJOINT'=865 +'ELT'=866 +'ENCODE'=867 +'ENCRYPT'=868 +'ENDPOINT'=869 +'ENGINE_ATTRIBUTE'=870 +'ENVELOPE'=871 +'EQUALS'=872 +'EXP'=873 +'EXPORT_SET'=874 +'EXTERIORRING'=875 +'EXTRACTVALUE'=876 +'FIELD'=877 +'FIND_IN_SET'=878 +'FLOOR'=879 +'FORMAT'=880 +'FOUND_ROWS'=881 +'FROM_BASE64'=882 +'FROM_DAYS'=883 +'FROM_UNIXTIME'=884 +'GEOMCOLLFROMTEXT'=885 +'GEOMCOLLFROMWKB'=886 +'GEOMETRYCOLLECTIONFROMTEXT'=887 +'GEOMETRYCOLLECTIONFROMWKB'=888 +'GEOMETRYFROMTEXT'=889 +'GEOMETRYFROMWKB'=890 +'GEOMETRYN'=891 +'GEOMETRYTYPE'=892 +'GEOMFROMTEXT'=893 +'GEOMFROMWKB'=894 +'GET_FORMAT'=895 +'GET_LOCK'=896 +'GLENGTH'=897 +'GREATEST'=898 +'GTID_SUBSET'=899 +'GTID_SUBTRACT'=900 +'HEX'=901 +'IFNULL'=902 +'INET6_ATON'=903 +'INET6_NTOA'=904 +'INET_ATON'=905 +'INET_NTOA'=906 +'INSTR'=907 +'INTERIORRINGN'=908 +'INTERSECTS'=909 +'ISCLOSED'=910 +'ISEMPTY'=911 +'ISNULL'=912 +'ISSIMPLE'=913 +'IS_FREE_LOCK'=914 +'IS_IPV4'=915 +'IS_IPV4_COMPAT'=916 +'IS_IPV4_MAPPED'=917 +'IS_IPV6'=918 +'IS_USED_LOCK'=919 +'LAST_INSERT_ID'=920 +'LCASE'=921 +'LEAST'=922 +'LENGTH'=923 +'LINEFROMTEXT'=924 +'LINEFROMWKB'=925 +'LINESTRINGFROMTEXT'=926 +'LINESTRINGFROMWKB'=927 +'LN'=928 +'LOAD_FILE'=929 +'LOCATE'=930 +'LOG'=931 +'LOG10'=932 +'LOG2'=933 +'LOWER'=934 +'LPAD'=935 +'LTRIM'=936 +'MAKEDATE'=937 +'MAKETIME'=938 +'MAKE_SET'=939 +'MASTER_POS_WAIT'=940 +'MBRCONTAINS'=941 +'MBRDISJOINT'=942 +'MBREQUAL'=943 +'MBRINTERSECTS'=944 +'MBROVERLAPS'=945 +'MBRTOUCHES'=946 +'MBRWITHIN'=947 +'MD5'=948 +'MLINEFROMTEXT'=949 +'MLINEFROMWKB'=950 +'MONTHNAME'=951 +'MPOINTFROMTEXT'=952 +'MPOINTFROMWKB'=953 +'MPOLYFROMTEXT'=954 +'MPOLYFROMWKB'=955 +'MULTILINESTRINGFROMTEXT'=956 +'MULTILINESTRINGFROMWKB'=957 +'MULTIPOINTFROMTEXT'=958 +'MULTIPOINTFROMWKB'=959 +'MULTIPOLYGONFROMTEXT'=960 +'MULTIPOLYGONFROMWKB'=961 +'NAME_CONST'=962 +'NULLIF'=963 +'NUMGEOMETRIES'=964 +'NUMINTERIORRINGS'=965 +'NUMPOINTS'=966 +'OCT'=967 +'OCTET_LENGTH'=968 +'ORD'=969 +'OVERLAPS'=970 +'PERIOD_ADD'=971 +'PERIOD_DIFF'=972 +'PI'=973 +'POINTFROMTEXT'=974 +'POINTFROMWKB'=975 +'POINTN'=976 +'POLYFROMTEXT'=977 +'POLYFROMWKB'=978 +'POLYGONFROMTEXT'=979 +'POLYGONFROMWKB'=980 +'POW'=981 +'POWER'=982 +'QUOTE'=983 +'RADIANS'=984 +'RAND'=985 +'RANDOM_BYTES'=986 +'RELEASE_LOCK'=987 +'REVERSE'=988 +'ROUND'=989 +'ROW_COUNT'=990 +'RPAD'=991 +'RTRIM'=992 +'SEC_TO_TIME'=993 +'SECONDARY_ENGINE_ATTRIBUTE'=994 +'SESSION_USER'=995 +'SHA'=996 +'SHA1'=997 +'SHA2'=998 +'SCHEMA_NAME'=999 +'SIGN'=1000 +'SIN'=1001 +'SLEEP'=1002 +'SOUNDEX'=1003 +'SQL_THREAD_WAIT_AFTER_GTIDS'=1004 +'SQRT'=1005 +'SRID'=1006 +'STARTPOINT'=1007 +'STRCMP'=1008 +'STR_TO_DATE'=1009 +'ST_AREA'=1010 +'ST_ASBINARY'=1011 +'ST_ASTEXT'=1012 +'ST_ASWKB'=1013 +'ST_ASWKT'=1014 +'ST_BUFFER'=1015 +'ST_CENTROID'=1016 +'ST_CONTAINS'=1017 +'ST_CROSSES'=1018 +'ST_DIFFERENCE'=1019 +'ST_DIMENSION'=1020 +'ST_DISJOINT'=1021 +'ST_DISTANCE'=1022 +'ST_ENDPOINT'=1023 +'ST_ENVELOPE'=1024 +'ST_EQUALS'=1025 +'ST_EXTERIORRING'=1026 +'ST_GEOMCOLLFROMTEXT'=1027 +'ST_GEOMCOLLFROMTXT'=1028 +'ST_GEOMCOLLFROMWKB'=1029 +'ST_GEOMETRYCOLLECTIONFROMTEXT'=1030 +'ST_GEOMETRYCOLLECTIONFROMWKB'=1031 +'ST_GEOMETRYFROMTEXT'=1032 +'ST_GEOMETRYFROMWKB'=1033 +'ST_GEOMETRYN'=1034 +'ST_GEOMETRYTYPE'=1035 +'ST_GEOMFROMTEXT'=1036 +'ST_GEOMFROMWKB'=1037 +'ST_INTERIORRINGN'=1038 +'ST_INTERSECTION'=1039 +'ST_INTERSECTS'=1040 +'ST_ISCLOSED'=1041 +'ST_ISEMPTY'=1042 +'ST_ISSIMPLE'=1043 +'ST_LINEFROMTEXT'=1044 +'ST_LINEFROMWKB'=1045 +'ST_LINESTRINGFROMTEXT'=1046 +'ST_LINESTRINGFROMWKB'=1047 +'ST_NUMGEOMETRIES'=1048 +'ST_NUMINTERIORRING'=1049 +'ST_NUMINTERIORRINGS'=1050 +'ST_NUMPOINTS'=1051 +'ST_OVERLAPS'=1052 +'ST_POINTFROMTEXT'=1053 +'ST_POINTFROMWKB'=1054 +'ST_POINTN'=1055 +'ST_POLYFROMTEXT'=1056 +'ST_POLYFROMWKB'=1057 +'ST_POLYGONFROMTEXT'=1058 +'ST_POLYGONFROMWKB'=1059 +'ST_SRID'=1060 +'ST_STARTPOINT'=1061 +'ST_SYMDIFFERENCE'=1062 +'ST_TOUCHES'=1063 +'ST_UNION'=1064 +'ST_WITHIN'=1065 +'ST_X'=1066 +'ST_Y'=1067 +'SUBDATE'=1068 +'SUBSTRING_INDEX'=1069 +'SUBTIME'=1070 +'SYSTEM_USER'=1071 +'TAN'=1072 +'TIMEDIFF'=1073 +'TIMESTAMPADD'=1074 +'TIMESTAMPDIFF'=1075 +'TIME_FORMAT'=1076 +'TIME_TO_SEC'=1077 +'TOUCHES'=1078 +'TO_BASE64'=1079 +'TO_DAYS'=1080 +'TO_SECONDS'=1081 +'UCASE'=1082 +'UNCOMPRESS'=1083 +'UNCOMPRESSED_LENGTH'=1084 +'UNHEX'=1085 +'UNIX_TIMESTAMP'=1086 +'UPDATEXML'=1087 +'UPPER'=1088 +'UUID'=1089 +'UUID_SHORT'=1090 +'VALIDATE_PASSWORD_STRENGTH'=1091 +'VERSION'=1092 +'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS'=1093 +'WEEKDAY'=1094 +'WEEKOFYEAR'=1095 +'WEIGHT_STRING'=1096 +'WITHIN'=1097 +'YEARWEEK'=1098 +'Y'=1099 +'X'=1100 +':='=1101 +'+='=1102 +'-='=1103 +'*='=1104 +'/='=1105 +'%='=1106 +'&='=1107 +'^='=1108 +'|='=1109 +'*'=1110 +'/'=1111 +'%'=1112 +'+'=1113 +'-'=1114 +'DIV'=1115 +'MOD'=1116 +'='=1117 +'>'=1118 +'<'=1119 +'!'=1120 +'~'=1121 +'|'=1122 +'&'=1123 +'^'=1124 +'.'=1125 +'('=1126 +')'=1127 +','=1128 +';'=1129 +'@'=1130 +'0'=1131 +'1'=1132 +'2'=1133 +'\''=1134 +'"'=1135 +'`'=1136 +':'=1137 diff --git a/internal/mysqld/parser/antlrparser/parser/MySqlParser.g4 b/internal/mysqld/parser/antlrparser/parser/MySqlParser.g4 new file mode 100644 index 0000000000..021381579b --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/MySqlParser.g4 @@ -0,0 +1,2859 @@ +/* +MySQL (Positive Technologies) grammar +The MIT License (MIT). +Copyright (c) 2015-2017, Ivan Kochurkin (kvanttt@gmail.com), Positive Technologies. +Copyright (c) 2017, Ivan Khudyashev (IHudyashov@ptsecurity.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +parser grammar MySqlParser; + +options { tokenVocab=MySqlLexer; } + + +// Top Level Description + +root + : sqlStatements? (MINUS MINUS)? EOF + ; + +sqlStatements + : (sqlStatement (MINUS MINUS)? SEMI? | emptyStatement_)* + (sqlStatement ((MINUS MINUS)? SEMI)? | emptyStatement_) + ; + +sqlStatement + : dmlStatement +// | ddlStatement +// | transactionStatement +// | replicationStatement | preparedStatement +// | administrationStatement | utilityStatement + ; + +emptyStatement_ + : SEMI + ; + +// ddlStatement +// : createDatabase | createEvent | createIndex +// | createLogfileGroup | createProcedure | createFunction +// | createServer | createTable | createTablespaceInnodb +// | createTablespaceNdb | createTrigger | createView | createRole +// | alterDatabase | alterEvent | alterFunction +// | alterInstance | alterLogfileGroup | alterProcedure +// | alterServer | alterTable | alterTablespace | alterView +// | dropDatabase | dropEvent | dropIndex +// | dropLogfileGroup | dropProcedure | dropFunction +// | dropServer | dropTable | dropTablespace +// | dropTrigger | dropView | dropRole | setRole +// | renameTable | truncateTable +// ; + +dmlStatement + : selectStatement +// | insertStatement | updateStatement +// | deleteStatement | replaceStatement | callStatement +// | loadDataStatement | loadXmlStatement | doStatement +// | handlerStatement + ; + +// transactionStatement +// : startTransaction +// | beginWork | commitWork | rollbackWork +// | savepointStatement | rollbackStatement +// | releaseStatement | lockTables | unlockTables +// ; +// +// replicationStatement +// : changeMaster | changeReplicationFilter | purgeBinaryLogs +// | resetMaster | resetSlave | startSlave | stopSlave +// | startGroupReplication | stopGroupReplication +// | xaStartTransaction | xaEndTransaction | xaPrepareStatement +// | xaCommitWork | xaRollbackWork | xaRecoverWork +// ; +// +// preparedStatement +// : prepareStatement | executeStatement | deallocatePrepare +// ; +// +// // remark: NOT INCLUDED IN sqlStatement, but include in body +// // of routine's statements +// compoundStatement +// : blockStatement +// | caseStatement | ifStatement | leaveStatement +// | loopStatement | repeatStatement | whileStatement +// | iterateStatement | returnStatement | cursorStatement +// ; +// +// administrationStatement +// : alterUser | createUser | dropUser | grantStatement +// | grantProxy | renameUser | revokeStatement +// | revokeProxy | analyzeTable | checkTable +// | checksumTable | optimizeTable | repairTable +// | createUdfunction | installPlugin | uninstallPlugin +// | setStatement | showStatement | binlogStatement +// | cacheIndexStatement | flushStatement | killStatement +// | loadIndexIntoCache | resetStatement +// | shutdownStatement +// ; +// +// utilityStatement +// : simpleDescribeStatement | fullDescribeStatement +// | helpStatement | useStatement | signalStatement +// | resignalStatement | diagnosticsStatement +// ; +// +// +// // Data Definition Language +// +// // Create statements +// +// createDatabase +// : CREATE dbFormat=(DATABASE | SCHEMA) +// ifNotExists? uid createDatabaseOption* +// ; +// +// createEvent +// : CREATE ownerStatement? EVENT ifNotExists? fullId +// ON SCHEDULE scheduleExpression +// (ON COMPLETION NOT? PRESERVE)? enableType? +// (COMMENT STRING_LITERAL)? +// DO routineBody +// ; +// +// createIndex +// : CREATE +// intimeAction=(ONLINE | OFFLINE)? +// indexCategory=(UNIQUE | FULLTEXT | SPATIAL)? INDEX +// uid indexType? +// ON tableName indexColumnNames +// indexOption* +// ( +// ALGORITHM EQUAL_SYMBOL? algType=(DEFAULT | INPLACE | COPY) +// | LOCK EQUAL_SYMBOL? lockType=(DEFAULT | NONE | SHARED | EXCLUSIVE) +// )* +// ; +// +// createLogfileGroup +// : CREATE LOGFILE GROUP uid +// ADD UNDOFILE undoFile=STRING_LITERAL +// (INITIAL_SIZE '='? initSize=fileSizeLiteral)? +// (UNDO_BUFFER_SIZE '='? undoSize=fileSizeLiteral)? +// (REDO_BUFFER_SIZE '='? redoSize=fileSizeLiteral)? +// (NODEGROUP '='? uid)? +// WAIT? +// (COMMENT '='? comment=STRING_LITERAL)? +// ENGINE '='? engineName +// ; +// +// createProcedure +// : CREATE ownerStatement? +// PROCEDURE fullId +// '(' procedureParameter? (',' procedureParameter)* ')' +// routineOption* +// routineBody +// ; +// +// createFunction +// : CREATE ownerStatement? AGGREGATE? +// FUNCTION ifNotExists? fullId +// '(' functionParameter? (',' functionParameter)* ')' +// RETURNS dataType +// routineOption* +// (routineBody | returnStatement) +// ; +// +// createRole +// : CREATE ROLE ifNotExists? roleName (',' roleName)* +// ; +// +// createServer +// : CREATE SERVER uid +// FOREIGN DATA WRAPPER wrapperName=(MYSQL | STRING_LITERAL) +// OPTIONS '(' serverOption (',' serverOption)* ')' +// ; +// +// createTable +// : CREATE TEMPORARY? TABLE ifNotExists? +// tableName +// ( +// LIKE tableName +// | '(' LIKE parenthesisTable=tableName ')' +// ) #copyCreateTable +// | CREATE TEMPORARY? TABLE ifNotExists? +// tableName createDefinitions? +// ( tableOption (','? tableOption)* )? +// partitionDefinitions? keyViolate=(IGNORE | REPLACE)? +// AS? selectStatement #queryCreateTable +// | CREATE TEMPORARY? TABLE ifNotExists? +// tableName createDefinitions +// ( tableOption (','? tableOption)* )? +// partitionDefinitions? #columnCreateTable +// ; +// +// createTablespaceInnodb +// : CREATE TABLESPACE uid +// ADD DATAFILE datafile=STRING_LITERAL +// (FILE_BLOCK_SIZE '=' fileBlockSize=fileSizeLiteral)? +// (ENGINE '='? engineName)? +// ; +// +// createTablespaceNdb +// : CREATE TABLESPACE uid +// ADD DATAFILE datafile=STRING_LITERAL +// USE LOGFILE GROUP uid +// (EXTENT_SIZE '='? extentSize=fileSizeLiteral)? +// (INITIAL_SIZE '='? initialSize=fileSizeLiteral)? +// (AUTOEXTEND_SIZE '='? autoextendSize=fileSizeLiteral)? +// (MAX_SIZE '='? maxSize=fileSizeLiteral)? +// (NODEGROUP '='? uid)? +// WAIT? +// (COMMENT '='? comment=STRING_LITERAL)? +// ENGINE '='? engineName +// ; +// +// createTrigger +// : CREATE ownerStatement? +// TRIGGER thisTrigger=fullId +// triggerTime=(BEFORE | AFTER) +// triggerEvent=(INSERT | UPDATE | DELETE) +// ON tableName FOR EACH ROW +// (triggerPlace=(FOLLOWS | PRECEDES) otherTrigger=fullId)? +// routineBody +// ; +// +// withClause +// : WITH RECURSIVE? commonTableExpressions +// ; +// +// commonTableExpressions +// : cteName ('(' cteColumnName (',' cteColumnName)* ')')? AS '(' dmlStatement ')' +// (',' commonTableExpressions)? +// ; +// +// cteName +// : uid +// ; +// +// cteColumnName +// : uid +// ; +// +// createView +// : CREATE orReplace? +// ( +// ALGORITHM '=' algType=(UNDEFINED | MERGE | TEMPTABLE) +// )? +// ownerStatement? +// (SQL SECURITY secContext=(DEFINER | INVOKER))? +// VIEW fullId ('(' uidList ')')? AS +// ( +// '(' withClause? selectStatement ')' +// | +// withClause? selectStatement (WITH checkOption=(CASCADED | LOCAL)? CHECK OPTION)? +// ) +// ; +// +// +// // details +// +// createDatabaseOption +// : DEFAULT? charSet '='? (charsetName | DEFAULT) +// | DEFAULT? COLLATE '='? collationName +// | DEFAULT? ENCRYPTION '='? STRING_LITERAL +// | READ ONLY '='? (DEFAULT | ZERO_DECIMAL | ONE_DECIMAL) +// ; +// +// charSet +// : CHARACTER SET +// | CHARSET +// | CHAR SET +// ; +// +// ownerStatement +// : DEFINER '=' (userName | CURRENT_USER ( '(' ')')?) +// ; +// +// scheduleExpression +// : AT timestampValue intervalExpr* #preciseSchedule +// | EVERY (decimalLiteral | expression) intervalType +// ( +// STARTS startTimestamp=timestampValue +// (startIntervals+=intervalExpr)* +// )? +// ( +// ENDS endTimestamp=timestampValue +// (endIntervals+=intervalExpr)* +// )? #intervalSchedule +// ; +// +// timestampValue +// : CURRENT_TIMESTAMP +// | stringLiteral +// | decimalLiteral +// | expression +// ; +// +// intervalExpr +// : '+' INTERVAL (decimalLiteral | expression) intervalType +// ; +// +// intervalType +// : intervalTypeBase +// | YEAR | YEAR_MONTH | DAY_HOUR | DAY_MINUTE +// | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND +// | SECOND_MICROSECOND | MINUTE_MICROSECOND +// | HOUR_MICROSECOND | DAY_MICROSECOND +// ; +// +// enableType +// : ENABLE | DISABLE | DISABLE ON SLAVE +// ; +// +// indexType +// : USING (BTREE | HASH) +// ; +// +// indexOption +// : KEY_BLOCK_SIZE EQUAL_SYMBOL? fileSizeLiteral +// | indexType +// | WITH PARSER uid +// | COMMENT STRING_LITERAL +// | (VISIBLE | INVISIBLE) +// | ENGINE_ATTRIBUTE EQUAL_SYMBOL? STRING_LITERAL +// | SECONDARY_ENGINE_ATTRIBUTE EQUAL_SYMBOL? STRING_LITERAL +// ; +// +// procedureParameter +// : direction=(IN | OUT | INOUT)? uid dataType +// ; +// +// functionParameter +// : uid dataType +// ; +// +// routineOption +// : COMMENT STRING_LITERAL #routineComment +// | LANGUAGE SQL #routineLanguage +// | NOT? DETERMINISTIC #routineBehavior +// | ( +// CONTAINS SQL | NO SQL | READS SQL DATA +// | MODIFIES SQL DATA +// ) #routineData +// | SQL SECURITY context=(DEFINER | INVOKER) #routineSecurity +// ; +// +// serverOption +// : HOST STRING_LITERAL +// | DATABASE STRING_LITERAL +// | USER STRING_LITERAL +// | PASSWORD STRING_LITERAL +// | SOCKET STRING_LITERAL +// | OWNER STRING_LITERAL +// | PORT decimalLiteral +// ; +// +// createDefinitions +// : '(' createDefinition (',' createDefinition)* ')' +// ; +// +// createDefinition +// : fullColumnName columnDefinition #columnDeclaration +// | tableConstraint #constraintDeclaration +// | indexColumnDefinition #indexDeclaration +// ; +// +// columnDefinition +// : dataType columnConstraint* +// ; +// +// columnConstraint +// : nullNotnull #nullColumnConstraint +// | DEFAULT defaultValue #defaultColumnConstraint +// | VISIBLE #visibilityColumnConstraint +// | INVISIBLE #invisibilityColumnConstraint +// | (AUTO_INCREMENT | ON UPDATE currentTimestamp) #autoIncrementColumnConstraint +// | PRIMARY? KEY #primaryKeyColumnConstraint +// | UNIQUE KEY? #uniqueKeyColumnConstraint +// | COMMENT STRING_LITERAL #commentColumnConstraint +// | COLUMN_FORMAT colformat=(FIXED | DYNAMIC | DEFAULT) #formatColumnConstraint +// | STORAGE storageval=(DISK | MEMORY | DEFAULT) #storageColumnConstraint +// | referenceDefinition #referenceColumnConstraint +// | COLLATE collationName #collateColumnConstraint +// | (GENERATED ALWAYS)? AS '(' expression ')' (VIRTUAL | STORED)? #generatedColumnConstraint +// | SERIAL DEFAULT VALUE #serialDefaultColumnConstraint +// | (CONSTRAINT name=uid?)? +// CHECK '(' expression ')' #checkColumnConstraint +// ; +// +// tableConstraint +// : (CONSTRAINT name=uid?)? +// PRIMARY KEY index=uid? indexType? +// indexColumnNames indexOption* #primaryKeyTableConstraint +// | (CONSTRAINT name=uid?)? +// UNIQUE indexFormat=(INDEX | KEY)? index=uid? +// indexType? indexColumnNames indexOption* #uniqueKeyTableConstraint +// | (CONSTRAINT name=uid?)? +// FOREIGN KEY index=uid? indexColumnNames +// referenceDefinition #foreignKeyTableConstraint +// | (CONSTRAINT name=uid?)? +// CHECK '(' expression ')' #checkTableConstraint +// ; +// +// referenceDefinition +// : REFERENCES tableName indexColumnNames? +// (MATCH matchType=(FULL | PARTIAL | SIMPLE))? +// referenceAction? +// ; +// +// referenceAction +// : ON DELETE onDelete=referenceControlType +// ( +// ON UPDATE onUpdate=referenceControlType +// )? +// | ON UPDATE onUpdate=referenceControlType +// ( +// ON DELETE onDelete=referenceControlType +// )? +// ; +// +// referenceControlType +// : RESTRICT | CASCADE | SET NULL_LITERAL | NO ACTION +// ; +// +// indexColumnDefinition +// : indexFormat=(INDEX | KEY) uid? indexType? +// indexColumnNames indexOption* #simpleIndexDeclaration +// | (FULLTEXT | SPATIAL) +// indexFormat=(INDEX | KEY)? uid? +// indexColumnNames indexOption* #specialIndexDeclaration +// ; +// +// tableOption +// : ENGINE '='? engineName? #tableOptionEngine +// | ENGINE_ATTRIBUTE '='? STRING_LITERAL #tableOptionEngineAttribute +// | AUTOEXTEND_SIZE '='? decimalLiteral #tableOptionAutoextendSize +// | AUTO_INCREMENT '='? decimalLiteral #tableOptionAutoIncrement +// | AVG_ROW_LENGTH '='? decimalLiteral #tableOptionAverage +// | DEFAULT? charSet '='? (charsetName|DEFAULT) #tableOptionCharset +// | (CHECKSUM | PAGE_CHECKSUM) '='? boolValue=('0' | '1') #tableOptionChecksum +// | DEFAULT? COLLATE '='? collationName #tableOptionCollate +// | COMMENT '='? STRING_LITERAL #tableOptionComment +// | COMPRESSION '='? (STRING_LITERAL | ID) #tableOptionCompression +// | CONNECTION '='? STRING_LITERAL #tableOptionConnection +// | (DATA | INDEX) DIRECTORY '='? STRING_LITERAL #tableOptionDataDirectory +// | DELAY_KEY_WRITE '='? boolValue=('0' | '1') #tableOptionDelay +// | ENCRYPTION '='? STRING_LITERAL #tableOptionEncryption +// | (PAGE_COMPRESSED | STRING_LITERAL) '='? ('0' | '1') #tableOptionPageCompressed +// | (PAGE_COMPRESSION_LEVEL | STRING_LITERAL) '='? decimalLiteral #tableOptionPageCompressionLevel +// | ENCRYPTION_KEY_ID '='? decimalLiteral #tableOptionEncryptionKeyId +// | INDEX DIRECTORY '='? STRING_LITERAL #tableOptionIndexDirectory +// | INSERT_METHOD '='? insertMethod=(NO | FIRST | LAST) #tableOptionInsertMethod +// | KEY_BLOCK_SIZE '='? fileSizeLiteral #tableOptionKeyBlockSize +// | MAX_ROWS '='? decimalLiteral #tableOptionMaxRows +// | MIN_ROWS '='? decimalLiteral #tableOptionMinRows +// | PACK_KEYS '='? extBoolValue=('0' | '1' | DEFAULT) #tableOptionPackKeys +// | PASSWORD '='? STRING_LITERAL #tableOptionPassword +// | ROW_FORMAT '='? +// rowFormat=( +// DEFAULT | DYNAMIC | FIXED | COMPRESSED +// | REDUNDANT | COMPACT | ID +// ) #tableOptionRowFormat +// | START TRANSACTION #tableOptionStartTransaction +// | SECONDARY_ENGINE_ATTRIBUTE '='? STRING_LITERAL #tableOptionSecondaryEngineAttribute +// | STATS_AUTO_RECALC '='? extBoolValue=(DEFAULT | '0' | '1') #tableOptionRecalculation +// | STATS_PERSISTENT '='? extBoolValue=(DEFAULT | '0' | '1') #tableOptionPersistent +// | STATS_SAMPLE_PAGES '='? (DEFAULT | decimalLiteral) #tableOptionSamplePage +// | TABLESPACE uid tablespaceStorage? #tableOptionTablespace +// | TABLE_TYPE '=' tableType #tableOptionTableType +// | tablespaceStorage #tableOptionTablespace +// | TRANSACTIONAL '='? ('0' | '1') #tableOptionTransactional +// | UNION '='? '(' tables ')' #tableOptionUnion +// ; +// +// tableType +// : MYSQL | ODBC +// ; +// +// tablespaceStorage +// : STORAGE (DISK | MEMORY | DEFAULT) +// ; +// +// partitionDefinitions +// : PARTITION BY partitionFunctionDefinition +// (PARTITIONS count=decimalLiteral)? +// ( +// SUBPARTITION BY subpartitionFunctionDefinition +// (SUBPARTITIONS subCount=decimalLiteral)? +// )? +// ('(' partitionDefinition (',' partitionDefinition)* ')')? +// ; +// +// partitionFunctionDefinition +// : LINEAR? HASH '(' expression ')' #partitionFunctionHash +// | LINEAR? KEY (ALGORITHM '=' algType=('1' | '2'))? +// '(' uidList ')' #partitionFunctionKey +// | RANGE ( '(' expression ')' | COLUMNS '(' uidList ')' ) #partitionFunctionRange +// | LIST ( '(' expression ')' | COLUMNS '(' uidList ')' ) #partitionFunctionList +// ; +// +// subpartitionFunctionDefinition +// : LINEAR? HASH '(' expression ')' #subPartitionFunctionHash +// | LINEAR? KEY (ALGORITHM '=' algType=('1' | '2'))? +// '(' uidList ')' #subPartitionFunctionKey +// ; +// +// partitionDefinition +// : PARTITION uid VALUES LESS THAN +// '(' +// partitionDefinerAtom (',' partitionDefinerAtom)* +// ')' +// partitionOption* +// ( '(' subpartitionDefinition (',' subpartitionDefinition)* ')' )? #partitionComparison +// | PARTITION uid VALUES LESS THAN +// partitionDefinerAtom partitionOption* +// ( '(' subpartitionDefinition (',' subpartitionDefinition)* ')' )? #partitionComparison +// | PARTITION uid VALUES IN +// '(' +// partitionDefinerAtom (',' partitionDefinerAtom)* +// ')' +// partitionOption* +// ( '(' subpartitionDefinition (',' subpartitionDefinition)* ')' )? #partitionListAtom +// | PARTITION uid VALUES IN +// '(' +// partitionDefinerVector (',' partitionDefinerVector)* +// ')' +// partitionOption* +// ( '(' subpartitionDefinition (',' subpartitionDefinition)* ')' )? #partitionListVector +// | PARTITION uid partitionOption* +// ( '(' subpartitionDefinition (',' subpartitionDefinition)* ')' )? #partitionSimple +// ; +// +// partitionDefinerAtom +// : constant | expression | MAXVALUE +// ; +// +// partitionDefinerVector +// : '(' partitionDefinerAtom (',' partitionDefinerAtom)+ ')' +// ; +// +// subpartitionDefinition +// : SUBPARTITION uid partitionOption* +// ; +// +// partitionOption +// : DEFAULT? STORAGE? ENGINE '='? engineName #partitionOptionEngine +// | COMMENT '='? comment=STRING_LITERAL #partitionOptionComment +// | DATA DIRECTORY '='? dataDirectory=STRING_LITERAL #partitionOptionDataDirectory +// | INDEX DIRECTORY '='? indexDirectory=STRING_LITERAL #partitionOptionIndexDirectory +// | MAX_ROWS '='? maxRows=decimalLiteral #partitionOptionMaxRows +// | MIN_ROWS '='? minRows=decimalLiteral #partitionOptionMinRows +// | TABLESPACE '='? tablespace=uid #partitionOptionTablespace +// | NODEGROUP '='? nodegroup=uid #partitionOptionNodeGroup +// ; +// +// // Alter statements +// +// alterDatabase +// : ALTER dbFormat=(DATABASE | SCHEMA) uid? +// createDatabaseOption+ #alterSimpleDatabase +// | ALTER dbFormat=(DATABASE | SCHEMA) uid +// UPGRADE DATA DIRECTORY NAME #alterUpgradeName +// ; +// +// alterEvent +// : ALTER ownerStatement? +// EVENT fullId +// (ON SCHEDULE scheduleExpression)? +// (ON COMPLETION NOT? PRESERVE)? +// (RENAME TO fullId)? enableType? +// (COMMENT STRING_LITERAL)? +// (DO routineBody)? +// ; +// +// alterFunction +// : ALTER FUNCTION fullId routineOption* +// ; +// +// alterInstance +// : ALTER INSTANCE ROTATE INNODB MASTER KEY +// ; +// +// alterLogfileGroup +// : ALTER LOGFILE GROUP uid +// ADD UNDOFILE STRING_LITERAL +// (INITIAL_SIZE '='? fileSizeLiteral)? +// WAIT? ENGINE '='? engineName +// ; +// +// alterProcedure +// : ALTER PROCEDURE fullId routineOption* +// ; +// +// alterServer +// : ALTER SERVER uid OPTIONS +// '(' serverOption (',' serverOption)* ')' +// ; +// +// alterTable +// : ALTER intimeAction=(ONLINE | OFFLINE)? +// IGNORE? TABLE tableName waitNowaitClause? +// (alterSpecification (',' alterSpecification)*)? +// partitionDefinitions? +// ; +// +// alterTablespace +// : ALTER TABLESPACE uid +// objectAction=(ADD | DROP) DATAFILE STRING_LITERAL +// (INITIAL_SIZE '=' fileSizeLiteral)? +// WAIT? +// ENGINE '='? engineName +// ; +// +// alterView +// : ALTER +// ( +// ALGORITHM '=' algType=(UNDEFINED | MERGE | TEMPTABLE) +// )? +// ownerStatement? +// (SQL SECURITY secContext=(DEFINER | INVOKER))? +// VIEW fullId ('(' uidList ')')? AS selectStatement +// (WITH checkOpt=(CASCADED | LOCAL)? CHECK OPTION)? +// ; +// +// // details +// +// alterSpecification +// : tableOption (','? tableOption)* #alterByTableOption +// | ADD COLUMN? uid columnDefinition (FIRST | AFTER uid)? #alterByAddColumn +// | ADD COLUMN? +// '(' +// uid columnDefinition ( ',' uid columnDefinition)* +// ')' #alterByAddColumns +// | ADD indexFormat=(INDEX | KEY) uid? indexType? +// indexColumnNames indexOption* #alterByAddIndex +// | ADD (CONSTRAINT name=uid?)? PRIMARY KEY index=uid? +// indexType? indexColumnNames indexOption* #alterByAddPrimaryKey +// | ADD (CONSTRAINT name=uid?)? UNIQUE +// indexFormat=(INDEX | KEY)? indexName=uid? +// indexType? indexColumnNames indexOption* #alterByAddUniqueKey +// | ADD keyType=(FULLTEXT | SPATIAL) +// indexFormat=(INDEX | KEY)? uid? +// indexColumnNames indexOption* #alterByAddSpecialIndex +// | ADD (CONSTRAINT name=uid?)? FOREIGN KEY +// indexName=uid? indexColumnNames referenceDefinition #alterByAddForeignKey +// | ADD (CONSTRAINT name=uid?)? CHECK '(' expression ')' #alterByAddCheckTableConstraint +// | ALGORITHM '='? algType=(DEFAULT | INSTANT | INPLACE | COPY) #alterBySetAlgorithm +// | ALTER COLUMN? uid +// (SET DEFAULT defaultValue | DROP DEFAULT) #alterByChangeDefault +// | CHANGE COLUMN? oldColumn=uid +// newColumn=uid columnDefinition +// (FIRST | AFTER afterColumn=uid)? #alterByChangeColumn +// | RENAME COLUMN oldColumn=uid TO newColumn=uid #alterByRenameColumn +// | LOCK '='? lockType=(DEFAULT | NONE | SHARED | EXCLUSIVE) #alterByLock +// | MODIFY COLUMN? +// uid columnDefinition (FIRST | AFTER uid)? #alterByModifyColumn +// | DROP COLUMN? uid RESTRICT? #alterByDropColumn +// | DROP (CONSTRAINT | CHECK) uid #alterByDropConstraintCheck +// | DROP PRIMARY KEY #alterByDropPrimaryKey +// | DROP indexFormat=(INDEX | KEY) uid #alterByDropIndex +// | RENAME indexFormat=(INDEX | KEY) uid TO uid #alterByRenameIndex +// | ALTER INDEX uid (VISIBLE | INVISIBLE) #alterByAlterIndexVisibility +// | DROP FOREIGN KEY uid #alterByDropForeignKey +// | DISABLE KEYS #alterByDisableKeys +// | ENABLE KEYS #alterByEnableKeys +// | RENAME renameFormat=(TO | AS)? (uid | fullId) #alterByRename +// | ORDER BY uidList #alterByOrder +// | CONVERT TO CHARACTER SET charsetName +// (COLLATE collationName)? #alterByConvertCharset +// | DEFAULT? CHARACTER SET '=' charsetName +// (COLLATE '=' collationName)? #alterByDefaultCharset +// | DISCARD TABLESPACE #alterByDiscardTablespace +// | IMPORT TABLESPACE #alterByImportTablespace +// | FORCE #alterByForce +// | validationFormat=(WITHOUT | WITH) VALIDATION #alterByValidate +// | ADD PARTITION +// '(' +// partitionDefinition (',' partitionDefinition)* +// ')' #alterByAddPartition +// | DROP PARTITION uidList #alterByDropPartition +// | DISCARD PARTITION (uidList | ALL) TABLESPACE #alterByDiscardPartition +// | IMPORT PARTITION (uidList | ALL) TABLESPACE #alterByImportPartition +// | TRUNCATE PARTITION (uidList | ALL) #alterByTruncatePartition +// | COALESCE PARTITION decimalLiteral #alterByCoalescePartition +// | REORGANIZE PARTITION uidList +// INTO '(' +// partitionDefinition (',' partitionDefinition)* +// ')' #alterByReorganizePartition +// | EXCHANGE PARTITION uid WITH TABLE tableName +// (validationFormat=(WITH | WITHOUT) VALIDATION)? #alterByExchangePartition +// | ANALYZE PARTITION (uidList | ALL) #alterByAnalyzePartition +// | CHECK PARTITION (uidList | ALL) #alterByCheckPartition +// | OPTIMIZE PARTITION (uidList | ALL) #alterByOptimizePartition +// | REBUILD PARTITION (uidList | ALL) #alterByRebuildPartition +// | REPAIR PARTITION (uidList | ALL) #alterByRepairPartition +// | REMOVE PARTITIONING #alterByRemovePartitioning +// | UPGRADE PARTITIONING #alterByUpgradePartitioning +// | ADD COLUMN? +// '(' createDefinition (',' createDefinition)* ')' #alterByAddDefinitions +// ; +// +// +// // Drop statements +// +// dropDatabase +// : DROP dbFormat=(DATABASE | SCHEMA) ifExists? uid +// ; +// +// dropEvent +// : DROP EVENT ifExists? fullId +// ; +// +// dropIndex +// : DROP INDEX intimeAction=(ONLINE | OFFLINE)? +// uid ON tableName +// ( +// ALGORITHM '='? algType=(DEFAULT | INPLACE | COPY) +// | LOCK '='? +// lockType=(DEFAULT | NONE | SHARED | EXCLUSIVE) +// )* +// ; +// +// dropLogfileGroup +// : DROP LOGFILE GROUP uid ENGINE '=' engineName +// ; +// +// dropProcedure +// : DROP PROCEDURE ifExists? fullId +// ; +// +// dropFunction +// : DROP FUNCTION ifExists? fullId +// ; +// +// dropServer +// : DROP SERVER ifExists? uid +// ; +// +// dropTable +// : DROP TEMPORARY? TABLE ifExists? +// tables dropType=(RESTRICT | CASCADE)? +// ; +// +// dropTablespace +// : DROP TABLESPACE uid (ENGINE '='? engineName)? +// ; +// +// dropTrigger +// : DROP TRIGGER ifExists? fullId +// ; +// +// dropView +// : DROP VIEW ifExists? +// fullId (',' fullId)* dropType=(RESTRICT | CASCADE)? +// ; +// +// dropRole +// : DROP ROLE ifExists? roleName (',' roleName)* +// ; +// +// setRole +// : SET DEFAULT ROLE (NONE | ALL | roleName (',' roleName)*) +// TO (userName | uid) (',' (userName | uid))* +// | SET ROLE roleOption +// ; +// +// // Other DDL statements +// +// renameTable +// : RENAME TABLE +// renameTableClause (',' renameTableClause)* +// ; +// +// renameTableClause +// : tableName TO tableName +// ; +// +// truncateTable +// : TRUNCATE TABLE? tableName +// ; +// +// +// // Data Manipulation Language +// +// // Primary DML Statements +// +// +// callStatement +// : CALL fullId +// ( +// '(' (constants | expressions)? ')' +// )? +// ; +// +// deleteStatement +// : singleDeleteStatement | multipleDeleteStatement +// ; +// +// doStatement +// : DO expressions +// ; +// +// handlerStatement +// : handlerOpenStatement +// | handlerReadIndexStatement +// | handlerReadStatement +// | handlerCloseStatement +// ; +// +// insertStatement +// : INSERT +// priority=(LOW_PRIORITY | DELAYED | HIGH_PRIORITY)? +// IGNORE? INTO? tableName +// (PARTITION '(' partitions=uidList? ')' )? +// ( +// ('(' columns=fullColumnNameList ')')? insertStatementValue +// | SET +// setFirst=updatedElement +// (',' setElements+=updatedElement)* +// ) +// ( +// ON DUPLICATE KEY UPDATE +// duplicatedFirst=updatedElement +// (',' duplicatedElements+=updatedElement)* +// )? +// ; +// +// loadDataStatement +// : LOAD DATA +// priority=(LOW_PRIORITY | CONCURRENT)? +// LOCAL? INFILE filename=STRING_LITERAL +// violation=(REPLACE | IGNORE)? +// INTO TABLE tableName +// (PARTITION '(' uidList ')' )? +// (CHARACTER SET charset=charsetName)? +// ( +// fieldsFormat=(FIELDS | COLUMNS) +// selectFieldsInto+ +// )? +// ( +// LINES +// selectLinesInto+ +// )? +// ( +// IGNORE decimalLiteral linesFormat=(LINES | ROWS) +// )? +// ( '(' assignmentField (',' assignmentField)* ')' )? +// (SET updatedElement (',' updatedElement)*)? +// ; +// +// loadXmlStatement +// : LOAD XML +// priority=(LOW_PRIORITY | CONCURRENT)? +// LOCAL? INFILE filename=STRING_LITERAL +// violation=(REPLACE | IGNORE)? +// INTO TABLE tableName +// (CHARACTER SET charset=charsetName)? +// (ROWS IDENTIFIED BY '<' tag=STRING_LITERAL '>')? +// ( IGNORE decimalLiteral linesFormat=(LINES | ROWS) )? +// ( '(' assignmentField (',' assignmentField)* ')' )? +// (SET updatedElement (',' updatedElement)*)? +// ; +// +// replaceStatement +// : REPLACE priority=(LOW_PRIORITY | DELAYED)? +// INTO? tableName +// (PARTITION '(' partitions=uidList ')' )? +// ( +// ('(' columns=uidList ')')? insertStatementValue +// | SET +// setFirst=updatedElement +// (',' setElements+=updatedElement)* +// ) +// ; + +selectStatement + : querySpecification lockClause? #simpleSelect +// | queryExpression lockClause? #parenthesisSelect +// | querySpecificationNointo unionStatement+ +// ( +// UNION unionType=(ALL | DISTINCT)? +// (querySpecification | queryExpression) +// )? +// orderByClause? limitClause? lockClause? #unionSelect +// | queryExpressionNointo unionParenthesis+ +// ( +// UNION unionType=(ALL | DISTINCT)? +// queryExpression +// )? +// orderByClause? limitClause? lockClause? #unionParenthesisSelect +// | querySpecificationNointo (',' lateralStatement)+ #withLateralStatement + ; + +// updateStatement +// : singleUpdateStatement | multipleUpdateStatement +// ; +// +// // details +// +// insertStatementValue +// : selectStatement +// | insertFormat=(VALUES | VALUE) +// '(' expressionsWithDefaults? ')' +// (',' '(' expressionsWithDefaults? ')')* +// ; +// +// updatedElement +// : fullColumnName '=' (expression | DEFAULT) +// ; +// +// assignmentField +// : uid | LOCAL_ID +// ; + +lockClause + : FOR UPDATE | LOCK IN SHARE MODE + ; + +// // Detailed DML Statements +// +// singleDeleteStatement +// : DELETE priority=LOW_PRIORITY? QUICK? IGNORE? +// FROM tableName +// (PARTITION '(' uidList ')' )? +// (WHERE expression)? +// orderByClause? (LIMIT limitClauseAtom)? +// ; +// +// multipleDeleteStatement +// : DELETE priority=LOW_PRIORITY? QUICK? IGNORE? +// ( +// tableName ('.' '*')? ( ',' tableName ('.' '*')? )* +// FROM tableSources +// | FROM +// tableName ('.' '*')? ( ',' tableName ('.' '*')? )* +// USING tableSources +// ) +// (WHERE expression)? +// ; +// +// handlerOpenStatement +// : HANDLER tableName OPEN (AS? uid)? +// ; +// +// handlerReadIndexStatement +// : HANDLER tableName READ index=uid +// ( +// comparisonOperator '(' constants ')' +// | moveOrder=(FIRST | NEXT | PREV | LAST) +// ) +// (WHERE expression)? (LIMIT limitClauseAtom)? +// ; +// +// handlerReadStatement +// : HANDLER tableName READ moveOrder=(FIRST | NEXT) +// (WHERE expression)? (LIMIT limitClauseAtom)? +// ; +// +// handlerCloseStatement +// : HANDLER tableName CLOSE +// ; +// +// singleUpdateStatement +// : UPDATE priority=LOW_PRIORITY? IGNORE? tableName (AS? uid)? +// SET updatedElement (',' updatedElement)* +// (WHERE expression)? orderByClause? limitClause? +// ; +// +// multipleUpdateStatement +// : UPDATE priority=LOW_PRIORITY? IGNORE? tableSources +// SET updatedElement (',' updatedElement)* +// (WHERE expression)? +// ; +// +// // details +// +// orderByClause +// : ORDER BY orderByExpression (',' orderByExpression)* +// ; +// +// orderByExpression +// : expression order=(ASC | DESC)? +// ; + +tableSources + : tableSource (',' tableSource)* + ; + +tableSource + : tableName #tableSourceBase + ; + +// tableSource +// : tableSourceItem joinPart* #tableSourceBase +// | '(' tableSourceItem joinPart* ')' #tableSourceNested +// | jsonTable #tableJson +// ; +// +// tableSourceItem +// : tableName +// (PARTITION '(' uidList ')' )? (AS? alias=uid)? +// (indexHint (',' indexHint)* )? #atomTableItem +// | ( +// selectStatement +// | '(' parenthesisSubquery=selectStatement ')' +// ) +// AS? alias=uid #subqueryTableItem +// | '(' tableSources ')' #tableSourcesItem +// ; +// +// indexHint +// : indexHintAction=(USE | IGNORE | FORCE) +// keyFormat=(INDEX|KEY) ( FOR indexHintType)? +// '(' uidList ')' +// ; +// +// indexHintType +// : JOIN | ORDER BY | GROUP BY +// ; +// +// joinPart +// : (INNER | CROSS)? JOIN LATERAL? tableSourceItem +// ( +// ON expression +// | USING '(' uidList ')' +// )? #innerJoin +// | STRAIGHT_JOIN tableSourceItem (ON expression)? #straightJoin +// | (LEFT | RIGHT) OUTER? JOIN LATERAL? tableSourceItem +// ( +// ON expression +// | USING '(' uidList ')' +// ) #outerJoin +// | NATURAL ((LEFT | RIGHT) OUTER?)? JOIN tableSourceItem #naturalJoin +// ; +// +// // Select Statement's Details +// +// queryExpression +// : '(' querySpecification ')' +// | '(' queryExpression ')' +// ; + +// queryExpressionNointo +// : '(' querySpecificationNointo ')' +// | '(' queryExpressionNointo ')' +// ; + +//querySpecification +// : SELECT selectSpec* selectElements selectIntoExpression? +// fromClause? groupByClause? havingClause? windowClause? orderByClause? limitClause? +// | SELECT selectSpec* selectElements +// fromClause? groupByClause? havingClause? windowClause? orderByClause? limitClause? selectIntoExpression? +// ; + +querySpecification + : SELECT selectSpec* selectElements + fromClause? limitClause? + ; + +// querySpecificationNointo +// : SELECT selectSpec* selectElements +// fromClause? groupByClause? havingClause? windowClause? orderByClause? limitClause? +// ; +// +// unionParenthesis +// : UNION unionType=(ALL | DISTINCT)? queryExpressionNointo +// ; +// +// unionStatement +// : UNION unionType=(ALL | DISTINCT)? +// (querySpecificationNointo | queryExpressionNointo) +// ; +// +// lateralStatement +// : LATERAL (querySpecificationNointo | +// queryExpressionNointo | +// ('(' (querySpecificationNointo | queryExpressionNointo) ')' (AS? uid)?) +// ) +// ; +// +// // JSON +// +// // https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html +// jsonTable +// : JSON_TABLE '(' +// STRING_LITERAL ',' +// STRING_LITERAL +// COLUMNS '(' jsonColumnList ')' +// ')' (AS? uid)? +// ; +// +// jsonColumnList +// : jsonColumn (',' jsonColumn)* +// ; +// +// jsonColumn +// : fullColumnName ( FOR ORDINALITY +// | dataType ( PATH STRING_LITERAL jsonOnEmpty? jsonOnError? +// | EXISTS PATH STRING_LITERAL ) ) +// | NESTED PATH? STRING_LITERAL COLUMNS '(' jsonColumnList ')' +// ; +// +// jsonOnEmpty +// : (NULL_LITERAL | ERROR | DEFAULT defaultValue) ON EMPTY +// ; +// +// jsonOnError +// : (NULL_LITERAL | ERROR | DEFAULT defaultValue) ON ERROR +// ; +// +// // details + +selectSpec + : (ALL | DISTINCT | DISTINCTROW) + | HIGH_PRIORITY | STRAIGHT_JOIN | SQL_SMALL_RESULT + | SQL_BIG_RESULT | SQL_BUFFER_RESULT + | (SQL_CACHE | SQL_NO_CACHE) + | SQL_CALC_FOUND_ROWS + ; + +selectElements + : (star='*' | selectElement ) (',' selectElement)* + ; + +// selectElement +// : fullId '.' '*' #selectStarElement +// | fullColumnName (AS? uid)? #selectColumnElement +// | functionCall (AS? uid)? #selectFunctionElement +// | (LOCAL_ID VAR_ASSIGN)? expression (AS? uid)? #selectExpressionElement +// ; + +selectElement + : fullColumnName (AS? uid)? #selectColumnElement + | functionCall (AS? uid)? #selectFunctionElement + ; + +// selectIntoExpression +// : INTO assignmentField (',' assignmentField )* #selectIntoVariables +// | INTO DUMPFILE STRING_LITERAL #selectIntoDumpFile +// | ( +// INTO OUTFILE filename=STRING_LITERAL +// (CHARACTER SET charset=charsetName)? +// ( +// fieldsFormat=(FIELDS | COLUMNS) +// selectFieldsInto+ +// )? +// ( +// LINES selectLinesInto+ +// )? +// ) #selectIntoTextFile +// ; +// +// selectFieldsInto +// : TERMINATED BY terminationField=STRING_LITERAL +// | OPTIONALLY? ENCLOSED BY enclosion=STRING_LITERAL +// | ESCAPED BY escaping=STRING_LITERAL +// ; +// +// selectLinesInto +// : STARTING BY starting=STRING_LITERAL +// | TERMINATED BY terminationLine=STRING_LITERAL +// ; + +fromClause + : (FROM tableSources) + (WHERE whereExpr=expression)? + ; + +// groupByClause +// : GROUP BY +// groupByItem (',' groupByItem)* +// (WITH ROLLUP)? +// ; +// +// havingClause +// : HAVING havingExpr=expression +// ; +// +// windowClause +// : WINDOW windowName AS '(' windowSpec ')' (',' windowName AS '(' windowSpec ')')* +// ; +// +// groupByItem +// : expression order=(ASC | DESC)? +// ; + +limitClause + : LIMIT + ( + (offset=limitClauseAtom ',')? limit=limitClauseAtom + | limit=limitClauseAtom OFFSET offset=limitClauseAtom + ) + ; + +limitClauseAtom + : decimalLiteral +// | mysqlVariable +// | simpleId + ; + + +// // Transaction's Statements +// +// startTransaction +// : START TRANSACTION (transactionMode (',' transactionMode)* )? +// ; +// +// beginWork +// : BEGIN WORK? +// ; +// +// commitWork +// : COMMIT WORK? +// (AND nochain=NO? CHAIN)? +// (norelease=NO? RELEASE)? +// ; +// +// rollbackWork +// : ROLLBACK WORK? +// (AND nochain=NO? CHAIN)? +// (norelease=NO? RELEASE)? +// ; +// +// savepointStatement +// : SAVEPOINT uid +// ; +// +// rollbackStatement +// : ROLLBACK WORK? TO SAVEPOINT? uid +// ; +// +// releaseStatement +// : RELEASE SAVEPOINT uid +// ; +// +// lockTables +// : LOCK (TABLE | TABLES) lockTableElement (',' lockTableElement)* waitNowaitClause? +// ; +// +// unlockTables +// : UNLOCK TABLES +// ; +// +// +// // details +// +// setAutocommitStatement +// : SET AUTOCOMMIT '=' autocommitValue=('0' | '1') +// ; +// +// setTransactionStatement +// : SET transactionContext=(GLOBAL | SESSION)? TRANSACTION +// transactionOption (',' transactionOption)* +// ; +// +// transactionMode +// : WITH CONSISTENT SNAPSHOT +// | READ WRITE +// | READ ONLY +// ; +// +// lockTableElement +// : tableName (AS? uid)? lockAction +// ; +// +// lockAction +// : READ LOCAL? | LOW_PRIORITY? WRITE +// ; +// +// transactionOption +// : ISOLATION LEVEL transactionLevel +// | READ WRITE +// | READ ONLY +// ; +// +// transactionLevel +// : REPEATABLE READ +// | READ COMMITTED +// | READ UNCOMMITTED +// | SERIALIZABLE +// ; +// +// +// // Replication's Statements +// +// // Base Replication +// +// changeMaster +// : CHANGE MASTER TO +// masterOption (',' masterOption)* channelOption? +// ; +// +// changeReplicationFilter +// : CHANGE REPLICATION FILTER +// replicationFilter (',' replicationFilter)* +// ; +// +// purgeBinaryLogs +// : PURGE purgeFormat=(BINARY | MASTER) LOGS +// ( +// TO fileName=STRING_LITERAL +// | BEFORE timeValue=STRING_LITERAL +// ) +// ; +// +// resetMaster +// : RESET MASTER +// ; +// +// resetSlave +// : RESET SLAVE ALL? channelOption? +// ; +// +// startSlave +// : START SLAVE (threadType (',' threadType)*)? +// (UNTIL untilOption)? +// connectionOption* channelOption? +// ; +// +// stopSlave +// : STOP SLAVE (threadType (',' threadType)*)? +// ; +// +// startGroupReplication +// : START GROUP_REPLICATION +// ; +// +// stopGroupReplication +// : STOP GROUP_REPLICATION +// ; +// +// // details +// +// masterOption +// : stringMasterOption '=' STRING_LITERAL #masterStringOption +// | decimalMasterOption '=' decimalLiteral #masterDecimalOption +// | boolMasterOption '=' boolVal=('0' | '1') #masterBoolOption +// | MASTER_HEARTBEAT_PERIOD '=' REAL_LITERAL #masterRealOption +// | IGNORE_SERVER_IDS '=' '(' (uid (',' uid)*)? ')' #masterUidListOption +// ; +// +// stringMasterOption +// : MASTER_BIND | MASTER_HOST | MASTER_USER | MASTER_PASSWORD +// | MASTER_LOG_FILE | RELAY_LOG_FILE | MASTER_SSL_CA +// | MASTER_SSL_CAPATH | MASTER_SSL_CERT | MASTER_SSL_CRL +// | MASTER_SSL_CRLPATH | MASTER_SSL_KEY | MASTER_SSL_CIPHER +// | MASTER_TLS_VERSION +// ; +// decimalMasterOption +// : MASTER_PORT | MASTER_CONNECT_RETRY | MASTER_RETRY_COUNT +// | MASTER_DELAY | MASTER_LOG_POS | RELAY_LOG_POS +// ; +// +// boolMasterOption +// : MASTER_AUTO_POSITION | MASTER_SSL +// | MASTER_SSL_VERIFY_SERVER_CERT +// ; +// +// channelOption +// : FOR CHANNEL STRING_LITERAL +// ; +// +// replicationFilter +// : REPLICATE_DO_DB '=' '(' uidList ')' #doDbReplication +// | REPLICATE_IGNORE_DB '=' '(' uidList ')' #ignoreDbReplication +// | REPLICATE_DO_TABLE '=' '(' tables ')' #doTableReplication +// | REPLICATE_IGNORE_TABLE '=' '(' tables ')' #ignoreTableReplication +// | REPLICATE_WILD_DO_TABLE '=' '(' simpleStrings ')' #wildDoTableReplication +// | REPLICATE_WILD_IGNORE_TABLE +// '=' '(' simpleStrings ')' #wildIgnoreTableReplication +// | REPLICATE_REWRITE_DB '=' +// '(' tablePair (',' tablePair)* ')' #rewriteDbReplication +// ; +// +// tablePair +// : '(' firstTable=tableName ',' secondTable=tableName ')' +// ; +// +// threadType +// : IO_THREAD | SQL_THREAD +// ; +// +// untilOption +// : gtids=(SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS) +// '=' gtuidSet #gtidsUntilOption +// | MASTER_LOG_FILE '=' STRING_LITERAL +// ',' MASTER_LOG_POS '=' decimalLiteral #masterLogUntilOption +// | RELAY_LOG_FILE '=' STRING_LITERAL +// ',' RELAY_LOG_POS '=' decimalLiteral #relayLogUntilOption +// | SQL_AFTER_MTS_GAPS #sqlGapsUntilOption +// ; +// +// connectionOption +// : USER '=' conOptUser=STRING_LITERAL #userConnectionOption +// | PASSWORD '=' conOptPassword=STRING_LITERAL #passwordConnectionOption +// | DEFAULT_AUTH '=' conOptDefAuth=STRING_LITERAL #defaultAuthConnectionOption +// | PLUGIN_DIR '=' conOptPluginDir=STRING_LITERAL #pluginDirConnectionOption +// ; +// +// gtuidSet +// : uuidSet (',' uuidSet)* +// | STRING_LITERAL +// ; +// +// +// // XA Transactions +// +// xaStartTransaction +// : XA xaStart=(START | BEGIN) xid xaAction=(JOIN | RESUME)? +// ; +// +// xaEndTransaction +// : XA END xid (SUSPEND (FOR MIGRATE)?)? +// ; +// +// xaPrepareStatement +// : XA PREPARE xid +// ; +// +// xaCommitWork +// : XA COMMIT xid (ONE PHASE)? +// ; +// +// xaRollbackWork +// : XA ROLLBACK xid +// ; +// +// xaRecoverWork +// : XA RECOVER (CONVERT xid)? +// ; +// +// +// // Prepared Statements +// +// prepareStatement +// : PREPARE uid FROM +// (query=STRING_LITERAL | variable=LOCAL_ID) +// ; +// +// executeStatement +// : EXECUTE uid (USING userVariables)? +// ; +// +// deallocatePrepare +// : dropFormat=(DEALLOCATE | DROP) PREPARE uid +// ; +// +// +// // Compound Statements +// +// routineBody +// : blockStatement | sqlStatement +// ; +// +// // details +// +// blockStatement +// : (uid ':')? BEGIN +// ( +// (declareVariable SEMI)* +// (declareCondition SEMI)* +// (declareCursor SEMI)* +// (declareHandler SEMI)* +// procedureSqlStatement* +// )? +// END uid? +// ; +// +// caseStatement +// : CASE (uid | expression)? caseAlternative+ +// (ELSE procedureSqlStatement+)? +// END CASE +// ; +// +// ifStatement +// : IF expression +// THEN thenStatements+=procedureSqlStatement+ +// elifAlternative* +// (ELSE elseStatements+=procedureSqlStatement+ )? +// END IF +// ; +// +// iterateStatement +// : ITERATE uid +// ; +// +// leaveStatement +// : LEAVE uid +// ; +// +// loopStatement +// : (uid ':')? +// LOOP procedureSqlStatement+ +// END LOOP uid? +// ; +// +// repeatStatement +// : (uid ':')? +// REPEAT procedureSqlStatement+ +// UNTIL expression +// END REPEAT uid? +// ; +// +// returnStatement +// : RETURN expression +// ; +// +// whileStatement +// : (uid ':')? +// WHILE expression +// DO procedureSqlStatement+ +// END WHILE uid? +// ; +// +// cursorStatement +// : CLOSE uid #CloseCursor +// | FETCH (NEXT? FROM)? uid INTO uidList #FetchCursor +// | OPEN uid #OpenCursor +// ; +// +// // details +// +// declareVariable +// : DECLARE uidList dataType (DEFAULT expression)? +// ; +// +// declareCondition +// : DECLARE uid CONDITION FOR +// ( decimalLiteral | SQLSTATE VALUE? STRING_LITERAL) +// ; +// +// declareCursor +// : DECLARE uid CURSOR FOR selectStatement +// ; +// +// declareHandler +// : DECLARE handlerAction=(CONTINUE | EXIT | UNDO) +// HANDLER FOR +// handlerConditionValue (',' handlerConditionValue)* +// routineBody +// ; +// +// handlerConditionValue +// : decimalLiteral #handlerConditionCode +// | SQLSTATE VALUE? STRING_LITERAL #handlerConditionState +// | uid #handlerConditionName +// | SQLWARNING #handlerConditionWarning +// | NOT FOUND #handlerConditionNotfound +// | SQLEXCEPTION #handlerConditionException +// ; +// +// procedureSqlStatement +// : (compoundStatement | sqlStatement) SEMI +// ; +// +// caseAlternative +// : WHEN (constant | expression) +// THEN procedureSqlStatement+ +// ; +// +// elifAlternative +// : ELSEIF expression +// THEN procedureSqlStatement+ +// ; +// +// // Administration Statements +// +// // Account management statements +// +// alterUser +// : ALTER USER +// userSpecification (',' userSpecification)* #alterUserMysqlV56 +// | ALTER USER ifExists? +// userAuthOption (',' userAuthOption)* +// ( +// REQUIRE +// (tlsNone=NONE | tlsOption (AND? tlsOption)* ) +// )? +// (WITH userResourceOption+)? +// (userPasswordOption | userLockOption)* +// (COMMENT STRING_LITERAL | ATTRIBUTE STRING_LITERAL)? #alterUserMysqlV80 +// | ALTER USER ifExists? +// (userName | uid) DEFAULT ROLE roleOption #alterUserMysqlV80 +// ; +// +// createUser +// : CREATE USER userAuthOption (',' userAuthOption)* #createUserMysqlV56 +// | CREATE USER ifNotExists? +// userAuthOption (',' userAuthOption)* +// (DEFAULT ROLE roleOption)? +// ( +// REQUIRE +// (tlsNone=NONE | tlsOption (AND? tlsOption)* ) +// )? +// (WITH userResourceOption+)? +// (userPasswordOption | userLockOption)* +// (COMMENT STRING_LITERAL | ATTRIBUTE STRING_LITERAL)? #createUserMysqlV80 +// ; +// +// dropUser +// : DROP USER ifExists? userName (',' userName)* +// ; +// +// grantStatement +// : GRANT privelegeClause (',' privelegeClause)* +// ON +// privilegeObject=(TABLE | FUNCTION | PROCEDURE)? +// privilegeLevel +// TO userAuthOption (',' userAuthOption)* +// ( +// REQUIRE +// (tlsNone=NONE | tlsOption (AND? tlsOption)* ) +// )? +// (WITH (GRANT OPTION | userResourceOption)* )? +// (AS userName WITH ROLE roleOption)? +// | GRANT (userName | uid) (',' (userName | uid))* +// TO (userName | uid) (',' (userName | uid))* +// (WITH ADMIN OPTION)? +// ; +// +// roleOption +// : DEFAULT +// | NONE +// | ALL (EXCEPT userName (',' userName)*)? +// | userName (',' userName)* +// ; +// +// grantProxy +// : GRANT PROXY ON fromFirst=userName +// TO toFirst=userName (',' toOther+=userName)* +// (WITH GRANT OPTION)? +// ; +// +// renameUser +// : RENAME USER +// renameUserClause (',' renameUserClause)* +// ; +// +// revokeStatement +// : REVOKE privelegeClause (',' privelegeClause)* +// ON +// privilegeObject=(TABLE | FUNCTION | PROCEDURE)? +// privilegeLevel +// FROM userName (',' userName)* #detailRevoke +// | REVOKE ALL PRIVILEGES? ',' GRANT OPTION +// FROM userName (',' userName)* #shortRevoke +// | REVOKE (userName | uid) (',' (userName | uid))* +// FROM (userName | uid) (',' (userName | uid))* #roleRevoke +// ; +// +// revokeProxy +// : REVOKE PROXY ON onUser=userName +// FROM fromFirst=userName (',' fromOther+=userName)* +// ; +// +// setPasswordStatement +// : SET PASSWORD (FOR userName)? +// '=' ( passwordFunctionClause | STRING_LITERAL) +// ; +// +// // details +// +// userSpecification +// : userName userPasswordOption +// ; +// +// userAuthOption +// : userName IDENTIFIED BY PASSWORD hashed=STRING_LITERAL #hashAuthOption +// | userName +// IDENTIFIED BY STRING_LITERAL (RETAIN CURRENT PASSWORD)? #stringAuthOption +// | userName +// IDENTIFIED WITH +// authenticationRule #moduleAuthOption +// | userName #simpleAuthOption +// ; +// +// authenticationRule +// : authPlugin +// ((BY | USING | AS) STRING_LITERAL)? #module +// | authPlugin +// USING passwordFunctionClause #passwordModuleOption +// ; +// +// tlsOption +// : SSL +// | X509 +// | CIPHER STRING_LITERAL +// | ISSUER STRING_LITERAL +// | SUBJECT STRING_LITERAL +// ; +// +// userResourceOption +// : MAX_QUERIES_PER_HOUR decimalLiteral +// | MAX_UPDATES_PER_HOUR decimalLiteral +// | MAX_CONNECTIONS_PER_HOUR decimalLiteral +// | MAX_USER_CONNECTIONS decimalLiteral +// ; +// +// userPasswordOption +// : PASSWORD EXPIRE +// (expireType=DEFAULT +// | expireType=NEVER +// | expireType=INTERVAL decimalLiteral DAY +// )? +// | PASSWORD HISTORY (DEFAULT | decimalLiteral) +// | PASSWORD REUSE INTERVAL (DEFAULT | decimalLiteral DAY) +// | PASSWORD REQUIRE CURRENT (OPTIONAL | DEFAULT)? +// | FAILED_LOGIN_ATTEMPTS decimalLiteral +// | PASSWORD_LOCK_TIME (decimalLiteral | UNBOUNDED) +// ; +// +// userLockOption +// : ACCOUNT lockType=(LOCK | UNLOCK) +// ; +// +// privelegeClause +// : privilege ( '(' uidList ')' )? +// ; +// +// privilege +// : ALL PRIVILEGES? +// | ALTER ROUTINE? +// | CREATE +// (TEMPORARY TABLES | ROUTINE | VIEW | USER | TABLESPACE | ROLE)? +// | DELETE | DROP (ROLE)? | EVENT | EXECUTE | FILE | GRANT OPTION +// | INDEX | INSERT | LOCK TABLES | PROCESS | PROXY +// | REFERENCES | RELOAD +// | REPLICATION (CLIENT | SLAVE) +// | SELECT +// | SHOW (VIEW | DATABASES) +// | SHUTDOWN | SUPER | TRIGGER | UPDATE | USAGE +// | APPLICATION_PASSWORD_ADMIN | AUDIT_ADMIN | BACKUP_ADMIN | BINLOG_ADMIN | BINLOG_ENCRYPTION_ADMIN | CLONE_ADMIN +// | CONNECTION_ADMIN | ENCRYPTION_KEY_ADMIN | FIREWALL_ADMIN | FIREWALL_USER | FLUSH_OPTIMIZER_COSTS +// | FLUSH_STATUS | FLUSH_TABLES | FLUSH_USER_RESOURCES | GROUP_REPLICATION_ADMIN +// | INNODB_REDO_LOG_ARCHIVE | INNODB_REDO_LOG_ENABLE | NDB_STORED_USER | PASSWORDLESS_USER_ADMIN | PERSIST_RO_VARIABLES_ADMIN | REPLICATION_APPLIER +// | REPLICATION_SLAVE_ADMIN | RESOURCE_GROUP_ADMIN | RESOURCE_GROUP_USER | ROLE_ADMIN +// | SERVICE_CONNECTION_ADMIN +// | SESSION_VARIABLES_ADMIN | SET_USER_ID | SHOW_ROUTINE | SYSTEM_USER | SYSTEM_VARIABLES_ADMIN +// | TABLE_ENCRYPTION_ADMIN | VERSION_TOKEN_ADMIN | XA_RECOVER_ADMIN +// // MySQL on Amazon RDS +// | LOAD FROM S3 | SELECT INTO S3 | INVOKE LAMBDA +// ; +// +// privilegeLevel +// : '*' #currentSchemaPriviLevel +// | '*' '.' '*' #globalPrivLevel +// | uid '.' '*' #definiteSchemaPrivLevel +// | uid '.' uid #definiteFullTablePrivLevel +// | uid dottedId #definiteFullTablePrivLevel2 +// | uid #definiteTablePrivLevel +// ; +// +// renameUserClause +// : fromFirst=userName TO toFirst=userName +// ; +// +// // Table maintenance statements +// +// analyzeTable +// : ANALYZE actionOption=(NO_WRITE_TO_BINLOG | LOCAL)? +// (TABLE | TABLES) tables +// ( UPDATE HISTOGRAM ON fullColumnName (',' fullColumnName)* (WITH decimalLiteral BUCKETS)? )? +// ( DROP HISTOGRAM ON fullColumnName (',' fullColumnName)* )? +// ; +// +// checkTable +// : CHECK TABLE tables checkTableOption* +// ; +// +// checksumTable +// : CHECKSUM TABLE tables actionOption=(QUICK | EXTENDED)? +// ; +// +// optimizeTable +// : OPTIMIZE actionOption=(NO_WRITE_TO_BINLOG | LOCAL)? +// (TABLE | TABLES) tables +// ; +// +// repairTable +// : REPAIR actionOption=(NO_WRITE_TO_BINLOG | LOCAL)? +// TABLE tables +// QUICK? EXTENDED? USE_FRM? +// ; +// +// // details +// +// checkTableOption +// : FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED +// ; +// +// +// // Plugin and udf statements +// +// createUdfunction +// : CREATE AGGREGATE? FUNCTION ifNotExists? uid +// RETURNS returnType=(STRING | INTEGER | REAL | DECIMAL) +// SONAME STRING_LITERAL +// ; +// +// installPlugin +// : INSTALL PLUGIN uid SONAME STRING_LITERAL +// ; +// +// uninstallPlugin +// : UNINSTALL PLUGIN uid +// ; +// +// +// // Set and show statements +// +// setStatement +// : SET variableClause ('=' | ':=') (expression | ON) +// (',' variableClause ('=' | ':=') (expression | ON))* #setVariable +// | SET charSet (charsetName | DEFAULT) #setCharset +// | SET NAMES +// (charsetName (COLLATE collationName)? | DEFAULT) #setNames +// | setPasswordStatement #setPassword +// | setTransactionStatement #setTransaction +// | setAutocommitStatement #setAutocommit +// | SET fullId ('=' | ':=') expression +// (',' fullId ('=' | ':=') expression)* #setNewValueInsideTrigger +// ; +// +// showStatement +// : SHOW logFormat=(BINARY | MASTER) LOGS #showMasterLogs +// | SHOW logFormat=(BINLOG | RELAYLOG) +// EVENTS (IN filename=STRING_LITERAL)? +// (FROM fromPosition=decimalLiteral)? +// (LIMIT +// (offset=decimalLiteral ',')? +// rowCount=decimalLiteral +// )? #showLogEvents +// | SHOW showCommonEntity showFilter? #showObjectFilter +// | SHOW FULL? columnsFormat=(COLUMNS | FIELDS) +// tableFormat=(FROM | IN) tableName +// (schemaFormat=(FROM | IN) uid)? showFilter? #showColumns +// | SHOW CREATE schemaFormat=(DATABASE | SCHEMA) +// ifNotExists? uid #showCreateDb +// | SHOW CREATE +// namedEntity=( +// EVENT | FUNCTION | PROCEDURE +// | TABLE | TRIGGER | VIEW +// ) +// fullId #showCreateFullIdObject +// | SHOW CREATE USER userName #showCreateUser +// | SHOW ENGINE engineName engineOption=(STATUS | MUTEX) #showEngine +// | SHOW showGlobalInfoClause #showGlobalInfo +// | SHOW errorFormat=(ERRORS | WARNINGS) +// (LIMIT +// (offset=decimalLiteral ',')? +// rowCount=decimalLiteral +// )? #showErrors +// | SHOW COUNT '(' '*' ')' errorFormat=(ERRORS | WARNINGS) #showCountErrors +// | SHOW showSchemaEntity +// (schemaFormat=(FROM | IN) uid)? showFilter? #showSchemaFilter +// | SHOW routine=(FUNCTION | PROCEDURE) CODE fullId #showRoutine +// | SHOW GRANTS (FOR userName)? #showGrants +// | SHOW indexFormat=(INDEX | INDEXES | KEYS) +// tableFormat=(FROM | IN) tableName +// (schemaFormat=(FROM | IN) uid)? (WHERE expression)? #showIndexes +// | SHOW OPEN TABLES ( schemaFormat=(FROM | IN) uid)? +// showFilter? #showOpenTables +// | SHOW PROFILE showProfileType (',' showProfileType)* +// (FOR QUERY queryCount=decimalLiteral)? +// (LIMIT +// (offset=decimalLiteral ',')? +// rowCount=decimalLiteral +// ) #showProfile +// | SHOW SLAVE STATUS (FOR CHANNEL STRING_LITERAL)? #showSlaveStatus +// ; +// +// // details +// +// variableClause +// : LOCAL_ID | GLOBAL_ID | ( ('@' '@')? (GLOBAL | SESSION | LOCAL) )? uid +// ; +// +// showCommonEntity +// : CHARACTER SET | COLLATION | DATABASES | SCHEMAS +// | FUNCTION STATUS | PROCEDURE STATUS +// | (GLOBAL | SESSION)? (STATUS | VARIABLES) +// ; +// +// showFilter +// : LIKE STRING_LITERAL +// | WHERE expression +// ; +// +// showGlobalInfoClause +// : STORAGE? ENGINES | MASTER STATUS | PLUGINS +// | PRIVILEGES | FULL? PROCESSLIST | PROFILES +// | SLAVE HOSTS | AUTHORS | CONTRIBUTORS +// ; +// +// showSchemaEntity +// : EVENTS | TABLE STATUS | FULL? TABLES | TRIGGERS +// ; +// +// showProfileType +// : ALL | BLOCK IO | CONTEXT SWITCHES | CPU | IPC | MEMORY +// | PAGE FAULTS | SOURCE | SWAPS +// ; +// +// +// // Other administrative statements +// +// binlogStatement +// : BINLOG STRING_LITERAL +// ; +// +// cacheIndexStatement +// : CACHE INDEX tableIndexes (',' tableIndexes)* +// ( PARTITION '(' (uidList | ALL) ')' )? +// IN schema=uid +// ; +// +// flushStatement +// : FLUSH flushFormat=(NO_WRITE_TO_BINLOG | LOCAL)? +// flushOption (',' flushOption)* +// ; +// +// killStatement +// : KILL connectionFormat=(CONNECTION | QUERY)? expression +// ; +// +// loadIndexIntoCache +// : LOAD INDEX INTO CACHE +// loadedTableIndexes (',' loadedTableIndexes)* +// ; +// +// // remark reset (maser | slave) describe in replication's +// // statements section +// resetStatement +// : RESET QUERY CACHE +// ; +// +// shutdownStatement +// : SHUTDOWN +// ; +// +// // details +// +// tableIndexes +// : tableName ( indexFormat=(INDEX | KEY)? '(' uidList ')' )? +// ; +// +// flushOption +// : ( +// DES_KEY_FILE | HOSTS +// | ( +// BINARY | ENGINE | ERROR | GENERAL | RELAY | SLOW +// )? LOGS +// | OPTIMIZER_COSTS | PRIVILEGES | QUERY CACHE | STATUS +// | USER_RESOURCES | TABLES (WITH READ LOCK)? +// ) #simpleFlushOption +// | RELAY LOGS channelOption? #channelFlushOption +// | (TABLE | TABLES) tables? flushTableOption? #tableFlushOption +// ; +// +// flushTableOption +// : WITH READ LOCK +// | FOR EXPORT +// ; +// +// loadedTableIndexes +// : tableName +// ( PARTITION '(' (partitionList=uidList | ALL) ')' )? +// ( indexFormat=(INDEX | KEY)? '(' indexList=uidList ')' )? +// (IGNORE LEAVES)? +// ; +// +// +// // Utility Statements +// +// +// simpleDescribeStatement +// : command=(EXPLAIN | DESCRIBE | DESC) tableName +// (column=uid | pattern=STRING_LITERAL)? +// ; +// +// fullDescribeStatement +// : command=(EXPLAIN | DESCRIBE | DESC) +// ( +// formatType=(EXTENDED | PARTITIONS | FORMAT ) +// '=' +// formatValue=(TRADITIONAL | JSON) +// )? +// describeObjectClause +// ; +// +// helpStatement +// : HELP STRING_LITERAL +// ; +// +// useStatement +// : USE uid +// ; +// +// signalStatement +// : SIGNAL ( ( SQLSTATE VALUE? stringLiteral ) | ID | REVERSE_QUOTE_ID ) +// ( SET signalConditionInformation ( ',' signalConditionInformation)* )? +// ; +// +// resignalStatement +// : RESIGNAL ( ( SQLSTATE VALUE? stringLiteral ) | ID | REVERSE_QUOTE_ID )? +// ( SET signalConditionInformation ( ',' signalConditionInformation)* )? +// ; +// +// signalConditionInformation +// : ( CLASS_ORIGIN +// | SUBCLASS_ORIGIN +// | MESSAGE_TEXT +// | MYSQL_ERRNO +// | CONSTRAINT_CATALOG +// | CONSTRAINT_SCHEMA +// | CONSTRAINT_NAME +// | CATALOG_NAME +// | SCHEMA_NAME +// | TABLE_NAME +// | COLUMN_NAME +// | CURSOR_NAME +// ) '=' ( stringLiteral | DECIMAL_LITERAL | mysqlVariable | simpleId ) +// ; +// +// diagnosticsStatement +// : GET ( CURRENT | STACKED )? DIAGNOSTICS ( +// ( variableClause '=' ( NUMBER | ROW_COUNT ) ( ',' variableClause '=' ( NUMBER | ROW_COUNT ) )* ) +// | ( CONDITION ( decimalLiteral | variableClause ) variableClause '=' diagnosticsConditionInformationName ( ',' variableClause '=' diagnosticsConditionInformationName )* ) +// ) +// ; +// +// diagnosticsConditionInformationName +// : CLASS_ORIGIN +// | SUBCLASS_ORIGIN +// | RETURNED_SQLSTATE +// | MESSAGE_TEXT +// | MYSQL_ERRNO +// | CONSTRAINT_CATALOG +// | CONSTRAINT_SCHEMA +// | CONSTRAINT_NAME +// | CATALOG_NAME +// | SCHEMA_NAME +// | TABLE_NAME +// | COLUMN_NAME +// | CURSOR_NAME +// ; +// +// // details +// +// describeObjectClause +// : ( +// selectStatement | deleteStatement | insertStatement +// | replaceStatement | updateStatement +// ) #describeStatements +// | FOR CONNECTION uid #describeConnection +// ; +// + +// Common Clauses + +// DB Objects + +fullId + : uid (DOT_ID | '.' uid)? + ; + +tableName + : fullId + ; + +// roleName +// : userName | uid +// ; + +fullColumnName + : uid (dottedId dottedId? )? + | .? dottedId dottedId? + ; + +// indexColumnName +// : ((uid | STRING_LITERAL) ('(' decimalLiteral ')')? | expression) sortType=(ASC | DESC)? +// ; +// +// userName +// : STRING_USER_NAME | ID | STRING_LITERAL | ADMIN | keywordsCanBeId; +// +// mysqlVariable +// : LOCAL_ID +// | GLOBAL_ID +// ; +// +// charsetName +// : BINARY +// | charsetNameBase +// | STRING_LITERAL +// | CHARSET_REVERSE_QOUTE_STRING +// ; + +collationName + : uid | STRING_LITERAL; + +// engineName +// : ARCHIVE | BLACKHOLE | CSV | FEDERATED | INNODB | MEMORY +// | MRG_MYISAM | MYISAM | NDB | NDBCLUSTER | PERFORMANCE_SCHEMA +// | TOKUDB +// | ID +// | STRING_LITERAL | REVERSE_QUOTE_ID +// | CONNECT +// ; +// +// uuidSet +// : decimalLiteral '-' decimalLiteral '-' decimalLiteral +// '-' decimalLiteral '-' decimalLiteral +// (':' decimalLiteral '-' decimalLiteral)+ +// ; +// +// xid +// : globalTableUid=xuidStringId +// ( +// ',' qualifier=xuidStringId +// (',' idFormat=decimalLiteral)? +// )? +// ; +// +// xuidStringId +// : STRING_LITERAL +// | BIT_STRING +// | HEXADECIMAL_LITERAL+ +// ; +// +// authPlugin +// : uid | STRING_LITERAL +// ; + +uid + : simpleId + //| DOUBLE_QUOTE_ID + | REVERSE_QUOTE_ID + | CHARSET_REVERSE_QOUTE_STRING + ; + +// simpleId +// : ID +// | charsetNameBase +// | transactionLevelBase +// | engineName +// | privilegesBase +// | intervalTypeBase +// | dataTypeBase +// | keywordsCanBeId +// | scalarFunctionName +// ; + +simpleId + : ID + ; + +dottedId + : DOT_ID + | '.' uid + ; + + +// Literals + +decimalLiteral + : DECIMAL_LITERAL | ZERO_DECIMAL | ONE_DECIMAL | TWO_DECIMAL | REAL_LITERAL + ; + +// fileSizeLiteral +// : FILESIZE_LITERAL | decimalLiteral; + +stringLiteral + : ( + STRING_CHARSET_NAME? STRING_LITERAL + | START_NATIONAL_STRING_LITERAL + ) STRING_LITERAL+ + | ( + STRING_CHARSET_NAME? STRING_LITERAL + | START_NATIONAL_STRING_LITERAL + ) (COLLATE collationName)? + ; + +booleanLiteral + : TRUE | FALSE; + +hexadecimalLiteral + : STRING_CHARSET_NAME? HEXADECIMAL_LITERAL; + +//nullNotnull +// : NOT? (NULL_LITERAL | NULL_SPEC_LITERAL) +// ; + +constant + : stringLiteral | decimalLiteral + | '-' decimalLiteral + | hexadecimalLiteral | booleanLiteral + | REAL_LITERAL +// | BIT_STRING +// | NOT? nullLiteral=(NULL_LITERAL | NULL_SPEC_LITERAL) + ; + + +// // Data Types +// +// dataType +// : typeName=( +// CHAR | CHARACTER | VARCHAR | TINYTEXT | TEXT | MEDIUMTEXT | LONGTEXT +// | NCHAR | NVARCHAR | LONG +// ) +// VARYING? +// lengthOneDimension? BINARY? +// (charSet charsetName)? +// (COLLATE collationName | BINARY)? #stringDataType +// | NATIONAL typeName=(VARCHAR | CHARACTER) +// lengthOneDimension? BINARY? #nationalStringDataType +// | NCHAR typeName=VARCHAR +// lengthOneDimension? BINARY? #nationalStringDataType +// | NATIONAL typeName=(CHAR | CHARACTER) VARYING +// lengthOneDimension? BINARY? #nationalVaryingStringDataType +// | typeName=( +// TINYINT | SMALLINT | MEDIUMINT | INT | INTEGER | BIGINT +// | MIDDLEINT | INT1 | INT2 | INT3 | INT4 | INT8 +// ) +// lengthOneDimension? (SIGNED | UNSIGNED | ZEROFILL)* #dimensionDataType +// | typeName=REAL +// lengthTwoDimension? (SIGNED | UNSIGNED | ZEROFILL)* #dimensionDataType +// | typeName=DOUBLE PRECISION? +// lengthTwoDimension? (SIGNED | UNSIGNED | ZEROFILL)* #dimensionDataType +// | typeName=(DECIMAL | DEC | FIXED | NUMERIC | FLOAT | FLOAT4 | FLOAT8) +// lengthTwoOptionalDimension? (SIGNED | UNSIGNED | ZEROFILL)* #dimensionDataType +// | typeName=( +// DATE | TINYBLOB | MEDIUMBLOB | LONGBLOB +// | BOOL | BOOLEAN | SERIAL +// ) #simpleDataType +// | typeName=( +// BIT | TIME | TIMESTAMP | DATETIME | BINARY +// | VARBINARY | BLOB | YEAR +// ) +// lengthOneDimension? #dimensionDataType +// | typeName=(ENUM | SET) +// collectionOptions BINARY? +// (charSet charsetName)? #collectionDataType +// | typeName=( +// GEOMETRYCOLLECTION | GEOMCOLLECTION | LINESTRING | MULTILINESTRING +// | MULTIPOINT | MULTIPOLYGON | POINT | POLYGON | JSON | GEOMETRY +// ) #spatialDataType +// | typeName=LONG VARCHAR? +// BINARY? +// (charSet charsetName)? +// (COLLATE collationName)? #longVarcharDataType // LONG VARCHAR is the same as LONG +// | LONG VARBINARY #longVarbinaryDataType +// ; +// +// collectionOptions +// : '(' STRING_LITERAL (',' STRING_LITERAL)* ')' +// ; +// +// convertedDataType +// : +// ( +// typeName=(BINARY| NCHAR) lengthOneDimension? +// | typeName=CHAR lengthOneDimension? (charSet charsetName)? +// | typeName=(DATE | DATETIME | TIME | JSON | INT | INTEGER) +// | typeName=DECIMAL lengthTwoOptionalDimension? +// | (SIGNED | UNSIGNED) INTEGER? +// ) ARRAY? +// ; +// +// lengthOneDimension +// : '(' decimalLiteral ')' +// ; +// +// lengthTwoDimension +// : '(' decimalLiteral ',' decimalLiteral ')' +// ; +// +// lengthTwoOptionalDimension +// : '(' decimalLiteral (',' decimalLiteral)? ')' +// ; +// +// +// // Common Lists +// +// uidList +// : uid (',' uid)* +// ; +// +// fullColumnNameList +// : fullColumnName (',' fullColumnName)* +// ; +// +// tables +// : tableName (',' tableName)* +// ; +// +// indexColumnNames +// : '(' indexColumnName (',' indexColumnName)* ')' +// ; + +expressions + : expression (',' expression)* + ; + +// expressionsWithDefaults +// : expressionOrDefault (',' expressionOrDefault)* +// ; +// +// constants +// : constant (',' constant)* +// ; +// +// simpleStrings +// : STRING_LITERAL (',' STRING_LITERAL)* +// ; +// +// userVariables +// : LOCAL_ID (',' LOCAL_ID)* +// ; +// +// +// // Common Expressons +// +// defaultValue +// : NULL_LITERAL +// | CAST '(' expression AS convertedDataType ')' +// | unaryOperator? constant +// | currentTimestamp (ON UPDATE currentTimestamp)? +// | '(' expression ')' +// | '(' fullId ')' +// ; +// +// currentTimestamp +// : +// ( +// (CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP) +// ('(' decimalLiteral? ')')? +// | NOW '(' decimalLiteral? ')' +// ) +// ; +// +// expressionOrDefault +// : expression | DEFAULT +// ; +// +// ifExists +// : IF EXISTS +// ; +// +// +// ifNotExists +// : IF NOT EXISTS +// ; +// +// orReplace +// : OR REPLACE +// ; +// +// waitNowaitClause +// : WAIT decimalLiteral +// | NOWAIT +// ; +// +// // Functions +// +// functionCall +// : specificFunction #specificFunctionCall +// | aggregateWindowedFunction #aggregateFunctionCall +// | nonAggregateWindowedFunction #nonAggregateFunctionCall +// | scalarFunctionName '(' functionArgs? ')' #scalarFunctionCall +// | fullId '(' functionArgs? ')' #udfFunctionCall +// | passwordFunctionClause #passwordFunctionCall +// ; + +functionCall + : aggregateWindowedFunction #aggregateFunctionCall + ; + +// +// specificFunction +// : ( +// CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP +// | CURRENT_USER | LOCALTIME | UTC_TIMESTAMP | SCHEMA +// ) ('(' ')')? #simpleFunctionCall +// | CONVERT '(' expression separator=',' convertedDataType ')' #dataTypeFunctionCall +// | CONVERT '(' expression USING charsetName ')' #dataTypeFunctionCall +// | CAST '(' expression AS convertedDataType ')' #dataTypeFunctionCall +// | VALUES '(' fullColumnName ')' #valuesFunctionCall +// | CASE expression caseFuncAlternative+ +// (ELSE elseArg=functionArg)? END #caseExpressionFunctionCall +// | CASE caseFuncAlternative+ +// (ELSE elseArg=functionArg)? END #caseFunctionCall +// | CHAR '(' functionArgs (USING charsetName)? ')' #charFunctionCall +// | POSITION +// '(' +// ( +// positionString=stringLiteral +// | positionExpression=expression +// ) +// IN +// ( +// inString=stringLiteral +// | inExpression=expression +// ) +// ')' #positionFunctionCall +// | (SUBSTR | SUBSTRING) +// '(' +// ( +// sourceString=stringLiteral +// | sourceExpression=expression +// ) FROM +// ( +// fromDecimal=decimalLiteral +// | fromExpression=expression +// ) +// ( +// FOR +// ( +// forDecimal=decimalLiteral +// | forExpression=expression +// ) +// )? +// ')' #substrFunctionCall +// | TRIM +// '(' +// positioinForm=(BOTH | LEADING | TRAILING) +// ( +// sourceString=stringLiteral +// | sourceExpression=expression +// )? +// FROM +// ( +// fromString=stringLiteral +// | fromExpression=expression +// ) +// ')' #trimFunctionCall +// | TRIM +// '(' +// ( +// sourceString=stringLiteral +// | sourceExpression=expression +// ) +// FROM +// ( +// fromString=stringLiteral +// | fromExpression=expression +// ) +// ')' #trimFunctionCall +// | WEIGHT_STRING +// '(' +// (stringLiteral | expression) +// (AS stringFormat=(CHAR | BINARY) +// '(' decimalLiteral ')' )? levelsInWeightString? +// ')' #weightFunctionCall +// | EXTRACT +// '(' +// intervalType +// FROM +// ( +// sourceString=stringLiteral +// | sourceExpression=expression +// ) +// ')' #extractFunctionCall +// | GET_FORMAT +// '(' +// datetimeFormat=(DATE | TIME | DATETIME) +// ',' stringLiteral +// ')' #getFormatFunctionCall +// | JSON_VALUE +// '(' expression +// ',' expression +// (RETURNING convertedDataType)? +// jsonOnEmpty? +// jsonOnError? +// ')' #jsonValueFunctionCall +// ; +// +// caseFuncAlternative +// : WHEN condition=functionArg +// THEN consequent=functionArg +// ; +// +// levelsInWeightString +// : LEVEL levelInWeightListElement +// (',' levelInWeightListElement)* #levelWeightList +// | LEVEL +// firstLevel=decimalLiteral '-' lastLevel=decimalLiteral #levelWeightRange +// ; +// +// levelInWeightListElement +// : decimalLiteral orderType=(ASC | DESC | REVERSE)? +// ; + +//aggregateWindowedFunction +// : (AVG | MAX | MIN | SUM) +// '(' aggregator=(ALL | DISTINCT)? functionArg ')' overClause? +// | COUNT '(' (starArg='*' | aggregator=ALL? functionArg | aggregator=DISTINCT functionArgs) ')' overClause? +// | ( +// BIT_AND | BIT_OR | BIT_XOR | STD | STDDEV | STDDEV_POP +// | STDDEV_SAMP | VAR_POP | VAR_SAMP | VARIANCE +// ) '(' aggregator=ALL? functionArg ')' overClause? +// | GROUP_CONCAT '(' +// aggregator=DISTINCT? functionArgs +// (ORDER BY +// orderByExpression (',' orderByExpression)* +// )? (SEPARATOR separator=STRING_LITERAL)? +// ')' +// ; + +aggregateWindowedFunction + : COUNT '(' (starArg='*') ')' + ; + +// nonAggregateWindowedFunction +// : (LAG | LEAD) '(' expression (',' decimalLiteral)? (',' decimalLiteral)? ')' overClause +// | (FIRST_VALUE | LAST_VALUE) '(' expression ')' overClause +// | (CUME_DIST | DENSE_RANK | PERCENT_RANK | RANK | ROW_NUMBER) '('')' overClause +// | NTH_VALUE '(' expression ',' decimalLiteral ')' overClause +// | NTILE '(' decimalLiteral ')' overClause +// ; +// +// overClause +// : OVER ('(' windowSpec? ')' | windowName) +// ; +// +// windowSpec +// : windowName? partitionClause? orderByClause? frameClause? +// ; +// +// windowName +// : uid +// ; +// +// frameClause +// : frameUnits frameExtent +// ; +// +// frameUnits +// : ROWS +// | RANGE +// ; +// +// frameExtent +// : frameRange +// | frameBetween +// ; +// +// frameBetween +// : BETWEEN frameRange AND frameRange +// ; +// +// frameRange +// : CURRENT ROW +// | UNBOUNDED (PRECEDING | FOLLOWING) +// | expression (PRECEDING | FOLLOWING) +// ; +// +// partitionClause +// : PARTITION BY expression (',' expression)* +// ; +// +// scalarFunctionName +// : functionNameBase +// | ASCII | CURDATE | CURRENT_DATE | CURRENT_TIME +// | CURRENT_TIMESTAMP | CURTIME | DATE_ADD | DATE_SUB +// | IF | INSERT | LOCALTIME | LOCALTIMESTAMP | MID | NOW +// | REPLACE | SUBSTR | SUBSTRING | SYSDATE | TRIM +// | UTC_DATE | UTC_TIME | UTC_TIMESTAMP +// ; +// +// passwordFunctionClause +// : functionName=(PASSWORD | OLD_PASSWORD) '(' functionArg ')' +// ; +// +// functionArgs +// : (constant | fullColumnName | functionCall | expression) +// ( +// ',' +// (constant | fullColumnName | functionCall | expression) +// )* +// ; +// +// functionArg +// : constant | fullColumnName | functionCall | expression +// ; +// + +// Expressions, predicates + +// Simplified approach for expression +expression + : notOperator=(NOT | '!') expression #notExpression + | expression logicalOperator expression #logicalExpression + | predicate IS NOT? testValue=(TRUE | FALSE | UNKNOWN) #isExpression + | predicate #predicateExpression + ; + +// predicate +// : predicate NOT? IN '(' (selectStatement | expressions) ')' #inPredicate +// | predicate IS nullNotnull #isNullPredicate +// | left=predicate comparisonOperator right=predicate #binaryComparisonPredicate +// | predicate comparisonOperator +// quantifier=(ALL | ANY | SOME) '(' selectStatement ')' #subqueryComparisonPredicate +// | predicate NOT? BETWEEN predicate AND predicate #betweenPredicate +// | predicate SOUNDS LIKE predicate #soundsLikePredicate +// | predicate NOT? LIKE predicate (ESCAPE STRING_LITERAL)? #likePredicate +// | predicate NOT? regex=(REGEXP | RLIKE) predicate #regexpPredicate +// | (LOCAL_ID VAR_ASSIGN)? expressionAtom #expressionAtomPredicate +// | predicate MEMBER OF '(' predicate ')' #jsonMemberOfPredicate +// ; + +predicate + : predicate NOT? IN '(' expressions ')' #inPredicate + | left=predicate comparisonOperator right=predicate #binaryComparisonPredicate + | (LOCAL_ID VAR_ASSIGN)? expressionAtom #expressionAtomPredicate + ; + + +// Add in ASTVisitor nullNotnull in constant +expressionAtom + : constant #constantExpressionAtom + | fullColumnName #fullColumnNameExpressionAtom +// | functionCall #functionCallExpressionAtom + | unaryOperator expressionAtom #unaryExpressionAtom +// | BINARY expressionAtom #binaryExpressionAtom + | '(' expression (',' expression)* ')' #nestedExpressionAtom + ; + +unaryOperator + : '!' | '~' | '+' | '-' | NOT + ; + +comparisonOperator + : '=' | '>' | '<' | '<' '=' | '>' '=' + | '<' '>' | '!' '=' +// | '<' '=' '>' // NULL-safe equal operator. + ; + +logicalOperator + : AND | '&' '&' +// | XOR + | OR | '|' '|' + ; + +// bitOperator +// : '<' '<' | '>' '>' | '&' | '^' | '|' +// ; +// +// mathOperator +// : '*' | '/' | '%' | DIV | MOD | '+' | '-' +// ; +// +// jsonOperator +// : '-' '>' | '-' '>' '>' +// ; +// +// // Simple id sets +// // (that keyword, which can be id) +// +// charsetNameBase +// : ARMSCII8 | ASCII | BIG5 | BINARY | CP1250 | CP1251 | CP1256 | CP1257 +// | CP850 | CP852 | CP866 | CP932 | DEC8 | EUCJPMS | EUCKR +// | GB18030 | GB2312 | GBK | GEOSTD8 | GREEK | HEBREW | HP8 | KEYBCS2 +// | KOI8R | KOI8U | LATIN1 | LATIN2 | LATIN5 | LATIN7 | MACCE +// | MACROMAN | SJIS | SWE7 | TIS620 | UCS2 | UJIS | UTF16 +// | UTF16LE | UTF32 | UTF8 | UTF8MB3 | UTF8MB4 +// ; +// +// transactionLevelBase +// : REPEATABLE | COMMITTED | UNCOMMITTED | SERIALIZABLE +// ; +// +// privilegesBase +// : TABLES | ROUTINE | EXECUTE | FILE | PROCESS +// | RELOAD | SHUTDOWN | SUPER | PRIVILEGES +// ; +// +// intervalTypeBase +// : QUARTER | MONTH | DAY | HOUR +// | MINUTE | WEEK | SECOND | MICROSECOND +// ; +// +// dataTypeBase +// : DATE | TIME | TIMESTAMP | DATETIME | YEAR | ENUM | TEXT +// ; +// +// keywordsCanBeId +// : ACCOUNT | ACTION | ADMIN | AFTER | AGGREGATE | ALGORITHM | ANY +// | AT | AUDIT_ADMIN | AUTHORS | AUTOCOMMIT | AUTOEXTEND_SIZE +// | AUTO_INCREMENT | AVG | AVG_ROW_LENGTH | ATTRIBUTE | BACKUP_ADMIN | BEGIN | BINLOG | BINLOG_ADMIN | BINLOG_ENCRYPTION_ADMIN | BIT | BIT_AND | BIT_OR | BIT_XOR +// | BLOCK | BOOL | BOOLEAN | BTREE | BUCKETS | CACHE | CASCADED | CHAIN | CHANGED +// | CHANNEL | CHECKSUM | PAGE_CHECKSUM | CATALOG_NAME | CIPHER +// | CLASS_ORIGIN | CLIENT | CLONE_ADMIN | CLOSE | CLUSTERING | COALESCE | CODE +// | COLUMNS | COLUMN_FORMAT | COLUMN_NAME | COMMENT | COMMIT | COMPACT +// | COMPLETION | COMPRESSED | COMPRESSION | CONCURRENT | CONDITION | CONNECT +// | CONNECTION | CONNECTION_ADMIN | CONSISTENT | CONSTRAINT_CATALOG | CONSTRAINT_NAME +// | CONSTRAINT_SCHEMA | CONTAINS | CONTEXT +// | CONTRIBUTORS | COPY | COUNT | CPU | CURRENT | CURRENT_USER | CURSOR_NAME +// | DATA | DATAFILE | DEALLOCATE +// | DEFAULT | DEFAULT_AUTH | DEFINER | DELAY_KEY_WRITE | DES_KEY_FILE | DIAGNOSTICS | DIRECTORY +// | DISABLE | DISCARD | DISK | DO | DUMPFILE | DUPLICATE +// | DYNAMIC | EMPTY | ENABLE | ENCRYPTION | ENCRYPTION_KEY_ADMIN | END | ENDS | ENGINE | ENGINE_ATTRIBUTE | ENGINES +// | ERROR | ERRORS | ESCAPE | EUR | EVEN | EVENT | EVENTS | EVERY | EXCEPT +// | EXCHANGE | EXCLUSIVE | EXPIRE | EXPORT | EXTENDED | EXTENT_SIZE | FAILED_LOGIN_ATTEMPTS | FAST | FAULTS +// | FIELDS | FILE_BLOCK_SIZE | FILTER | FIREWALL_ADMIN | FIREWALL_USER | FIRST | FIXED | FLUSH +// | FOLLOWS | FOUND | FULL | FUNCTION | GENERAL | GLOBAL | GRANTS | GROUP | GROUP_CONCAT +// | GROUP_REPLICATION | GROUP_REPLICATION_ADMIN | HANDLER | HASH | HELP | HISTORY | HOST | HOSTS | IDENTIFIED +// | IGNORED | IGNORE_SERVER_IDS | IMPORT | INDEXES | INITIAL_SIZE | INNODB_REDO_LOG_ARCHIVE +// | INPLACE | INSERT_METHOD | INSTALL | INSTANCE | INSTANT | INTERNAL | INVOKE | INVOKER | IO +// | IO_THREAD | IPC | ISO | ISOLATION | ISSUER | JIS | JSON | KEY_BLOCK_SIZE +// | LAMBDA | LANGUAGE | LAST | LATERAL | LEAVES | LESS | LEVEL | LIST | LOCAL +// | LOGFILE | LOGS | MASTER | MASTER_AUTO_POSITION +// | MASTER_CONNECT_RETRY | MASTER_DELAY +// | MASTER_HEARTBEAT_PERIOD | MASTER_HOST | MASTER_LOG_FILE +// | MASTER_LOG_POS | MASTER_PASSWORD | MASTER_PORT +// | MASTER_RETRY_COUNT | MASTER_SSL | MASTER_SSL_CA +// | MASTER_SSL_CAPATH | MASTER_SSL_CERT | MASTER_SSL_CIPHER +// | MASTER_SSL_CRL | MASTER_SSL_CRLPATH | MASTER_SSL_KEY +// | MASTER_TLS_VERSION | MASTER_USER +// | MAX_CONNECTIONS_PER_HOUR | MAX_QUERIES_PER_HOUR +// | MAX | MAX_ROWS | MAX_SIZE | MAX_UPDATES_PER_HOUR +// | MAX_USER_CONNECTIONS | MEDIUM | MEMBER | MEMORY | MERGE | MESSAGE_TEXT +// | MID | MIGRATE +// | MIN | MIN_ROWS | MODE | MODIFY | MUTEX | MYSQL | MYSQL_ERRNO | NAME | NAMES +// | NCHAR | NDB_STORED_USER | NESTED | NEVER | NEXT | NO | NOCOPY | NODEGROUP | NONE | NOWAIT | NUMBER | ODBC | OFFLINE | OFFSET +// | OF | OJ | OLD_PASSWORD | ONE | ONLINE | ONLY | OPEN | OPTIMIZER_COSTS +// | OPTIONAL | OPTIONS | ORDER | ORDINALITY | OWNER | PACK_KEYS | PAGE | PARSER | PARTIAL +// | PARTITIONING | PARTITIONS | PASSWORD | PASSWORDLESS_USER_ADMIN | PASSWORD_LOCK_TIME | PATH | PERSIST_RO_VARIABLES_ADMIN | PHASE | PLUGINS +// | PLUGIN_DIR | PLUGIN | PORT | PRECEDES | PREPARE | PRESERVE | PREV | PRIMARY +// | PROCESSLIST | PROFILE | PROFILES | PROXY | QUERY | QUICK +// | REBUILD | RECOVER | RECURSIVE | REDO_BUFFER_SIZE | REDUNDANT +// | RELAY | RELAYLOG | RELAY_LOG_FILE | RELAY_LOG_POS | REMOVE +// | REORGANIZE | REPAIR | REPLICATE_DO_DB | REPLICATE_DO_TABLE +// | REPLICATE_IGNORE_DB | REPLICATE_IGNORE_TABLE +// | REPLICATE_REWRITE_DB | REPLICATE_WILD_DO_TABLE +// | REPLICATE_WILD_IGNORE_TABLE | REPLICATION | REPLICATION_APPLIER | REPLICATION_SLAVE_ADMIN | RESET +// | RESOURCE_GROUP_ADMIN | RESOURCE_GROUP_USER | RESUME +// | RETURNED_SQLSTATE | RETURNS | REUSE | ROLE | ROLE_ADMIN | ROLLBACK | ROLLUP | ROTATE | ROW | ROWS +// | ROW_FORMAT | RTREE | S3 | SAVEPOINT | SCHEDULE | SCHEMA_NAME | SECURITY | SECONDARY_ENGINE_ATTRIBUTE | SERIAL | SERVER +// | SESSION | SESSION_VARIABLES_ADMIN | SET_USER_ID | SHARE | SHARED | SHOW_ROUTINE | SIGNED | SIMPLE | SLAVE +// | SLOW | SNAPSHOT | SOCKET | SOME | SONAME | SOUNDS | SOURCE +// | SQL_AFTER_GTIDS | SQL_AFTER_MTS_GAPS | SQL_BEFORE_GTIDS +// | SQL_BUFFER_RESULT | SQL_CACHE | SQL_NO_CACHE | SQL_THREAD +// | STACKED | START | STARTS | STATS_AUTO_RECALC | STATS_PERSISTENT +// | STATS_SAMPLE_PAGES | STATUS | STD | STDDEV | STDDEV_POP | STDDEV_SAMP | STOP | STORAGE | STRING +// | SUBCLASS_ORIGIN | SUBJECT | SUBPARTITION | SUBPARTITIONS | SUM | SUSPEND | SWAPS +// | SWITCHES | SYSTEM_VARIABLES_ADMIN | TABLE_NAME | TABLESPACE | TABLE_ENCRYPTION_ADMIN | TABLE_TYPE +// | TEMPORARY | TEMPTABLE | THAN | TRADITIONAL +// | TRANSACTION | TRANSACTIONAL | TRIGGERS | TRUNCATE | UNBOUNDED | UNDEFINED | UNDOFILE +// | UNDO_BUFFER_SIZE | UNINSTALL | UNKNOWN | UNTIL | UPGRADE | USA | USER | USE_FRM | USER_RESOURCES +// | VALIDATION | VALUE | VAR_POP | VAR_SAMP | VARIABLES | VARIANCE | VERSION_TOKEN_ADMIN | VIEW | VIRTUAL +// | WAIT | WARNINGS | WITHOUT | WORK | WRAPPER | X509 | XA | XA_RECOVER_ADMIN | XML +// ; +// +// functionNameBase +// : ABS | ACOS | ADDDATE | ADDTIME | AES_DECRYPT | AES_ENCRYPT +// | AREA | ASBINARY | ASIN | ASTEXT | ASWKB | ASWKT +// | ASYMMETRIC_DECRYPT | ASYMMETRIC_DERIVE +// | ASYMMETRIC_ENCRYPT | ASYMMETRIC_SIGN | ASYMMETRIC_VERIFY +// | ATAN | ATAN2 | BENCHMARK | BIN | BIT_COUNT | BIT_LENGTH +// | BUFFER | CEIL | CEILING | CENTROID | CHARACTER_LENGTH +// | CHARSET | CHAR_LENGTH | COERCIBILITY | COLLATION +// | COMPRESS | CONCAT | CONCAT_WS | CONNECTION_ID | CONV +// | CONVERT_TZ | COS | COT | COUNT | CRC32 +// | CREATE_ASYMMETRIC_PRIV_KEY | CREATE_ASYMMETRIC_PUB_KEY +// | CREATE_DH_PARAMETERS | CREATE_DIGEST | CROSSES | CUME_DIST | DATABASE | DATE +// | DATEDIFF | DATE_FORMAT | DAY | DAYNAME | DAYOFMONTH +// | DAYOFWEEK | DAYOFYEAR | DECODE | DEGREES | DENSE_RANK | DES_DECRYPT +// | DES_ENCRYPT | DIMENSION | DISJOINT | ELT | ENCODE +// | ENCRYPT | ENDPOINT | ENVELOPE | EQUALS | EXP | EXPORT_SET +// | EXTERIORRING | EXTRACTVALUE | FIELD | FIND_IN_SET | FIRST_VALUE | FLOOR +// | FORMAT | FOUND_ROWS | FROM_BASE64 | FROM_DAYS +// | FROM_UNIXTIME | GEOMCOLLFROMTEXT | GEOMCOLLFROMWKB +// | GEOMETRYCOLLECTION | GEOMETRYCOLLECTIONFROMTEXT +// | GEOMETRYCOLLECTIONFROMWKB | GEOMETRYFROMTEXT +// | GEOMETRYFROMWKB | GEOMETRYN | GEOMETRYTYPE | GEOMFROMTEXT +// | GEOMFROMWKB | GET_FORMAT | GET_LOCK | GLENGTH | GREATEST +// | GTID_SUBSET | GTID_SUBTRACT | HEX | HOUR | IFNULL +// | INET6_ATON | INET6_NTOA | INET_ATON | INET_NTOA | INSTR +// | INTERIORRINGN | INTERSECTS | INVISIBLE +// | ISCLOSED | ISEMPTY | ISNULL +// | ISSIMPLE | IS_FREE_LOCK | IS_IPV4 | IS_IPV4_COMPAT +// | IS_IPV4_MAPPED | IS_IPV6 | IS_USED_LOCK | LAG | LAST_INSERT_ID | LAST_VALUE +// | LCASE | LEAD | LEAST | LEFT | LENGTH | LINEFROMTEXT | LINEFROMWKB +// | LINESTRING | LINESTRINGFROMTEXT | LINESTRINGFROMWKB | LN +// | LOAD_FILE | LOCATE | LOG | LOG10 | LOG2 | LOWER | LPAD +// | LTRIM | MAKEDATE | MAKETIME | MAKE_SET | MASTER_POS_WAIT +// | MBRCONTAINS | MBRDISJOINT | MBREQUAL | MBRINTERSECTS +// | MBROVERLAPS | MBRTOUCHES | MBRWITHIN | MD5 | MICROSECOND +// | MINUTE | MLINEFROMTEXT | MLINEFROMWKB | MOD| MONTH | MONTHNAME +// | MPOINTFROMTEXT | MPOINTFROMWKB | MPOLYFROMTEXT +// | MPOLYFROMWKB | MULTILINESTRING | MULTILINESTRINGFROMTEXT +// | MULTILINESTRINGFROMWKB | MULTIPOINT | MULTIPOINTFROMTEXT +// | MULTIPOINTFROMWKB | MULTIPOLYGON | MULTIPOLYGONFROMTEXT +// | MULTIPOLYGONFROMWKB | NAME_CONST | NTH_VALUE | NTILE | NULLIF | NUMGEOMETRIES +// | NUMINTERIORRINGS | NUMPOINTS | OCT | OCTET_LENGTH | ORD +// | OVERLAPS | PERCENT_RANK | PERIOD_ADD | PERIOD_DIFF | PI | POINT +// | POINTFROMTEXT | POINTFROMWKB | POINTN | POLYFROMTEXT +// | POLYFROMWKB | POLYGON | POLYGONFROMTEXT | POLYGONFROMWKB +// | POSITION | POW | POWER | QUARTER | QUOTE | RADIANS | RAND | RANK +// | RANDOM_BYTES | RELEASE_LOCK | REVERSE | RIGHT | ROUND +// | ROW_COUNT | ROW_NUMBER | RPAD | RTRIM | SCHEMA | SECOND | SEC_TO_TIME +// | SESSION_USER | SESSION_VARIABLES_ADMIN +// | SHA | SHA1 | SHA2 | SIGN | SIN | SLEEP +// | SOUNDEX | SQL_THREAD_WAIT_AFTER_GTIDS | SQRT | SRID +// | STARTPOINT | STRCMP | STR_TO_DATE | ST_AREA | ST_ASBINARY +// | ST_ASTEXT | ST_ASWKB | ST_ASWKT | ST_BUFFER | ST_CENTROID +// | ST_CONTAINS | ST_CROSSES | ST_DIFFERENCE | ST_DIMENSION +// | ST_DISJOINT | ST_DISTANCE | ST_ENDPOINT | ST_ENVELOPE +// | ST_EQUALS | ST_EXTERIORRING | ST_GEOMCOLLFROMTEXT +// | ST_GEOMCOLLFROMTXT | ST_GEOMCOLLFROMWKB +// | ST_GEOMETRYCOLLECTIONFROMTEXT +// | ST_GEOMETRYCOLLECTIONFROMWKB | ST_GEOMETRYFROMTEXT +// | ST_GEOMETRYFROMWKB | ST_GEOMETRYN | ST_GEOMETRYTYPE +// | ST_GEOMFROMTEXT | ST_GEOMFROMWKB | ST_INTERIORRINGN +// | ST_INTERSECTION | ST_INTERSECTS | ST_ISCLOSED | ST_ISEMPTY +// | ST_ISSIMPLE | ST_LINEFROMTEXT | ST_LINEFROMWKB +// | ST_LINESTRINGFROMTEXT | ST_LINESTRINGFROMWKB +// | ST_NUMGEOMETRIES | ST_NUMINTERIORRING +// | ST_NUMINTERIORRINGS | ST_NUMPOINTS | ST_OVERLAPS +// | ST_POINTFROMTEXT | ST_POINTFROMWKB | ST_POINTN +// | ST_POLYFROMTEXT | ST_POLYFROMWKB | ST_POLYGONFROMTEXT +// | ST_POLYGONFROMWKB | ST_SRID | ST_STARTPOINT +// | ST_SYMDIFFERENCE | ST_TOUCHES | ST_UNION | ST_WITHIN +// | ST_X | ST_Y | SUBDATE | SUBSTRING_INDEX | SUBTIME +// | SYSTEM_USER | TAN | TIME | TIMEDIFF | TIMESTAMP +// | TIMESTAMPADD | TIMESTAMPDIFF | TIME_FORMAT | TIME_TO_SEC +// | TOUCHES | TO_BASE64 | TO_DAYS | TO_SECONDS | UCASE +// | UNCOMPRESS | UNCOMPRESSED_LENGTH | UNHEX | UNIX_TIMESTAMP +// | UPDATEXML | UPPER | UUID | UUID_SHORT +// | VALIDATE_PASSWORD_STRENGTH | VERSION | VISIBLE +// | WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS | WEEK | WEEKDAY +// | WEEKOFYEAR | WEIGHT_STRING | WITHIN | YEAR | YEARWEEK +// | Y_FUNCTION | X_FUNCTION +// | JSON_ARRAY | JSON_OBJECT | JSON_QUOTE | JSON_CONTAINS | JSON_CONTAINS_PATH +// | JSON_EXTRACT | JSON_KEYS | JSON_OVERLAPS | JSON_SEARCH | JSON_VALUE +// | JSON_ARRAY_APPEND | JSON_ARRAY_INSERT | JSON_INSERT | JSON_MERGE +// | JSON_MERGE_PATCH | JSON_MERGE_PRESERVE | JSON_REMOVE | JSON_REPLACE +// | JSON_SET | JSON_UNQUOTE | JSON_DEPTH | JSON_LENGTH | JSON_TYPE +// | JSON_VALID | JSON_TABLE | JSON_SCHEMA_VALID | JSON_SCHEMA_VALIDATION_REPORT +// | JSON_PRETTY | JSON_STORAGE_FREE | JSON_STORAGE_SIZE | JSON_ARRAYAGG +// | JSON_OBJECTAGG +// ; diff --git a/internal/mysqld/parser/antlrparser/parser/MySqlParser.interp b/internal/mysqld/parser/antlrparser/parser/MySqlParser.interp new file mode 100644 index 0000000000..0e775686c4 --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/MySqlParser.interp @@ -0,0 +1,2358 @@ +token literal names: +null +null +null +null +null +'ADD' +'ALL' +'ALTER' +'ALWAYS' +'ANALYZE' +'AND' +'ARRAY' +'AS' +'ASC' +'ATTRIBUTE' +'BEFORE' +'BETWEEN' +'BOTH' +'BUCKETS' +'BY' +'CALL' +'CASCADE' +'CASE' +'CAST' +'CHANGE' +'CHARACTER' +'CHECK' +'COLLATE' +'COLUMN' +'CONDITION' +'CONSTRAINT' +'CONTINUE' +'CONVERT' +'CREATE' +'CROSS' +'CURRENT' +'CURRENT_ROLE' +'CURRENT_USER' +'CURSOR' +'DATABASE' +'DATABASES' +'DECLARE' +'DEFAULT' +'DELAYED' +'DELETE' +'DESC' +'DESCRIBE' +'DETERMINISTIC' +'DIAGNOSTICS' +'DISTINCT' +'DISTINCTROW' +'DROP' +'EACH' +'ELSE' +'ELSEIF' +'EMPTY' +'ENCLOSED' +'ESCAPED' +'EXCEPT' +'EXISTS' +'EXIT' +'EXPLAIN' +'FALSE' +'FETCH' +'FOR' +'FORCE' +'FOREIGN' +'FROM' +'FULLTEXT' +'GENERATED' +'GET' +'GRANT' +'GROUP' +'HAVING' +'HIGH_PRIORITY' +'HISTOGRAM' +'IF' +'IGNORE' +'IGNORED' +'IN' +'INDEX' +'INFILE' +'INNER' +'INOUT' +'INSERT' +'INTERVAL' +'INTO' +'IS' +'ITERATE' +'JOIN' +'KEY' +'KEYS' +'KILL' +'LATERAL' +'LEADING' +'LEAVE' +'LEFT' +'LIKE' +'LIMIT' +'LINEAR' +'LINES' +'LOAD' +'LOCK' +'LOCKED' +'LOOP' +'LOW_PRIORITY' +'MASTER_BIND' +'MASTER_SSL_VERIFY_SERVER_CERT' +'MATCH' +'MAXVALUE' +'MINVALUE' +'MODIFIES' +'NATURAL' +'NOT' +'NO_WRITE_TO_BINLOG' +'NULL' +'NUMBER' +'ON' +'OPTIMIZE' +'OPTION' +'OPTIONAL' +'OPTIONALLY' +'OR' +'ORDER' +'OUT' +'OUTER' +'OUTFILE' +'OVER' +'PARTITION' +'PRIMARY' +'PROCEDURE' +'PURGE' +'RANGE' +'READ' +'READS' +'REFERENCES' +'REGEXP' +'RELEASE' +'RENAME' +'REPEAT' +'REPLACE' +'REQUIRE' +'RESIGNAL' +'RESTRICT' +'RETAIN' +'RETURN' +'REVOKE' +'RIGHT' +'RLIKE' +'SCHEMA' +'SCHEMAS' +'SELECT' +'SET' +'SEPARATOR' +'SHOW' +'SIGNAL' +'SKIP' +'SPATIAL' +'SQL' +'SQLEXCEPTION' +'SQLSTATE' +'SQLWARNING' +'SQL_BIG_RESULT' +'SQL_CALC_FOUND_ROWS' +'SQL_SMALL_RESULT' +'SSL' +'STACKED' +'STARTING' +'STATEMENT' +'STRAIGHT_JOIN' +'TABLE' +'TERMINATED' +'THEN' +'TO' +'TRAILING' +'TRIGGER' +'TRUE' +'UNDO' +'UNION' +'UNIQUE' +'UNLOCK' +'UNSIGNED' +'UPDATE' +'USAGE' +'USE' +'USING' +'VALUES' +'WHEN' +'WHERE' +'WHILE' +'WITH' +'WRITE' +'XOR' +'ZEROFILL' +'TINYINT' +'SMALLINT' +'MEDIUMINT' +'MIDDLEINT' +'INT' +'INT1' +'INT2' +'INT3' +'INT4' +'INT8' +'INTEGER' +'BIGINT' +'REAL' +'DOUBLE' +'PRECISION' +'FLOAT' +'FLOAT4' +'FLOAT8' +'DECIMAL' +'DEC' +'NUMERIC' +'DATE' +'TIME' +'TIMESTAMP' +'DATETIME' +'YEAR' +'CHAR' +'VARCHAR' +'NVARCHAR' +'NATIONAL' +'BINARY' +'VARBINARY' +'TINYBLOB' +'BLOB' +'MEDIUMBLOB' +'LONG' +'LONGBLOB' +'TINYTEXT' +'TEXT' +'MEDIUMTEXT' +'LONGTEXT' +'ENUM' +'VARYING' +'SERIAL' +'YEAR_MONTH' +'DAY_HOUR' +'DAY_MINUTE' +'DAY_SECOND' +'HOUR_MINUTE' +'HOUR_SECOND' +'MINUTE_SECOND' +'SECOND_MICROSECOND' +'MINUTE_MICROSECOND' +'HOUR_MICROSECOND' +'DAY_MICROSECOND' +'JSON_ARRAY' +'JSON_ARRAYAGG' +'JSON_ARRAY_APPEND' +'JSON_ARRAY_INSERT' +'JSON_CONTAINS' +'JSON_CONTAINS_PATH' +'JSON_DEPTH' +'JSON_EXTRACT' +'JSON_INSERT' +'JSON_KEYS' +'JSON_LENGTH' +'JSON_MERGE' +'JSON_MERGE_PATCH' +'JSON_MERGE_PRESERVE' +'JSON_OBJECT' +'JSON_OBJECTAGG' +'JSON_OVERLAPS' +'JSON_PRETTY' +'JSON_QUOTE' +'JSON_REMOVE' +'JSON_REPLACE' +'JSON_SCHEMA_VALID' +'JSON_SCHEMA_VALIDATION_REPORT' +'JSON_SEARCH' +'JSON_SET' +'JSON_STORAGE_FREE' +'JSON_STORAGE_SIZE' +'JSON_TABLE' +'JSON_TYPE' +'JSON_UNQUOTE' +'JSON_VALID' +'JSON_VALUE' +'NESTED' +'ORDINALITY' +'PATH' +'AVG' +'BIT_AND' +'BIT_OR' +'BIT_XOR' +'COUNT' +'CUME_DIST' +'DENSE_RANK' +'FIRST_VALUE' +'GROUP_CONCAT' +'LAG' +'LAST_VALUE' +'LEAD' +'MAX' +'MIN' +'NTILE' +'NTH_VALUE' +'PERCENT_RANK' +'RANK' +'ROW_NUMBER' +'STD' +'STDDEV' +'STDDEV_POP' +'STDDEV_SAMP' +'SUM' +'VAR_POP' +'VAR_SAMP' +'VARIANCE' +'CURRENT_DATE' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'LOCALTIME' +'CURDATE' +'CURTIME' +'DATE_ADD' +'DATE_SUB' +'EXTRACT' +'LOCALTIMESTAMP' +'NOW' +'POSITION' +'SUBSTR' +'SUBSTRING' +'SYSDATE' +'TRIM' +'UTC_DATE' +'UTC_TIME' +'UTC_TIMESTAMP' +'ACCOUNT' +'ACTION' +'AFTER' +'AGGREGATE' +'ALGORITHM' +'ANY' +'AT' +'AUTHORS' +'AUTOCOMMIT' +'AUTOEXTEND_SIZE' +'AUTO_INCREMENT' +'AVG_ROW_LENGTH' +'BEGIN' +'BINLOG' +'BIT' +'BLOCK' +'BOOL' +'BOOLEAN' +'BTREE' +'CACHE' +'CASCADED' +'CHAIN' +'CHANGED' +'CHANNEL' +'CHECKSUM' +'PAGE_CHECKSUM' +'CIPHER' +'CLASS_ORIGIN' +'CLIENT' +'CLOSE' +'CLUSTERING' +'COALESCE' +'CODE' +'COLUMNS' +'COLUMN_FORMAT' +'COLUMN_NAME' +'COMMENT' +'COMMIT' +'COMPACT' +'COMPLETION' +'COMPRESSED' +null +'CONCURRENT' +'CONNECT' +'CONNECTION' +'CONSISTENT' +'CONSTRAINT_CATALOG' +'CONSTRAINT_SCHEMA' +'CONSTRAINT_NAME' +'CONTAINS' +'CONTEXT' +'CONTRIBUTORS' +'COPY' +'CPU' +'CYCLE' +'CURSOR_NAME' +'DATA' +'DATAFILE' +'DEALLOCATE' +'DEFAULT_AUTH' +'DEFINER' +'DELAY_KEY_WRITE' +'DES_KEY_FILE' +'DIRECTORY' +'DISABLE' +'DISCARD' +'DISK' +'DO' +'DUMPFILE' +'DUPLICATE' +'DYNAMIC' +'ENABLE' +'ENCRYPTED' +'ENCRYPTION' +'ENCRYPTION_KEY_ID' +'END' +'ENDS' +'ENGINE' +'ENGINES' +'ERROR' +'ERRORS' +'ESCAPE' +'EVEN' +'EVENT' +'EVENTS' +'EVERY' +'EXCHANGE' +'EXCLUSIVE' +'EXPIRE' +'EXPORT' +'EXTENDED' +'EXTENT_SIZE' +'FAILED_LOGIN_ATTEMPTS' +'FAST' +'FAULTS' +'FIELDS' +'FILE_BLOCK_SIZE' +'FILTER' +'FIRST' +'FIXED' +'FLUSH' +'FOLLOWING' +'FOLLOWS' +'FOUND' +'FULL' +'FUNCTION' +'GENERAL' +'GLOBAL' +'GRANTS' +'GROUP_REPLICATION' +'HANDLER' +'HASH' +'HELP' +'HISTORY' +'HOST' +'HOSTS' +'IDENTIFIED' +'IGNORE_SERVER_IDS' +'IMPORT' +'INCREMENT' +'INDEXES' +'INITIAL_SIZE' +'INPLACE' +'INSERT_METHOD' +'INSTALL' +'INSTANCE' +'INSTANT' +'INVISIBLE' +'INVOKER' +'IO' +'IO_THREAD' +'IPC' +'ISOLATION' +'ISSUER' +'JSON' +'KEY_BLOCK_SIZE' +'LANGUAGE' +'LAST' +'LEAVES' +'LESS' +'LEVEL' +'LIST' +'LOCAL' +'LOGFILE' +'LOGS' +'MASTER' +'MASTER_AUTO_POSITION' +'MASTER_CONNECT_RETRY' +'MASTER_DELAY' +'MASTER_HEARTBEAT_PERIOD' +'MASTER_HOST' +'MASTER_LOG_FILE' +'MASTER_LOG_POS' +'MASTER_PASSWORD' +'MASTER_PORT' +'MASTER_RETRY_COUNT' +'MASTER_SSL' +'MASTER_SSL_CA' +'MASTER_SSL_CAPATH' +'MASTER_SSL_CERT' +'MASTER_SSL_CIPHER' +'MASTER_SSL_CRL' +'MASTER_SSL_CRLPATH' +'MASTER_SSL_KEY' +'MASTER_TLS_VERSION' +'MASTER_USER' +'MAX_CONNECTIONS_PER_HOUR' +'MAX_QUERIES_PER_HOUR' +'MAX_ROWS' +'MAX_SIZE' +'MAX_UPDATES_PER_HOUR' +'MAX_USER_CONNECTIONS' +'MEDIUM' +'MEMBER' +'MERGE' +'MESSAGE_TEXT' +'MID' +'MIGRATE' +'MIN_ROWS' +'MODE' +'MODIFY' +'MUTEX' +'MYSQL' +'MYSQL_ERRNO' +'NAME' +'NAMES' +'NCHAR' +'NEVER' +'NEXT' +'NO' +'NOCACHE' +'NOCOPY' +'NOCYCLE' +'NOMAXVALUE' +'NOMINVALUE' +'NOWAIT' +'NODEGROUP' +'NONE' +'ODBC' +'OFFLINE' +'OFFSET' +'OF' +'OJ' +'OLD_PASSWORD' +'ONE' +'ONLINE' +'ONLY' +'OPEN' +'OPTIMIZER_COSTS' +'OPTIONS' +'OWNER' +'PACK_KEYS' +'PAGE' +'PAGE_COMPRESSED' +'PAGE_COMPRESSION_LEVEL' +'PARSER' +'PARTIAL' +'PARTITIONING' +'PARTITIONS' +'PASSWORD' +'PASSWORD_LOCK_TIME' +'PHASE' +'PLUGIN' +'PLUGIN_DIR' +'PLUGINS' +'PORT' +'PRECEDES' +'PRECEDING' +'PREPARE' +'PRESERVE' +'PREV' +'PROCESSLIST' +'PROFILE' +'PROFILES' +'PROXY' +'QUERY' +'QUICK' +'REBUILD' +'RECOVER' +'RECURSIVE' +'REDO_BUFFER_SIZE' +'REDUNDANT' +'RELAY' +'RELAY_LOG_FILE' +'RELAY_LOG_POS' +'RELAYLOG' +'REMOVE' +'REORGANIZE' +'REPAIR' +'REPLICATE_DO_DB' +'REPLICATE_DO_TABLE' +'REPLICATE_IGNORE_DB' +'REPLICATE_IGNORE_TABLE' +'REPLICATE_REWRITE_DB' +'REPLICATE_WILD_DO_TABLE' +'REPLICATE_WILD_IGNORE_TABLE' +'REPLICATION' +'RESET' +'RESTART' +'RESUME' +'RETURNED_SQLSTATE' +'RETURNING' +'RETURNS' +'REUSE' +'ROLE' +'ROLLBACK' +'ROLLUP' +'ROTATE' +'ROW' +'ROWS' +'ROW_FORMAT' +'RTREE' +'SAVEPOINT' +'SCHEDULE' +'SECURITY' +'SEQUENCE' +'SERVER' +'SESSION' +'SHARE' +'SHARED' +'SIGNED' +'SIMPLE' +'SLAVE' +'SLOW' +'SNAPSHOT' +'SOCKET' +'SOME' +'SONAME' +'SOUNDS' +'SOURCE' +'SQL_AFTER_GTIDS' +'SQL_AFTER_MTS_GAPS' +'SQL_BEFORE_GTIDS' +'SQL_BUFFER_RESULT' +'SQL_CACHE' +'SQL_NO_CACHE' +'SQL_THREAD' +'START' +'STARTS' +'STATS_AUTO_RECALC' +'STATS_PERSISTENT' +'STATS_SAMPLE_PAGES' +'STATUS' +'STOP' +'STORAGE' +'STORED' +'STRING' +'SUBCLASS_ORIGIN' +'SUBJECT' +'SUBPARTITION' +'SUBPARTITIONS' +'SUSPEND' +'SWAPS' +'SWITCHES' +'TABLE_NAME' +'TABLESPACE' +'TABLE_TYPE' +'TEMPORARY' +'TEMPTABLE' +'THAN' +'TRADITIONAL' +'TRANSACTION' +'TRANSACTIONAL' +'TRIGGERS' +'TRUNCATE' +'UNBOUNDED' +'UNDEFINED' +'UNDOFILE' +'UNDO_BUFFER_SIZE' +'UNINSTALL' +'UNKNOWN' +'UNTIL' +'UPGRADE' +'USER' +'USE_FRM' +'USER_RESOURCES' +'VALIDATION' +'VALUE' +'VARIABLES' +'VIEW' +'VIRTUAL' +'VISIBLE' +'WAIT' +'WARNINGS' +'WINDOW' +'WITHOUT' +'WORK' +'WRAPPER' +'X509' +'XA' +'XML' +'YES' +'EUR' +'USA' +'JIS' +'ISO' +'INTERNAL' +'QUARTER' +'MONTH' +'DAY' +'HOUR' +'MINUTE' +'WEEK' +'SECOND' +'MICROSECOND' +'ADMIN' +'APPLICATION_PASSWORD_ADMIN' +'AUDIT_ADMIN' +'BACKUP_ADMIN' +'BINLOG_ADMIN' +'BINLOG_ENCRYPTION_ADMIN' +'CLONE_ADMIN' +'CONNECTION_ADMIN' +'ENCRYPTION_KEY_ADMIN' +'EXECUTE' +'FILE' +'FIREWALL_ADMIN' +'FIREWALL_USER' +'FLUSH_OPTIMIZER_COSTS' +'FLUSH_STATUS' +'FLUSH_TABLES' +'FLUSH_USER_RESOURCES' +'GROUP_REPLICATION_ADMIN' +'INNODB_REDO_LOG_ARCHIVE' +'INNODB_REDO_LOG_ENABLE' +'INVOKE' +'LAMBDA' +'NDB_STORED_USER' +'PASSWORDLESS_USER_ADMIN' +'PERSIST_RO_VARIABLES_ADMIN' +'PRIVILEGES' +'PROCESS' +'RELOAD' +'REPLICATION_APPLIER' +'REPLICATION_SLAVE_ADMIN' +'RESOURCE_GROUP_ADMIN' +'RESOURCE_GROUP_USER' +'ROLE_ADMIN' +'ROUTINE' +'S3' +'SERVICE_CONNECTION_ADMIN' +null +'SET_USER_ID' +'SHOW_ROUTINE' +'SHUTDOWN' +'SUPER' +'SYSTEM_VARIABLES_ADMIN' +'TABLES' +'TABLE_ENCRYPTION_ADMIN' +'VERSION_TOKEN_ADMIN' +'XA_RECOVER_ADMIN' +'ARMSCII8' +'ASCII' +'BIG5' +'CP1250' +'CP1251' +'CP1256' +'CP1257' +'CP850' +'CP852' +'CP866' +'CP932' +'DEC8' +'EUCJPMS' +'EUCKR' +'GB18030' +'GB2312' +'GBK' +'GEOSTD8' +'GREEK' +'HEBREW' +'HP8' +'KEYBCS2' +'KOI8R' +'KOI8U' +'LATIN1' +'LATIN2' +'LATIN5' +'LATIN7' +'MACCE' +'MACROMAN' +'SJIS' +'SWE7' +'TIS620' +'UCS2' +'UJIS' +'UTF16' +'UTF16LE' +'UTF32' +'UTF8' +'UTF8MB3' +'UTF8MB4' +'ARCHIVE' +'BLACKHOLE' +'CSV' +'FEDERATED' +'INNODB' +'MEMORY' +'MRG_MYISAM' +'MYISAM' +'NDB' +'NDBCLUSTER' +'PERFORMANCE_SCHEMA' +'TOKUDB' +'REPEATABLE' +'COMMITTED' +'UNCOMMITTED' +'SERIALIZABLE' +'GEOMETRYCOLLECTION' +'GEOMCOLLECTION' +'GEOMETRY' +'LINESTRING' +'MULTILINESTRING' +'MULTIPOINT' +'MULTIPOLYGON' +'POINT' +'POLYGON' +'ABS' +'ACOS' +'ADDDATE' +'ADDTIME' +'AES_DECRYPT' +'AES_ENCRYPT' +'AREA' +'ASBINARY' +'ASIN' +'ASTEXT' +'ASWKB' +'ASWKT' +'ASYMMETRIC_DECRYPT' +'ASYMMETRIC_DERIVE' +'ASYMMETRIC_ENCRYPT' +'ASYMMETRIC_SIGN' +'ASYMMETRIC_VERIFY' +'ATAN' +'ATAN2' +'BENCHMARK' +'BIN' +'BIT_COUNT' +'BIT_LENGTH' +'BUFFER' +'CATALOG_NAME' +'CEIL' +'CEILING' +'CENTROID' +'CHARACTER_LENGTH' +'CHARSET' +'CHAR_LENGTH' +'COERCIBILITY' +'COLLATION' +'COMPRESS' +'CONCAT' +'CONCAT_WS' +'CONNECTION_ID' +'CONV' +'CONVERT_TZ' +'COS' +'COT' +'CRC32' +'CREATE_ASYMMETRIC_PRIV_KEY' +'CREATE_ASYMMETRIC_PUB_KEY' +'CREATE_DH_PARAMETERS' +'CREATE_DIGEST' +'CROSSES' +'DATEDIFF' +'DATE_FORMAT' +'DAYNAME' +'DAYOFMONTH' +'DAYOFWEEK' +'DAYOFYEAR' +'DECODE' +'DEGREES' +'DES_DECRYPT' +'DES_ENCRYPT' +'DIMENSION' +'DISJOINT' +'ELT' +'ENCODE' +'ENCRYPT' +'ENDPOINT' +'ENGINE_ATTRIBUTE' +'ENVELOPE' +'EQUALS' +'EXP' +'EXPORT_SET' +'EXTERIORRING' +'EXTRACTVALUE' +'FIELD' +'FIND_IN_SET' +'FLOOR' +'FORMAT' +'FOUND_ROWS' +'FROM_BASE64' +'FROM_DAYS' +'FROM_UNIXTIME' +'GEOMCOLLFROMTEXT' +'GEOMCOLLFROMWKB' +'GEOMETRYCOLLECTIONFROMTEXT' +'GEOMETRYCOLLECTIONFROMWKB' +'GEOMETRYFROMTEXT' +'GEOMETRYFROMWKB' +'GEOMETRYN' +'GEOMETRYTYPE' +'GEOMFROMTEXT' +'GEOMFROMWKB' +'GET_FORMAT' +'GET_LOCK' +'GLENGTH' +'GREATEST' +'GTID_SUBSET' +'GTID_SUBTRACT' +'HEX' +'IFNULL' +'INET6_ATON' +'INET6_NTOA' +'INET_ATON' +'INET_NTOA' +'INSTR' +'INTERIORRINGN' +'INTERSECTS' +'ISCLOSED' +'ISEMPTY' +'ISNULL' +'ISSIMPLE' +'IS_FREE_LOCK' +'IS_IPV4' +'IS_IPV4_COMPAT' +'IS_IPV4_MAPPED' +'IS_IPV6' +'IS_USED_LOCK' +'LAST_INSERT_ID' +'LCASE' +'LEAST' +'LENGTH' +'LINEFROMTEXT' +'LINEFROMWKB' +'LINESTRINGFROMTEXT' +'LINESTRINGFROMWKB' +'LN' +'LOAD_FILE' +'LOCATE' +'LOG' +'LOG10' +'LOG2' +'LOWER' +'LPAD' +'LTRIM' +'MAKEDATE' +'MAKETIME' +'MAKE_SET' +'MASTER_POS_WAIT' +'MBRCONTAINS' +'MBRDISJOINT' +'MBREQUAL' +'MBRINTERSECTS' +'MBROVERLAPS' +'MBRTOUCHES' +'MBRWITHIN' +'MD5' +'MLINEFROMTEXT' +'MLINEFROMWKB' +'MONTHNAME' +'MPOINTFROMTEXT' +'MPOINTFROMWKB' +'MPOLYFROMTEXT' +'MPOLYFROMWKB' +'MULTILINESTRINGFROMTEXT' +'MULTILINESTRINGFROMWKB' +'MULTIPOINTFROMTEXT' +'MULTIPOINTFROMWKB' +'MULTIPOLYGONFROMTEXT' +'MULTIPOLYGONFROMWKB' +'NAME_CONST' +'NULLIF' +'NUMGEOMETRIES' +'NUMINTERIORRINGS' +'NUMPOINTS' +'OCT' +'OCTET_LENGTH' +'ORD' +'OVERLAPS' +'PERIOD_ADD' +'PERIOD_DIFF' +'PI' +'POINTFROMTEXT' +'POINTFROMWKB' +'POINTN' +'POLYFROMTEXT' +'POLYFROMWKB' +'POLYGONFROMTEXT' +'POLYGONFROMWKB' +'POW' +'POWER' +'QUOTE' +'RADIANS' +'RAND' +'RANDOM_BYTES' +'RELEASE_LOCK' +'REVERSE' +'ROUND' +'ROW_COUNT' +'RPAD' +'RTRIM' +'SEC_TO_TIME' +'SECONDARY_ENGINE_ATTRIBUTE' +'SESSION_USER' +'SHA' +'SHA1' +'SHA2' +'SCHEMA_NAME' +'SIGN' +'SIN' +'SLEEP' +'SOUNDEX' +'SQL_THREAD_WAIT_AFTER_GTIDS' +'SQRT' +'SRID' +'STARTPOINT' +'STRCMP' +'STR_TO_DATE' +'ST_AREA' +'ST_ASBINARY' +'ST_ASTEXT' +'ST_ASWKB' +'ST_ASWKT' +'ST_BUFFER' +'ST_CENTROID' +'ST_CONTAINS' +'ST_CROSSES' +'ST_DIFFERENCE' +'ST_DIMENSION' +'ST_DISJOINT' +'ST_DISTANCE' +'ST_ENDPOINT' +'ST_ENVELOPE' +'ST_EQUALS' +'ST_EXTERIORRING' +'ST_GEOMCOLLFROMTEXT' +'ST_GEOMCOLLFROMTXT' +'ST_GEOMCOLLFROMWKB' +'ST_GEOMETRYCOLLECTIONFROMTEXT' +'ST_GEOMETRYCOLLECTIONFROMWKB' +'ST_GEOMETRYFROMTEXT' +'ST_GEOMETRYFROMWKB' +'ST_GEOMETRYN' +'ST_GEOMETRYTYPE' +'ST_GEOMFROMTEXT' +'ST_GEOMFROMWKB' +'ST_INTERIORRINGN' +'ST_INTERSECTION' +'ST_INTERSECTS' +'ST_ISCLOSED' +'ST_ISEMPTY' +'ST_ISSIMPLE' +'ST_LINEFROMTEXT' +'ST_LINEFROMWKB' +'ST_LINESTRINGFROMTEXT' +'ST_LINESTRINGFROMWKB' +'ST_NUMGEOMETRIES' +'ST_NUMINTERIORRING' +'ST_NUMINTERIORRINGS' +'ST_NUMPOINTS' +'ST_OVERLAPS' +'ST_POINTFROMTEXT' +'ST_POINTFROMWKB' +'ST_POINTN' +'ST_POLYFROMTEXT' +'ST_POLYFROMWKB' +'ST_POLYGONFROMTEXT' +'ST_POLYGONFROMWKB' +'ST_SRID' +'ST_STARTPOINT' +'ST_SYMDIFFERENCE' +'ST_TOUCHES' +'ST_UNION' +'ST_WITHIN' +'ST_X' +'ST_Y' +'SUBDATE' +'SUBSTRING_INDEX' +'SUBTIME' +'SYSTEM_USER' +'TAN' +'TIMEDIFF' +'TIMESTAMPADD' +'TIMESTAMPDIFF' +'TIME_FORMAT' +'TIME_TO_SEC' +'TOUCHES' +'TO_BASE64' +'TO_DAYS' +'TO_SECONDS' +'UCASE' +'UNCOMPRESS' +'UNCOMPRESSED_LENGTH' +'UNHEX' +'UNIX_TIMESTAMP' +'UPDATEXML' +'UPPER' +'UUID' +'UUID_SHORT' +'VALIDATE_PASSWORD_STRENGTH' +'VERSION' +'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS' +'WEEKDAY' +'WEEKOFYEAR' +'WEIGHT_STRING' +'WITHIN' +'YEARWEEK' +'Y' +'X' +':=' +'+=' +'-=' +'*=' +'/=' +'%=' +'&=' +'^=' +'|=' +'*' +'/' +'%' +'+' +'-' +'DIV' +'MOD' +'=' +'>' +'<' +'!' +'~' +'|' +'&' +'^' +'.' +'(' +')' +',' +';' +'@' +'0' +'1' +'2' +'\'' +'"' +'`' +':' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +SPACE +SPEC_MYSQL_COMMENT +COMMENT_INPUT +LINE_COMMENT +ADD +ALL +ALTER +ALWAYS +ANALYZE +AND +ARRAY +AS +ASC +ATTRIBUTE +BEFORE +BETWEEN +BOTH +BUCKETS +BY +CALL +CASCADE +CASE +CAST +CHANGE +CHARACTER +CHECK +COLLATE +COLUMN +CONDITION +CONSTRAINT +CONTINUE +CONVERT +CREATE +CROSS +CURRENT +CURRENT_ROLE +CURRENT_USER +CURSOR +DATABASE +DATABASES +DECLARE +DEFAULT +DELAYED +DELETE +DESC +DESCRIBE +DETERMINISTIC +DIAGNOSTICS +DISTINCT +DISTINCTROW +DROP +EACH +ELSE +ELSEIF +EMPTY +ENCLOSED +ESCAPED +EXCEPT +EXISTS +EXIT +EXPLAIN +FALSE +FETCH +FOR +FORCE +FOREIGN +FROM +FULLTEXT +GENERATED +GET +GRANT +GROUP +HAVING +HIGH_PRIORITY +HISTOGRAM +IF +IGNORE +IGNORED +IN +INDEX +INFILE +INNER +INOUT +INSERT +INTERVAL +INTO +IS +ITERATE +JOIN +KEY +KEYS +KILL +LATERAL +LEADING +LEAVE +LEFT +LIKE +LIMIT +LINEAR +LINES +LOAD +LOCK +LOCKED +LOOP +LOW_PRIORITY +MASTER_BIND +MASTER_SSL_VERIFY_SERVER_CERT +MATCH +MAXVALUE +MINVALUE +MODIFIES +NATURAL +NOT +NO_WRITE_TO_BINLOG +NULL_LITERAL +NUMBER +ON +OPTIMIZE +OPTION +OPTIONAL +OPTIONALLY +OR +ORDER +OUT +OUTER +OUTFILE +OVER +PARTITION +PRIMARY +PROCEDURE +PURGE +RANGE +READ +READS +REFERENCES +REGEXP +RELEASE +RENAME +REPEAT +REPLACE +REQUIRE +RESIGNAL +RESTRICT +RETAIN +RETURN +REVOKE +RIGHT +RLIKE +SCHEMA +SCHEMAS +SELECT +SET +SEPARATOR +SHOW +SIGNAL +SKIP_ +SPATIAL +SQL +SQLEXCEPTION +SQLSTATE +SQLWARNING +SQL_BIG_RESULT +SQL_CALC_FOUND_ROWS +SQL_SMALL_RESULT +SSL +STACKED +STARTING +STATEMENT +STRAIGHT_JOIN +TABLE +TERMINATED +THEN +TO +TRAILING +TRIGGER +TRUE +UNDO +UNION +UNIQUE +UNLOCK +UNSIGNED +UPDATE +USAGE +USE +USING +VALUES +WHEN +WHERE +WHILE +WITH +WRITE +XOR +ZEROFILL +TINYINT +SMALLINT +MEDIUMINT +MIDDLEINT +INT +INT1 +INT2 +INT3 +INT4 +INT8 +INTEGER +BIGINT +REAL +DOUBLE +PRECISION +FLOAT +FLOAT4 +FLOAT8 +DECIMAL +DEC +NUMERIC +DATE +TIME +TIMESTAMP +DATETIME +YEAR +CHAR +VARCHAR +NVARCHAR +NATIONAL +BINARY +VARBINARY +TINYBLOB +BLOB +MEDIUMBLOB +LONG +LONGBLOB +TINYTEXT +TEXT +MEDIUMTEXT +LONGTEXT +ENUM +VARYING +SERIAL +YEAR_MONTH +DAY_HOUR +DAY_MINUTE +DAY_SECOND +HOUR_MINUTE +HOUR_SECOND +MINUTE_SECOND +SECOND_MICROSECOND +MINUTE_MICROSECOND +HOUR_MICROSECOND +DAY_MICROSECOND +JSON_ARRAY +JSON_ARRAYAGG +JSON_ARRAY_APPEND +JSON_ARRAY_INSERT +JSON_CONTAINS +JSON_CONTAINS_PATH +JSON_DEPTH +JSON_EXTRACT +JSON_INSERT +JSON_KEYS +JSON_LENGTH +JSON_MERGE +JSON_MERGE_PATCH +JSON_MERGE_PRESERVE +JSON_OBJECT +JSON_OBJECTAGG +JSON_OVERLAPS +JSON_PRETTY +JSON_QUOTE +JSON_REMOVE +JSON_REPLACE +JSON_SCHEMA_VALID +JSON_SCHEMA_VALIDATION_REPORT +JSON_SEARCH +JSON_SET +JSON_STORAGE_FREE +JSON_STORAGE_SIZE +JSON_TABLE +JSON_TYPE +JSON_UNQUOTE +JSON_VALID +JSON_VALUE +NESTED +ORDINALITY +PATH +AVG +BIT_AND +BIT_OR +BIT_XOR +COUNT +CUME_DIST +DENSE_RANK +FIRST_VALUE +GROUP_CONCAT +LAG +LAST_VALUE +LEAD +MAX +MIN +NTILE +NTH_VALUE +PERCENT_RANK +RANK +ROW_NUMBER +STD +STDDEV +STDDEV_POP +STDDEV_SAMP +SUM +VAR_POP +VAR_SAMP +VARIANCE +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +LOCALTIME +CURDATE +CURTIME +DATE_ADD +DATE_SUB +EXTRACT +LOCALTIMESTAMP +NOW +POSITION +SUBSTR +SUBSTRING +SYSDATE +TRIM +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +ACCOUNT +ACTION +AFTER +AGGREGATE +ALGORITHM +ANY +AT +AUTHORS +AUTOCOMMIT +AUTOEXTEND_SIZE +AUTO_INCREMENT +AVG_ROW_LENGTH +BEGIN +BINLOG +BIT +BLOCK +BOOL +BOOLEAN +BTREE +CACHE +CASCADED +CHAIN +CHANGED +CHANNEL +CHECKSUM +PAGE_CHECKSUM +CIPHER +CLASS_ORIGIN +CLIENT +CLOSE +CLUSTERING +COALESCE +CODE +COLUMNS +COLUMN_FORMAT +COLUMN_NAME +COMMENT +COMMIT +COMPACT +COMPLETION +COMPRESSED +COMPRESSION +CONCURRENT +CONNECT +CONNECTION +CONSISTENT +CONSTRAINT_CATALOG +CONSTRAINT_SCHEMA +CONSTRAINT_NAME +CONTAINS +CONTEXT +CONTRIBUTORS +COPY +CPU +CYCLE +CURSOR_NAME +DATA +DATAFILE +DEALLOCATE +DEFAULT_AUTH +DEFINER +DELAY_KEY_WRITE +DES_KEY_FILE +DIRECTORY +DISABLE +DISCARD +DISK +DO +DUMPFILE +DUPLICATE +DYNAMIC +ENABLE +ENCRYPTED +ENCRYPTION +ENCRYPTION_KEY_ID +END +ENDS +ENGINE +ENGINES +ERROR +ERRORS +ESCAPE +EVEN +EVENT +EVENTS +EVERY +EXCHANGE +EXCLUSIVE +EXPIRE +EXPORT +EXTENDED +EXTENT_SIZE +FAILED_LOGIN_ATTEMPTS +FAST +FAULTS +FIELDS +FILE_BLOCK_SIZE +FILTER +FIRST +FIXED +FLUSH +FOLLOWING +FOLLOWS +FOUND +FULL +FUNCTION +GENERAL +GLOBAL +GRANTS +GROUP_REPLICATION +HANDLER +HASH +HELP +HISTORY +HOST +HOSTS +IDENTIFIED +IGNORE_SERVER_IDS +IMPORT +INCREMENT +INDEXES +INITIAL_SIZE +INPLACE +INSERT_METHOD +INSTALL +INSTANCE +INSTANT +INVISIBLE +INVOKER +IO +IO_THREAD +IPC +ISOLATION +ISSUER +JSON +KEY_BLOCK_SIZE +LANGUAGE +LAST +LEAVES +LESS +LEVEL +LIST +LOCAL +LOGFILE +LOGS +MASTER +MASTER_AUTO_POSITION +MASTER_CONNECT_RETRY +MASTER_DELAY +MASTER_HEARTBEAT_PERIOD +MASTER_HOST +MASTER_LOG_FILE +MASTER_LOG_POS +MASTER_PASSWORD +MASTER_PORT +MASTER_RETRY_COUNT +MASTER_SSL +MASTER_SSL_CA +MASTER_SSL_CAPATH +MASTER_SSL_CERT +MASTER_SSL_CIPHER +MASTER_SSL_CRL +MASTER_SSL_CRLPATH +MASTER_SSL_KEY +MASTER_TLS_VERSION +MASTER_USER +MAX_CONNECTIONS_PER_HOUR +MAX_QUERIES_PER_HOUR +MAX_ROWS +MAX_SIZE +MAX_UPDATES_PER_HOUR +MAX_USER_CONNECTIONS +MEDIUM +MEMBER +MERGE +MESSAGE_TEXT +MID +MIGRATE +MIN_ROWS +MODE +MODIFY +MUTEX +MYSQL +MYSQL_ERRNO +NAME +NAMES +NCHAR +NEVER +NEXT +NO +NOCACHE +NOCOPY +NOCYCLE +NOMAXVALUE +NOMINVALUE +NOWAIT +NODEGROUP +NONE +ODBC +OFFLINE +OFFSET +OF +OJ +OLD_PASSWORD +ONE +ONLINE +ONLY +OPEN +OPTIMIZER_COSTS +OPTIONS +OWNER +PACK_KEYS +PAGE +PAGE_COMPRESSED +PAGE_COMPRESSION_LEVEL +PARSER +PARTIAL +PARTITIONING +PARTITIONS +PASSWORD +PASSWORD_LOCK_TIME +PHASE +PLUGIN +PLUGIN_DIR +PLUGINS +PORT +PRECEDES +PRECEDING +PREPARE +PRESERVE +PREV +PROCESSLIST +PROFILE +PROFILES +PROXY +QUERY +QUICK +REBUILD +RECOVER +RECURSIVE +REDO_BUFFER_SIZE +REDUNDANT +RELAY +RELAY_LOG_FILE +RELAY_LOG_POS +RELAYLOG +REMOVE +REORGANIZE +REPAIR +REPLICATE_DO_DB +REPLICATE_DO_TABLE +REPLICATE_IGNORE_DB +REPLICATE_IGNORE_TABLE +REPLICATE_REWRITE_DB +REPLICATE_WILD_DO_TABLE +REPLICATE_WILD_IGNORE_TABLE +REPLICATION +RESET +RESTART +RESUME +RETURNED_SQLSTATE +RETURNING +RETURNS +REUSE +ROLE +ROLLBACK +ROLLUP +ROTATE +ROW +ROWS +ROW_FORMAT +RTREE +SAVEPOINT +SCHEDULE +SECURITY +SEQUENCE +SERVER +SESSION +SHARE +SHARED +SIGNED +SIMPLE +SLAVE +SLOW +SNAPSHOT +SOCKET +SOME +SONAME +SOUNDS +SOURCE +SQL_AFTER_GTIDS +SQL_AFTER_MTS_GAPS +SQL_BEFORE_GTIDS +SQL_BUFFER_RESULT +SQL_CACHE +SQL_NO_CACHE +SQL_THREAD +START +STARTS +STATS_AUTO_RECALC +STATS_PERSISTENT +STATS_SAMPLE_PAGES +STATUS +STOP +STORAGE +STORED +STRING +SUBCLASS_ORIGIN +SUBJECT +SUBPARTITION +SUBPARTITIONS +SUSPEND +SWAPS +SWITCHES +TABLE_NAME +TABLESPACE +TABLE_TYPE +TEMPORARY +TEMPTABLE +THAN +TRADITIONAL +TRANSACTION +TRANSACTIONAL +TRIGGERS +TRUNCATE +UNBOUNDED +UNDEFINED +UNDOFILE +UNDO_BUFFER_SIZE +UNINSTALL +UNKNOWN +UNTIL +UPGRADE +USER +USE_FRM +USER_RESOURCES +VALIDATION +VALUE +VARIABLES +VIEW +VIRTUAL +VISIBLE +WAIT +WARNINGS +WINDOW +WITHOUT +WORK +WRAPPER +X509 +XA +XML +YES +EUR +USA +JIS +ISO +INTERNAL +QUARTER +MONTH +DAY +HOUR +MINUTE +WEEK +SECOND +MICROSECOND +ADMIN +APPLICATION_PASSWORD_ADMIN +AUDIT_ADMIN +BACKUP_ADMIN +BINLOG_ADMIN +BINLOG_ENCRYPTION_ADMIN +CLONE_ADMIN +CONNECTION_ADMIN +ENCRYPTION_KEY_ADMIN +EXECUTE +FILE +FIREWALL_ADMIN +FIREWALL_USER +FLUSH_OPTIMIZER_COSTS +FLUSH_STATUS +FLUSH_TABLES +FLUSH_USER_RESOURCES +GROUP_REPLICATION_ADMIN +INNODB_REDO_LOG_ARCHIVE +INNODB_REDO_LOG_ENABLE +INVOKE +LAMBDA +NDB_STORED_USER +PASSWORDLESS_USER_ADMIN +PERSIST_RO_VARIABLES_ADMIN +PRIVILEGES +PROCESS +RELOAD +REPLICATION_APPLIER +REPLICATION_SLAVE_ADMIN +RESOURCE_GROUP_ADMIN +RESOURCE_GROUP_USER +ROLE_ADMIN +ROUTINE +S3 +SERVICE_CONNECTION_ADMIN +SESSION_VARIABLES_ADMIN +SET_USER_ID +SHOW_ROUTINE +SHUTDOWN +SUPER +SYSTEM_VARIABLES_ADMIN +TABLES +TABLE_ENCRYPTION_ADMIN +VERSION_TOKEN_ADMIN +XA_RECOVER_ADMIN +ARMSCII8 +ASCII +BIG5 +CP1250 +CP1251 +CP1256 +CP1257 +CP850 +CP852 +CP866 +CP932 +DEC8 +EUCJPMS +EUCKR +GB18030 +GB2312 +GBK +GEOSTD8 +GREEK +HEBREW +HP8 +KEYBCS2 +KOI8R +KOI8U +LATIN1 +LATIN2 +LATIN5 +LATIN7 +MACCE +MACROMAN +SJIS +SWE7 +TIS620 +UCS2 +UJIS +UTF16 +UTF16LE +UTF32 +UTF8 +UTF8MB3 +UTF8MB4 +ARCHIVE +BLACKHOLE +CSV +FEDERATED +INNODB +MEMORY +MRG_MYISAM +MYISAM +NDB +NDBCLUSTER +PERFORMANCE_SCHEMA +TOKUDB +REPEATABLE +COMMITTED +UNCOMMITTED +SERIALIZABLE +GEOMETRYCOLLECTION +GEOMCOLLECTION +GEOMETRY +LINESTRING +MULTILINESTRING +MULTIPOINT +MULTIPOLYGON +POINT +POLYGON +ABS +ACOS +ADDDATE +ADDTIME +AES_DECRYPT +AES_ENCRYPT +AREA +ASBINARY +ASIN +ASTEXT +ASWKB +ASWKT +ASYMMETRIC_DECRYPT +ASYMMETRIC_DERIVE +ASYMMETRIC_ENCRYPT +ASYMMETRIC_SIGN +ASYMMETRIC_VERIFY +ATAN +ATAN2 +BENCHMARK +BIN +BIT_COUNT +BIT_LENGTH +BUFFER +CATALOG_NAME +CEIL +CEILING +CENTROID +CHARACTER_LENGTH +CHARSET +CHAR_LENGTH +COERCIBILITY +COLLATION +COMPRESS +CONCAT +CONCAT_WS +CONNECTION_ID +CONV +CONVERT_TZ +COS +COT +CRC32 +CREATE_ASYMMETRIC_PRIV_KEY +CREATE_ASYMMETRIC_PUB_KEY +CREATE_DH_PARAMETERS +CREATE_DIGEST +CROSSES +DATEDIFF +DATE_FORMAT +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +DECODE +DEGREES +DES_DECRYPT +DES_ENCRYPT +DIMENSION +DISJOINT +ELT +ENCODE +ENCRYPT +ENDPOINT +ENGINE_ATTRIBUTE +ENVELOPE +EQUALS +EXP +EXPORT_SET +EXTERIORRING +EXTRACTVALUE +FIELD +FIND_IN_SET +FLOOR +FORMAT +FOUND_ROWS +FROM_BASE64 +FROM_DAYS +FROM_UNIXTIME +GEOMCOLLFROMTEXT +GEOMCOLLFROMWKB +GEOMETRYCOLLECTIONFROMTEXT +GEOMETRYCOLLECTIONFROMWKB +GEOMETRYFROMTEXT +GEOMETRYFROMWKB +GEOMETRYN +GEOMETRYTYPE +GEOMFROMTEXT +GEOMFROMWKB +GET_FORMAT +GET_LOCK +GLENGTH +GREATEST +GTID_SUBSET +GTID_SUBTRACT +HEX +IFNULL +INET6_ATON +INET6_NTOA +INET_ATON +INET_NTOA +INSTR +INTERIORRINGN +INTERSECTS +ISCLOSED +ISEMPTY +ISNULL +ISSIMPLE +IS_FREE_LOCK +IS_IPV4 +IS_IPV4_COMPAT +IS_IPV4_MAPPED +IS_IPV6 +IS_USED_LOCK +LAST_INSERT_ID +LCASE +LEAST +LENGTH +LINEFROMTEXT +LINEFROMWKB +LINESTRINGFROMTEXT +LINESTRINGFROMWKB +LN +LOAD_FILE +LOCATE +LOG +LOG10 +LOG2 +LOWER +LPAD +LTRIM +MAKEDATE +MAKETIME +MAKE_SET +MASTER_POS_WAIT +MBRCONTAINS +MBRDISJOINT +MBREQUAL +MBRINTERSECTS +MBROVERLAPS +MBRTOUCHES +MBRWITHIN +MD5 +MLINEFROMTEXT +MLINEFROMWKB +MONTHNAME +MPOINTFROMTEXT +MPOINTFROMWKB +MPOLYFROMTEXT +MPOLYFROMWKB +MULTILINESTRINGFROMTEXT +MULTILINESTRINGFROMWKB +MULTIPOINTFROMTEXT +MULTIPOINTFROMWKB +MULTIPOLYGONFROMTEXT +MULTIPOLYGONFROMWKB +NAME_CONST +NULLIF +NUMGEOMETRIES +NUMINTERIORRINGS +NUMPOINTS +OCT +OCTET_LENGTH +ORD +OVERLAPS +PERIOD_ADD +PERIOD_DIFF +PI +POINTFROMTEXT +POINTFROMWKB +POINTN +POLYFROMTEXT +POLYFROMWKB +POLYGONFROMTEXT +POLYGONFROMWKB +POW +POWER +QUOTE +RADIANS +RAND +RANDOM_BYTES +RELEASE_LOCK +REVERSE +ROUND +ROW_COUNT +RPAD +RTRIM +SEC_TO_TIME +SECONDARY_ENGINE_ATTRIBUTE +SESSION_USER +SHA +SHA1 +SHA2 +SCHEMA_NAME +SIGN +SIN +SLEEP +SOUNDEX +SQL_THREAD_WAIT_AFTER_GTIDS +SQRT +SRID +STARTPOINT +STRCMP +STR_TO_DATE +ST_AREA +ST_ASBINARY +ST_ASTEXT +ST_ASWKB +ST_ASWKT +ST_BUFFER +ST_CENTROID +ST_CONTAINS +ST_CROSSES +ST_DIFFERENCE +ST_DIMENSION +ST_DISJOINT +ST_DISTANCE +ST_ENDPOINT +ST_ENVELOPE +ST_EQUALS +ST_EXTERIORRING +ST_GEOMCOLLFROMTEXT +ST_GEOMCOLLFROMTXT +ST_GEOMCOLLFROMWKB +ST_GEOMETRYCOLLECTIONFROMTEXT +ST_GEOMETRYCOLLECTIONFROMWKB +ST_GEOMETRYFROMTEXT +ST_GEOMETRYFROMWKB +ST_GEOMETRYN +ST_GEOMETRYTYPE +ST_GEOMFROMTEXT +ST_GEOMFROMWKB +ST_INTERIORRINGN +ST_INTERSECTION +ST_INTERSECTS +ST_ISCLOSED +ST_ISEMPTY +ST_ISSIMPLE +ST_LINEFROMTEXT +ST_LINEFROMWKB +ST_LINESTRINGFROMTEXT +ST_LINESTRINGFROMWKB +ST_NUMGEOMETRIES +ST_NUMINTERIORRING +ST_NUMINTERIORRINGS +ST_NUMPOINTS +ST_OVERLAPS +ST_POINTFROMTEXT +ST_POINTFROMWKB +ST_POINTN +ST_POLYFROMTEXT +ST_POLYFROMWKB +ST_POLYGONFROMTEXT +ST_POLYGONFROMWKB +ST_SRID +ST_STARTPOINT +ST_SYMDIFFERENCE +ST_TOUCHES +ST_UNION +ST_WITHIN +ST_X +ST_Y +SUBDATE +SUBSTRING_INDEX +SUBTIME +SYSTEM_USER +TAN +TIMEDIFF +TIMESTAMPADD +TIMESTAMPDIFF +TIME_FORMAT +TIME_TO_SEC +TOUCHES +TO_BASE64 +TO_DAYS +TO_SECONDS +UCASE +UNCOMPRESS +UNCOMPRESSED_LENGTH +UNHEX +UNIX_TIMESTAMP +UPDATEXML +UPPER +UUID +UUID_SHORT +VALIDATE_PASSWORD_STRENGTH +VERSION +WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS +WEEKDAY +WEEKOFYEAR +WEIGHT_STRING +WITHIN +YEARWEEK +Y_FUNCTION +X_FUNCTION +VAR_ASSIGN +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIV_ASSIGN +MOD_ASSIGN +AND_ASSIGN +XOR_ASSIGN +OR_ASSIGN +STAR +DIVIDE +MODULE +PLUS +MINUS +DIV +MOD +EQUAL_SYMBOL +GREATER_SYMBOL +LESS_SYMBOL +EXCLAMATION_SYMBOL +BIT_NOT_OP +BIT_OR_OP +BIT_AND_OP +BIT_XOR_OP +DOT +LR_BRACKET +RR_BRACKET +COMMA +SEMI +AT_SIGN +ZERO_DECIMAL +ONE_DECIMAL +TWO_DECIMAL +SINGLE_QUOTE_SYMB +DOUBLE_QUOTE_SYMB +REVERSE_QUOTE_SYMB +COLON_SYMB +CHARSET_REVERSE_QOUTE_STRING +FILESIZE_LITERAL +START_NATIONAL_STRING_LITERAL +STRING_LITERAL +DECIMAL_LITERAL +HEXADECIMAL_LITERAL +REAL_LITERAL +NULL_SPEC_LITERAL +BIT_STRING +STRING_CHARSET_NAME +DOT_ID +ID +REVERSE_QUOTE_ID +STRING_USER_NAME +IP_ADDRESS +LOCAL_ID +GLOBAL_ID +ERROR_RECONGNIGION + +rule names: +root +sqlStatements +sqlStatement +emptyStatement_ +dmlStatement +selectStatement +lockClause +tableSources +tableSource +querySpecification +selectSpec +selectElements +selectElement +fromClause +limitClause +limitClauseAtom +fullId +tableName +fullColumnName +collationName +uid +simpleId +dottedId +decimalLiteral +stringLiteral +booleanLiteral +hexadecimalLiteral +constant +expressions +functionCall +aggregateWindowedFunction +expression +predicate +expressionAtom +unaryOperator +comparisonOperator +logicalOperator + + +atn: +[4, 1, 1155, 396, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 3, 0, 76, 8, 0, 1, 0, 1, 0, 3, 0, 80, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 87, 8, 1, 1, 1, 3, 1, 90, 8, 1, 1, 1, 5, 1, 93, 8, 1, 10, 1, 12, 1, 96, 9, 1, 1, 1, 1, 1, 1, 1, 3, 1, 101, 8, 1, 1, 1, 3, 1, 104, 8, 1, 1, 1, 3, 1, 107, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 3, 5, 117, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 125, 8, 6, 1, 7, 1, 7, 1, 7, 5, 7, 130, 8, 7, 10, 7, 12, 7, 133, 9, 7, 1, 8, 1, 8, 1, 9, 1, 9, 5, 9, 139, 8, 9, 10, 9, 12, 9, 142, 9, 9, 1, 9, 1, 9, 3, 9, 146, 8, 9, 1, 9, 3, 9, 149, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 159, 8, 10, 1, 11, 1, 11, 3, 11, 163, 8, 11, 1, 11, 1, 11, 5, 11, 167, 8, 11, 10, 11, 12, 11, 170, 9, 11, 1, 12, 1, 12, 3, 12, 174, 8, 12, 1, 12, 3, 12, 177, 8, 12, 1, 12, 1, 12, 3, 12, 181, 8, 12, 1, 12, 3, 12, 184, 8, 12, 3, 12, 186, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 193, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 199, 8, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 206, 8, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 214, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 221, 8, 18, 3, 18, 223, 8, 18, 1, 18, 3, 18, 226, 8, 18, 1, 18, 1, 18, 3, 18, 230, 8, 18, 3, 18, 232, 8, 18, 1, 19, 1, 19, 3, 19, 236, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 241, 8, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 3, 22, 248, 8, 22, 1, 23, 1, 23, 1, 24, 3, 24, 253, 8, 24, 1, 24, 1, 24, 3, 24, 257, 8, 24, 1, 24, 4, 24, 260, 8, 24, 11, 24, 12, 24, 261, 1, 24, 3, 24, 265, 8, 24, 1, 24, 1, 24, 3, 24, 269, 8, 24, 1, 24, 1, 24, 3, 24, 273, 8, 24, 3, 24, 275, 8, 24, 1, 25, 1, 25, 1, 26, 3, 26, 280, 8, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 291, 8, 27, 1, 28, 1, 28, 1, 28, 5, 28, 296, 8, 28, 10, 28, 12, 28, 299, 9, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 314, 8, 31, 1, 31, 1, 31, 1, 31, 3, 31, 319, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 325, 8, 31, 10, 31, 12, 31, 328, 9, 31, 1, 32, 1, 32, 1, 32, 3, 32, 333, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 343, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 5, 32, 350, 8, 32, 10, 32, 12, 32, 353, 9, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 364, 8, 33, 10, 33, 12, 33, 367, 9, 33, 1, 33, 1, 33, 3, 33, 371, 8, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 386, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 394, 8, 36, 1, 36, 0, 2, 62, 64, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 7, 2, 0, 6, 6, 49, 50, 1, 0, 624, 625, 3, 0, 1131, 1133, 1142, 1142, 1144, 1144, 2, 0, 62, 62, 176, 176, 2, 0, 113, 113, 1120, 1120, 3, 0, 62, 62, 176, 176, 660, 660, 3, 0, 113, 113, 1113, 1114, 1120, 1121, 436, 0, 75, 1, 0, 0, 0, 2, 94, 1, 0, 0, 0, 4, 108, 1, 0, 0, 0, 6, 110, 1, 0, 0, 0, 8, 112, 1, 0, 0, 0, 10, 114, 1, 0, 0, 0, 12, 124, 1, 0, 0, 0, 14, 126, 1, 0, 0, 0, 16, 134, 1, 0, 0, 0, 18, 136, 1, 0, 0, 0, 20, 158, 1, 0, 0, 0, 22, 162, 1, 0, 0, 0, 24, 185, 1, 0, 0, 0, 26, 187, 1, 0, 0, 0, 28, 194, 1, 0, 0, 0, 30, 207, 1, 0, 0, 0, 32, 209, 1, 0, 0, 0, 34, 215, 1, 0, 0, 0, 36, 231, 1, 0, 0, 0, 38, 235, 1, 0, 0, 0, 40, 240, 1, 0, 0, 0, 42, 242, 1, 0, 0, 0, 44, 247, 1, 0, 0, 0, 46, 249, 1, 0, 0, 0, 48, 274, 1, 0, 0, 0, 50, 276, 1, 0, 0, 0, 52, 279, 1, 0, 0, 0, 54, 290, 1, 0, 0, 0, 56, 292, 1, 0, 0, 0, 58, 300, 1, 0, 0, 0, 60, 302, 1, 0, 0, 0, 62, 318, 1, 0, 0, 0, 64, 329, 1, 0, 0, 0, 66, 370, 1, 0, 0, 0, 68, 372, 1, 0, 0, 0, 70, 385, 1, 0, 0, 0, 72, 393, 1, 0, 0, 0, 74, 76, 3, 2, 1, 0, 75, 74, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 79, 1, 0, 0, 0, 77, 78, 5, 1114, 0, 0, 78, 80, 5, 1114, 0, 0, 79, 77, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 82, 5, 0, 0, 1, 82, 1, 1, 0, 0, 0, 83, 86, 3, 4, 2, 0, 84, 85, 5, 1114, 0, 0, 85, 87, 5, 1114, 0, 0, 86, 84, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 89, 1, 0, 0, 0, 88, 90, 5, 1129, 0, 0, 89, 88, 1, 0, 0, 0, 89, 90, 1, 0, 0, 0, 90, 93, 1, 0, 0, 0, 91, 93, 3, 6, 3, 0, 92, 83, 1, 0, 0, 0, 92, 91, 1, 0, 0, 0, 93, 96, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 106, 1, 0, 0, 0, 96, 94, 1, 0, 0, 0, 97, 103, 3, 4, 2, 0, 98, 99, 5, 1114, 0, 0, 99, 101, 5, 1114, 0, 0, 100, 98, 1, 0, 0, 0, 100, 101, 1, 0, 0, 0, 101, 102, 1, 0, 0, 0, 102, 104, 5, 1129, 0, 0, 103, 100, 1, 0, 0, 0, 103, 104, 1, 0, 0, 0, 104, 107, 1, 0, 0, 0, 105, 107, 3, 6, 3, 0, 106, 97, 1, 0, 0, 0, 106, 105, 1, 0, 0, 0, 107, 3, 1, 0, 0, 0, 108, 109, 3, 8, 4, 0, 109, 5, 1, 0, 0, 0, 110, 111, 5, 1129, 0, 0, 111, 7, 1, 0, 0, 0, 112, 113, 3, 10, 5, 0, 113, 9, 1, 0, 0, 0, 114, 116, 3, 18, 9, 0, 115, 117, 3, 12, 6, 0, 116, 115, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 11, 1, 0, 0, 0, 118, 119, 5, 64, 0, 0, 119, 125, 5, 182, 0, 0, 120, 121, 5, 102, 0, 0, 121, 122, 5, 79, 0, 0, 122, 123, 5, 608, 0, 0, 123, 125, 5, 509, 0, 0, 124, 118, 1, 0, 0, 0, 124, 120, 1, 0, 0, 0, 125, 13, 1, 0, 0, 0, 126, 131, 3, 16, 8, 0, 127, 128, 5, 1128, 0, 0, 128, 130, 3, 16, 8, 0, 129, 127, 1, 0, 0, 0, 130, 133, 1, 0, 0, 0, 131, 129, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 15, 1, 0, 0, 0, 133, 131, 1, 0, 0, 0, 134, 135, 3, 34, 17, 0, 135, 17, 1, 0, 0, 0, 136, 140, 5, 151, 0, 0, 137, 139, 3, 20, 10, 0, 138, 137, 1, 0, 0, 0, 139, 142, 1, 0, 0, 0, 140, 138, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 143, 1, 0, 0, 0, 142, 140, 1, 0, 0, 0, 143, 145, 3, 22, 11, 0, 144, 146, 3, 26, 13, 0, 145, 144, 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 149, 3, 28, 14, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 19, 1, 0, 0, 0, 150, 159, 7, 0, 0, 0, 151, 159, 5, 74, 0, 0, 152, 159, 5, 169, 0, 0, 153, 159, 5, 164, 0, 0, 154, 159, 5, 162, 0, 0, 155, 159, 5, 623, 0, 0, 156, 159, 7, 1, 0, 0, 157, 159, 5, 163, 0, 0, 158, 150, 1, 0, 0, 0, 158, 151, 1, 0, 0, 0, 158, 152, 1, 0, 0, 0, 158, 153, 1, 0, 0, 0, 158, 154, 1, 0, 0, 0, 158, 155, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 158, 157, 1, 0, 0, 0, 159, 21, 1, 0, 0, 0, 160, 163, 5, 1110, 0, 0, 161, 163, 3, 24, 12, 0, 162, 160, 1, 0, 0, 0, 162, 161, 1, 0, 0, 0, 163, 168, 1, 0, 0, 0, 164, 165, 5, 1128, 0, 0, 165, 167, 3, 24, 12, 0, 166, 164, 1, 0, 0, 0, 167, 170, 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 23, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 171, 176, 3, 36, 18, 0, 172, 174, 5, 12, 0, 0, 173, 172, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 174, 175, 1, 0, 0, 0, 175, 177, 3, 40, 20, 0, 176, 173, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 186, 1, 0, 0, 0, 178, 183, 3, 58, 29, 0, 179, 181, 5, 12, 0, 0, 180, 179, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 184, 3, 40, 20, 0, 183, 180, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 186, 1, 0, 0, 0, 185, 171, 1, 0, 0, 0, 185, 178, 1, 0, 0, 0, 186, 25, 1, 0, 0, 0, 187, 188, 5, 67, 0, 0, 188, 189, 3, 14, 7, 0, 189, 192, 1, 0, 0, 0, 190, 191, 5, 188, 0, 0, 191, 193, 3, 62, 31, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 27, 1, 0, 0, 0, 194, 205, 5, 98, 0, 0, 195, 196, 3, 30, 15, 0, 196, 197, 5, 1128, 0, 0, 197, 199, 1, 0, 0, 0, 198, 195, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 206, 3, 30, 15, 0, 201, 202, 3, 30, 15, 0, 202, 203, 5, 530, 0, 0, 203, 204, 3, 30, 15, 0, 204, 206, 1, 0, 0, 0, 205, 198, 1, 0, 0, 0, 205, 201, 1, 0, 0, 0, 206, 29, 1, 0, 0, 0, 207, 208, 3, 46, 23, 0, 208, 31, 1, 0, 0, 0, 209, 213, 3, 40, 20, 0, 210, 214, 5, 1148, 0, 0, 211, 212, 5, 1125, 0, 0, 212, 214, 3, 40, 20, 0, 213, 210, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 33, 1, 0, 0, 0, 215, 216, 3, 32, 16, 0, 216, 35, 1, 0, 0, 0, 217, 222, 3, 40, 20, 0, 218, 220, 3, 44, 22, 0, 219, 221, 3, 44, 22, 0, 220, 219, 1, 0, 0, 0, 220, 221, 1, 0, 0, 0, 221, 223, 1, 0, 0, 0, 222, 218, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 232, 1, 0, 0, 0, 224, 226, 9, 0, 0, 0, 225, 224, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 229, 3, 44, 22, 0, 228, 230, 3, 44, 22, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 232, 1, 0, 0, 0, 231, 217, 1, 0, 0, 0, 231, 225, 1, 0, 0, 0, 232, 37, 1, 0, 0, 0, 233, 236, 3, 40, 20, 0, 234, 236, 5, 1141, 0, 0, 235, 233, 1, 0, 0, 0, 235, 234, 1, 0, 0, 0, 236, 39, 1, 0, 0, 0, 237, 241, 3, 42, 21, 0, 238, 241, 5, 1150, 0, 0, 239, 241, 5, 1138, 0, 0, 240, 237, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 240, 239, 1, 0, 0, 0, 241, 41, 1, 0, 0, 0, 242, 243, 5, 1149, 0, 0, 243, 43, 1, 0, 0, 0, 244, 248, 5, 1148, 0, 0, 245, 246, 5, 1125, 0, 0, 246, 248, 3, 40, 20, 0, 247, 244, 1, 0, 0, 0, 247, 245, 1, 0, 0, 0, 248, 45, 1, 0, 0, 0, 249, 250, 7, 2, 0, 0, 250, 47, 1, 0, 0, 0, 251, 253, 5, 1147, 0, 0, 252, 251, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 257, 5, 1141, 0, 0, 255, 257, 5, 1140, 0, 0, 256, 252, 1, 0, 0, 0, 256, 255, 1, 0, 0, 0, 257, 259, 1, 0, 0, 0, 258, 260, 5, 1141, 0, 0, 259, 258, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 259, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 275, 1, 0, 0, 0, 263, 265, 5, 1147, 0, 0, 264, 263, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 266, 1, 0, 0, 0, 266, 269, 5, 1141, 0, 0, 267, 269, 5, 1140, 0, 0, 268, 264, 1, 0, 0, 0, 268, 267, 1, 0, 0, 0, 269, 272, 1, 0, 0, 0, 270, 271, 5, 27, 0, 0, 271, 273, 3, 38, 19, 0, 272, 270, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 275, 1, 0, 0, 0, 274, 256, 1, 0, 0, 0, 274, 268, 1, 0, 0, 0, 275, 49, 1, 0, 0, 0, 276, 277, 7, 3, 0, 0, 277, 51, 1, 0, 0, 0, 278, 280, 5, 1147, 0, 0, 279, 278, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 282, 5, 1143, 0, 0, 282, 53, 1, 0, 0, 0, 283, 291, 3, 48, 24, 0, 284, 291, 3, 46, 23, 0, 285, 286, 5, 1114, 0, 0, 286, 291, 3, 46, 23, 0, 287, 291, 3, 52, 26, 0, 288, 291, 3, 50, 25, 0, 289, 291, 5, 1144, 0, 0, 290, 283, 1, 0, 0, 0, 290, 284, 1, 0, 0, 0, 290, 285, 1, 0, 0, 0, 290, 287, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 290, 289, 1, 0, 0, 0, 291, 55, 1, 0, 0, 0, 292, 297, 3, 62, 31, 0, 293, 294, 5, 1128, 0, 0, 294, 296, 3, 62, 31, 0, 295, 293, 1, 0, 0, 0, 296, 299, 1, 0, 0, 0, 297, 295, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 57, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 300, 301, 3, 60, 30, 0, 301, 59, 1, 0, 0, 0, 302, 303, 5, 288, 0, 0, 303, 304, 5, 1126, 0, 0, 304, 305, 5, 1110, 0, 0, 305, 306, 5, 1127, 0, 0, 306, 61, 1, 0, 0, 0, 307, 308, 6, 31, -1, 0, 308, 309, 7, 4, 0, 0, 309, 319, 3, 62, 31, 4, 310, 311, 3, 64, 32, 0, 311, 313, 5, 87, 0, 0, 312, 314, 5, 113, 0, 0, 313, 312, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 316, 7, 5, 0, 0, 316, 319, 1, 0, 0, 0, 317, 319, 3, 64, 32, 0, 318, 307, 1, 0, 0, 0, 318, 310, 1, 0, 0, 0, 318, 317, 1, 0, 0, 0, 319, 326, 1, 0, 0, 0, 320, 321, 10, 3, 0, 0, 321, 322, 3, 72, 36, 0, 322, 323, 3, 62, 31, 4, 323, 325, 1, 0, 0, 0, 324, 320, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 63, 1, 0, 0, 0, 328, 326, 1, 0, 0, 0, 329, 332, 6, 32, -1, 0, 330, 331, 5, 1153, 0, 0, 331, 333, 5, 1101, 0, 0, 332, 330, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 3, 66, 33, 0, 335, 351, 1, 0, 0, 0, 336, 337, 10, 2, 0, 0, 337, 338, 3, 70, 35, 0, 338, 339, 3, 64, 32, 3, 339, 350, 1, 0, 0, 0, 340, 342, 10, 3, 0, 0, 341, 343, 5, 113, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 345, 5, 79, 0, 0, 345, 346, 5, 1126, 0, 0, 346, 347, 3, 56, 28, 0, 347, 348, 5, 1127, 0, 0, 348, 350, 1, 0, 0, 0, 349, 336, 1, 0, 0, 0, 349, 340, 1, 0, 0, 0, 350, 353, 1, 0, 0, 0, 351, 349, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 65, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 354, 371, 3, 54, 27, 0, 355, 371, 3, 36, 18, 0, 356, 357, 3, 68, 34, 0, 357, 358, 3, 66, 33, 0, 358, 371, 1, 0, 0, 0, 359, 360, 5, 1126, 0, 0, 360, 365, 3, 62, 31, 0, 361, 362, 5, 1128, 0, 0, 362, 364, 3, 62, 31, 0, 363, 361, 1, 0, 0, 0, 364, 367, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 368, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 368, 369, 5, 1127, 0, 0, 369, 371, 1, 0, 0, 0, 370, 354, 1, 0, 0, 0, 370, 355, 1, 0, 0, 0, 370, 356, 1, 0, 0, 0, 370, 359, 1, 0, 0, 0, 371, 67, 1, 0, 0, 0, 372, 373, 7, 6, 0, 0, 373, 69, 1, 0, 0, 0, 374, 386, 5, 1117, 0, 0, 375, 386, 5, 1118, 0, 0, 376, 386, 5, 1119, 0, 0, 377, 378, 5, 1119, 0, 0, 378, 386, 5, 1117, 0, 0, 379, 380, 5, 1118, 0, 0, 380, 386, 5, 1117, 0, 0, 381, 382, 5, 1119, 0, 0, 382, 386, 5, 1118, 0, 0, 383, 384, 5, 1120, 0, 0, 384, 386, 5, 1117, 0, 0, 385, 374, 1, 0, 0, 0, 385, 375, 1, 0, 0, 0, 385, 376, 1, 0, 0, 0, 385, 377, 1, 0, 0, 0, 385, 379, 1, 0, 0, 0, 385, 381, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 386, 71, 1, 0, 0, 0, 387, 394, 5, 10, 0, 0, 388, 389, 5, 1123, 0, 0, 389, 394, 5, 1123, 0, 0, 390, 394, 5, 122, 0, 0, 391, 392, 5, 1122, 0, 0, 392, 394, 5, 1122, 0, 0, 393, 387, 1, 0, 0, 0, 393, 388, 1, 0, 0, 0, 393, 390, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 394, 73, 1, 0, 0, 0, 56, 75, 79, 86, 89, 92, 94, 100, 103, 106, 116, 124, 131, 140, 145, 148, 158, 162, 168, 173, 176, 180, 183, 185, 192, 198, 205, 213, 220, 222, 225, 229, 231, 235, 240, 247, 252, 256, 261, 264, 268, 272, 274, 279, 290, 297, 313, 318, 326, 332, 342, 349, 351, 365, 370, 385, 393] \ No newline at end of file diff --git a/internal/mysqld/parser/antlrparser/parser/MySqlParser.tokens b/internal/mysqld/parser/antlrparser/parser/MySqlParser.tokens new file mode 100644 index 0000000000..e371479d5f --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/MySqlParser.tokens @@ -0,0 +1,2286 @@ +SPACE=1 +SPEC_MYSQL_COMMENT=2 +COMMENT_INPUT=3 +LINE_COMMENT=4 +ADD=5 +ALL=6 +ALTER=7 +ALWAYS=8 +ANALYZE=9 +AND=10 +ARRAY=11 +AS=12 +ASC=13 +ATTRIBUTE=14 +BEFORE=15 +BETWEEN=16 +BOTH=17 +BUCKETS=18 +BY=19 +CALL=20 +CASCADE=21 +CASE=22 +CAST=23 +CHANGE=24 +CHARACTER=25 +CHECK=26 +COLLATE=27 +COLUMN=28 +CONDITION=29 +CONSTRAINT=30 +CONTINUE=31 +CONVERT=32 +CREATE=33 +CROSS=34 +CURRENT=35 +CURRENT_ROLE=36 +CURRENT_USER=37 +CURSOR=38 +DATABASE=39 +DATABASES=40 +DECLARE=41 +DEFAULT=42 +DELAYED=43 +DELETE=44 +DESC=45 +DESCRIBE=46 +DETERMINISTIC=47 +DIAGNOSTICS=48 +DISTINCT=49 +DISTINCTROW=50 +DROP=51 +EACH=52 +ELSE=53 +ELSEIF=54 +EMPTY=55 +ENCLOSED=56 +ESCAPED=57 +EXCEPT=58 +EXISTS=59 +EXIT=60 +EXPLAIN=61 +FALSE=62 +FETCH=63 +FOR=64 +FORCE=65 +FOREIGN=66 +FROM=67 +FULLTEXT=68 +GENERATED=69 +GET=70 +GRANT=71 +GROUP=72 +HAVING=73 +HIGH_PRIORITY=74 +HISTOGRAM=75 +IF=76 +IGNORE=77 +IGNORED=78 +IN=79 +INDEX=80 +INFILE=81 +INNER=82 +INOUT=83 +INSERT=84 +INTERVAL=85 +INTO=86 +IS=87 +ITERATE=88 +JOIN=89 +KEY=90 +KEYS=91 +KILL=92 +LATERAL=93 +LEADING=94 +LEAVE=95 +LEFT=96 +LIKE=97 +LIMIT=98 +LINEAR=99 +LINES=100 +LOAD=101 +LOCK=102 +LOCKED=103 +LOOP=104 +LOW_PRIORITY=105 +MASTER_BIND=106 +MASTER_SSL_VERIFY_SERVER_CERT=107 +MATCH=108 +MAXVALUE=109 +MINVALUE=110 +MODIFIES=111 +NATURAL=112 +NOT=113 +NO_WRITE_TO_BINLOG=114 +NULL_LITERAL=115 +NUMBER=116 +ON=117 +OPTIMIZE=118 +OPTION=119 +OPTIONAL=120 +OPTIONALLY=121 +OR=122 +ORDER=123 +OUT=124 +OUTER=125 +OUTFILE=126 +OVER=127 +PARTITION=128 +PRIMARY=129 +PROCEDURE=130 +PURGE=131 +RANGE=132 +READ=133 +READS=134 +REFERENCES=135 +REGEXP=136 +RELEASE=137 +RENAME=138 +REPEAT=139 +REPLACE=140 +REQUIRE=141 +RESIGNAL=142 +RESTRICT=143 +RETAIN=144 +RETURN=145 +REVOKE=146 +RIGHT=147 +RLIKE=148 +SCHEMA=149 +SCHEMAS=150 +SELECT=151 +SET=152 +SEPARATOR=153 +SHOW=154 +SIGNAL=155 +SKIP_=156 +SPATIAL=157 +SQL=158 +SQLEXCEPTION=159 +SQLSTATE=160 +SQLWARNING=161 +SQL_BIG_RESULT=162 +SQL_CALC_FOUND_ROWS=163 +SQL_SMALL_RESULT=164 +SSL=165 +STACKED=166 +STARTING=167 +STATEMENT=168 +STRAIGHT_JOIN=169 +TABLE=170 +TERMINATED=171 +THEN=172 +TO=173 +TRAILING=174 +TRIGGER=175 +TRUE=176 +UNDO=177 +UNION=178 +UNIQUE=179 +UNLOCK=180 +UNSIGNED=181 +UPDATE=182 +USAGE=183 +USE=184 +USING=185 +VALUES=186 +WHEN=187 +WHERE=188 +WHILE=189 +WITH=190 +WRITE=191 +XOR=192 +ZEROFILL=193 +TINYINT=194 +SMALLINT=195 +MEDIUMINT=196 +MIDDLEINT=197 +INT=198 +INT1=199 +INT2=200 +INT3=201 +INT4=202 +INT8=203 +INTEGER=204 +BIGINT=205 +REAL=206 +DOUBLE=207 +PRECISION=208 +FLOAT=209 +FLOAT4=210 +FLOAT8=211 +DECIMAL=212 +DEC=213 +NUMERIC=214 +DATE=215 +TIME=216 +TIMESTAMP=217 +DATETIME=218 +YEAR=219 +CHAR=220 +VARCHAR=221 +NVARCHAR=222 +NATIONAL=223 +BINARY=224 +VARBINARY=225 +TINYBLOB=226 +BLOB=227 +MEDIUMBLOB=228 +LONG=229 +LONGBLOB=230 +TINYTEXT=231 +TEXT=232 +MEDIUMTEXT=233 +LONGTEXT=234 +ENUM=235 +VARYING=236 +SERIAL=237 +YEAR_MONTH=238 +DAY_HOUR=239 +DAY_MINUTE=240 +DAY_SECOND=241 +HOUR_MINUTE=242 +HOUR_SECOND=243 +MINUTE_SECOND=244 +SECOND_MICROSECOND=245 +MINUTE_MICROSECOND=246 +HOUR_MICROSECOND=247 +DAY_MICROSECOND=248 +JSON_ARRAY=249 +JSON_ARRAYAGG=250 +JSON_ARRAY_APPEND=251 +JSON_ARRAY_INSERT=252 +JSON_CONTAINS=253 +JSON_CONTAINS_PATH=254 +JSON_DEPTH=255 +JSON_EXTRACT=256 +JSON_INSERT=257 +JSON_KEYS=258 +JSON_LENGTH=259 +JSON_MERGE=260 +JSON_MERGE_PATCH=261 +JSON_MERGE_PRESERVE=262 +JSON_OBJECT=263 +JSON_OBJECTAGG=264 +JSON_OVERLAPS=265 +JSON_PRETTY=266 +JSON_QUOTE=267 +JSON_REMOVE=268 +JSON_REPLACE=269 +JSON_SCHEMA_VALID=270 +JSON_SCHEMA_VALIDATION_REPORT=271 +JSON_SEARCH=272 +JSON_SET=273 +JSON_STORAGE_FREE=274 +JSON_STORAGE_SIZE=275 +JSON_TABLE=276 +JSON_TYPE=277 +JSON_UNQUOTE=278 +JSON_VALID=279 +JSON_VALUE=280 +NESTED=281 +ORDINALITY=282 +PATH=283 +AVG=284 +BIT_AND=285 +BIT_OR=286 +BIT_XOR=287 +COUNT=288 +CUME_DIST=289 +DENSE_RANK=290 +FIRST_VALUE=291 +GROUP_CONCAT=292 +LAG=293 +LAST_VALUE=294 +LEAD=295 +MAX=296 +MIN=297 +NTILE=298 +NTH_VALUE=299 +PERCENT_RANK=300 +RANK=301 +ROW_NUMBER=302 +STD=303 +STDDEV=304 +STDDEV_POP=305 +STDDEV_SAMP=306 +SUM=307 +VAR_POP=308 +VAR_SAMP=309 +VARIANCE=310 +CURRENT_DATE=311 +CURRENT_TIME=312 +CURRENT_TIMESTAMP=313 +LOCALTIME=314 +CURDATE=315 +CURTIME=316 +DATE_ADD=317 +DATE_SUB=318 +EXTRACT=319 +LOCALTIMESTAMP=320 +NOW=321 +POSITION=322 +SUBSTR=323 +SUBSTRING=324 +SYSDATE=325 +TRIM=326 +UTC_DATE=327 +UTC_TIME=328 +UTC_TIMESTAMP=329 +ACCOUNT=330 +ACTION=331 +AFTER=332 +AGGREGATE=333 +ALGORITHM=334 +ANY=335 +AT=336 +AUTHORS=337 +AUTOCOMMIT=338 +AUTOEXTEND_SIZE=339 +AUTO_INCREMENT=340 +AVG_ROW_LENGTH=341 +BEGIN=342 +BINLOG=343 +BIT=344 +BLOCK=345 +BOOL=346 +BOOLEAN=347 +BTREE=348 +CACHE=349 +CASCADED=350 +CHAIN=351 +CHANGED=352 +CHANNEL=353 +CHECKSUM=354 +PAGE_CHECKSUM=355 +CIPHER=356 +CLASS_ORIGIN=357 +CLIENT=358 +CLOSE=359 +CLUSTERING=360 +COALESCE=361 +CODE=362 +COLUMNS=363 +COLUMN_FORMAT=364 +COLUMN_NAME=365 +COMMENT=366 +COMMIT=367 +COMPACT=368 +COMPLETION=369 +COMPRESSED=370 +COMPRESSION=371 +CONCURRENT=372 +CONNECT=373 +CONNECTION=374 +CONSISTENT=375 +CONSTRAINT_CATALOG=376 +CONSTRAINT_SCHEMA=377 +CONSTRAINT_NAME=378 +CONTAINS=379 +CONTEXT=380 +CONTRIBUTORS=381 +COPY=382 +CPU=383 +CYCLE=384 +CURSOR_NAME=385 +DATA=386 +DATAFILE=387 +DEALLOCATE=388 +DEFAULT_AUTH=389 +DEFINER=390 +DELAY_KEY_WRITE=391 +DES_KEY_FILE=392 +DIRECTORY=393 +DISABLE=394 +DISCARD=395 +DISK=396 +DO=397 +DUMPFILE=398 +DUPLICATE=399 +DYNAMIC=400 +ENABLE=401 +ENCRYPTED=402 +ENCRYPTION=403 +ENCRYPTION_KEY_ID=404 +END=405 +ENDS=406 +ENGINE=407 +ENGINES=408 +ERROR=409 +ERRORS=410 +ESCAPE=411 +EVEN=412 +EVENT=413 +EVENTS=414 +EVERY=415 +EXCHANGE=416 +EXCLUSIVE=417 +EXPIRE=418 +EXPORT=419 +EXTENDED=420 +EXTENT_SIZE=421 +FAILED_LOGIN_ATTEMPTS=422 +FAST=423 +FAULTS=424 +FIELDS=425 +FILE_BLOCK_SIZE=426 +FILTER=427 +FIRST=428 +FIXED=429 +FLUSH=430 +FOLLOWING=431 +FOLLOWS=432 +FOUND=433 +FULL=434 +FUNCTION=435 +GENERAL=436 +GLOBAL=437 +GRANTS=438 +GROUP_REPLICATION=439 +HANDLER=440 +HASH=441 +HELP=442 +HISTORY=443 +HOST=444 +HOSTS=445 +IDENTIFIED=446 +IGNORE_SERVER_IDS=447 +IMPORT=448 +INCREMENT=449 +INDEXES=450 +INITIAL_SIZE=451 +INPLACE=452 +INSERT_METHOD=453 +INSTALL=454 +INSTANCE=455 +INSTANT=456 +INVISIBLE=457 +INVOKER=458 +IO=459 +IO_THREAD=460 +IPC=461 +ISOLATION=462 +ISSUER=463 +JSON=464 +KEY_BLOCK_SIZE=465 +LANGUAGE=466 +LAST=467 +LEAVES=468 +LESS=469 +LEVEL=470 +LIST=471 +LOCAL=472 +LOGFILE=473 +LOGS=474 +MASTER=475 +MASTER_AUTO_POSITION=476 +MASTER_CONNECT_RETRY=477 +MASTER_DELAY=478 +MASTER_HEARTBEAT_PERIOD=479 +MASTER_HOST=480 +MASTER_LOG_FILE=481 +MASTER_LOG_POS=482 +MASTER_PASSWORD=483 +MASTER_PORT=484 +MASTER_RETRY_COUNT=485 +MASTER_SSL=486 +MASTER_SSL_CA=487 +MASTER_SSL_CAPATH=488 +MASTER_SSL_CERT=489 +MASTER_SSL_CIPHER=490 +MASTER_SSL_CRL=491 +MASTER_SSL_CRLPATH=492 +MASTER_SSL_KEY=493 +MASTER_TLS_VERSION=494 +MASTER_USER=495 +MAX_CONNECTIONS_PER_HOUR=496 +MAX_QUERIES_PER_HOUR=497 +MAX_ROWS=498 +MAX_SIZE=499 +MAX_UPDATES_PER_HOUR=500 +MAX_USER_CONNECTIONS=501 +MEDIUM=502 +MEMBER=503 +MERGE=504 +MESSAGE_TEXT=505 +MID=506 +MIGRATE=507 +MIN_ROWS=508 +MODE=509 +MODIFY=510 +MUTEX=511 +MYSQL=512 +MYSQL_ERRNO=513 +NAME=514 +NAMES=515 +NCHAR=516 +NEVER=517 +NEXT=518 +NO=519 +NOCACHE=520 +NOCOPY=521 +NOCYCLE=522 +NOMAXVALUE=523 +NOMINVALUE=524 +NOWAIT=525 +NODEGROUP=526 +NONE=527 +ODBC=528 +OFFLINE=529 +OFFSET=530 +OF=531 +OJ=532 +OLD_PASSWORD=533 +ONE=534 +ONLINE=535 +ONLY=536 +OPEN=537 +OPTIMIZER_COSTS=538 +OPTIONS=539 +OWNER=540 +PACK_KEYS=541 +PAGE=542 +PAGE_COMPRESSED=543 +PAGE_COMPRESSION_LEVEL=544 +PARSER=545 +PARTIAL=546 +PARTITIONING=547 +PARTITIONS=548 +PASSWORD=549 +PASSWORD_LOCK_TIME=550 +PHASE=551 +PLUGIN=552 +PLUGIN_DIR=553 +PLUGINS=554 +PORT=555 +PRECEDES=556 +PRECEDING=557 +PREPARE=558 +PRESERVE=559 +PREV=560 +PROCESSLIST=561 +PROFILE=562 +PROFILES=563 +PROXY=564 +QUERY=565 +QUICK=566 +REBUILD=567 +RECOVER=568 +RECURSIVE=569 +REDO_BUFFER_SIZE=570 +REDUNDANT=571 +RELAY=572 +RELAY_LOG_FILE=573 +RELAY_LOG_POS=574 +RELAYLOG=575 +REMOVE=576 +REORGANIZE=577 +REPAIR=578 +REPLICATE_DO_DB=579 +REPLICATE_DO_TABLE=580 +REPLICATE_IGNORE_DB=581 +REPLICATE_IGNORE_TABLE=582 +REPLICATE_REWRITE_DB=583 +REPLICATE_WILD_DO_TABLE=584 +REPLICATE_WILD_IGNORE_TABLE=585 +REPLICATION=586 +RESET=587 +RESTART=588 +RESUME=589 +RETURNED_SQLSTATE=590 +RETURNING=591 +RETURNS=592 +REUSE=593 +ROLE=594 +ROLLBACK=595 +ROLLUP=596 +ROTATE=597 +ROW=598 +ROWS=599 +ROW_FORMAT=600 +RTREE=601 +SAVEPOINT=602 +SCHEDULE=603 +SECURITY=604 +SEQUENCE=605 +SERVER=606 +SESSION=607 +SHARE=608 +SHARED=609 +SIGNED=610 +SIMPLE=611 +SLAVE=612 +SLOW=613 +SNAPSHOT=614 +SOCKET=615 +SOME=616 +SONAME=617 +SOUNDS=618 +SOURCE=619 +SQL_AFTER_GTIDS=620 +SQL_AFTER_MTS_GAPS=621 +SQL_BEFORE_GTIDS=622 +SQL_BUFFER_RESULT=623 +SQL_CACHE=624 +SQL_NO_CACHE=625 +SQL_THREAD=626 +START=627 +STARTS=628 +STATS_AUTO_RECALC=629 +STATS_PERSISTENT=630 +STATS_SAMPLE_PAGES=631 +STATUS=632 +STOP=633 +STORAGE=634 +STORED=635 +STRING=636 +SUBCLASS_ORIGIN=637 +SUBJECT=638 +SUBPARTITION=639 +SUBPARTITIONS=640 +SUSPEND=641 +SWAPS=642 +SWITCHES=643 +TABLE_NAME=644 +TABLESPACE=645 +TABLE_TYPE=646 +TEMPORARY=647 +TEMPTABLE=648 +THAN=649 +TRADITIONAL=650 +TRANSACTION=651 +TRANSACTIONAL=652 +TRIGGERS=653 +TRUNCATE=654 +UNBOUNDED=655 +UNDEFINED=656 +UNDOFILE=657 +UNDO_BUFFER_SIZE=658 +UNINSTALL=659 +UNKNOWN=660 +UNTIL=661 +UPGRADE=662 +USER=663 +USE_FRM=664 +USER_RESOURCES=665 +VALIDATION=666 +VALUE=667 +VARIABLES=668 +VIEW=669 +VIRTUAL=670 +VISIBLE=671 +WAIT=672 +WARNINGS=673 +WINDOW=674 +WITHOUT=675 +WORK=676 +WRAPPER=677 +X509=678 +XA=679 +XML=680 +YES=681 +EUR=682 +USA=683 +JIS=684 +ISO=685 +INTERNAL=686 +QUARTER=687 +MONTH=688 +DAY=689 +HOUR=690 +MINUTE=691 +WEEK=692 +SECOND=693 +MICROSECOND=694 +ADMIN=695 +APPLICATION_PASSWORD_ADMIN=696 +AUDIT_ADMIN=697 +BACKUP_ADMIN=698 +BINLOG_ADMIN=699 +BINLOG_ENCRYPTION_ADMIN=700 +CLONE_ADMIN=701 +CONNECTION_ADMIN=702 +ENCRYPTION_KEY_ADMIN=703 +EXECUTE=704 +FILE=705 +FIREWALL_ADMIN=706 +FIREWALL_USER=707 +FLUSH_OPTIMIZER_COSTS=708 +FLUSH_STATUS=709 +FLUSH_TABLES=710 +FLUSH_USER_RESOURCES=711 +GROUP_REPLICATION_ADMIN=712 +INNODB_REDO_LOG_ARCHIVE=713 +INNODB_REDO_LOG_ENABLE=714 +INVOKE=715 +LAMBDA=716 +NDB_STORED_USER=717 +PASSWORDLESS_USER_ADMIN=718 +PERSIST_RO_VARIABLES_ADMIN=719 +PRIVILEGES=720 +PROCESS=721 +RELOAD=722 +REPLICATION_APPLIER=723 +REPLICATION_SLAVE_ADMIN=724 +RESOURCE_GROUP_ADMIN=725 +RESOURCE_GROUP_USER=726 +ROLE_ADMIN=727 +ROUTINE=728 +S3=729 +SERVICE_CONNECTION_ADMIN=730 +SESSION_VARIABLES_ADMIN=731 +SET_USER_ID=732 +SHOW_ROUTINE=733 +SHUTDOWN=734 +SUPER=735 +SYSTEM_VARIABLES_ADMIN=736 +TABLES=737 +TABLE_ENCRYPTION_ADMIN=738 +VERSION_TOKEN_ADMIN=739 +XA_RECOVER_ADMIN=740 +ARMSCII8=741 +ASCII=742 +BIG5=743 +CP1250=744 +CP1251=745 +CP1256=746 +CP1257=747 +CP850=748 +CP852=749 +CP866=750 +CP932=751 +DEC8=752 +EUCJPMS=753 +EUCKR=754 +GB18030=755 +GB2312=756 +GBK=757 +GEOSTD8=758 +GREEK=759 +HEBREW=760 +HP8=761 +KEYBCS2=762 +KOI8R=763 +KOI8U=764 +LATIN1=765 +LATIN2=766 +LATIN5=767 +LATIN7=768 +MACCE=769 +MACROMAN=770 +SJIS=771 +SWE7=772 +TIS620=773 +UCS2=774 +UJIS=775 +UTF16=776 +UTF16LE=777 +UTF32=778 +UTF8=779 +UTF8MB3=780 +UTF8MB4=781 +ARCHIVE=782 +BLACKHOLE=783 +CSV=784 +FEDERATED=785 +INNODB=786 +MEMORY=787 +MRG_MYISAM=788 +MYISAM=789 +NDB=790 +NDBCLUSTER=791 +PERFORMANCE_SCHEMA=792 +TOKUDB=793 +REPEATABLE=794 +COMMITTED=795 +UNCOMMITTED=796 +SERIALIZABLE=797 +GEOMETRYCOLLECTION=798 +GEOMCOLLECTION=799 +GEOMETRY=800 +LINESTRING=801 +MULTILINESTRING=802 +MULTIPOINT=803 +MULTIPOLYGON=804 +POINT=805 +POLYGON=806 +ABS=807 +ACOS=808 +ADDDATE=809 +ADDTIME=810 +AES_DECRYPT=811 +AES_ENCRYPT=812 +AREA=813 +ASBINARY=814 +ASIN=815 +ASTEXT=816 +ASWKB=817 +ASWKT=818 +ASYMMETRIC_DECRYPT=819 +ASYMMETRIC_DERIVE=820 +ASYMMETRIC_ENCRYPT=821 +ASYMMETRIC_SIGN=822 +ASYMMETRIC_VERIFY=823 +ATAN=824 +ATAN2=825 +BENCHMARK=826 +BIN=827 +BIT_COUNT=828 +BIT_LENGTH=829 +BUFFER=830 +CATALOG_NAME=831 +CEIL=832 +CEILING=833 +CENTROID=834 +CHARACTER_LENGTH=835 +CHARSET=836 +CHAR_LENGTH=837 +COERCIBILITY=838 +COLLATION=839 +COMPRESS=840 +CONCAT=841 +CONCAT_WS=842 +CONNECTION_ID=843 +CONV=844 +CONVERT_TZ=845 +COS=846 +COT=847 +CRC32=848 +CREATE_ASYMMETRIC_PRIV_KEY=849 +CREATE_ASYMMETRIC_PUB_KEY=850 +CREATE_DH_PARAMETERS=851 +CREATE_DIGEST=852 +CROSSES=853 +DATEDIFF=854 +DATE_FORMAT=855 +DAYNAME=856 +DAYOFMONTH=857 +DAYOFWEEK=858 +DAYOFYEAR=859 +DECODE=860 +DEGREES=861 +DES_DECRYPT=862 +DES_ENCRYPT=863 +DIMENSION=864 +DISJOINT=865 +ELT=866 +ENCODE=867 +ENCRYPT=868 +ENDPOINT=869 +ENGINE_ATTRIBUTE=870 +ENVELOPE=871 +EQUALS=872 +EXP=873 +EXPORT_SET=874 +EXTERIORRING=875 +EXTRACTVALUE=876 +FIELD=877 +FIND_IN_SET=878 +FLOOR=879 +FORMAT=880 +FOUND_ROWS=881 +FROM_BASE64=882 +FROM_DAYS=883 +FROM_UNIXTIME=884 +GEOMCOLLFROMTEXT=885 +GEOMCOLLFROMWKB=886 +GEOMETRYCOLLECTIONFROMTEXT=887 +GEOMETRYCOLLECTIONFROMWKB=888 +GEOMETRYFROMTEXT=889 +GEOMETRYFROMWKB=890 +GEOMETRYN=891 +GEOMETRYTYPE=892 +GEOMFROMTEXT=893 +GEOMFROMWKB=894 +GET_FORMAT=895 +GET_LOCK=896 +GLENGTH=897 +GREATEST=898 +GTID_SUBSET=899 +GTID_SUBTRACT=900 +HEX=901 +IFNULL=902 +INET6_ATON=903 +INET6_NTOA=904 +INET_ATON=905 +INET_NTOA=906 +INSTR=907 +INTERIORRINGN=908 +INTERSECTS=909 +ISCLOSED=910 +ISEMPTY=911 +ISNULL=912 +ISSIMPLE=913 +IS_FREE_LOCK=914 +IS_IPV4=915 +IS_IPV4_COMPAT=916 +IS_IPV4_MAPPED=917 +IS_IPV6=918 +IS_USED_LOCK=919 +LAST_INSERT_ID=920 +LCASE=921 +LEAST=922 +LENGTH=923 +LINEFROMTEXT=924 +LINEFROMWKB=925 +LINESTRINGFROMTEXT=926 +LINESTRINGFROMWKB=927 +LN=928 +LOAD_FILE=929 +LOCATE=930 +LOG=931 +LOG10=932 +LOG2=933 +LOWER=934 +LPAD=935 +LTRIM=936 +MAKEDATE=937 +MAKETIME=938 +MAKE_SET=939 +MASTER_POS_WAIT=940 +MBRCONTAINS=941 +MBRDISJOINT=942 +MBREQUAL=943 +MBRINTERSECTS=944 +MBROVERLAPS=945 +MBRTOUCHES=946 +MBRWITHIN=947 +MD5=948 +MLINEFROMTEXT=949 +MLINEFROMWKB=950 +MONTHNAME=951 +MPOINTFROMTEXT=952 +MPOINTFROMWKB=953 +MPOLYFROMTEXT=954 +MPOLYFROMWKB=955 +MULTILINESTRINGFROMTEXT=956 +MULTILINESTRINGFROMWKB=957 +MULTIPOINTFROMTEXT=958 +MULTIPOINTFROMWKB=959 +MULTIPOLYGONFROMTEXT=960 +MULTIPOLYGONFROMWKB=961 +NAME_CONST=962 +NULLIF=963 +NUMGEOMETRIES=964 +NUMINTERIORRINGS=965 +NUMPOINTS=966 +OCT=967 +OCTET_LENGTH=968 +ORD=969 +OVERLAPS=970 +PERIOD_ADD=971 +PERIOD_DIFF=972 +PI=973 +POINTFROMTEXT=974 +POINTFROMWKB=975 +POINTN=976 +POLYFROMTEXT=977 +POLYFROMWKB=978 +POLYGONFROMTEXT=979 +POLYGONFROMWKB=980 +POW=981 +POWER=982 +QUOTE=983 +RADIANS=984 +RAND=985 +RANDOM_BYTES=986 +RELEASE_LOCK=987 +REVERSE=988 +ROUND=989 +ROW_COUNT=990 +RPAD=991 +RTRIM=992 +SEC_TO_TIME=993 +SECONDARY_ENGINE_ATTRIBUTE=994 +SESSION_USER=995 +SHA=996 +SHA1=997 +SHA2=998 +SCHEMA_NAME=999 +SIGN=1000 +SIN=1001 +SLEEP=1002 +SOUNDEX=1003 +SQL_THREAD_WAIT_AFTER_GTIDS=1004 +SQRT=1005 +SRID=1006 +STARTPOINT=1007 +STRCMP=1008 +STR_TO_DATE=1009 +ST_AREA=1010 +ST_ASBINARY=1011 +ST_ASTEXT=1012 +ST_ASWKB=1013 +ST_ASWKT=1014 +ST_BUFFER=1015 +ST_CENTROID=1016 +ST_CONTAINS=1017 +ST_CROSSES=1018 +ST_DIFFERENCE=1019 +ST_DIMENSION=1020 +ST_DISJOINT=1021 +ST_DISTANCE=1022 +ST_ENDPOINT=1023 +ST_ENVELOPE=1024 +ST_EQUALS=1025 +ST_EXTERIORRING=1026 +ST_GEOMCOLLFROMTEXT=1027 +ST_GEOMCOLLFROMTXT=1028 +ST_GEOMCOLLFROMWKB=1029 +ST_GEOMETRYCOLLECTIONFROMTEXT=1030 +ST_GEOMETRYCOLLECTIONFROMWKB=1031 +ST_GEOMETRYFROMTEXT=1032 +ST_GEOMETRYFROMWKB=1033 +ST_GEOMETRYN=1034 +ST_GEOMETRYTYPE=1035 +ST_GEOMFROMTEXT=1036 +ST_GEOMFROMWKB=1037 +ST_INTERIORRINGN=1038 +ST_INTERSECTION=1039 +ST_INTERSECTS=1040 +ST_ISCLOSED=1041 +ST_ISEMPTY=1042 +ST_ISSIMPLE=1043 +ST_LINEFROMTEXT=1044 +ST_LINEFROMWKB=1045 +ST_LINESTRINGFROMTEXT=1046 +ST_LINESTRINGFROMWKB=1047 +ST_NUMGEOMETRIES=1048 +ST_NUMINTERIORRING=1049 +ST_NUMINTERIORRINGS=1050 +ST_NUMPOINTS=1051 +ST_OVERLAPS=1052 +ST_POINTFROMTEXT=1053 +ST_POINTFROMWKB=1054 +ST_POINTN=1055 +ST_POLYFROMTEXT=1056 +ST_POLYFROMWKB=1057 +ST_POLYGONFROMTEXT=1058 +ST_POLYGONFROMWKB=1059 +ST_SRID=1060 +ST_STARTPOINT=1061 +ST_SYMDIFFERENCE=1062 +ST_TOUCHES=1063 +ST_UNION=1064 +ST_WITHIN=1065 +ST_X=1066 +ST_Y=1067 +SUBDATE=1068 +SUBSTRING_INDEX=1069 +SUBTIME=1070 +SYSTEM_USER=1071 +TAN=1072 +TIMEDIFF=1073 +TIMESTAMPADD=1074 +TIMESTAMPDIFF=1075 +TIME_FORMAT=1076 +TIME_TO_SEC=1077 +TOUCHES=1078 +TO_BASE64=1079 +TO_DAYS=1080 +TO_SECONDS=1081 +UCASE=1082 +UNCOMPRESS=1083 +UNCOMPRESSED_LENGTH=1084 +UNHEX=1085 +UNIX_TIMESTAMP=1086 +UPDATEXML=1087 +UPPER=1088 +UUID=1089 +UUID_SHORT=1090 +VALIDATE_PASSWORD_STRENGTH=1091 +VERSION=1092 +WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS=1093 +WEEKDAY=1094 +WEEKOFYEAR=1095 +WEIGHT_STRING=1096 +WITHIN=1097 +YEARWEEK=1098 +Y_FUNCTION=1099 +X_FUNCTION=1100 +VAR_ASSIGN=1101 +PLUS_ASSIGN=1102 +MINUS_ASSIGN=1103 +MULT_ASSIGN=1104 +DIV_ASSIGN=1105 +MOD_ASSIGN=1106 +AND_ASSIGN=1107 +XOR_ASSIGN=1108 +OR_ASSIGN=1109 +STAR=1110 +DIVIDE=1111 +MODULE=1112 +PLUS=1113 +MINUS=1114 +DIV=1115 +MOD=1116 +EQUAL_SYMBOL=1117 +GREATER_SYMBOL=1118 +LESS_SYMBOL=1119 +EXCLAMATION_SYMBOL=1120 +BIT_NOT_OP=1121 +BIT_OR_OP=1122 +BIT_AND_OP=1123 +BIT_XOR_OP=1124 +DOT=1125 +LR_BRACKET=1126 +RR_BRACKET=1127 +COMMA=1128 +SEMI=1129 +AT_SIGN=1130 +ZERO_DECIMAL=1131 +ONE_DECIMAL=1132 +TWO_DECIMAL=1133 +SINGLE_QUOTE_SYMB=1134 +DOUBLE_QUOTE_SYMB=1135 +REVERSE_QUOTE_SYMB=1136 +COLON_SYMB=1137 +CHARSET_REVERSE_QOUTE_STRING=1138 +FILESIZE_LITERAL=1139 +START_NATIONAL_STRING_LITERAL=1140 +STRING_LITERAL=1141 +DECIMAL_LITERAL=1142 +HEXADECIMAL_LITERAL=1143 +REAL_LITERAL=1144 +NULL_SPEC_LITERAL=1145 +BIT_STRING=1146 +STRING_CHARSET_NAME=1147 +DOT_ID=1148 +ID=1149 +REVERSE_QUOTE_ID=1150 +STRING_USER_NAME=1151 +IP_ADDRESS=1152 +LOCAL_ID=1153 +GLOBAL_ID=1154 +ERROR_RECONGNIGION=1155 +'ADD'=5 +'ALL'=6 +'ALTER'=7 +'ALWAYS'=8 +'ANALYZE'=9 +'AND'=10 +'ARRAY'=11 +'AS'=12 +'ASC'=13 +'ATTRIBUTE'=14 +'BEFORE'=15 +'BETWEEN'=16 +'BOTH'=17 +'BUCKETS'=18 +'BY'=19 +'CALL'=20 +'CASCADE'=21 +'CASE'=22 +'CAST'=23 +'CHANGE'=24 +'CHARACTER'=25 +'CHECK'=26 +'COLLATE'=27 +'COLUMN'=28 +'CONDITION'=29 +'CONSTRAINT'=30 +'CONTINUE'=31 +'CONVERT'=32 +'CREATE'=33 +'CROSS'=34 +'CURRENT'=35 +'CURRENT_ROLE'=36 +'CURRENT_USER'=37 +'CURSOR'=38 +'DATABASE'=39 +'DATABASES'=40 +'DECLARE'=41 +'DEFAULT'=42 +'DELAYED'=43 +'DELETE'=44 +'DESC'=45 +'DESCRIBE'=46 +'DETERMINISTIC'=47 +'DIAGNOSTICS'=48 +'DISTINCT'=49 +'DISTINCTROW'=50 +'DROP'=51 +'EACH'=52 +'ELSE'=53 +'ELSEIF'=54 +'EMPTY'=55 +'ENCLOSED'=56 +'ESCAPED'=57 +'EXCEPT'=58 +'EXISTS'=59 +'EXIT'=60 +'EXPLAIN'=61 +'FALSE'=62 +'FETCH'=63 +'FOR'=64 +'FORCE'=65 +'FOREIGN'=66 +'FROM'=67 +'FULLTEXT'=68 +'GENERATED'=69 +'GET'=70 +'GRANT'=71 +'GROUP'=72 +'HAVING'=73 +'HIGH_PRIORITY'=74 +'HISTOGRAM'=75 +'IF'=76 +'IGNORE'=77 +'IGNORED'=78 +'IN'=79 +'INDEX'=80 +'INFILE'=81 +'INNER'=82 +'INOUT'=83 +'INSERT'=84 +'INTERVAL'=85 +'INTO'=86 +'IS'=87 +'ITERATE'=88 +'JOIN'=89 +'KEY'=90 +'KEYS'=91 +'KILL'=92 +'LATERAL'=93 +'LEADING'=94 +'LEAVE'=95 +'LEFT'=96 +'LIKE'=97 +'LIMIT'=98 +'LINEAR'=99 +'LINES'=100 +'LOAD'=101 +'LOCK'=102 +'LOCKED'=103 +'LOOP'=104 +'LOW_PRIORITY'=105 +'MASTER_BIND'=106 +'MASTER_SSL_VERIFY_SERVER_CERT'=107 +'MATCH'=108 +'MAXVALUE'=109 +'MINVALUE'=110 +'MODIFIES'=111 +'NATURAL'=112 +'NOT'=113 +'NO_WRITE_TO_BINLOG'=114 +'NULL'=115 +'NUMBER'=116 +'ON'=117 +'OPTIMIZE'=118 +'OPTION'=119 +'OPTIONAL'=120 +'OPTIONALLY'=121 +'OR'=122 +'ORDER'=123 +'OUT'=124 +'OUTER'=125 +'OUTFILE'=126 +'OVER'=127 +'PARTITION'=128 +'PRIMARY'=129 +'PROCEDURE'=130 +'PURGE'=131 +'RANGE'=132 +'READ'=133 +'READS'=134 +'REFERENCES'=135 +'REGEXP'=136 +'RELEASE'=137 +'RENAME'=138 +'REPEAT'=139 +'REPLACE'=140 +'REQUIRE'=141 +'RESIGNAL'=142 +'RESTRICT'=143 +'RETAIN'=144 +'RETURN'=145 +'REVOKE'=146 +'RIGHT'=147 +'RLIKE'=148 +'SCHEMA'=149 +'SCHEMAS'=150 +'SELECT'=151 +'SET'=152 +'SEPARATOR'=153 +'SHOW'=154 +'SIGNAL'=155 +'SKIP'=156 +'SPATIAL'=157 +'SQL'=158 +'SQLEXCEPTION'=159 +'SQLSTATE'=160 +'SQLWARNING'=161 +'SQL_BIG_RESULT'=162 +'SQL_CALC_FOUND_ROWS'=163 +'SQL_SMALL_RESULT'=164 +'SSL'=165 +'STACKED'=166 +'STARTING'=167 +'STATEMENT'=168 +'STRAIGHT_JOIN'=169 +'TABLE'=170 +'TERMINATED'=171 +'THEN'=172 +'TO'=173 +'TRAILING'=174 +'TRIGGER'=175 +'TRUE'=176 +'UNDO'=177 +'UNION'=178 +'UNIQUE'=179 +'UNLOCK'=180 +'UNSIGNED'=181 +'UPDATE'=182 +'USAGE'=183 +'USE'=184 +'USING'=185 +'VALUES'=186 +'WHEN'=187 +'WHERE'=188 +'WHILE'=189 +'WITH'=190 +'WRITE'=191 +'XOR'=192 +'ZEROFILL'=193 +'TINYINT'=194 +'SMALLINT'=195 +'MEDIUMINT'=196 +'MIDDLEINT'=197 +'INT'=198 +'INT1'=199 +'INT2'=200 +'INT3'=201 +'INT4'=202 +'INT8'=203 +'INTEGER'=204 +'BIGINT'=205 +'REAL'=206 +'DOUBLE'=207 +'PRECISION'=208 +'FLOAT'=209 +'FLOAT4'=210 +'FLOAT8'=211 +'DECIMAL'=212 +'DEC'=213 +'NUMERIC'=214 +'DATE'=215 +'TIME'=216 +'TIMESTAMP'=217 +'DATETIME'=218 +'YEAR'=219 +'CHAR'=220 +'VARCHAR'=221 +'NVARCHAR'=222 +'NATIONAL'=223 +'BINARY'=224 +'VARBINARY'=225 +'TINYBLOB'=226 +'BLOB'=227 +'MEDIUMBLOB'=228 +'LONG'=229 +'LONGBLOB'=230 +'TINYTEXT'=231 +'TEXT'=232 +'MEDIUMTEXT'=233 +'LONGTEXT'=234 +'ENUM'=235 +'VARYING'=236 +'SERIAL'=237 +'YEAR_MONTH'=238 +'DAY_HOUR'=239 +'DAY_MINUTE'=240 +'DAY_SECOND'=241 +'HOUR_MINUTE'=242 +'HOUR_SECOND'=243 +'MINUTE_SECOND'=244 +'SECOND_MICROSECOND'=245 +'MINUTE_MICROSECOND'=246 +'HOUR_MICROSECOND'=247 +'DAY_MICROSECOND'=248 +'JSON_ARRAY'=249 +'JSON_ARRAYAGG'=250 +'JSON_ARRAY_APPEND'=251 +'JSON_ARRAY_INSERT'=252 +'JSON_CONTAINS'=253 +'JSON_CONTAINS_PATH'=254 +'JSON_DEPTH'=255 +'JSON_EXTRACT'=256 +'JSON_INSERT'=257 +'JSON_KEYS'=258 +'JSON_LENGTH'=259 +'JSON_MERGE'=260 +'JSON_MERGE_PATCH'=261 +'JSON_MERGE_PRESERVE'=262 +'JSON_OBJECT'=263 +'JSON_OBJECTAGG'=264 +'JSON_OVERLAPS'=265 +'JSON_PRETTY'=266 +'JSON_QUOTE'=267 +'JSON_REMOVE'=268 +'JSON_REPLACE'=269 +'JSON_SCHEMA_VALID'=270 +'JSON_SCHEMA_VALIDATION_REPORT'=271 +'JSON_SEARCH'=272 +'JSON_SET'=273 +'JSON_STORAGE_FREE'=274 +'JSON_STORAGE_SIZE'=275 +'JSON_TABLE'=276 +'JSON_TYPE'=277 +'JSON_UNQUOTE'=278 +'JSON_VALID'=279 +'JSON_VALUE'=280 +'NESTED'=281 +'ORDINALITY'=282 +'PATH'=283 +'AVG'=284 +'BIT_AND'=285 +'BIT_OR'=286 +'BIT_XOR'=287 +'COUNT'=288 +'CUME_DIST'=289 +'DENSE_RANK'=290 +'FIRST_VALUE'=291 +'GROUP_CONCAT'=292 +'LAG'=293 +'LAST_VALUE'=294 +'LEAD'=295 +'MAX'=296 +'MIN'=297 +'NTILE'=298 +'NTH_VALUE'=299 +'PERCENT_RANK'=300 +'RANK'=301 +'ROW_NUMBER'=302 +'STD'=303 +'STDDEV'=304 +'STDDEV_POP'=305 +'STDDEV_SAMP'=306 +'SUM'=307 +'VAR_POP'=308 +'VAR_SAMP'=309 +'VARIANCE'=310 +'CURRENT_DATE'=311 +'CURRENT_TIME'=312 +'CURRENT_TIMESTAMP'=313 +'LOCALTIME'=314 +'CURDATE'=315 +'CURTIME'=316 +'DATE_ADD'=317 +'DATE_SUB'=318 +'EXTRACT'=319 +'LOCALTIMESTAMP'=320 +'NOW'=321 +'POSITION'=322 +'SUBSTR'=323 +'SUBSTRING'=324 +'SYSDATE'=325 +'TRIM'=326 +'UTC_DATE'=327 +'UTC_TIME'=328 +'UTC_TIMESTAMP'=329 +'ACCOUNT'=330 +'ACTION'=331 +'AFTER'=332 +'AGGREGATE'=333 +'ALGORITHM'=334 +'ANY'=335 +'AT'=336 +'AUTHORS'=337 +'AUTOCOMMIT'=338 +'AUTOEXTEND_SIZE'=339 +'AUTO_INCREMENT'=340 +'AVG_ROW_LENGTH'=341 +'BEGIN'=342 +'BINLOG'=343 +'BIT'=344 +'BLOCK'=345 +'BOOL'=346 +'BOOLEAN'=347 +'BTREE'=348 +'CACHE'=349 +'CASCADED'=350 +'CHAIN'=351 +'CHANGED'=352 +'CHANNEL'=353 +'CHECKSUM'=354 +'PAGE_CHECKSUM'=355 +'CIPHER'=356 +'CLASS_ORIGIN'=357 +'CLIENT'=358 +'CLOSE'=359 +'CLUSTERING'=360 +'COALESCE'=361 +'CODE'=362 +'COLUMNS'=363 +'COLUMN_FORMAT'=364 +'COLUMN_NAME'=365 +'COMMENT'=366 +'COMMIT'=367 +'COMPACT'=368 +'COMPLETION'=369 +'COMPRESSED'=370 +'CONCURRENT'=372 +'CONNECT'=373 +'CONNECTION'=374 +'CONSISTENT'=375 +'CONSTRAINT_CATALOG'=376 +'CONSTRAINT_SCHEMA'=377 +'CONSTRAINT_NAME'=378 +'CONTAINS'=379 +'CONTEXT'=380 +'CONTRIBUTORS'=381 +'COPY'=382 +'CPU'=383 +'CYCLE'=384 +'CURSOR_NAME'=385 +'DATA'=386 +'DATAFILE'=387 +'DEALLOCATE'=388 +'DEFAULT_AUTH'=389 +'DEFINER'=390 +'DELAY_KEY_WRITE'=391 +'DES_KEY_FILE'=392 +'DIRECTORY'=393 +'DISABLE'=394 +'DISCARD'=395 +'DISK'=396 +'DO'=397 +'DUMPFILE'=398 +'DUPLICATE'=399 +'DYNAMIC'=400 +'ENABLE'=401 +'ENCRYPTED'=402 +'ENCRYPTION'=403 +'ENCRYPTION_KEY_ID'=404 +'END'=405 +'ENDS'=406 +'ENGINE'=407 +'ENGINES'=408 +'ERROR'=409 +'ERRORS'=410 +'ESCAPE'=411 +'EVEN'=412 +'EVENT'=413 +'EVENTS'=414 +'EVERY'=415 +'EXCHANGE'=416 +'EXCLUSIVE'=417 +'EXPIRE'=418 +'EXPORT'=419 +'EXTENDED'=420 +'EXTENT_SIZE'=421 +'FAILED_LOGIN_ATTEMPTS'=422 +'FAST'=423 +'FAULTS'=424 +'FIELDS'=425 +'FILE_BLOCK_SIZE'=426 +'FILTER'=427 +'FIRST'=428 +'FIXED'=429 +'FLUSH'=430 +'FOLLOWING'=431 +'FOLLOWS'=432 +'FOUND'=433 +'FULL'=434 +'FUNCTION'=435 +'GENERAL'=436 +'GLOBAL'=437 +'GRANTS'=438 +'GROUP_REPLICATION'=439 +'HANDLER'=440 +'HASH'=441 +'HELP'=442 +'HISTORY'=443 +'HOST'=444 +'HOSTS'=445 +'IDENTIFIED'=446 +'IGNORE_SERVER_IDS'=447 +'IMPORT'=448 +'INCREMENT'=449 +'INDEXES'=450 +'INITIAL_SIZE'=451 +'INPLACE'=452 +'INSERT_METHOD'=453 +'INSTALL'=454 +'INSTANCE'=455 +'INSTANT'=456 +'INVISIBLE'=457 +'INVOKER'=458 +'IO'=459 +'IO_THREAD'=460 +'IPC'=461 +'ISOLATION'=462 +'ISSUER'=463 +'JSON'=464 +'KEY_BLOCK_SIZE'=465 +'LANGUAGE'=466 +'LAST'=467 +'LEAVES'=468 +'LESS'=469 +'LEVEL'=470 +'LIST'=471 +'LOCAL'=472 +'LOGFILE'=473 +'LOGS'=474 +'MASTER'=475 +'MASTER_AUTO_POSITION'=476 +'MASTER_CONNECT_RETRY'=477 +'MASTER_DELAY'=478 +'MASTER_HEARTBEAT_PERIOD'=479 +'MASTER_HOST'=480 +'MASTER_LOG_FILE'=481 +'MASTER_LOG_POS'=482 +'MASTER_PASSWORD'=483 +'MASTER_PORT'=484 +'MASTER_RETRY_COUNT'=485 +'MASTER_SSL'=486 +'MASTER_SSL_CA'=487 +'MASTER_SSL_CAPATH'=488 +'MASTER_SSL_CERT'=489 +'MASTER_SSL_CIPHER'=490 +'MASTER_SSL_CRL'=491 +'MASTER_SSL_CRLPATH'=492 +'MASTER_SSL_KEY'=493 +'MASTER_TLS_VERSION'=494 +'MASTER_USER'=495 +'MAX_CONNECTIONS_PER_HOUR'=496 +'MAX_QUERIES_PER_HOUR'=497 +'MAX_ROWS'=498 +'MAX_SIZE'=499 +'MAX_UPDATES_PER_HOUR'=500 +'MAX_USER_CONNECTIONS'=501 +'MEDIUM'=502 +'MEMBER'=503 +'MERGE'=504 +'MESSAGE_TEXT'=505 +'MID'=506 +'MIGRATE'=507 +'MIN_ROWS'=508 +'MODE'=509 +'MODIFY'=510 +'MUTEX'=511 +'MYSQL'=512 +'MYSQL_ERRNO'=513 +'NAME'=514 +'NAMES'=515 +'NCHAR'=516 +'NEVER'=517 +'NEXT'=518 +'NO'=519 +'NOCACHE'=520 +'NOCOPY'=521 +'NOCYCLE'=522 +'NOMAXVALUE'=523 +'NOMINVALUE'=524 +'NOWAIT'=525 +'NODEGROUP'=526 +'NONE'=527 +'ODBC'=528 +'OFFLINE'=529 +'OFFSET'=530 +'OF'=531 +'OJ'=532 +'OLD_PASSWORD'=533 +'ONE'=534 +'ONLINE'=535 +'ONLY'=536 +'OPEN'=537 +'OPTIMIZER_COSTS'=538 +'OPTIONS'=539 +'OWNER'=540 +'PACK_KEYS'=541 +'PAGE'=542 +'PAGE_COMPRESSED'=543 +'PAGE_COMPRESSION_LEVEL'=544 +'PARSER'=545 +'PARTIAL'=546 +'PARTITIONING'=547 +'PARTITIONS'=548 +'PASSWORD'=549 +'PASSWORD_LOCK_TIME'=550 +'PHASE'=551 +'PLUGIN'=552 +'PLUGIN_DIR'=553 +'PLUGINS'=554 +'PORT'=555 +'PRECEDES'=556 +'PRECEDING'=557 +'PREPARE'=558 +'PRESERVE'=559 +'PREV'=560 +'PROCESSLIST'=561 +'PROFILE'=562 +'PROFILES'=563 +'PROXY'=564 +'QUERY'=565 +'QUICK'=566 +'REBUILD'=567 +'RECOVER'=568 +'RECURSIVE'=569 +'REDO_BUFFER_SIZE'=570 +'REDUNDANT'=571 +'RELAY'=572 +'RELAY_LOG_FILE'=573 +'RELAY_LOG_POS'=574 +'RELAYLOG'=575 +'REMOVE'=576 +'REORGANIZE'=577 +'REPAIR'=578 +'REPLICATE_DO_DB'=579 +'REPLICATE_DO_TABLE'=580 +'REPLICATE_IGNORE_DB'=581 +'REPLICATE_IGNORE_TABLE'=582 +'REPLICATE_REWRITE_DB'=583 +'REPLICATE_WILD_DO_TABLE'=584 +'REPLICATE_WILD_IGNORE_TABLE'=585 +'REPLICATION'=586 +'RESET'=587 +'RESTART'=588 +'RESUME'=589 +'RETURNED_SQLSTATE'=590 +'RETURNING'=591 +'RETURNS'=592 +'REUSE'=593 +'ROLE'=594 +'ROLLBACK'=595 +'ROLLUP'=596 +'ROTATE'=597 +'ROW'=598 +'ROWS'=599 +'ROW_FORMAT'=600 +'RTREE'=601 +'SAVEPOINT'=602 +'SCHEDULE'=603 +'SECURITY'=604 +'SEQUENCE'=605 +'SERVER'=606 +'SESSION'=607 +'SHARE'=608 +'SHARED'=609 +'SIGNED'=610 +'SIMPLE'=611 +'SLAVE'=612 +'SLOW'=613 +'SNAPSHOT'=614 +'SOCKET'=615 +'SOME'=616 +'SONAME'=617 +'SOUNDS'=618 +'SOURCE'=619 +'SQL_AFTER_GTIDS'=620 +'SQL_AFTER_MTS_GAPS'=621 +'SQL_BEFORE_GTIDS'=622 +'SQL_BUFFER_RESULT'=623 +'SQL_CACHE'=624 +'SQL_NO_CACHE'=625 +'SQL_THREAD'=626 +'START'=627 +'STARTS'=628 +'STATS_AUTO_RECALC'=629 +'STATS_PERSISTENT'=630 +'STATS_SAMPLE_PAGES'=631 +'STATUS'=632 +'STOP'=633 +'STORAGE'=634 +'STORED'=635 +'STRING'=636 +'SUBCLASS_ORIGIN'=637 +'SUBJECT'=638 +'SUBPARTITION'=639 +'SUBPARTITIONS'=640 +'SUSPEND'=641 +'SWAPS'=642 +'SWITCHES'=643 +'TABLE_NAME'=644 +'TABLESPACE'=645 +'TABLE_TYPE'=646 +'TEMPORARY'=647 +'TEMPTABLE'=648 +'THAN'=649 +'TRADITIONAL'=650 +'TRANSACTION'=651 +'TRANSACTIONAL'=652 +'TRIGGERS'=653 +'TRUNCATE'=654 +'UNBOUNDED'=655 +'UNDEFINED'=656 +'UNDOFILE'=657 +'UNDO_BUFFER_SIZE'=658 +'UNINSTALL'=659 +'UNKNOWN'=660 +'UNTIL'=661 +'UPGRADE'=662 +'USER'=663 +'USE_FRM'=664 +'USER_RESOURCES'=665 +'VALIDATION'=666 +'VALUE'=667 +'VARIABLES'=668 +'VIEW'=669 +'VIRTUAL'=670 +'VISIBLE'=671 +'WAIT'=672 +'WARNINGS'=673 +'WINDOW'=674 +'WITHOUT'=675 +'WORK'=676 +'WRAPPER'=677 +'X509'=678 +'XA'=679 +'XML'=680 +'YES'=681 +'EUR'=682 +'USA'=683 +'JIS'=684 +'ISO'=685 +'INTERNAL'=686 +'QUARTER'=687 +'MONTH'=688 +'DAY'=689 +'HOUR'=690 +'MINUTE'=691 +'WEEK'=692 +'SECOND'=693 +'MICROSECOND'=694 +'ADMIN'=695 +'APPLICATION_PASSWORD_ADMIN'=696 +'AUDIT_ADMIN'=697 +'BACKUP_ADMIN'=698 +'BINLOG_ADMIN'=699 +'BINLOG_ENCRYPTION_ADMIN'=700 +'CLONE_ADMIN'=701 +'CONNECTION_ADMIN'=702 +'ENCRYPTION_KEY_ADMIN'=703 +'EXECUTE'=704 +'FILE'=705 +'FIREWALL_ADMIN'=706 +'FIREWALL_USER'=707 +'FLUSH_OPTIMIZER_COSTS'=708 +'FLUSH_STATUS'=709 +'FLUSH_TABLES'=710 +'FLUSH_USER_RESOURCES'=711 +'GROUP_REPLICATION_ADMIN'=712 +'INNODB_REDO_LOG_ARCHIVE'=713 +'INNODB_REDO_LOG_ENABLE'=714 +'INVOKE'=715 +'LAMBDA'=716 +'NDB_STORED_USER'=717 +'PASSWORDLESS_USER_ADMIN'=718 +'PERSIST_RO_VARIABLES_ADMIN'=719 +'PRIVILEGES'=720 +'PROCESS'=721 +'RELOAD'=722 +'REPLICATION_APPLIER'=723 +'REPLICATION_SLAVE_ADMIN'=724 +'RESOURCE_GROUP_ADMIN'=725 +'RESOURCE_GROUP_USER'=726 +'ROLE_ADMIN'=727 +'ROUTINE'=728 +'S3'=729 +'SERVICE_CONNECTION_ADMIN'=730 +'SET_USER_ID'=732 +'SHOW_ROUTINE'=733 +'SHUTDOWN'=734 +'SUPER'=735 +'SYSTEM_VARIABLES_ADMIN'=736 +'TABLES'=737 +'TABLE_ENCRYPTION_ADMIN'=738 +'VERSION_TOKEN_ADMIN'=739 +'XA_RECOVER_ADMIN'=740 +'ARMSCII8'=741 +'ASCII'=742 +'BIG5'=743 +'CP1250'=744 +'CP1251'=745 +'CP1256'=746 +'CP1257'=747 +'CP850'=748 +'CP852'=749 +'CP866'=750 +'CP932'=751 +'DEC8'=752 +'EUCJPMS'=753 +'EUCKR'=754 +'GB18030'=755 +'GB2312'=756 +'GBK'=757 +'GEOSTD8'=758 +'GREEK'=759 +'HEBREW'=760 +'HP8'=761 +'KEYBCS2'=762 +'KOI8R'=763 +'KOI8U'=764 +'LATIN1'=765 +'LATIN2'=766 +'LATIN5'=767 +'LATIN7'=768 +'MACCE'=769 +'MACROMAN'=770 +'SJIS'=771 +'SWE7'=772 +'TIS620'=773 +'UCS2'=774 +'UJIS'=775 +'UTF16'=776 +'UTF16LE'=777 +'UTF32'=778 +'UTF8'=779 +'UTF8MB3'=780 +'UTF8MB4'=781 +'ARCHIVE'=782 +'BLACKHOLE'=783 +'CSV'=784 +'FEDERATED'=785 +'INNODB'=786 +'MEMORY'=787 +'MRG_MYISAM'=788 +'MYISAM'=789 +'NDB'=790 +'NDBCLUSTER'=791 +'PERFORMANCE_SCHEMA'=792 +'TOKUDB'=793 +'REPEATABLE'=794 +'COMMITTED'=795 +'UNCOMMITTED'=796 +'SERIALIZABLE'=797 +'GEOMETRYCOLLECTION'=798 +'GEOMCOLLECTION'=799 +'GEOMETRY'=800 +'LINESTRING'=801 +'MULTILINESTRING'=802 +'MULTIPOINT'=803 +'MULTIPOLYGON'=804 +'POINT'=805 +'POLYGON'=806 +'ABS'=807 +'ACOS'=808 +'ADDDATE'=809 +'ADDTIME'=810 +'AES_DECRYPT'=811 +'AES_ENCRYPT'=812 +'AREA'=813 +'ASBINARY'=814 +'ASIN'=815 +'ASTEXT'=816 +'ASWKB'=817 +'ASWKT'=818 +'ASYMMETRIC_DECRYPT'=819 +'ASYMMETRIC_DERIVE'=820 +'ASYMMETRIC_ENCRYPT'=821 +'ASYMMETRIC_SIGN'=822 +'ASYMMETRIC_VERIFY'=823 +'ATAN'=824 +'ATAN2'=825 +'BENCHMARK'=826 +'BIN'=827 +'BIT_COUNT'=828 +'BIT_LENGTH'=829 +'BUFFER'=830 +'CATALOG_NAME'=831 +'CEIL'=832 +'CEILING'=833 +'CENTROID'=834 +'CHARACTER_LENGTH'=835 +'CHARSET'=836 +'CHAR_LENGTH'=837 +'COERCIBILITY'=838 +'COLLATION'=839 +'COMPRESS'=840 +'CONCAT'=841 +'CONCAT_WS'=842 +'CONNECTION_ID'=843 +'CONV'=844 +'CONVERT_TZ'=845 +'COS'=846 +'COT'=847 +'CRC32'=848 +'CREATE_ASYMMETRIC_PRIV_KEY'=849 +'CREATE_ASYMMETRIC_PUB_KEY'=850 +'CREATE_DH_PARAMETERS'=851 +'CREATE_DIGEST'=852 +'CROSSES'=853 +'DATEDIFF'=854 +'DATE_FORMAT'=855 +'DAYNAME'=856 +'DAYOFMONTH'=857 +'DAYOFWEEK'=858 +'DAYOFYEAR'=859 +'DECODE'=860 +'DEGREES'=861 +'DES_DECRYPT'=862 +'DES_ENCRYPT'=863 +'DIMENSION'=864 +'DISJOINT'=865 +'ELT'=866 +'ENCODE'=867 +'ENCRYPT'=868 +'ENDPOINT'=869 +'ENGINE_ATTRIBUTE'=870 +'ENVELOPE'=871 +'EQUALS'=872 +'EXP'=873 +'EXPORT_SET'=874 +'EXTERIORRING'=875 +'EXTRACTVALUE'=876 +'FIELD'=877 +'FIND_IN_SET'=878 +'FLOOR'=879 +'FORMAT'=880 +'FOUND_ROWS'=881 +'FROM_BASE64'=882 +'FROM_DAYS'=883 +'FROM_UNIXTIME'=884 +'GEOMCOLLFROMTEXT'=885 +'GEOMCOLLFROMWKB'=886 +'GEOMETRYCOLLECTIONFROMTEXT'=887 +'GEOMETRYCOLLECTIONFROMWKB'=888 +'GEOMETRYFROMTEXT'=889 +'GEOMETRYFROMWKB'=890 +'GEOMETRYN'=891 +'GEOMETRYTYPE'=892 +'GEOMFROMTEXT'=893 +'GEOMFROMWKB'=894 +'GET_FORMAT'=895 +'GET_LOCK'=896 +'GLENGTH'=897 +'GREATEST'=898 +'GTID_SUBSET'=899 +'GTID_SUBTRACT'=900 +'HEX'=901 +'IFNULL'=902 +'INET6_ATON'=903 +'INET6_NTOA'=904 +'INET_ATON'=905 +'INET_NTOA'=906 +'INSTR'=907 +'INTERIORRINGN'=908 +'INTERSECTS'=909 +'ISCLOSED'=910 +'ISEMPTY'=911 +'ISNULL'=912 +'ISSIMPLE'=913 +'IS_FREE_LOCK'=914 +'IS_IPV4'=915 +'IS_IPV4_COMPAT'=916 +'IS_IPV4_MAPPED'=917 +'IS_IPV6'=918 +'IS_USED_LOCK'=919 +'LAST_INSERT_ID'=920 +'LCASE'=921 +'LEAST'=922 +'LENGTH'=923 +'LINEFROMTEXT'=924 +'LINEFROMWKB'=925 +'LINESTRINGFROMTEXT'=926 +'LINESTRINGFROMWKB'=927 +'LN'=928 +'LOAD_FILE'=929 +'LOCATE'=930 +'LOG'=931 +'LOG10'=932 +'LOG2'=933 +'LOWER'=934 +'LPAD'=935 +'LTRIM'=936 +'MAKEDATE'=937 +'MAKETIME'=938 +'MAKE_SET'=939 +'MASTER_POS_WAIT'=940 +'MBRCONTAINS'=941 +'MBRDISJOINT'=942 +'MBREQUAL'=943 +'MBRINTERSECTS'=944 +'MBROVERLAPS'=945 +'MBRTOUCHES'=946 +'MBRWITHIN'=947 +'MD5'=948 +'MLINEFROMTEXT'=949 +'MLINEFROMWKB'=950 +'MONTHNAME'=951 +'MPOINTFROMTEXT'=952 +'MPOINTFROMWKB'=953 +'MPOLYFROMTEXT'=954 +'MPOLYFROMWKB'=955 +'MULTILINESTRINGFROMTEXT'=956 +'MULTILINESTRINGFROMWKB'=957 +'MULTIPOINTFROMTEXT'=958 +'MULTIPOINTFROMWKB'=959 +'MULTIPOLYGONFROMTEXT'=960 +'MULTIPOLYGONFROMWKB'=961 +'NAME_CONST'=962 +'NULLIF'=963 +'NUMGEOMETRIES'=964 +'NUMINTERIORRINGS'=965 +'NUMPOINTS'=966 +'OCT'=967 +'OCTET_LENGTH'=968 +'ORD'=969 +'OVERLAPS'=970 +'PERIOD_ADD'=971 +'PERIOD_DIFF'=972 +'PI'=973 +'POINTFROMTEXT'=974 +'POINTFROMWKB'=975 +'POINTN'=976 +'POLYFROMTEXT'=977 +'POLYFROMWKB'=978 +'POLYGONFROMTEXT'=979 +'POLYGONFROMWKB'=980 +'POW'=981 +'POWER'=982 +'QUOTE'=983 +'RADIANS'=984 +'RAND'=985 +'RANDOM_BYTES'=986 +'RELEASE_LOCK'=987 +'REVERSE'=988 +'ROUND'=989 +'ROW_COUNT'=990 +'RPAD'=991 +'RTRIM'=992 +'SEC_TO_TIME'=993 +'SECONDARY_ENGINE_ATTRIBUTE'=994 +'SESSION_USER'=995 +'SHA'=996 +'SHA1'=997 +'SHA2'=998 +'SCHEMA_NAME'=999 +'SIGN'=1000 +'SIN'=1001 +'SLEEP'=1002 +'SOUNDEX'=1003 +'SQL_THREAD_WAIT_AFTER_GTIDS'=1004 +'SQRT'=1005 +'SRID'=1006 +'STARTPOINT'=1007 +'STRCMP'=1008 +'STR_TO_DATE'=1009 +'ST_AREA'=1010 +'ST_ASBINARY'=1011 +'ST_ASTEXT'=1012 +'ST_ASWKB'=1013 +'ST_ASWKT'=1014 +'ST_BUFFER'=1015 +'ST_CENTROID'=1016 +'ST_CONTAINS'=1017 +'ST_CROSSES'=1018 +'ST_DIFFERENCE'=1019 +'ST_DIMENSION'=1020 +'ST_DISJOINT'=1021 +'ST_DISTANCE'=1022 +'ST_ENDPOINT'=1023 +'ST_ENVELOPE'=1024 +'ST_EQUALS'=1025 +'ST_EXTERIORRING'=1026 +'ST_GEOMCOLLFROMTEXT'=1027 +'ST_GEOMCOLLFROMTXT'=1028 +'ST_GEOMCOLLFROMWKB'=1029 +'ST_GEOMETRYCOLLECTIONFROMTEXT'=1030 +'ST_GEOMETRYCOLLECTIONFROMWKB'=1031 +'ST_GEOMETRYFROMTEXT'=1032 +'ST_GEOMETRYFROMWKB'=1033 +'ST_GEOMETRYN'=1034 +'ST_GEOMETRYTYPE'=1035 +'ST_GEOMFROMTEXT'=1036 +'ST_GEOMFROMWKB'=1037 +'ST_INTERIORRINGN'=1038 +'ST_INTERSECTION'=1039 +'ST_INTERSECTS'=1040 +'ST_ISCLOSED'=1041 +'ST_ISEMPTY'=1042 +'ST_ISSIMPLE'=1043 +'ST_LINEFROMTEXT'=1044 +'ST_LINEFROMWKB'=1045 +'ST_LINESTRINGFROMTEXT'=1046 +'ST_LINESTRINGFROMWKB'=1047 +'ST_NUMGEOMETRIES'=1048 +'ST_NUMINTERIORRING'=1049 +'ST_NUMINTERIORRINGS'=1050 +'ST_NUMPOINTS'=1051 +'ST_OVERLAPS'=1052 +'ST_POINTFROMTEXT'=1053 +'ST_POINTFROMWKB'=1054 +'ST_POINTN'=1055 +'ST_POLYFROMTEXT'=1056 +'ST_POLYFROMWKB'=1057 +'ST_POLYGONFROMTEXT'=1058 +'ST_POLYGONFROMWKB'=1059 +'ST_SRID'=1060 +'ST_STARTPOINT'=1061 +'ST_SYMDIFFERENCE'=1062 +'ST_TOUCHES'=1063 +'ST_UNION'=1064 +'ST_WITHIN'=1065 +'ST_X'=1066 +'ST_Y'=1067 +'SUBDATE'=1068 +'SUBSTRING_INDEX'=1069 +'SUBTIME'=1070 +'SYSTEM_USER'=1071 +'TAN'=1072 +'TIMEDIFF'=1073 +'TIMESTAMPADD'=1074 +'TIMESTAMPDIFF'=1075 +'TIME_FORMAT'=1076 +'TIME_TO_SEC'=1077 +'TOUCHES'=1078 +'TO_BASE64'=1079 +'TO_DAYS'=1080 +'TO_SECONDS'=1081 +'UCASE'=1082 +'UNCOMPRESS'=1083 +'UNCOMPRESSED_LENGTH'=1084 +'UNHEX'=1085 +'UNIX_TIMESTAMP'=1086 +'UPDATEXML'=1087 +'UPPER'=1088 +'UUID'=1089 +'UUID_SHORT'=1090 +'VALIDATE_PASSWORD_STRENGTH'=1091 +'VERSION'=1092 +'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS'=1093 +'WEEKDAY'=1094 +'WEEKOFYEAR'=1095 +'WEIGHT_STRING'=1096 +'WITHIN'=1097 +'YEARWEEK'=1098 +'Y'=1099 +'X'=1100 +':='=1101 +'+='=1102 +'-='=1103 +'*='=1104 +'/='=1105 +'%='=1106 +'&='=1107 +'^='=1108 +'|='=1109 +'*'=1110 +'/'=1111 +'%'=1112 +'+'=1113 +'-'=1114 +'DIV'=1115 +'MOD'=1116 +'='=1117 +'>'=1118 +'<'=1119 +'!'=1120 +'~'=1121 +'|'=1122 +'&'=1123 +'^'=1124 +'.'=1125 +'('=1126 +')'=1127 +','=1128 +';'=1129 +'@'=1130 +'0'=1131 +'1'=1132 +'2'=1133 +'\''=1134 +'"'=1135 +'`'=1136 +':'=1137 diff --git a/internal/mysqld/parser/antlrparser/parser/generate.go b/internal/mysqld/parser/antlrparser/parser/generate.go new file mode 100644 index 0000000000..9da7fbc6ac --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/generate.go @@ -0,0 +1,3 @@ +package parser + +//go:generate ./generate.sh diff --git a/internal/mysqld/parser/antlrparser/parser/generate.sh b/internal/mysqld/parser/antlrparser/parser/generate.sh new file mode 100755 index 0000000000..05d9c4a25c --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/generate.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +alias antlr4='java -Xmx500M -cp "../../../../../tools/antlr/antlr-4.11.1-complete.jar:$CLASSPATH" org.antlr.v4.Tool' +antlr4 -Dlanguage=Go -no-listener -visitor -package parser *.g4 diff --git a/internal/mysqld/parser/antlrparser/parser/mysql_lexer.go b/internal/mysqld/parser/antlrparser/parser/mysql_lexer.go new file mode 100644 index 0000000000..1af800967d --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/mysql_lexer.go @@ -0,0 +1,8213 @@ +// Code generated from java-escape by ANTLR 4.11.1. DO NOT EDIT. + +package parser + +import ( + "fmt" + "sync" + "unicode" + + "github.com/antlr/antlr4/runtime/Go/antlr/v4" +) + +// Suppress unused import error +var _ = fmt.Printf +var _ = sync.Once{} +var _ = unicode.IsLetter + +type MySqlLexer struct { + *antlr.BaseLexer + channelNames []string + modeNames []string + // TODO: EOF string +} + +var mysqllexerLexerStaticData struct { + once sync.Once + serializedATN []int32 + channelNames []string + modeNames []string + literalNames []string + symbolicNames []string + ruleNames []string + predictionContextCache *antlr.PredictionContextCache + atn *antlr.ATN + decisionToDFA []*antlr.DFA +} + +func mysqllexerLexerInit() { + staticData := &mysqllexerLexerStaticData + staticData.channelNames = []string{ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "MYSQLCOMMENT", "ERRORCHANNEL", + } + staticData.modeNames = []string{ + "DEFAULT_MODE", + } + staticData.literalNames = []string{ + "", "", "", "", "", "'ADD'", "'ALL'", "'ALTER'", "'ALWAYS'", "'ANALYZE'", + "'AND'", "'ARRAY'", "'AS'", "'ASC'", "'ATTRIBUTE'", "'BEFORE'", "'BETWEEN'", + "'BOTH'", "'BUCKETS'", "'BY'", "'CALL'", "'CASCADE'", "'CASE'", "'CAST'", + "'CHANGE'", "'CHARACTER'", "'CHECK'", "'COLLATE'", "'COLUMN'", "'CONDITION'", + "'CONSTRAINT'", "'CONTINUE'", "'CONVERT'", "'CREATE'", "'CROSS'", "'CURRENT'", + "'CURRENT_ROLE'", "'CURRENT_USER'", "'CURSOR'", "'DATABASE'", "'DATABASES'", + "'DECLARE'", "'DEFAULT'", "'DELAYED'", "'DELETE'", "'DESC'", "'DESCRIBE'", + "'DETERMINISTIC'", "'DIAGNOSTICS'", "'DISTINCT'", "'DISTINCTROW'", "'DROP'", + "'EACH'", "'ELSE'", "'ELSEIF'", "'EMPTY'", "'ENCLOSED'", "'ESCAPED'", + "'EXCEPT'", "'EXISTS'", "'EXIT'", "'EXPLAIN'", "'FALSE'", "'FETCH'", + "'FOR'", "'FORCE'", "'FOREIGN'", "'FROM'", "'FULLTEXT'", "'GENERATED'", + "'GET'", "'GRANT'", "'GROUP'", "'HAVING'", "'HIGH_PRIORITY'", "'HISTOGRAM'", + "'IF'", "'IGNORE'", "'IGNORED'", "'IN'", "'INDEX'", "'INFILE'", "'INNER'", + "'INOUT'", "'INSERT'", "'INTERVAL'", "'INTO'", "'IS'", "'ITERATE'", + "'JOIN'", "'KEY'", "'KEYS'", "'KILL'", "'LATERAL'", "'LEADING'", "'LEAVE'", + "'LEFT'", "'LIKE'", "'LIMIT'", "'LINEAR'", "'LINES'", "'LOAD'", "'LOCK'", + "'LOCKED'", "'LOOP'", "'LOW_PRIORITY'", "'MASTER_BIND'", "'MASTER_SSL_VERIFY_SERVER_CERT'", + "'MATCH'", "'MAXVALUE'", "'MINVALUE'", "'MODIFIES'", "'NATURAL'", "'NOT'", + "'NO_WRITE_TO_BINLOG'", "'NULL'", "'NUMBER'", "'ON'", "'OPTIMIZE'", + "'OPTION'", "'OPTIONAL'", "'OPTIONALLY'", "'OR'", "'ORDER'", "'OUT'", + "'OUTER'", "'OUTFILE'", "'OVER'", "'PARTITION'", "'PRIMARY'", "'PROCEDURE'", + "'PURGE'", "'RANGE'", "'READ'", "'READS'", "'REFERENCES'", "'REGEXP'", + "'RELEASE'", "'RENAME'", "'REPEAT'", "'REPLACE'", "'REQUIRE'", "'RESIGNAL'", + "'RESTRICT'", "'RETAIN'", "'RETURN'", "'REVOKE'", "'RIGHT'", "'RLIKE'", + "'SCHEMA'", "'SCHEMAS'", "'SELECT'", "'SET'", "'SEPARATOR'", "'SHOW'", + "'SIGNAL'", "'SKIP'", "'SPATIAL'", "'SQL'", "'SQLEXCEPTION'", "'SQLSTATE'", + "'SQLWARNING'", "'SQL_BIG_RESULT'", "'SQL_CALC_FOUND_ROWS'", "'SQL_SMALL_RESULT'", + "'SSL'", "'STACKED'", "'STARTING'", "'STATEMENT'", "'STRAIGHT_JOIN'", + "'TABLE'", "'TERMINATED'", "'THEN'", "'TO'", "'TRAILING'", "'TRIGGER'", + "'TRUE'", "'UNDO'", "'UNION'", "'UNIQUE'", "'UNLOCK'", "'UNSIGNED'", + "'UPDATE'", "'USAGE'", "'USE'", "'USING'", "'VALUES'", "'WHEN'", "'WHERE'", + "'WHILE'", "'WITH'", "'WRITE'", "'XOR'", "'ZEROFILL'", "'TINYINT'", + "'SMALLINT'", "'MEDIUMINT'", "'MIDDLEINT'", "'INT'", "'INT1'", "'INT2'", + "'INT3'", "'INT4'", "'INT8'", "'INTEGER'", "'BIGINT'", "'REAL'", "'DOUBLE'", + "'PRECISION'", "'FLOAT'", "'FLOAT4'", "'FLOAT8'", "'DECIMAL'", "'DEC'", + "'NUMERIC'", "'DATE'", "'TIME'", "'TIMESTAMP'", "'DATETIME'", "'YEAR'", + "'CHAR'", "'VARCHAR'", "'NVARCHAR'", "'NATIONAL'", "'BINARY'", "'VARBINARY'", + "'TINYBLOB'", "'BLOB'", "'MEDIUMBLOB'", "'LONG'", "'LONGBLOB'", "'TINYTEXT'", + "'TEXT'", "'MEDIUMTEXT'", "'LONGTEXT'", "'ENUM'", "'VARYING'", "'SERIAL'", + "'YEAR_MONTH'", "'DAY_HOUR'", "'DAY_MINUTE'", "'DAY_SECOND'", "'HOUR_MINUTE'", + "'HOUR_SECOND'", "'MINUTE_SECOND'", "'SECOND_MICROSECOND'", "'MINUTE_MICROSECOND'", + "'HOUR_MICROSECOND'", "'DAY_MICROSECOND'", "'JSON_ARRAY'", "'JSON_ARRAYAGG'", + "'JSON_ARRAY_APPEND'", "'JSON_ARRAY_INSERT'", "'JSON_CONTAINS'", "'JSON_CONTAINS_PATH'", + "'JSON_DEPTH'", "'JSON_EXTRACT'", "'JSON_INSERT'", "'JSON_KEYS'", "'JSON_LENGTH'", + "'JSON_MERGE'", "'JSON_MERGE_PATCH'", "'JSON_MERGE_PRESERVE'", "'JSON_OBJECT'", + "'JSON_OBJECTAGG'", "'JSON_OVERLAPS'", "'JSON_PRETTY'", "'JSON_QUOTE'", + "'JSON_REMOVE'", "'JSON_REPLACE'", "'JSON_SCHEMA_VALID'", "'JSON_SCHEMA_VALIDATION_REPORT'", + "'JSON_SEARCH'", "'JSON_SET'", "'JSON_STORAGE_FREE'", "'JSON_STORAGE_SIZE'", + "'JSON_TABLE'", "'JSON_TYPE'", "'JSON_UNQUOTE'", "'JSON_VALID'", "'JSON_VALUE'", + "'NESTED'", "'ORDINALITY'", "'PATH'", "'AVG'", "'BIT_AND'", "'BIT_OR'", + "'BIT_XOR'", "'COUNT'", "'CUME_DIST'", "'DENSE_RANK'", "'FIRST_VALUE'", + "'GROUP_CONCAT'", "'LAG'", "'LAST_VALUE'", "'LEAD'", "'MAX'", "'MIN'", + "'NTILE'", "'NTH_VALUE'", "'PERCENT_RANK'", "'RANK'", "'ROW_NUMBER'", + "'STD'", "'STDDEV'", "'STDDEV_POP'", "'STDDEV_SAMP'", "'SUM'", "'VAR_POP'", + "'VAR_SAMP'", "'VARIANCE'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", + "'LOCALTIME'", "'CURDATE'", "'CURTIME'", "'DATE_ADD'", "'DATE_SUB'", + "'EXTRACT'", "'LOCALTIMESTAMP'", "'NOW'", "'POSITION'", "'SUBSTR'", + "'SUBSTRING'", "'SYSDATE'", "'TRIM'", "'UTC_DATE'", "'UTC_TIME'", "'UTC_TIMESTAMP'", + "'ACCOUNT'", "'ACTION'", "'AFTER'", "'AGGREGATE'", "'ALGORITHM'", "'ANY'", + "'AT'", "'AUTHORS'", "'AUTOCOMMIT'", "'AUTOEXTEND_SIZE'", "'AUTO_INCREMENT'", + "'AVG_ROW_LENGTH'", "'BEGIN'", "'BINLOG'", "'BIT'", "'BLOCK'", "'BOOL'", + "'BOOLEAN'", "'BTREE'", "'CACHE'", "'CASCADED'", "'CHAIN'", "'CHANGED'", + "'CHANNEL'", "'CHECKSUM'", "'PAGE_CHECKSUM'", "'CIPHER'", "'CLASS_ORIGIN'", + "'CLIENT'", "'CLOSE'", "'CLUSTERING'", "'COALESCE'", "'CODE'", "'COLUMNS'", + "'COLUMN_FORMAT'", "'COLUMN_NAME'", "'COMMENT'", "'COMMIT'", "'COMPACT'", + "'COMPLETION'", "'COMPRESSED'", "", "'CONCURRENT'", "'CONNECT'", "'CONNECTION'", + "'CONSISTENT'", "'CONSTRAINT_CATALOG'", "'CONSTRAINT_SCHEMA'", "'CONSTRAINT_NAME'", + "'CONTAINS'", "'CONTEXT'", "'CONTRIBUTORS'", "'COPY'", "'CPU'", "'CYCLE'", + "'CURSOR_NAME'", "'DATA'", "'DATAFILE'", "'DEALLOCATE'", "'DEFAULT_AUTH'", + "'DEFINER'", "'DELAY_KEY_WRITE'", "'DES_KEY_FILE'", "'DIRECTORY'", "'DISABLE'", + "'DISCARD'", "'DISK'", "'DO'", "'DUMPFILE'", "'DUPLICATE'", "'DYNAMIC'", + "'ENABLE'", "'ENCRYPTED'", "'ENCRYPTION'", "'ENCRYPTION_KEY_ID'", "'END'", + "'ENDS'", "'ENGINE'", "'ENGINES'", "'ERROR'", "'ERRORS'", "'ESCAPE'", + "'EVEN'", "'EVENT'", "'EVENTS'", "'EVERY'", "'EXCHANGE'", "'EXCLUSIVE'", + "'EXPIRE'", "'EXPORT'", "'EXTENDED'", "'EXTENT_SIZE'", "'FAILED_LOGIN_ATTEMPTS'", + "'FAST'", "'FAULTS'", "'FIELDS'", "'FILE_BLOCK_SIZE'", "'FILTER'", "'FIRST'", + "'FIXED'", "'FLUSH'", "'FOLLOWING'", "'FOLLOWS'", "'FOUND'", "'FULL'", + "'FUNCTION'", "'GENERAL'", "'GLOBAL'", "'GRANTS'", "'GROUP_REPLICATION'", + "'HANDLER'", "'HASH'", "'HELP'", "'HISTORY'", "'HOST'", "'HOSTS'", "'IDENTIFIED'", + "'IGNORE_SERVER_IDS'", "'IMPORT'", "'INCREMENT'", "'INDEXES'", "'INITIAL_SIZE'", + "'INPLACE'", "'INSERT_METHOD'", "'INSTALL'", "'INSTANCE'", "'INSTANT'", + "'INVISIBLE'", "'INVOKER'", "'IO'", "'IO_THREAD'", "'IPC'", "'ISOLATION'", + "'ISSUER'", "'JSON'", "'KEY_BLOCK_SIZE'", "'LANGUAGE'", "'LAST'", "'LEAVES'", + "'LESS'", "'LEVEL'", "'LIST'", "'LOCAL'", "'LOGFILE'", "'LOGS'", "'MASTER'", + "'MASTER_AUTO_POSITION'", "'MASTER_CONNECT_RETRY'", "'MASTER_DELAY'", + "'MASTER_HEARTBEAT_PERIOD'", "'MASTER_HOST'", "'MASTER_LOG_FILE'", "'MASTER_LOG_POS'", + "'MASTER_PASSWORD'", "'MASTER_PORT'", "'MASTER_RETRY_COUNT'", "'MASTER_SSL'", + "'MASTER_SSL_CA'", "'MASTER_SSL_CAPATH'", "'MASTER_SSL_CERT'", "'MASTER_SSL_CIPHER'", + "'MASTER_SSL_CRL'", "'MASTER_SSL_CRLPATH'", "'MASTER_SSL_KEY'", "'MASTER_TLS_VERSION'", + "'MASTER_USER'", "'MAX_CONNECTIONS_PER_HOUR'", "'MAX_QUERIES_PER_HOUR'", + "'MAX_ROWS'", "'MAX_SIZE'", "'MAX_UPDATES_PER_HOUR'", "'MAX_USER_CONNECTIONS'", + "'MEDIUM'", "'MEMBER'", "'MERGE'", "'MESSAGE_TEXT'", "'MID'", "'MIGRATE'", + "'MIN_ROWS'", "'MODE'", "'MODIFY'", "'MUTEX'", "'MYSQL'", "'MYSQL_ERRNO'", + "'NAME'", "'NAMES'", "'NCHAR'", "'NEVER'", "'NEXT'", "'NO'", "'NOCACHE'", + "'NOCOPY'", "'NOCYCLE'", "'NOMAXVALUE'", "'NOMINVALUE'", "'NOWAIT'", + "'NODEGROUP'", "'NONE'", "'ODBC'", "'OFFLINE'", "'OFFSET'", "'OF'", + "'OJ'", "'OLD_PASSWORD'", "'ONE'", "'ONLINE'", "'ONLY'", "'OPEN'", "'OPTIMIZER_COSTS'", + "'OPTIONS'", "'OWNER'", "'PACK_KEYS'", "'PAGE'", "'PAGE_COMPRESSED'", + "'PAGE_COMPRESSION_LEVEL'", "'PARSER'", "'PARTIAL'", "'PARTITIONING'", + "'PARTITIONS'", "'PASSWORD'", "'PASSWORD_LOCK_TIME'", "'PHASE'", "'PLUGIN'", + "'PLUGIN_DIR'", "'PLUGINS'", "'PORT'", "'PRECEDES'", "'PRECEDING'", + "'PREPARE'", "'PRESERVE'", "'PREV'", "'PROCESSLIST'", "'PROFILE'", "'PROFILES'", + "'PROXY'", "'QUERY'", "'QUICK'", "'REBUILD'", "'RECOVER'", "'RECURSIVE'", + "'REDO_BUFFER_SIZE'", "'REDUNDANT'", "'RELAY'", "'RELAY_LOG_FILE'", + "'RELAY_LOG_POS'", "'RELAYLOG'", "'REMOVE'", "'REORGANIZE'", "'REPAIR'", + "'REPLICATE_DO_DB'", "'REPLICATE_DO_TABLE'", "'REPLICATE_IGNORE_DB'", + "'REPLICATE_IGNORE_TABLE'", "'REPLICATE_REWRITE_DB'", "'REPLICATE_WILD_DO_TABLE'", + "'REPLICATE_WILD_IGNORE_TABLE'", "'REPLICATION'", "'RESET'", "'RESTART'", + "'RESUME'", "'RETURNED_SQLSTATE'", "'RETURNING'", "'RETURNS'", "'REUSE'", + "'ROLE'", "'ROLLBACK'", "'ROLLUP'", "'ROTATE'", "'ROW'", "'ROWS'", "'ROW_FORMAT'", + "'RTREE'", "'SAVEPOINT'", "'SCHEDULE'", "'SECURITY'", "'SEQUENCE'", + "'SERVER'", "'SESSION'", "'SHARE'", "'SHARED'", "'SIGNED'", "'SIMPLE'", + "'SLAVE'", "'SLOW'", "'SNAPSHOT'", "'SOCKET'", "'SOME'", "'SONAME'", + "'SOUNDS'", "'SOURCE'", "'SQL_AFTER_GTIDS'", "'SQL_AFTER_MTS_GAPS'", + "'SQL_BEFORE_GTIDS'", "'SQL_BUFFER_RESULT'", "'SQL_CACHE'", "'SQL_NO_CACHE'", + "'SQL_THREAD'", "'START'", "'STARTS'", "'STATS_AUTO_RECALC'", "'STATS_PERSISTENT'", + "'STATS_SAMPLE_PAGES'", "'STATUS'", "'STOP'", "'STORAGE'", "'STORED'", + "'STRING'", "'SUBCLASS_ORIGIN'", "'SUBJECT'", "'SUBPARTITION'", "'SUBPARTITIONS'", + "'SUSPEND'", "'SWAPS'", "'SWITCHES'", "'TABLE_NAME'", "'TABLESPACE'", + "'TABLE_TYPE'", "'TEMPORARY'", "'TEMPTABLE'", "'THAN'", "'TRADITIONAL'", + "'TRANSACTION'", "'TRANSACTIONAL'", "'TRIGGERS'", "'TRUNCATE'", "'UNBOUNDED'", + "'UNDEFINED'", "'UNDOFILE'", "'UNDO_BUFFER_SIZE'", "'UNINSTALL'", "'UNKNOWN'", + "'UNTIL'", "'UPGRADE'", "'USER'", "'USE_FRM'", "'USER_RESOURCES'", "'VALIDATION'", + "'VALUE'", "'VARIABLES'", "'VIEW'", "'VIRTUAL'", "'VISIBLE'", "'WAIT'", + "'WARNINGS'", "'WINDOW'", "'WITHOUT'", "'WORK'", "'WRAPPER'", "'X509'", + "'XA'", "'XML'", "'YES'", "'EUR'", "'USA'", "'JIS'", "'ISO'", "'INTERNAL'", + "'QUARTER'", "'MONTH'", "'DAY'", "'HOUR'", "'MINUTE'", "'WEEK'", "'SECOND'", + "'MICROSECOND'", "'ADMIN'", "'APPLICATION_PASSWORD_ADMIN'", "'AUDIT_ADMIN'", + "'BACKUP_ADMIN'", "'BINLOG_ADMIN'", "'BINLOG_ENCRYPTION_ADMIN'", "'CLONE_ADMIN'", + "'CONNECTION_ADMIN'", "'ENCRYPTION_KEY_ADMIN'", "'EXECUTE'", "'FILE'", + "'FIREWALL_ADMIN'", "'FIREWALL_USER'", "'FLUSH_OPTIMIZER_COSTS'", "'FLUSH_STATUS'", + "'FLUSH_TABLES'", "'FLUSH_USER_RESOURCES'", "'GROUP_REPLICATION_ADMIN'", + "'INNODB_REDO_LOG_ARCHIVE'", "'INNODB_REDO_LOG_ENABLE'", "'INVOKE'", + "'LAMBDA'", "'NDB_STORED_USER'", "'PASSWORDLESS_USER_ADMIN'", "'PERSIST_RO_VARIABLES_ADMIN'", + "'PRIVILEGES'", "'PROCESS'", "'RELOAD'", "'REPLICATION_APPLIER'", "'REPLICATION_SLAVE_ADMIN'", + "'RESOURCE_GROUP_ADMIN'", "'RESOURCE_GROUP_USER'", "'ROLE_ADMIN'", "'ROUTINE'", + "'S3'", "'SERVICE_CONNECTION_ADMIN'", "", "'SET_USER_ID'", "'SHOW_ROUTINE'", + "'SHUTDOWN'", "'SUPER'", "'SYSTEM_VARIABLES_ADMIN'", "'TABLES'", "'TABLE_ENCRYPTION_ADMIN'", + "'VERSION_TOKEN_ADMIN'", "'XA_RECOVER_ADMIN'", "'ARMSCII8'", "'ASCII'", + "'BIG5'", "'CP1250'", "'CP1251'", "'CP1256'", "'CP1257'", "'CP850'", + "'CP852'", "'CP866'", "'CP932'", "'DEC8'", "'EUCJPMS'", "'EUCKR'", "'GB18030'", + "'GB2312'", "'GBK'", "'GEOSTD8'", "'GREEK'", "'HEBREW'", "'HP8'", "'KEYBCS2'", + "'KOI8R'", "'KOI8U'", "'LATIN1'", "'LATIN2'", "'LATIN5'", "'LATIN7'", + "'MACCE'", "'MACROMAN'", "'SJIS'", "'SWE7'", "'TIS620'", "'UCS2'", "'UJIS'", + "'UTF16'", "'UTF16LE'", "'UTF32'", "'UTF8'", "'UTF8MB3'", "'UTF8MB4'", + "'ARCHIVE'", "'BLACKHOLE'", "'CSV'", "'FEDERATED'", "'INNODB'", "'MEMORY'", + "'MRG_MYISAM'", "'MYISAM'", "'NDB'", "'NDBCLUSTER'", "'PERFORMANCE_SCHEMA'", + "'TOKUDB'", "'REPEATABLE'", "'COMMITTED'", "'UNCOMMITTED'", "'SERIALIZABLE'", + "'GEOMETRYCOLLECTION'", "'GEOMCOLLECTION'", "'GEOMETRY'", "'LINESTRING'", + "'MULTILINESTRING'", "'MULTIPOINT'", "'MULTIPOLYGON'", "'POINT'", "'POLYGON'", + "'ABS'", "'ACOS'", "'ADDDATE'", "'ADDTIME'", "'AES_DECRYPT'", "'AES_ENCRYPT'", + "'AREA'", "'ASBINARY'", "'ASIN'", "'ASTEXT'", "'ASWKB'", "'ASWKT'", + "'ASYMMETRIC_DECRYPT'", "'ASYMMETRIC_DERIVE'", "'ASYMMETRIC_ENCRYPT'", + "'ASYMMETRIC_SIGN'", "'ASYMMETRIC_VERIFY'", "'ATAN'", "'ATAN2'", "'BENCHMARK'", + "'BIN'", "'BIT_COUNT'", "'BIT_LENGTH'", "'BUFFER'", "'CATALOG_NAME'", + "'CEIL'", "'CEILING'", "'CENTROID'", "'CHARACTER_LENGTH'", "'CHARSET'", + "'CHAR_LENGTH'", "'COERCIBILITY'", "'COLLATION'", "'COMPRESS'", "'CONCAT'", + "'CONCAT_WS'", "'CONNECTION_ID'", "'CONV'", "'CONVERT_TZ'", "'COS'", + "'COT'", "'CRC32'", "'CREATE_ASYMMETRIC_PRIV_KEY'", "'CREATE_ASYMMETRIC_PUB_KEY'", + "'CREATE_DH_PARAMETERS'", "'CREATE_DIGEST'", "'CROSSES'", "'DATEDIFF'", + "'DATE_FORMAT'", "'DAYNAME'", "'DAYOFMONTH'", "'DAYOFWEEK'", "'DAYOFYEAR'", + "'DECODE'", "'DEGREES'", "'DES_DECRYPT'", "'DES_ENCRYPT'", "'DIMENSION'", + "'DISJOINT'", "'ELT'", "'ENCODE'", "'ENCRYPT'", "'ENDPOINT'", "'ENGINE_ATTRIBUTE'", + "'ENVELOPE'", "'EQUALS'", "'EXP'", "'EXPORT_SET'", "'EXTERIORRING'", + "'EXTRACTVALUE'", "'FIELD'", "'FIND_IN_SET'", "'FLOOR'", "'FORMAT'", + "'FOUND_ROWS'", "'FROM_BASE64'", "'FROM_DAYS'", "'FROM_UNIXTIME'", "'GEOMCOLLFROMTEXT'", + "'GEOMCOLLFROMWKB'", "'GEOMETRYCOLLECTIONFROMTEXT'", "'GEOMETRYCOLLECTIONFROMWKB'", + "'GEOMETRYFROMTEXT'", "'GEOMETRYFROMWKB'", "'GEOMETRYN'", "'GEOMETRYTYPE'", + "'GEOMFROMTEXT'", "'GEOMFROMWKB'", "'GET_FORMAT'", "'GET_LOCK'", "'GLENGTH'", + "'GREATEST'", "'GTID_SUBSET'", "'GTID_SUBTRACT'", "'HEX'", "'IFNULL'", + "'INET6_ATON'", "'INET6_NTOA'", "'INET_ATON'", "'INET_NTOA'", "'INSTR'", + "'INTERIORRINGN'", "'INTERSECTS'", "'ISCLOSED'", "'ISEMPTY'", "'ISNULL'", + "'ISSIMPLE'", "'IS_FREE_LOCK'", "'IS_IPV4'", "'IS_IPV4_COMPAT'", "'IS_IPV4_MAPPED'", + "'IS_IPV6'", "'IS_USED_LOCK'", "'LAST_INSERT_ID'", "'LCASE'", "'LEAST'", + "'LENGTH'", "'LINEFROMTEXT'", "'LINEFROMWKB'", "'LINESTRINGFROMTEXT'", + "'LINESTRINGFROMWKB'", "'LN'", "'LOAD_FILE'", "'LOCATE'", "'LOG'", "'LOG10'", + "'LOG2'", "'LOWER'", "'LPAD'", "'LTRIM'", "'MAKEDATE'", "'MAKETIME'", + "'MAKE_SET'", "'MASTER_POS_WAIT'", "'MBRCONTAINS'", "'MBRDISJOINT'", + "'MBREQUAL'", "'MBRINTERSECTS'", "'MBROVERLAPS'", "'MBRTOUCHES'", "'MBRWITHIN'", + "'MD5'", "'MLINEFROMTEXT'", "'MLINEFROMWKB'", "'MONTHNAME'", "'MPOINTFROMTEXT'", + "'MPOINTFROMWKB'", "'MPOLYFROMTEXT'", "'MPOLYFROMWKB'", "'MULTILINESTRINGFROMTEXT'", + "'MULTILINESTRINGFROMWKB'", "'MULTIPOINTFROMTEXT'", "'MULTIPOINTFROMWKB'", + "'MULTIPOLYGONFROMTEXT'", "'MULTIPOLYGONFROMWKB'", "'NAME_CONST'", "'NULLIF'", + "'NUMGEOMETRIES'", "'NUMINTERIORRINGS'", "'NUMPOINTS'", "'OCT'", "'OCTET_LENGTH'", + "'ORD'", "'OVERLAPS'", "'PERIOD_ADD'", "'PERIOD_DIFF'", "'PI'", "'POINTFROMTEXT'", + "'POINTFROMWKB'", "'POINTN'", "'POLYFROMTEXT'", "'POLYFROMWKB'", "'POLYGONFROMTEXT'", + "'POLYGONFROMWKB'", "'POW'", "'POWER'", "'QUOTE'", "'RADIANS'", "'RAND'", + "'RANDOM_BYTES'", "'RELEASE_LOCK'", "'REVERSE'", "'ROUND'", "'ROW_COUNT'", + "'RPAD'", "'RTRIM'", "'SEC_TO_TIME'", "'SECONDARY_ENGINE_ATTRIBUTE'", + "'SESSION_USER'", "'SHA'", "'SHA1'", "'SHA2'", "'SCHEMA_NAME'", "'SIGN'", + "'SIN'", "'SLEEP'", "'SOUNDEX'", "'SQL_THREAD_WAIT_AFTER_GTIDS'", "'SQRT'", + "'SRID'", "'STARTPOINT'", "'STRCMP'", "'STR_TO_DATE'", "'ST_AREA'", + "'ST_ASBINARY'", "'ST_ASTEXT'", "'ST_ASWKB'", "'ST_ASWKT'", "'ST_BUFFER'", + "'ST_CENTROID'", "'ST_CONTAINS'", "'ST_CROSSES'", "'ST_DIFFERENCE'", + "'ST_DIMENSION'", "'ST_DISJOINT'", "'ST_DISTANCE'", "'ST_ENDPOINT'", + "'ST_ENVELOPE'", "'ST_EQUALS'", "'ST_EXTERIORRING'", "'ST_GEOMCOLLFROMTEXT'", + "'ST_GEOMCOLLFROMTXT'", "'ST_GEOMCOLLFROMWKB'", "'ST_GEOMETRYCOLLECTIONFROMTEXT'", + "'ST_GEOMETRYCOLLECTIONFROMWKB'", "'ST_GEOMETRYFROMTEXT'", "'ST_GEOMETRYFROMWKB'", + "'ST_GEOMETRYN'", "'ST_GEOMETRYTYPE'", "'ST_GEOMFROMTEXT'", "'ST_GEOMFROMWKB'", + "'ST_INTERIORRINGN'", "'ST_INTERSECTION'", "'ST_INTERSECTS'", "'ST_ISCLOSED'", + "'ST_ISEMPTY'", "'ST_ISSIMPLE'", "'ST_LINEFROMTEXT'", "'ST_LINEFROMWKB'", + "'ST_LINESTRINGFROMTEXT'", "'ST_LINESTRINGFROMWKB'", "'ST_NUMGEOMETRIES'", + "'ST_NUMINTERIORRING'", "'ST_NUMINTERIORRINGS'", "'ST_NUMPOINTS'", "'ST_OVERLAPS'", + "'ST_POINTFROMTEXT'", "'ST_POINTFROMWKB'", "'ST_POINTN'", "'ST_POLYFROMTEXT'", + "'ST_POLYFROMWKB'", "'ST_POLYGONFROMTEXT'", "'ST_POLYGONFROMWKB'", "'ST_SRID'", + "'ST_STARTPOINT'", "'ST_SYMDIFFERENCE'", "'ST_TOUCHES'", "'ST_UNION'", + "'ST_WITHIN'", "'ST_X'", "'ST_Y'", "'SUBDATE'", "'SUBSTRING_INDEX'", + "'SUBTIME'", "'SYSTEM_USER'", "'TAN'", "'TIMEDIFF'", "'TIMESTAMPADD'", + "'TIMESTAMPDIFF'", "'TIME_FORMAT'", "'TIME_TO_SEC'", "'TOUCHES'", "'TO_BASE64'", + "'TO_DAYS'", "'TO_SECONDS'", "'UCASE'", "'UNCOMPRESS'", "'UNCOMPRESSED_LENGTH'", + "'UNHEX'", "'UNIX_TIMESTAMP'", "'UPDATEXML'", "'UPPER'", "'UUID'", "'UUID_SHORT'", + "'VALIDATE_PASSWORD_STRENGTH'", "'VERSION'", "'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS'", + "'WEEKDAY'", "'WEEKOFYEAR'", "'WEIGHT_STRING'", "'WITHIN'", "'YEARWEEK'", + "'Y'", "'X'", "':='", "'+='", "'-='", "'*='", "'/='", "'%='", "'&='", + "'^='", "'|='", "'*'", "'/'", "'%'", "'+'", "'-'", "'DIV'", "'MOD'", + "'='", "'>'", "'<'", "'!'", "'~'", "'|'", "'&'", "'^'", "'.'", "'('", + "')'", "','", "';'", "'@'", "'0'", "'1'", "'2'", "'''", "'\"'", "'`'", + "':'", + } + staticData.symbolicNames = []string{ + "", "SPACE", "SPEC_MYSQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", + "ADD", "ALL", "ALTER", "ALWAYS", "ANALYZE", "AND", "ARRAY", "AS", "ASC", + "ATTRIBUTE", "BEFORE", "BETWEEN", "BOTH", "BUCKETS", "BY", "CALL", "CASCADE", + "CASE", "CAST", "CHANGE", "CHARACTER", "CHECK", "COLLATE", "COLUMN", + "CONDITION", "CONSTRAINT", "CONTINUE", "CONVERT", "CREATE", "CROSS", + "CURRENT", "CURRENT_ROLE", "CURRENT_USER", "CURSOR", "DATABASE", "DATABASES", + "DECLARE", "DEFAULT", "DELAYED", "DELETE", "DESC", "DESCRIBE", "DETERMINISTIC", + "DIAGNOSTICS", "DISTINCT", "DISTINCTROW", "DROP", "EACH", "ELSE", "ELSEIF", + "EMPTY", "ENCLOSED", "ESCAPED", "EXCEPT", "EXISTS", "EXIT", "EXPLAIN", + "FALSE", "FETCH", "FOR", "FORCE", "FOREIGN", "FROM", "FULLTEXT", "GENERATED", + "GET", "GRANT", "GROUP", "HAVING", "HIGH_PRIORITY", "HISTOGRAM", "IF", + "IGNORE", "IGNORED", "IN", "INDEX", "INFILE", "INNER", "INOUT", "INSERT", + "INTERVAL", "INTO", "IS", "ITERATE", "JOIN", "KEY", "KEYS", "KILL", + "LATERAL", "LEADING", "LEAVE", "LEFT", "LIKE", "LIMIT", "LINEAR", "LINES", + "LOAD", "LOCK", "LOCKED", "LOOP", "LOW_PRIORITY", "MASTER_BIND", "MASTER_SSL_VERIFY_SERVER_CERT", + "MATCH", "MAXVALUE", "MINVALUE", "MODIFIES", "NATURAL", "NOT", "NO_WRITE_TO_BINLOG", + "NULL_LITERAL", "NUMBER", "ON", "OPTIMIZE", "OPTION", "OPTIONAL", "OPTIONALLY", + "OR", "ORDER", "OUT", "OUTER", "OUTFILE", "OVER", "PARTITION", "PRIMARY", + "PROCEDURE", "PURGE", "RANGE", "READ", "READS", "REFERENCES", "REGEXP", + "RELEASE", "RENAME", "REPEAT", "REPLACE", "REQUIRE", "RESIGNAL", "RESTRICT", + "RETAIN", "RETURN", "REVOKE", "RIGHT", "RLIKE", "SCHEMA", "SCHEMAS", + "SELECT", "SET", "SEPARATOR", "SHOW", "SIGNAL", "SKIP_", "SPATIAL", + "SQL", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", "SQL_BIG_RESULT", "SQL_CALC_FOUND_ROWS", + "SQL_SMALL_RESULT", "SSL", "STACKED", "STARTING", "STATEMENT", "STRAIGHT_JOIN", + "TABLE", "TERMINATED", "THEN", "TO", "TRAILING", "TRIGGER", "TRUE", + "UNDO", "UNION", "UNIQUE", "UNLOCK", "UNSIGNED", "UPDATE", "USAGE", + "USE", "USING", "VALUES", "WHEN", "WHERE", "WHILE", "WITH", "WRITE", + "XOR", "ZEROFILL", "TINYINT", "SMALLINT", "MEDIUMINT", "MIDDLEINT", + "INT", "INT1", "INT2", "INT3", "INT4", "INT8", "INTEGER", "BIGINT", + "REAL", "DOUBLE", "PRECISION", "FLOAT", "FLOAT4", "FLOAT8", "DECIMAL", + "DEC", "NUMERIC", "DATE", "TIME", "TIMESTAMP", "DATETIME", "YEAR", "CHAR", + "VARCHAR", "NVARCHAR", "NATIONAL", "BINARY", "VARBINARY", "TINYBLOB", + "BLOB", "MEDIUMBLOB", "LONG", "LONGBLOB", "TINYTEXT", "TEXT", "MEDIUMTEXT", + "LONGTEXT", "ENUM", "VARYING", "SERIAL", "YEAR_MONTH", "DAY_HOUR", "DAY_MINUTE", + "DAY_SECOND", "HOUR_MINUTE", "HOUR_SECOND", "MINUTE_SECOND", "SECOND_MICROSECOND", + "MINUTE_MICROSECOND", "HOUR_MICROSECOND", "DAY_MICROSECOND", "JSON_ARRAY", + "JSON_ARRAYAGG", "JSON_ARRAY_APPEND", "JSON_ARRAY_INSERT", "JSON_CONTAINS", + "JSON_CONTAINS_PATH", "JSON_DEPTH", "JSON_EXTRACT", "JSON_INSERT", "JSON_KEYS", + "JSON_LENGTH", "JSON_MERGE", "JSON_MERGE_PATCH", "JSON_MERGE_PRESERVE", + "JSON_OBJECT", "JSON_OBJECTAGG", "JSON_OVERLAPS", "JSON_PRETTY", "JSON_QUOTE", + "JSON_REMOVE", "JSON_REPLACE", "JSON_SCHEMA_VALID", "JSON_SCHEMA_VALIDATION_REPORT", + "JSON_SEARCH", "JSON_SET", "JSON_STORAGE_FREE", "JSON_STORAGE_SIZE", + "JSON_TABLE", "JSON_TYPE", "JSON_UNQUOTE", "JSON_VALID", "JSON_VALUE", + "NESTED", "ORDINALITY", "PATH", "AVG", "BIT_AND", "BIT_OR", "BIT_XOR", + "COUNT", "CUME_DIST", "DENSE_RANK", "FIRST_VALUE", "GROUP_CONCAT", "LAG", + "LAST_VALUE", "LEAD", "MAX", "MIN", "NTILE", "NTH_VALUE", "PERCENT_RANK", + "RANK", "ROW_NUMBER", "STD", "STDDEV", "STDDEV_POP", "STDDEV_SAMP", + "SUM", "VAR_POP", "VAR_SAMP", "VARIANCE", "CURRENT_DATE", "CURRENT_TIME", + "CURRENT_TIMESTAMP", "LOCALTIME", "CURDATE", "CURTIME", "DATE_ADD", + "DATE_SUB", "EXTRACT", "LOCALTIMESTAMP", "NOW", "POSITION", "SUBSTR", + "SUBSTRING", "SYSDATE", "TRIM", "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", + "ACCOUNT", "ACTION", "AFTER", "AGGREGATE", "ALGORITHM", "ANY", "AT", + "AUTHORS", "AUTOCOMMIT", "AUTOEXTEND_SIZE", "AUTO_INCREMENT", "AVG_ROW_LENGTH", + "BEGIN", "BINLOG", "BIT", "BLOCK", "BOOL", "BOOLEAN", "BTREE", "CACHE", + "CASCADED", "CHAIN", "CHANGED", "CHANNEL", "CHECKSUM", "PAGE_CHECKSUM", + "CIPHER", "CLASS_ORIGIN", "CLIENT", "CLOSE", "CLUSTERING", "COALESCE", + "CODE", "COLUMNS", "COLUMN_FORMAT", "COLUMN_NAME", "COMMENT", "COMMIT", + "COMPACT", "COMPLETION", "COMPRESSED", "COMPRESSION", "CONCURRENT", + "CONNECT", "CONNECTION", "CONSISTENT", "CONSTRAINT_CATALOG", "CONSTRAINT_SCHEMA", + "CONSTRAINT_NAME", "CONTAINS", "CONTEXT", "CONTRIBUTORS", "COPY", "CPU", + "CYCLE", "CURSOR_NAME", "DATA", "DATAFILE", "DEALLOCATE", "DEFAULT_AUTH", + "DEFINER", "DELAY_KEY_WRITE", "DES_KEY_FILE", "DIRECTORY", "DISABLE", + "DISCARD", "DISK", "DO", "DUMPFILE", "DUPLICATE", "DYNAMIC", "ENABLE", + "ENCRYPTED", "ENCRYPTION", "ENCRYPTION_KEY_ID", "END", "ENDS", "ENGINE", + "ENGINES", "ERROR", "ERRORS", "ESCAPE", "EVEN", "EVENT", "EVENTS", "EVERY", + "EXCHANGE", "EXCLUSIVE", "EXPIRE", "EXPORT", "EXTENDED", "EXTENT_SIZE", + "FAILED_LOGIN_ATTEMPTS", "FAST", "FAULTS", "FIELDS", "FILE_BLOCK_SIZE", + "FILTER", "FIRST", "FIXED", "FLUSH", "FOLLOWING", "FOLLOWS", "FOUND", + "FULL", "FUNCTION", "GENERAL", "GLOBAL", "GRANTS", "GROUP_REPLICATION", + "HANDLER", "HASH", "HELP", "HISTORY", "HOST", "HOSTS", "IDENTIFIED", + "IGNORE_SERVER_IDS", "IMPORT", "INCREMENT", "INDEXES", "INITIAL_SIZE", + "INPLACE", "INSERT_METHOD", "INSTALL", "INSTANCE", "INSTANT", "INVISIBLE", + "INVOKER", "IO", "IO_THREAD", "IPC", "ISOLATION", "ISSUER", "JSON", + "KEY_BLOCK_SIZE", "LANGUAGE", "LAST", "LEAVES", "LESS", "LEVEL", "LIST", + "LOCAL", "LOGFILE", "LOGS", "MASTER", "MASTER_AUTO_POSITION", "MASTER_CONNECT_RETRY", + "MASTER_DELAY", "MASTER_HEARTBEAT_PERIOD", "MASTER_HOST", "MASTER_LOG_FILE", + "MASTER_LOG_POS", "MASTER_PASSWORD", "MASTER_PORT", "MASTER_RETRY_COUNT", + "MASTER_SSL", "MASTER_SSL_CA", "MASTER_SSL_CAPATH", "MASTER_SSL_CERT", + "MASTER_SSL_CIPHER", "MASTER_SSL_CRL", "MASTER_SSL_CRLPATH", "MASTER_SSL_KEY", + "MASTER_TLS_VERSION", "MASTER_USER", "MAX_CONNECTIONS_PER_HOUR", "MAX_QUERIES_PER_HOUR", + "MAX_ROWS", "MAX_SIZE", "MAX_UPDATES_PER_HOUR", "MAX_USER_CONNECTIONS", + "MEDIUM", "MEMBER", "MERGE", "MESSAGE_TEXT", "MID", "MIGRATE", "MIN_ROWS", + "MODE", "MODIFY", "MUTEX", "MYSQL", "MYSQL_ERRNO", "NAME", "NAMES", + "NCHAR", "NEVER", "NEXT", "NO", "NOCACHE", "NOCOPY", "NOCYCLE", "NOMAXVALUE", + "NOMINVALUE", "NOWAIT", "NODEGROUP", "NONE", "ODBC", "OFFLINE", "OFFSET", + "OF", "OJ", "OLD_PASSWORD", "ONE", "ONLINE", "ONLY", "OPEN", "OPTIMIZER_COSTS", + "OPTIONS", "OWNER", "PACK_KEYS", "PAGE", "PAGE_COMPRESSED", "PAGE_COMPRESSION_LEVEL", + "PARSER", "PARTIAL", "PARTITIONING", "PARTITIONS", "PASSWORD", "PASSWORD_LOCK_TIME", + "PHASE", "PLUGIN", "PLUGIN_DIR", "PLUGINS", "PORT", "PRECEDES", "PRECEDING", + "PREPARE", "PRESERVE", "PREV", "PROCESSLIST", "PROFILE", "PROFILES", + "PROXY", "QUERY", "QUICK", "REBUILD", "RECOVER", "RECURSIVE", "REDO_BUFFER_SIZE", + "REDUNDANT", "RELAY", "RELAY_LOG_FILE", "RELAY_LOG_POS", "RELAYLOG", + "REMOVE", "REORGANIZE", "REPAIR", "REPLICATE_DO_DB", "REPLICATE_DO_TABLE", + "REPLICATE_IGNORE_DB", "REPLICATE_IGNORE_TABLE", "REPLICATE_REWRITE_DB", + "REPLICATE_WILD_DO_TABLE", "REPLICATE_WILD_IGNORE_TABLE", "REPLICATION", + "RESET", "RESTART", "RESUME", "RETURNED_SQLSTATE", "RETURNING", "RETURNS", + "REUSE", "ROLE", "ROLLBACK", "ROLLUP", "ROTATE", "ROW", "ROWS", "ROW_FORMAT", + "RTREE", "SAVEPOINT", "SCHEDULE", "SECURITY", "SEQUENCE", "SERVER", + "SESSION", "SHARE", "SHARED", "SIGNED", "SIMPLE", "SLAVE", "SLOW", "SNAPSHOT", + "SOCKET", "SOME", "SONAME", "SOUNDS", "SOURCE", "SQL_AFTER_GTIDS", "SQL_AFTER_MTS_GAPS", + "SQL_BEFORE_GTIDS", "SQL_BUFFER_RESULT", "SQL_CACHE", "SQL_NO_CACHE", + "SQL_THREAD", "START", "STARTS", "STATS_AUTO_RECALC", "STATS_PERSISTENT", + "STATS_SAMPLE_PAGES", "STATUS", "STOP", "STORAGE", "STORED", "STRING", + "SUBCLASS_ORIGIN", "SUBJECT", "SUBPARTITION", "SUBPARTITIONS", "SUSPEND", + "SWAPS", "SWITCHES", "TABLE_NAME", "TABLESPACE", "TABLE_TYPE", "TEMPORARY", + "TEMPTABLE", "THAN", "TRADITIONAL", "TRANSACTION", "TRANSACTIONAL", + "TRIGGERS", "TRUNCATE", "UNBOUNDED", "UNDEFINED", "UNDOFILE", "UNDO_BUFFER_SIZE", + "UNINSTALL", "UNKNOWN", "UNTIL", "UPGRADE", "USER", "USE_FRM", "USER_RESOURCES", + "VALIDATION", "VALUE", "VARIABLES", "VIEW", "VIRTUAL", "VISIBLE", "WAIT", + "WARNINGS", "WINDOW", "WITHOUT", "WORK", "WRAPPER", "X509", "XA", "XML", + "YES", "EUR", "USA", "JIS", "ISO", "INTERNAL", "QUARTER", "MONTH", "DAY", + "HOUR", "MINUTE", "WEEK", "SECOND", "MICROSECOND", "ADMIN", "APPLICATION_PASSWORD_ADMIN", + "AUDIT_ADMIN", "BACKUP_ADMIN", "BINLOG_ADMIN", "BINLOG_ENCRYPTION_ADMIN", + "CLONE_ADMIN", "CONNECTION_ADMIN", "ENCRYPTION_KEY_ADMIN", "EXECUTE", + "FILE", "FIREWALL_ADMIN", "FIREWALL_USER", "FLUSH_OPTIMIZER_COSTS", + "FLUSH_STATUS", "FLUSH_TABLES", "FLUSH_USER_RESOURCES", "GROUP_REPLICATION_ADMIN", + "INNODB_REDO_LOG_ARCHIVE", "INNODB_REDO_LOG_ENABLE", "INVOKE", "LAMBDA", + "NDB_STORED_USER", "PASSWORDLESS_USER_ADMIN", "PERSIST_RO_VARIABLES_ADMIN", + "PRIVILEGES", "PROCESS", "RELOAD", "REPLICATION_APPLIER", "REPLICATION_SLAVE_ADMIN", + "RESOURCE_GROUP_ADMIN", "RESOURCE_GROUP_USER", "ROLE_ADMIN", "ROUTINE", + "S3", "SERVICE_CONNECTION_ADMIN", "SESSION_VARIABLES_ADMIN", "SET_USER_ID", + "SHOW_ROUTINE", "SHUTDOWN", "SUPER", "SYSTEM_VARIABLES_ADMIN", "TABLES", + "TABLE_ENCRYPTION_ADMIN", "VERSION_TOKEN_ADMIN", "XA_RECOVER_ADMIN", + "ARMSCII8", "ASCII", "BIG5", "CP1250", "CP1251", "CP1256", "CP1257", + "CP850", "CP852", "CP866", "CP932", "DEC8", "EUCJPMS", "EUCKR", "GB18030", + "GB2312", "GBK", "GEOSTD8", "GREEK", "HEBREW", "HP8", "KEYBCS2", "KOI8R", + "KOI8U", "LATIN1", "LATIN2", "LATIN5", "LATIN7", "MACCE", "MACROMAN", + "SJIS", "SWE7", "TIS620", "UCS2", "UJIS", "UTF16", "UTF16LE", "UTF32", + "UTF8", "UTF8MB3", "UTF8MB4", "ARCHIVE", "BLACKHOLE", "CSV", "FEDERATED", + "INNODB", "MEMORY", "MRG_MYISAM", "MYISAM", "NDB", "NDBCLUSTER", "PERFORMANCE_SCHEMA", + "TOKUDB", "REPEATABLE", "COMMITTED", "UNCOMMITTED", "SERIALIZABLE", + "GEOMETRYCOLLECTION", "GEOMCOLLECTION", "GEOMETRY", "LINESTRING", "MULTILINESTRING", + "MULTIPOINT", "MULTIPOLYGON", "POINT", "POLYGON", "ABS", "ACOS", "ADDDATE", + "ADDTIME", "AES_DECRYPT", "AES_ENCRYPT", "AREA", "ASBINARY", "ASIN", + "ASTEXT", "ASWKB", "ASWKT", "ASYMMETRIC_DECRYPT", "ASYMMETRIC_DERIVE", + "ASYMMETRIC_ENCRYPT", "ASYMMETRIC_SIGN", "ASYMMETRIC_VERIFY", "ATAN", + "ATAN2", "BENCHMARK", "BIN", "BIT_COUNT", "BIT_LENGTH", "BUFFER", "CATALOG_NAME", + "CEIL", "CEILING", "CENTROID", "CHARACTER_LENGTH", "CHARSET", "CHAR_LENGTH", + "COERCIBILITY", "COLLATION", "COMPRESS", "CONCAT", "CONCAT_WS", "CONNECTION_ID", + "CONV", "CONVERT_TZ", "COS", "COT", "CRC32", "CREATE_ASYMMETRIC_PRIV_KEY", + "CREATE_ASYMMETRIC_PUB_KEY", "CREATE_DH_PARAMETERS", "CREATE_DIGEST", + "CROSSES", "DATEDIFF", "DATE_FORMAT", "DAYNAME", "DAYOFMONTH", "DAYOFWEEK", + "DAYOFYEAR", "DECODE", "DEGREES", "DES_DECRYPT", "DES_ENCRYPT", "DIMENSION", + "DISJOINT", "ELT", "ENCODE", "ENCRYPT", "ENDPOINT", "ENGINE_ATTRIBUTE", + "ENVELOPE", "EQUALS", "EXP", "EXPORT_SET", "EXTERIORRING", "EXTRACTVALUE", + "FIELD", "FIND_IN_SET", "FLOOR", "FORMAT", "FOUND_ROWS", "FROM_BASE64", + "FROM_DAYS", "FROM_UNIXTIME", "GEOMCOLLFROMTEXT", "GEOMCOLLFROMWKB", + "GEOMETRYCOLLECTIONFROMTEXT", "GEOMETRYCOLLECTIONFROMWKB", "GEOMETRYFROMTEXT", + "GEOMETRYFROMWKB", "GEOMETRYN", "GEOMETRYTYPE", "GEOMFROMTEXT", "GEOMFROMWKB", + "GET_FORMAT", "GET_LOCK", "GLENGTH", "GREATEST", "GTID_SUBSET", "GTID_SUBTRACT", + "HEX", "IFNULL", "INET6_ATON", "INET6_NTOA", "INET_ATON", "INET_NTOA", + "INSTR", "INTERIORRINGN", "INTERSECTS", "ISCLOSED", "ISEMPTY", "ISNULL", + "ISSIMPLE", "IS_FREE_LOCK", "IS_IPV4", "IS_IPV4_COMPAT", "IS_IPV4_MAPPED", + "IS_IPV6", "IS_USED_LOCK", "LAST_INSERT_ID", "LCASE", "LEAST", "LENGTH", + "LINEFROMTEXT", "LINEFROMWKB", "LINESTRINGFROMTEXT", "LINESTRINGFROMWKB", + "LN", "LOAD_FILE", "LOCATE", "LOG", "LOG10", "LOG2", "LOWER", "LPAD", + "LTRIM", "MAKEDATE", "MAKETIME", "MAKE_SET", "MASTER_POS_WAIT", "MBRCONTAINS", + "MBRDISJOINT", "MBREQUAL", "MBRINTERSECTS", "MBROVERLAPS", "MBRTOUCHES", + "MBRWITHIN", "MD5", "MLINEFROMTEXT", "MLINEFROMWKB", "MONTHNAME", "MPOINTFROMTEXT", + "MPOINTFROMWKB", "MPOLYFROMTEXT", "MPOLYFROMWKB", "MULTILINESTRINGFROMTEXT", + "MULTILINESTRINGFROMWKB", "MULTIPOINTFROMTEXT", "MULTIPOINTFROMWKB", + "MULTIPOLYGONFROMTEXT", "MULTIPOLYGONFROMWKB", "NAME_CONST", "NULLIF", + "NUMGEOMETRIES", "NUMINTERIORRINGS", "NUMPOINTS", "OCT", "OCTET_LENGTH", + "ORD", "OVERLAPS", "PERIOD_ADD", "PERIOD_DIFF", "PI", "POINTFROMTEXT", + "POINTFROMWKB", "POINTN", "POLYFROMTEXT", "POLYFROMWKB", "POLYGONFROMTEXT", + "POLYGONFROMWKB", "POW", "POWER", "QUOTE", "RADIANS", "RAND", "RANDOM_BYTES", + "RELEASE_LOCK", "REVERSE", "ROUND", "ROW_COUNT", "RPAD", "RTRIM", "SEC_TO_TIME", + "SECONDARY_ENGINE_ATTRIBUTE", "SESSION_USER", "SHA", "SHA1", "SHA2", + "SCHEMA_NAME", "SIGN", "SIN", "SLEEP", "SOUNDEX", "SQL_THREAD_WAIT_AFTER_GTIDS", + "SQRT", "SRID", "STARTPOINT", "STRCMP", "STR_TO_DATE", "ST_AREA", "ST_ASBINARY", + "ST_ASTEXT", "ST_ASWKB", "ST_ASWKT", "ST_BUFFER", "ST_CENTROID", "ST_CONTAINS", + "ST_CROSSES", "ST_DIFFERENCE", "ST_DIMENSION", "ST_DISJOINT", "ST_DISTANCE", + "ST_ENDPOINT", "ST_ENVELOPE", "ST_EQUALS", "ST_EXTERIORRING", "ST_GEOMCOLLFROMTEXT", + "ST_GEOMCOLLFROMTXT", "ST_GEOMCOLLFROMWKB", "ST_GEOMETRYCOLLECTIONFROMTEXT", + "ST_GEOMETRYCOLLECTIONFROMWKB", "ST_GEOMETRYFROMTEXT", "ST_GEOMETRYFROMWKB", + "ST_GEOMETRYN", "ST_GEOMETRYTYPE", "ST_GEOMFROMTEXT", "ST_GEOMFROMWKB", + "ST_INTERIORRINGN", "ST_INTERSECTION", "ST_INTERSECTS", "ST_ISCLOSED", + "ST_ISEMPTY", "ST_ISSIMPLE", "ST_LINEFROMTEXT", "ST_LINEFROMWKB", "ST_LINESTRINGFROMTEXT", + "ST_LINESTRINGFROMWKB", "ST_NUMGEOMETRIES", "ST_NUMINTERIORRING", "ST_NUMINTERIORRINGS", + "ST_NUMPOINTS", "ST_OVERLAPS", "ST_POINTFROMTEXT", "ST_POINTFROMWKB", + "ST_POINTN", "ST_POLYFROMTEXT", "ST_POLYFROMWKB", "ST_POLYGONFROMTEXT", + "ST_POLYGONFROMWKB", "ST_SRID", "ST_STARTPOINT", "ST_SYMDIFFERENCE", + "ST_TOUCHES", "ST_UNION", "ST_WITHIN", "ST_X", "ST_Y", "SUBDATE", "SUBSTRING_INDEX", + "SUBTIME", "SYSTEM_USER", "TAN", "TIMEDIFF", "TIMESTAMPADD", "TIMESTAMPDIFF", + "TIME_FORMAT", "TIME_TO_SEC", "TOUCHES", "TO_BASE64", "TO_DAYS", "TO_SECONDS", + "UCASE", "UNCOMPRESS", "UNCOMPRESSED_LENGTH", "UNHEX", "UNIX_TIMESTAMP", + "UPDATEXML", "UPPER", "UUID", "UUID_SHORT", "VALIDATE_PASSWORD_STRENGTH", + "VERSION", "WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS", "WEEKDAY", "WEEKOFYEAR", + "WEIGHT_STRING", "WITHIN", "YEARWEEK", "Y_FUNCTION", "X_FUNCTION", "VAR_ASSIGN", + "PLUS_ASSIGN", "MINUS_ASSIGN", "MULT_ASSIGN", "DIV_ASSIGN", "MOD_ASSIGN", + "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "STAR", "DIVIDE", "MODULE", + "PLUS", "MINUS", "DIV", "MOD", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", + "EXCLAMATION_SYMBOL", "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", + "DOT", "LR_BRACKET", "RR_BRACKET", "COMMA", "SEMI", "AT_SIGN", "ZERO_DECIMAL", + "ONE_DECIMAL", "TWO_DECIMAL", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "REVERSE_QUOTE_SYMB", "COLON_SYMB", "CHARSET_REVERSE_QOUTE_STRING", + "FILESIZE_LITERAL", "START_NATIONAL_STRING_LITERAL", "STRING_LITERAL", + "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", "NULL_SPEC_LITERAL", + "BIT_STRING", "STRING_CHARSET_NAME", "DOT_ID", "ID", "REVERSE_QUOTE_ID", + "STRING_USER_NAME", "IP_ADDRESS", "LOCAL_ID", "GLOBAL_ID", "ERROR_RECONGNIGION", + } + staticData.ruleNames = []string{ + "SPACE", "SPEC_MYSQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", "ADD", + "ALL", "ALTER", "ALWAYS", "ANALYZE", "AND", "ARRAY", "AS", "ASC", "ATTRIBUTE", + "BEFORE", "BETWEEN", "BOTH", "BUCKETS", "BY", "CALL", "CASCADE", "CASE", + "CAST", "CHANGE", "CHARACTER", "CHECK", "COLLATE", "COLUMN", "CONDITION", + "CONSTRAINT", "CONTINUE", "CONVERT", "CREATE", "CROSS", "CURRENT", "CURRENT_ROLE", + "CURRENT_USER", "CURSOR", "DATABASE", "DATABASES", "DECLARE", "DEFAULT", + "DELAYED", "DELETE", "DESC", "DESCRIBE", "DETERMINISTIC", "DIAGNOSTICS", + "DISTINCT", "DISTINCTROW", "DROP", "EACH", "ELSE", "ELSEIF", "EMPTY", + "ENCLOSED", "ESCAPED", "EXCEPT", "EXISTS", "EXIT", "EXPLAIN", "FALSE", + "FETCH", "FOR", "FORCE", "FOREIGN", "FROM", "FULLTEXT", "GENERATED", + "GET", "GRANT", "GROUP", "HAVING", "HIGH_PRIORITY", "HISTOGRAM", "IF", + "IGNORE", "IGNORED", "IN", "INDEX", "INFILE", "INNER", "INOUT", "INSERT", + "INTERVAL", "INTO", "IS", "ITERATE", "JOIN", "KEY", "KEYS", "KILL", + "LATERAL", "LEADING", "LEAVE", "LEFT", "LIKE", "LIMIT", "LINEAR", "LINES", + "LOAD", "LOCK", "LOCKED", "LOOP", "LOW_PRIORITY", "MASTER_BIND", "MASTER_SSL_VERIFY_SERVER_CERT", + "MATCH", "MAXVALUE", "MINVALUE", "MODIFIES", "NATURAL", "NOT", "NO_WRITE_TO_BINLOG", + "NULL_LITERAL", "NUMBER", "ON", "OPTIMIZE", "OPTION", "OPTIONAL", "OPTIONALLY", + "OR", "ORDER", "OUT", "OUTER", "OUTFILE", "OVER", "PARTITION", "PRIMARY", + "PROCEDURE", "PURGE", "RANGE", "READ", "READS", "REFERENCES", "REGEXP", + "RELEASE", "RENAME", "REPEAT", "REPLACE", "REQUIRE", "RESIGNAL", "RESTRICT", + "RETAIN", "RETURN", "REVOKE", "RIGHT", "RLIKE", "SCHEMA", "SCHEMAS", + "SELECT", "SET", "SEPARATOR", "SHOW", "SIGNAL", "SKIP_", "SPATIAL", + "SQL", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", "SQL_BIG_RESULT", "SQL_CALC_FOUND_ROWS", + "SQL_SMALL_RESULT", "SSL", "STACKED", "STARTING", "STATEMENT", "STRAIGHT_JOIN", + "TABLE", "TERMINATED", "THEN", "TO", "TRAILING", "TRIGGER", "TRUE", + "UNDO", "UNION", "UNIQUE", "UNLOCK", "UNSIGNED", "UPDATE", "USAGE", + "USE", "USING", "VALUES", "WHEN", "WHERE", "WHILE", "WITH", "WRITE", + "XOR", "ZEROFILL", "TINYINT", "SMALLINT", "MEDIUMINT", "MIDDLEINT", + "INT", "INT1", "INT2", "INT3", "INT4", "INT8", "INTEGER", "BIGINT", + "REAL", "DOUBLE", "PRECISION", "FLOAT", "FLOAT4", "FLOAT8", "DECIMAL", + "DEC", "NUMERIC", "DATE", "TIME", "TIMESTAMP", "DATETIME", "YEAR", "CHAR", + "VARCHAR", "NVARCHAR", "NATIONAL", "BINARY", "VARBINARY", "TINYBLOB", + "BLOB", "MEDIUMBLOB", "LONG", "LONGBLOB", "TINYTEXT", "TEXT", "MEDIUMTEXT", + "LONGTEXT", "ENUM", "VARYING", "SERIAL", "YEAR_MONTH", "DAY_HOUR", "DAY_MINUTE", + "DAY_SECOND", "HOUR_MINUTE", "HOUR_SECOND", "MINUTE_SECOND", "SECOND_MICROSECOND", + "MINUTE_MICROSECOND", "HOUR_MICROSECOND", "DAY_MICROSECOND", "JSON_ARRAY", + "JSON_ARRAYAGG", "JSON_ARRAY_APPEND", "JSON_ARRAY_INSERT", "JSON_CONTAINS", + "JSON_CONTAINS_PATH", "JSON_DEPTH", "JSON_EXTRACT", "JSON_INSERT", "JSON_KEYS", + "JSON_LENGTH", "JSON_MERGE", "JSON_MERGE_PATCH", "JSON_MERGE_PRESERVE", + "JSON_OBJECT", "JSON_OBJECTAGG", "JSON_OVERLAPS", "JSON_PRETTY", "JSON_QUOTE", + "JSON_REMOVE", "JSON_REPLACE", "JSON_SCHEMA_VALID", "JSON_SCHEMA_VALIDATION_REPORT", + "JSON_SEARCH", "JSON_SET", "JSON_STORAGE_FREE", "JSON_STORAGE_SIZE", + "JSON_TABLE", "JSON_TYPE", "JSON_UNQUOTE", "JSON_VALID", "JSON_VALUE", + "NESTED", "ORDINALITY", "PATH", "AVG", "BIT_AND", "BIT_OR", "BIT_XOR", + "COUNT", "CUME_DIST", "DENSE_RANK", "FIRST_VALUE", "GROUP_CONCAT", "LAG", + "LAST_VALUE", "LEAD", "MAX", "MIN", "NTILE", "NTH_VALUE", "PERCENT_RANK", + "RANK", "ROW_NUMBER", "STD", "STDDEV", "STDDEV_POP", "STDDEV_SAMP", + "SUM", "VAR_POP", "VAR_SAMP", "VARIANCE", "CURRENT_DATE", "CURRENT_TIME", + "CURRENT_TIMESTAMP", "LOCALTIME", "CURDATE", "CURTIME", "DATE_ADD", + "DATE_SUB", "EXTRACT", "LOCALTIMESTAMP", "NOW", "POSITION", "SUBSTR", + "SUBSTRING", "SYSDATE", "TRIM", "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", + "ACCOUNT", "ACTION", "AFTER", "AGGREGATE", "ALGORITHM", "ANY", "AT", + "AUTHORS", "AUTOCOMMIT", "AUTOEXTEND_SIZE", "AUTO_INCREMENT", "AVG_ROW_LENGTH", + "BEGIN", "BINLOG", "BIT", "BLOCK", "BOOL", "BOOLEAN", "BTREE", "CACHE", + "CASCADED", "CHAIN", "CHANGED", "CHANNEL", "CHECKSUM", "PAGE_CHECKSUM", + "CIPHER", "CLASS_ORIGIN", "CLIENT", "CLOSE", "CLUSTERING", "COALESCE", + "CODE", "COLUMNS", "COLUMN_FORMAT", "COLUMN_NAME", "COMMENT", "COMMIT", + "COMPACT", "COMPLETION", "COMPRESSED", "COMPRESSION", "CONCURRENT", + "CONNECT", "CONNECTION", "CONSISTENT", "CONSTRAINT_CATALOG", "CONSTRAINT_SCHEMA", + "CONSTRAINT_NAME", "CONTAINS", "CONTEXT", "CONTRIBUTORS", "COPY", "CPU", + "CYCLE", "CURSOR_NAME", "DATA", "DATAFILE", "DEALLOCATE", "DEFAULT_AUTH", + "DEFINER", "DELAY_KEY_WRITE", "DES_KEY_FILE", "DIRECTORY", "DISABLE", + "DISCARD", "DISK", "DO", "DUMPFILE", "DUPLICATE", "DYNAMIC", "ENABLE", + "ENCRYPTED", "ENCRYPTION", "ENCRYPTION_KEY_ID", "END", "ENDS", "ENGINE", + "ENGINES", "ERROR", "ERRORS", "ESCAPE", "EVEN", "EVENT", "EVENTS", "EVERY", + "EXCHANGE", "EXCLUSIVE", "EXPIRE", "EXPORT", "EXTENDED", "EXTENT_SIZE", + "FAILED_LOGIN_ATTEMPTS", "FAST", "FAULTS", "FIELDS", "FILE_BLOCK_SIZE", + "FILTER", "FIRST", "FIXED", "FLUSH", "FOLLOWING", "FOLLOWS", "FOUND", + "FULL", "FUNCTION", "GENERAL", "GLOBAL", "GRANTS", "GROUP_REPLICATION", + "HANDLER", "HASH", "HELP", "HISTORY", "HOST", "HOSTS", "IDENTIFIED", + "IGNORE_SERVER_IDS", "IMPORT", "INCREMENT", "INDEXES", "INITIAL_SIZE", + "INPLACE", "INSERT_METHOD", "INSTALL", "INSTANCE", "INSTANT", "INVISIBLE", + "INVOKER", "IO", "IO_THREAD", "IPC", "ISOLATION", "ISSUER", "JSON", + "KEY_BLOCK_SIZE", "LANGUAGE", "LAST", "LEAVES", "LESS", "LEVEL", "LIST", + "LOCAL", "LOGFILE", "LOGS", "MASTER", "MASTER_AUTO_POSITION", "MASTER_CONNECT_RETRY", + "MASTER_DELAY", "MASTER_HEARTBEAT_PERIOD", "MASTER_HOST", "MASTER_LOG_FILE", + "MASTER_LOG_POS", "MASTER_PASSWORD", "MASTER_PORT", "MASTER_RETRY_COUNT", + "MASTER_SSL", "MASTER_SSL_CA", "MASTER_SSL_CAPATH", "MASTER_SSL_CERT", + "MASTER_SSL_CIPHER", "MASTER_SSL_CRL", "MASTER_SSL_CRLPATH", "MASTER_SSL_KEY", + "MASTER_TLS_VERSION", "MASTER_USER", "MAX_CONNECTIONS_PER_HOUR", "MAX_QUERIES_PER_HOUR", + "MAX_ROWS", "MAX_SIZE", "MAX_UPDATES_PER_HOUR", "MAX_USER_CONNECTIONS", + "MEDIUM", "MEMBER", "MERGE", "MESSAGE_TEXT", "MID", "MIGRATE", "MIN_ROWS", + "MODE", "MODIFY", "MUTEX", "MYSQL", "MYSQL_ERRNO", "NAME", "NAMES", + "NCHAR", "NEVER", "NEXT", "NO", "NOCACHE", "NOCOPY", "NOCYCLE", "NOMAXVALUE", + "NOMINVALUE", "NOWAIT", "NODEGROUP", "NONE", "ODBC", "OFFLINE", "OFFSET", + "OF", "OJ", "OLD_PASSWORD", "ONE", "ONLINE", "ONLY", "OPEN", "OPTIMIZER_COSTS", + "OPTIONS", "OWNER", "PACK_KEYS", "PAGE", "PAGE_COMPRESSED", "PAGE_COMPRESSION_LEVEL", + "PARSER", "PARTIAL", "PARTITIONING", "PARTITIONS", "PASSWORD", "PASSWORD_LOCK_TIME", + "PHASE", "PLUGIN", "PLUGIN_DIR", "PLUGINS", "PORT", "PRECEDES", "PRECEDING", + "PREPARE", "PRESERVE", "PREV", "PROCESSLIST", "PROFILE", "PROFILES", + "PROXY", "QUERY", "QUICK", "REBUILD", "RECOVER", "RECURSIVE", "REDO_BUFFER_SIZE", + "REDUNDANT", "RELAY", "RELAY_LOG_FILE", "RELAY_LOG_POS", "RELAYLOG", + "REMOVE", "REORGANIZE", "REPAIR", "REPLICATE_DO_DB", "REPLICATE_DO_TABLE", + "REPLICATE_IGNORE_DB", "REPLICATE_IGNORE_TABLE", "REPLICATE_REWRITE_DB", + "REPLICATE_WILD_DO_TABLE", "REPLICATE_WILD_IGNORE_TABLE", "REPLICATION", + "RESET", "RESTART", "RESUME", "RETURNED_SQLSTATE", "RETURNING", "RETURNS", + "REUSE", "ROLE", "ROLLBACK", "ROLLUP", "ROTATE", "ROW", "ROWS", "ROW_FORMAT", + "RTREE", "SAVEPOINT", "SCHEDULE", "SECURITY", "SEQUENCE", "SERVER", + "SESSION", "SHARE", "SHARED", "SIGNED", "SIMPLE", "SLAVE", "SLOW", "SNAPSHOT", + "SOCKET", "SOME", "SONAME", "SOUNDS", "SOURCE", "SQL_AFTER_GTIDS", "SQL_AFTER_MTS_GAPS", + "SQL_BEFORE_GTIDS", "SQL_BUFFER_RESULT", "SQL_CACHE", "SQL_NO_CACHE", + "SQL_THREAD", "START", "STARTS", "STATS_AUTO_RECALC", "STATS_PERSISTENT", + "STATS_SAMPLE_PAGES", "STATUS", "STOP", "STORAGE", "STORED", "STRING", + "SUBCLASS_ORIGIN", "SUBJECT", "SUBPARTITION", "SUBPARTITIONS", "SUSPEND", + "SWAPS", "SWITCHES", "TABLE_NAME", "TABLESPACE", "TABLE_TYPE", "TEMPORARY", + "TEMPTABLE", "THAN", "TRADITIONAL", "TRANSACTION", "TRANSACTIONAL", + "TRIGGERS", "TRUNCATE", "UNBOUNDED", "UNDEFINED", "UNDOFILE", "UNDO_BUFFER_SIZE", + "UNINSTALL", "UNKNOWN", "UNTIL", "UPGRADE", "USER", "USE_FRM", "USER_RESOURCES", + "VALIDATION", "VALUE", "VARIABLES", "VIEW", "VIRTUAL", "VISIBLE", "WAIT", + "WARNINGS", "WINDOW", "WITHOUT", "WORK", "WRAPPER", "X509", "XA", "XML", + "YES", "EUR", "USA", "JIS", "ISO", "INTERNAL", "QUARTER", "MONTH", "DAY", + "HOUR", "MINUTE", "WEEK", "SECOND", "MICROSECOND", "ADMIN", "APPLICATION_PASSWORD_ADMIN", + "AUDIT_ADMIN", "BACKUP_ADMIN", "BINLOG_ADMIN", "BINLOG_ENCRYPTION_ADMIN", + "CLONE_ADMIN", "CONNECTION_ADMIN", "ENCRYPTION_KEY_ADMIN", "EXECUTE", + "FILE", "FIREWALL_ADMIN", "FIREWALL_USER", "FLUSH_OPTIMIZER_COSTS", + "FLUSH_STATUS", "FLUSH_TABLES", "FLUSH_USER_RESOURCES", "GROUP_REPLICATION_ADMIN", + "INNODB_REDO_LOG_ARCHIVE", "INNODB_REDO_LOG_ENABLE", "INVOKE", "LAMBDA", + "NDB_STORED_USER", "PASSWORDLESS_USER_ADMIN", "PERSIST_RO_VARIABLES_ADMIN", + "PRIVILEGES", "PROCESS", "RELOAD", "REPLICATION_APPLIER", "REPLICATION_SLAVE_ADMIN", + "RESOURCE_GROUP_ADMIN", "RESOURCE_GROUP_USER", "ROLE_ADMIN", "ROUTINE", + "S3", "SERVICE_CONNECTION_ADMIN", "SESSION_VARIABLES_ADMIN", "SET_USER_ID", + "SHOW_ROUTINE", "SHUTDOWN", "SUPER", "SYSTEM_VARIABLES_ADMIN", "TABLES", + "TABLE_ENCRYPTION_ADMIN", "VERSION_TOKEN_ADMIN", "XA_RECOVER_ADMIN", + "ARMSCII8", "ASCII", "BIG5", "CP1250", "CP1251", "CP1256", "CP1257", + "CP850", "CP852", "CP866", "CP932", "DEC8", "EUCJPMS", "EUCKR", "GB18030", + "GB2312", "GBK", "GEOSTD8", "GREEK", "HEBREW", "HP8", "KEYBCS2", "KOI8R", + "KOI8U", "LATIN1", "LATIN2", "LATIN5", "LATIN7", "MACCE", "MACROMAN", + "SJIS", "SWE7", "TIS620", "UCS2", "UJIS", "UTF16", "UTF16LE", "UTF32", + "UTF8", "UTF8MB3", "UTF8MB4", "ARCHIVE", "BLACKHOLE", "CSV", "FEDERATED", + "INNODB", "MEMORY", "MRG_MYISAM", "MYISAM", "NDB", "NDBCLUSTER", "PERFORMANCE_SCHEMA", + "TOKUDB", "REPEATABLE", "COMMITTED", "UNCOMMITTED", "SERIALIZABLE", + "GEOMETRYCOLLECTION", "GEOMCOLLECTION", "GEOMETRY", "LINESTRING", "MULTILINESTRING", + "MULTIPOINT", "MULTIPOLYGON", "POINT", "POLYGON", "ABS", "ACOS", "ADDDATE", + "ADDTIME", "AES_DECRYPT", "AES_ENCRYPT", "AREA", "ASBINARY", "ASIN", + "ASTEXT", "ASWKB", "ASWKT", "ASYMMETRIC_DECRYPT", "ASYMMETRIC_DERIVE", + "ASYMMETRIC_ENCRYPT", "ASYMMETRIC_SIGN", "ASYMMETRIC_VERIFY", "ATAN", + "ATAN2", "BENCHMARK", "BIN", "BIT_COUNT", "BIT_LENGTH", "BUFFER", "CATALOG_NAME", + "CEIL", "CEILING", "CENTROID", "CHARACTER_LENGTH", "CHARSET", "CHAR_LENGTH", + "COERCIBILITY", "COLLATION", "COMPRESS", "CONCAT", "CONCAT_WS", "CONNECTION_ID", + "CONV", "CONVERT_TZ", "COS", "COT", "CRC32", "CREATE_ASYMMETRIC_PRIV_KEY", + "CREATE_ASYMMETRIC_PUB_KEY", "CREATE_DH_PARAMETERS", "CREATE_DIGEST", + "CROSSES", "DATEDIFF", "DATE_FORMAT", "DAYNAME", "DAYOFMONTH", "DAYOFWEEK", + "DAYOFYEAR", "DECODE", "DEGREES", "DES_DECRYPT", "DES_ENCRYPT", "DIMENSION", + "DISJOINT", "ELT", "ENCODE", "ENCRYPT", "ENDPOINT", "ENGINE_ATTRIBUTE", + "ENVELOPE", "EQUALS", "EXP", "EXPORT_SET", "EXTERIORRING", "EXTRACTVALUE", + "FIELD", "FIND_IN_SET", "FLOOR", "FORMAT", "FOUND_ROWS", "FROM_BASE64", + "FROM_DAYS", "FROM_UNIXTIME", "GEOMCOLLFROMTEXT", "GEOMCOLLFROMWKB", + "GEOMETRYCOLLECTIONFROMTEXT", "GEOMETRYCOLLECTIONFROMWKB", "GEOMETRYFROMTEXT", + "GEOMETRYFROMWKB", "GEOMETRYN", "GEOMETRYTYPE", "GEOMFROMTEXT", "GEOMFROMWKB", + "GET_FORMAT", "GET_LOCK", "GLENGTH", "GREATEST", "GTID_SUBSET", "GTID_SUBTRACT", + "HEX", "IFNULL", "INET6_ATON", "INET6_NTOA", "INET_ATON", "INET_NTOA", + "INSTR", "INTERIORRINGN", "INTERSECTS", "ISCLOSED", "ISEMPTY", "ISNULL", + "ISSIMPLE", "IS_FREE_LOCK", "IS_IPV4", "IS_IPV4_COMPAT", "IS_IPV4_MAPPED", + "IS_IPV6", "IS_USED_LOCK", "LAST_INSERT_ID", "LCASE", "LEAST", "LENGTH", + "LINEFROMTEXT", "LINEFROMWKB", "LINESTRINGFROMTEXT", "LINESTRINGFROMWKB", + "LN", "LOAD_FILE", "LOCATE", "LOG", "LOG10", "LOG2", "LOWER", "LPAD", + "LTRIM", "MAKEDATE", "MAKETIME", "MAKE_SET", "MASTER_POS_WAIT", "MBRCONTAINS", + "MBRDISJOINT", "MBREQUAL", "MBRINTERSECTS", "MBROVERLAPS", "MBRTOUCHES", + "MBRWITHIN", "MD5", "MLINEFROMTEXT", "MLINEFROMWKB", "MONTHNAME", "MPOINTFROMTEXT", + "MPOINTFROMWKB", "MPOLYFROMTEXT", "MPOLYFROMWKB", "MULTILINESTRINGFROMTEXT", + "MULTILINESTRINGFROMWKB", "MULTIPOINTFROMTEXT", "MULTIPOINTFROMWKB", + "MULTIPOLYGONFROMTEXT", "MULTIPOLYGONFROMWKB", "NAME_CONST", "NULLIF", + "NUMGEOMETRIES", "NUMINTERIORRINGS", "NUMPOINTS", "OCT", "OCTET_LENGTH", + "ORD", "OVERLAPS", "PERIOD_ADD", "PERIOD_DIFF", "PI", "POINTFROMTEXT", + "POINTFROMWKB", "POINTN", "POLYFROMTEXT", "POLYFROMWKB", "POLYGONFROMTEXT", + "POLYGONFROMWKB", "POW", "POWER", "QUOTE", "RADIANS", "RAND", "RANDOM_BYTES", + "RELEASE_LOCK", "REVERSE", "ROUND", "ROW_COUNT", "RPAD", "RTRIM", "SEC_TO_TIME", + "SECONDARY_ENGINE_ATTRIBUTE", "SESSION_USER", "SHA", "SHA1", "SHA2", + "SCHEMA_NAME", "SIGN", "SIN", "SLEEP", "SOUNDEX", "SQL_THREAD_WAIT_AFTER_GTIDS", + "SQRT", "SRID", "STARTPOINT", "STRCMP", "STR_TO_DATE", "ST_AREA", "ST_ASBINARY", + "ST_ASTEXT", "ST_ASWKB", "ST_ASWKT", "ST_BUFFER", "ST_CENTROID", "ST_CONTAINS", + "ST_CROSSES", "ST_DIFFERENCE", "ST_DIMENSION", "ST_DISJOINT", "ST_DISTANCE", + "ST_ENDPOINT", "ST_ENVELOPE", "ST_EQUALS", "ST_EXTERIORRING", "ST_GEOMCOLLFROMTEXT", + "ST_GEOMCOLLFROMTXT", "ST_GEOMCOLLFROMWKB", "ST_GEOMETRYCOLLECTIONFROMTEXT", + "ST_GEOMETRYCOLLECTIONFROMWKB", "ST_GEOMETRYFROMTEXT", "ST_GEOMETRYFROMWKB", + "ST_GEOMETRYN", "ST_GEOMETRYTYPE", "ST_GEOMFROMTEXT", "ST_GEOMFROMWKB", + "ST_INTERIORRINGN", "ST_INTERSECTION", "ST_INTERSECTS", "ST_ISCLOSED", + "ST_ISEMPTY", "ST_ISSIMPLE", "ST_LINEFROMTEXT", "ST_LINEFROMWKB", "ST_LINESTRINGFROMTEXT", + "ST_LINESTRINGFROMWKB", "ST_NUMGEOMETRIES", "ST_NUMINTERIORRING", "ST_NUMINTERIORRINGS", + "ST_NUMPOINTS", "ST_OVERLAPS", "ST_POINTFROMTEXT", "ST_POINTFROMWKB", + "ST_POINTN", "ST_POLYFROMTEXT", "ST_POLYFROMWKB", "ST_POLYGONFROMTEXT", + "ST_POLYGONFROMWKB", "ST_SRID", "ST_STARTPOINT", "ST_SYMDIFFERENCE", + "ST_TOUCHES", "ST_UNION", "ST_WITHIN", "ST_X", "ST_Y", "SUBDATE", "SUBSTRING_INDEX", + "SUBTIME", "SYSTEM_USER", "TAN", "TIMEDIFF", "TIMESTAMPADD", "TIMESTAMPDIFF", + "TIME_FORMAT", "TIME_TO_SEC", "TOUCHES", "TO_BASE64", "TO_DAYS", "TO_SECONDS", + "UCASE", "UNCOMPRESS", "UNCOMPRESSED_LENGTH", "UNHEX", "UNIX_TIMESTAMP", + "UPDATEXML", "UPPER", "UUID", "UUID_SHORT", "VALIDATE_PASSWORD_STRENGTH", + "VERSION", "WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS", "WEEKDAY", "WEEKOFYEAR", + "WEIGHT_STRING", "WITHIN", "YEARWEEK", "Y_FUNCTION", "X_FUNCTION", "VAR_ASSIGN", + "PLUS_ASSIGN", "MINUS_ASSIGN", "MULT_ASSIGN", "DIV_ASSIGN", "MOD_ASSIGN", + "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "STAR", "DIVIDE", "MODULE", + "PLUS", "MINUS", "DIV", "MOD", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", + "EXCLAMATION_SYMBOL", "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", + "DOT", "LR_BRACKET", "RR_BRACKET", "COMMA", "SEMI", "AT_SIGN", "ZERO_DECIMAL", + "ONE_DECIMAL", "TWO_DECIMAL", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "REVERSE_QUOTE_SYMB", "COLON_SYMB", "QUOTE_SYMB", "CHARSET_REVERSE_QOUTE_STRING", + "FILESIZE_LITERAL", "START_NATIONAL_STRING_LITERAL", "STRING_LITERAL", + "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", "NULL_SPEC_LITERAL", + "BIT_STRING", "STRING_CHARSET_NAME", "DOT_ID", "ID", "REVERSE_QUOTE_ID", + "STRING_USER_NAME", "IP_ADDRESS", "LOCAL_ID", "GLOBAL_ID", "CHARSET_NAME", + "EXPONENT_NUM_PART", "ID_LITERAL", "DQUOTA_STRING", "SQUOTA_STRING", + "BQUOTA_STRING", "HEX_DIGIT", "DEC_DIGIT", "BIT_STRING_L", "ERROR_RECONGNIGION", + } + staticData.predictionContextCache = antlr.NewPredictionContextCache() + staticData.serializedATN = []int32{ + 4, 0, 1155, 13605, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, + 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, + 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, + 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, + 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, + 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, + 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, + 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, + 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, + 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, + 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, + 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, + 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, + 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, + 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, + 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, + 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, + 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, + 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, + 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, + 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, + 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, + 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, + 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, + 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, + 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, + 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, + 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, + 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, + 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, + 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, + 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, + 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, + 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, + 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, + 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, + 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, + 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, + 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, + 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, + 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, + 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, + 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, + 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, + 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, + 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, + 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, + 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, + 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, + 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, + 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, + 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, + 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, + 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, + 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, + 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, + 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, + 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, + 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, + 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, + 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, + 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, + 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, + 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, + 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, + 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, + 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, + 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, + 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, + 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, + 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, + 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, + 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, + 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, + 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, + 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, + 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 2, 359, 7, 359, 2, + 360, 7, 360, 2, 361, 7, 361, 2, 362, 7, 362, 2, 363, 7, 363, 2, 364, 7, + 364, 2, 365, 7, 365, 2, 366, 7, 366, 2, 367, 7, 367, 2, 368, 7, 368, 2, + 369, 7, 369, 2, 370, 7, 370, 2, 371, 7, 371, 2, 372, 7, 372, 2, 373, 7, + 373, 2, 374, 7, 374, 2, 375, 7, 375, 2, 376, 7, 376, 2, 377, 7, 377, 2, + 378, 7, 378, 2, 379, 7, 379, 2, 380, 7, 380, 2, 381, 7, 381, 2, 382, 7, + 382, 2, 383, 7, 383, 2, 384, 7, 384, 2, 385, 7, 385, 2, 386, 7, 386, 2, + 387, 7, 387, 2, 388, 7, 388, 2, 389, 7, 389, 2, 390, 7, 390, 2, 391, 7, + 391, 2, 392, 7, 392, 2, 393, 7, 393, 2, 394, 7, 394, 2, 395, 7, 395, 2, + 396, 7, 396, 2, 397, 7, 397, 2, 398, 7, 398, 2, 399, 7, 399, 2, 400, 7, + 400, 2, 401, 7, 401, 2, 402, 7, 402, 2, 403, 7, 403, 2, 404, 7, 404, 2, + 405, 7, 405, 2, 406, 7, 406, 2, 407, 7, 407, 2, 408, 7, 408, 2, 409, 7, + 409, 2, 410, 7, 410, 2, 411, 7, 411, 2, 412, 7, 412, 2, 413, 7, 413, 2, + 414, 7, 414, 2, 415, 7, 415, 2, 416, 7, 416, 2, 417, 7, 417, 2, 418, 7, + 418, 2, 419, 7, 419, 2, 420, 7, 420, 2, 421, 7, 421, 2, 422, 7, 422, 2, + 423, 7, 423, 2, 424, 7, 424, 2, 425, 7, 425, 2, 426, 7, 426, 2, 427, 7, + 427, 2, 428, 7, 428, 2, 429, 7, 429, 2, 430, 7, 430, 2, 431, 7, 431, 2, + 432, 7, 432, 2, 433, 7, 433, 2, 434, 7, 434, 2, 435, 7, 435, 2, 436, 7, + 436, 2, 437, 7, 437, 2, 438, 7, 438, 2, 439, 7, 439, 2, 440, 7, 440, 2, + 441, 7, 441, 2, 442, 7, 442, 2, 443, 7, 443, 2, 444, 7, 444, 2, 445, 7, + 445, 2, 446, 7, 446, 2, 447, 7, 447, 2, 448, 7, 448, 2, 449, 7, 449, 2, + 450, 7, 450, 2, 451, 7, 451, 2, 452, 7, 452, 2, 453, 7, 453, 2, 454, 7, + 454, 2, 455, 7, 455, 2, 456, 7, 456, 2, 457, 7, 457, 2, 458, 7, 458, 2, + 459, 7, 459, 2, 460, 7, 460, 2, 461, 7, 461, 2, 462, 7, 462, 2, 463, 7, + 463, 2, 464, 7, 464, 2, 465, 7, 465, 2, 466, 7, 466, 2, 467, 7, 467, 2, + 468, 7, 468, 2, 469, 7, 469, 2, 470, 7, 470, 2, 471, 7, 471, 2, 472, 7, + 472, 2, 473, 7, 473, 2, 474, 7, 474, 2, 475, 7, 475, 2, 476, 7, 476, 2, + 477, 7, 477, 2, 478, 7, 478, 2, 479, 7, 479, 2, 480, 7, 480, 2, 481, 7, + 481, 2, 482, 7, 482, 2, 483, 7, 483, 2, 484, 7, 484, 2, 485, 7, 485, 2, + 486, 7, 486, 2, 487, 7, 487, 2, 488, 7, 488, 2, 489, 7, 489, 2, 490, 7, + 490, 2, 491, 7, 491, 2, 492, 7, 492, 2, 493, 7, 493, 2, 494, 7, 494, 2, + 495, 7, 495, 2, 496, 7, 496, 2, 497, 7, 497, 2, 498, 7, 498, 2, 499, 7, + 499, 2, 500, 7, 500, 2, 501, 7, 501, 2, 502, 7, 502, 2, 503, 7, 503, 2, + 504, 7, 504, 2, 505, 7, 505, 2, 506, 7, 506, 2, 507, 7, 507, 2, 508, 7, + 508, 2, 509, 7, 509, 2, 510, 7, 510, 2, 511, 7, 511, 2, 512, 7, 512, 2, + 513, 7, 513, 2, 514, 7, 514, 2, 515, 7, 515, 2, 516, 7, 516, 2, 517, 7, + 517, 2, 518, 7, 518, 2, 519, 7, 519, 2, 520, 7, 520, 2, 521, 7, 521, 2, + 522, 7, 522, 2, 523, 7, 523, 2, 524, 7, 524, 2, 525, 7, 525, 2, 526, 7, + 526, 2, 527, 7, 527, 2, 528, 7, 528, 2, 529, 7, 529, 2, 530, 7, 530, 2, + 531, 7, 531, 2, 532, 7, 532, 2, 533, 7, 533, 2, 534, 7, 534, 2, 535, 7, + 535, 2, 536, 7, 536, 2, 537, 7, 537, 2, 538, 7, 538, 2, 539, 7, 539, 2, + 540, 7, 540, 2, 541, 7, 541, 2, 542, 7, 542, 2, 543, 7, 543, 2, 544, 7, + 544, 2, 545, 7, 545, 2, 546, 7, 546, 2, 547, 7, 547, 2, 548, 7, 548, 2, + 549, 7, 549, 2, 550, 7, 550, 2, 551, 7, 551, 2, 552, 7, 552, 2, 553, 7, + 553, 2, 554, 7, 554, 2, 555, 7, 555, 2, 556, 7, 556, 2, 557, 7, 557, 2, + 558, 7, 558, 2, 559, 7, 559, 2, 560, 7, 560, 2, 561, 7, 561, 2, 562, 7, + 562, 2, 563, 7, 563, 2, 564, 7, 564, 2, 565, 7, 565, 2, 566, 7, 566, 2, + 567, 7, 567, 2, 568, 7, 568, 2, 569, 7, 569, 2, 570, 7, 570, 2, 571, 7, + 571, 2, 572, 7, 572, 2, 573, 7, 573, 2, 574, 7, 574, 2, 575, 7, 575, 2, + 576, 7, 576, 2, 577, 7, 577, 2, 578, 7, 578, 2, 579, 7, 579, 2, 580, 7, + 580, 2, 581, 7, 581, 2, 582, 7, 582, 2, 583, 7, 583, 2, 584, 7, 584, 2, + 585, 7, 585, 2, 586, 7, 586, 2, 587, 7, 587, 2, 588, 7, 588, 2, 589, 7, + 589, 2, 590, 7, 590, 2, 591, 7, 591, 2, 592, 7, 592, 2, 593, 7, 593, 2, + 594, 7, 594, 2, 595, 7, 595, 2, 596, 7, 596, 2, 597, 7, 597, 2, 598, 7, + 598, 2, 599, 7, 599, 2, 600, 7, 600, 2, 601, 7, 601, 2, 602, 7, 602, 2, + 603, 7, 603, 2, 604, 7, 604, 2, 605, 7, 605, 2, 606, 7, 606, 2, 607, 7, + 607, 2, 608, 7, 608, 2, 609, 7, 609, 2, 610, 7, 610, 2, 611, 7, 611, 2, + 612, 7, 612, 2, 613, 7, 613, 2, 614, 7, 614, 2, 615, 7, 615, 2, 616, 7, + 616, 2, 617, 7, 617, 2, 618, 7, 618, 2, 619, 7, 619, 2, 620, 7, 620, 2, + 621, 7, 621, 2, 622, 7, 622, 2, 623, 7, 623, 2, 624, 7, 624, 2, 625, 7, + 625, 2, 626, 7, 626, 2, 627, 7, 627, 2, 628, 7, 628, 2, 629, 7, 629, 2, + 630, 7, 630, 2, 631, 7, 631, 2, 632, 7, 632, 2, 633, 7, 633, 2, 634, 7, + 634, 2, 635, 7, 635, 2, 636, 7, 636, 2, 637, 7, 637, 2, 638, 7, 638, 2, + 639, 7, 639, 2, 640, 7, 640, 2, 641, 7, 641, 2, 642, 7, 642, 2, 643, 7, + 643, 2, 644, 7, 644, 2, 645, 7, 645, 2, 646, 7, 646, 2, 647, 7, 647, 2, + 648, 7, 648, 2, 649, 7, 649, 2, 650, 7, 650, 2, 651, 7, 651, 2, 652, 7, + 652, 2, 653, 7, 653, 2, 654, 7, 654, 2, 655, 7, 655, 2, 656, 7, 656, 2, + 657, 7, 657, 2, 658, 7, 658, 2, 659, 7, 659, 2, 660, 7, 660, 2, 661, 7, + 661, 2, 662, 7, 662, 2, 663, 7, 663, 2, 664, 7, 664, 2, 665, 7, 665, 2, + 666, 7, 666, 2, 667, 7, 667, 2, 668, 7, 668, 2, 669, 7, 669, 2, 670, 7, + 670, 2, 671, 7, 671, 2, 672, 7, 672, 2, 673, 7, 673, 2, 674, 7, 674, 2, + 675, 7, 675, 2, 676, 7, 676, 2, 677, 7, 677, 2, 678, 7, 678, 2, 679, 7, + 679, 2, 680, 7, 680, 2, 681, 7, 681, 2, 682, 7, 682, 2, 683, 7, 683, 2, + 684, 7, 684, 2, 685, 7, 685, 2, 686, 7, 686, 2, 687, 7, 687, 2, 688, 7, + 688, 2, 689, 7, 689, 2, 690, 7, 690, 2, 691, 7, 691, 2, 692, 7, 692, 2, + 693, 7, 693, 2, 694, 7, 694, 2, 695, 7, 695, 2, 696, 7, 696, 2, 697, 7, + 697, 2, 698, 7, 698, 2, 699, 7, 699, 2, 700, 7, 700, 2, 701, 7, 701, 2, + 702, 7, 702, 2, 703, 7, 703, 2, 704, 7, 704, 2, 705, 7, 705, 2, 706, 7, + 706, 2, 707, 7, 707, 2, 708, 7, 708, 2, 709, 7, 709, 2, 710, 7, 710, 2, + 711, 7, 711, 2, 712, 7, 712, 2, 713, 7, 713, 2, 714, 7, 714, 2, 715, 7, + 715, 2, 716, 7, 716, 2, 717, 7, 717, 2, 718, 7, 718, 2, 719, 7, 719, 2, + 720, 7, 720, 2, 721, 7, 721, 2, 722, 7, 722, 2, 723, 7, 723, 2, 724, 7, + 724, 2, 725, 7, 725, 2, 726, 7, 726, 2, 727, 7, 727, 2, 728, 7, 728, 2, + 729, 7, 729, 2, 730, 7, 730, 2, 731, 7, 731, 2, 732, 7, 732, 2, 733, 7, + 733, 2, 734, 7, 734, 2, 735, 7, 735, 2, 736, 7, 736, 2, 737, 7, 737, 2, + 738, 7, 738, 2, 739, 7, 739, 2, 740, 7, 740, 2, 741, 7, 741, 2, 742, 7, + 742, 2, 743, 7, 743, 2, 744, 7, 744, 2, 745, 7, 745, 2, 746, 7, 746, 2, + 747, 7, 747, 2, 748, 7, 748, 2, 749, 7, 749, 2, 750, 7, 750, 2, 751, 7, + 751, 2, 752, 7, 752, 2, 753, 7, 753, 2, 754, 7, 754, 2, 755, 7, 755, 2, + 756, 7, 756, 2, 757, 7, 757, 2, 758, 7, 758, 2, 759, 7, 759, 2, 760, 7, + 760, 2, 761, 7, 761, 2, 762, 7, 762, 2, 763, 7, 763, 2, 764, 7, 764, 2, + 765, 7, 765, 2, 766, 7, 766, 2, 767, 7, 767, 2, 768, 7, 768, 2, 769, 7, + 769, 2, 770, 7, 770, 2, 771, 7, 771, 2, 772, 7, 772, 2, 773, 7, 773, 2, + 774, 7, 774, 2, 775, 7, 775, 2, 776, 7, 776, 2, 777, 7, 777, 2, 778, 7, + 778, 2, 779, 7, 779, 2, 780, 7, 780, 2, 781, 7, 781, 2, 782, 7, 782, 2, + 783, 7, 783, 2, 784, 7, 784, 2, 785, 7, 785, 2, 786, 7, 786, 2, 787, 7, + 787, 2, 788, 7, 788, 2, 789, 7, 789, 2, 790, 7, 790, 2, 791, 7, 791, 2, + 792, 7, 792, 2, 793, 7, 793, 2, 794, 7, 794, 2, 795, 7, 795, 2, 796, 7, + 796, 2, 797, 7, 797, 2, 798, 7, 798, 2, 799, 7, 799, 2, 800, 7, 800, 2, + 801, 7, 801, 2, 802, 7, 802, 2, 803, 7, 803, 2, 804, 7, 804, 2, 805, 7, + 805, 2, 806, 7, 806, 2, 807, 7, 807, 2, 808, 7, 808, 2, 809, 7, 809, 2, + 810, 7, 810, 2, 811, 7, 811, 2, 812, 7, 812, 2, 813, 7, 813, 2, 814, 7, + 814, 2, 815, 7, 815, 2, 816, 7, 816, 2, 817, 7, 817, 2, 818, 7, 818, 2, + 819, 7, 819, 2, 820, 7, 820, 2, 821, 7, 821, 2, 822, 7, 822, 2, 823, 7, + 823, 2, 824, 7, 824, 2, 825, 7, 825, 2, 826, 7, 826, 2, 827, 7, 827, 2, + 828, 7, 828, 2, 829, 7, 829, 2, 830, 7, 830, 2, 831, 7, 831, 2, 832, 7, + 832, 2, 833, 7, 833, 2, 834, 7, 834, 2, 835, 7, 835, 2, 836, 7, 836, 2, + 837, 7, 837, 2, 838, 7, 838, 2, 839, 7, 839, 2, 840, 7, 840, 2, 841, 7, + 841, 2, 842, 7, 842, 2, 843, 7, 843, 2, 844, 7, 844, 2, 845, 7, 845, 2, + 846, 7, 846, 2, 847, 7, 847, 2, 848, 7, 848, 2, 849, 7, 849, 2, 850, 7, + 850, 2, 851, 7, 851, 2, 852, 7, 852, 2, 853, 7, 853, 2, 854, 7, 854, 2, + 855, 7, 855, 2, 856, 7, 856, 2, 857, 7, 857, 2, 858, 7, 858, 2, 859, 7, + 859, 2, 860, 7, 860, 2, 861, 7, 861, 2, 862, 7, 862, 2, 863, 7, 863, 2, + 864, 7, 864, 2, 865, 7, 865, 2, 866, 7, 866, 2, 867, 7, 867, 2, 868, 7, + 868, 2, 869, 7, 869, 2, 870, 7, 870, 2, 871, 7, 871, 2, 872, 7, 872, 2, + 873, 7, 873, 2, 874, 7, 874, 2, 875, 7, 875, 2, 876, 7, 876, 2, 877, 7, + 877, 2, 878, 7, 878, 2, 879, 7, 879, 2, 880, 7, 880, 2, 881, 7, 881, 2, + 882, 7, 882, 2, 883, 7, 883, 2, 884, 7, 884, 2, 885, 7, 885, 2, 886, 7, + 886, 2, 887, 7, 887, 2, 888, 7, 888, 2, 889, 7, 889, 2, 890, 7, 890, 2, + 891, 7, 891, 2, 892, 7, 892, 2, 893, 7, 893, 2, 894, 7, 894, 2, 895, 7, + 895, 2, 896, 7, 896, 2, 897, 7, 897, 2, 898, 7, 898, 2, 899, 7, 899, 2, + 900, 7, 900, 2, 901, 7, 901, 2, 902, 7, 902, 2, 903, 7, 903, 2, 904, 7, + 904, 2, 905, 7, 905, 2, 906, 7, 906, 2, 907, 7, 907, 2, 908, 7, 908, 2, + 909, 7, 909, 2, 910, 7, 910, 2, 911, 7, 911, 2, 912, 7, 912, 2, 913, 7, + 913, 2, 914, 7, 914, 2, 915, 7, 915, 2, 916, 7, 916, 2, 917, 7, 917, 2, + 918, 7, 918, 2, 919, 7, 919, 2, 920, 7, 920, 2, 921, 7, 921, 2, 922, 7, + 922, 2, 923, 7, 923, 2, 924, 7, 924, 2, 925, 7, 925, 2, 926, 7, 926, 2, + 927, 7, 927, 2, 928, 7, 928, 2, 929, 7, 929, 2, 930, 7, 930, 2, 931, 7, + 931, 2, 932, 7, 932, 2, 933, 7, 933, 2, 934, 7, 934, 2, 935, 7, 935, 2, + 936, 7, 936, 2, 937, 7, 937, 2, 938, 7, 938, 2, 939, 7, 939, 2, 940, 7, + 940, 2, 941, 7, 941, 2, 942, 7, 942, 2, 943, 7, 943, 2, 944, 7, 944, 2, + 945, 7, 945, 2, 946, 7, 946, 2, 947, 7, 947, 2, 948, 7, 948, 2, 949, 7, + 949, 2, 950, 7, 950, 2, 951, 7, 951, 2, 952, 7, 952, 2, 953, 7, 953, 2, + 954, 7, 954, 2, 955, 7, 955, 2, 956, 7, 956, 2, 957, 7, 957, 2, 958, 7, + 958, 2, 959, 7, 959, 2, 960, 7, 960, 2, 961, 7, 961, 2, 962, 7, 962, 2, + 963, 7, 963, 2, 964, 7, 964, 2, 965, 7, 965, 2, 966, 7, 966, 2, 967, 7, + 967, 2, 968, 7, 968, 2, 969, 7, 969, 2, 970, 7, 970, 2, 971, 7, 971, 2, + 972, 7, 972, 2, 973, 7, 973, 2, 974, 7, 974, 2, 975, 7, 975, 2, 976, 7, + 976, 2, 977, 7, 977, 2, 978, 7, 978, 2, 979, 7, 979, 2, 980, 7, 980, 2, + 981, 7, 981, 2, 982, 7, 982, 2, 983, 7, 983, 2, 984, 7, 984, 2, 985, 7, + 985, 2, 986, 7, 986, 2, 987, 7, 987, 2, 988, 7, 988, 2, 989, 7, 989, 2, + 990, 7, 990, 2, 991, 7, 991, 2, 992, 7, 992, 2, 993, 7, 993, 2, 994, 7, + 994, 2, 995, 7, 995, 2, 996, 7, 996, 2, 997, 7, 997, 2, 998, 7, 998, 2, + 999, 7, 999, 2, 1000, 7, 1000, 2, 1001, 7, 1001, 2, 1002, 7, 1002, 2, 1003, + 7, 1003, 2, 1004, 7, 1004, 2, 1005, 7, 1005, 2, 1006, 7, 1006, 2, 1007, + 7, 1007, 2, 1008, 7, 1008, 2, 1009, 7, 1009, 2, 1010, 7, 1010, 2, 1011, + 7, 1011, 2, 1012, 7, 1012, 2, 1013, 7, 1013, 2, 1014, 7, 1014, 2, 1015, + 7, 1015, 2, 1016, 7, 1016, 2, 1017, 7, 1017, 2, 1018, 7, 1018, 2, 1019, + 7, 1019, 2, 1020, 7, 1020, 2, 1021, 7, 1021, 2, 1022, 7, 1022, 2, 1023, + 7, 1023, 2, 1024, 7, 1024, 2, 1025, 7, 1025, 2, 1026, 7, 1026, 2, 1027, + 7, 1027, 2, 1028, 7, 1028, 2, 1029, 7, 1029, 2, 1030, 7, 1030, 2, 1031, + 7, 1031, 2, 1032, 7, 1032, 2, 1033, 7, 1033, 2, 1034, 7, 1034, 2, 1035, + 7, 1035, 2, 1036, 7, 1036, 2, 1037, 7, 1037, 2, 1038, 7, 1038, 2, 1039, + 7, 1039, 2, 1040, 7, 1040, 2, 1041, 7, 1041, 2, 1042, 7, 1042, 2, 1043, + 7, 1043, 2, 1044, 7, 1044, 2, 1045, 7, 1045, 2, 1046, 7, 1046, 2, 1047, + 7, 1047, 2, 1048, 7, 1048, 2, 1049, 7, 1049, 2, 1050, 7, 1050, 2, 1051, + 7, 1051, 2, 1052, 7, 1052, 2, 1053, 7, 1053, 2, 1054, 7, 1054, 2, 1055, + 7, 1055, 2, 1056, 7, 1056, 2, 1057, 7, 1057, 2, 1058, 7, 1058, 2, 1059, + 7, 1059, 2, 1060, 7, 1060, 2, 1061, 7, 1061, 2, 1062, 7, 1062, 2, 1063, + 7, 1063, 2, 1064, 7, 1064, 2, 1065, 7, 1065, 2, 1066, 7, 1066, 2, 1067, + 7, 1067, 2, 1068, 7, 1068, 2, 1069, 7, 1069, 2, 1070, 7, 1070, 2, 1071, + 7, 1071, 2, 1072, 7, 1072, 2, 1073, 7, 1073, 2, 1074, 7, 1074, 2, 1075, + 7, 1075, 2, 1076, 7, 1076, 2, 1077, 7, 1077, 2, 1078, 7, 1078, 2, 1079, + 7, 1079, 2, 1080, 7, 1080, 2, 1081, 7, 1081, 2, 1082, 7, 1082, 2, 1083, + 7, 1083, 2, 1084, 7, 1084, 2, 1085, 7, 1085, 2, 1086, 7, 1086, 2, 1087, + 7, 1087, 2, 1088, 7, 1088, 2, 1089, 7, 1089, 2, 1090, 7, 1090, 2, 1091, + 7, 1091, 2, 1092, 7, 1092, 2, 1093, 7, 1093, 2, 1094, 7, 1094, 2, 1095, + 7, 1095, 2, 1096, 7, 1096, 2, 1097, 7, 1097, 2, 1098, 7, 1098, 2, 1099, + 7, 1099, 2, 1100, 7, 1100, 2, 1101, 7, 1101, 2, 1102, 7, 1102, 2, 1103, + 7, 1103, 2, 1104, 7, 1104, 2, 1105, 7, 1105, 2, 1106, 7, 1106, 2, 1107, + 7, 1107, 2, 1108, 7, 1108, 2, 1109, 7, 1109, 2, 1110, 7, 1110, 2, 1111, + 7, 1111, 2, 1112, 7, 1112, 2, 1113, 7, 1113, 2, 1114, 7, 1114, 2, 1115, + 7, 1115, 2, 1116, 7, 1116, 2, 1117, 7, 1117, 2, 1118, 7, 1118, 2, 1119, + 7, 1119, 2, 1120, 7, 1120, 2, 1121, 7, 1121, 2, 1122, 7, 1122, 2, 1123, + 7, 1123, 2, 1124, 7, 1124, 2, 1125, 7, 1125, 2, 1126, 7, 1126, 2, 1127, + 7, 1127, 2, 1128, 7, 1128, 2, 1129, 7, 1129, 2, 1130, 7, 1130, 2, 1131, + 7, 1131, 2, 1132, 7, 1132, 2, 1133, 7, 1133, 2, 1134, 7, 1134, 2, 1135, + 7, 1135, 2, 1136, 7, 1136, 2, 1137, 7, 1137, 2, 1138, 7, 1138, 2, 1139, + 7, 1139, 2, 1140, 7, 1140, 2, 1141, 7, 1141, 2, 1142, 7, 1142, 2, 1143, + 7, 1143, 2, 1144, 7, 1144, 2, 1145, 7, 1145, 2, 1146, 7, 1146, 2, 1147, + 7, 1147, 2, 1148, 7, 1148, 2, 1149, 7, 1149, 2, 1150, 7, 1150, 2, 1151, + 7, 1151, 2, 1152, 7, 1152, 2, 1153, 7, 1153, 2, 1154, 7, 1154, 2, 1155, + 7, 1155, 2, 1156, 7, 1156, 2, 1157, 7, 1157, 2, 1158, 7, 1158, 2, 1159, + 7, 1159, 2, 1160, 7, 1160, 2, 1161, 7, 1161, 2, 1162, 7, 1162, 2, 1163, + 7, 1163, 2, 1164, 7, 1164, 1, 0, 4, 0, 2333, 8, 0, 11, 0, 12, 0, 2334, + 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 2344, 8, 1, 11, 1, 12, + 1, 2345, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 2357, + 8, 2, 10, 2, 12, 2, 2360, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, + 3, 1, 3, 1, 3, 5, 3, 2371, 8, 3, 10, 3, 12, 3, 2374, 9, 3, 1, 3, 3, 3, + 2377, 8, 3, 1, 3, 5, 3, 2380, 8, 3, 10, 3, 12, 3, 2383, 9, 3, 1, 3, 3, + 3, 2386, 8, 3, 1, 3, 1, 3, 3, 3, 2390, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, + 3, 2396, 8, 3, 1, 3, 1, 3, 3, 3, 2400, 8, 3, 3, 3, 2402, 8, 3, 1, 3, 1, + 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, + 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, + 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, + 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, + 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, + 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, + 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, + 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, + 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, + 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, + 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, + 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, + 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, + 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, + 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, + 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, + 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, + 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, + 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, + 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, + 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, + 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, + 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, + 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, + 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, + 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, + 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, + 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, + 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, + 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, + 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, + 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, + 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, + 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, + 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, + 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, + 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, + 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, + 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, + 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, + 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, + 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, + 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, + 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, + 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, + 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, + 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, + 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, + 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, + 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 76, 1, + 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, + 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, + 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, + 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, + 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, + 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, + 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, + 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, + 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, + 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, + 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, + 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, + 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, + 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, + 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, + 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, + 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, + 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, + 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, + 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, + 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, + 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, + 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, + 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, + 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, + 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, + 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, + 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, + 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, + 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, + 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, + 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, + 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, + 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, + 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, + 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, + 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, + 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, + 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, + 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, + 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, + 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, + 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, + 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, + 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, + 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, + 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, + 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, + 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, + 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, + 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, + 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, + 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, + 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, + 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, + 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, + 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, + 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, + 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, + 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, + 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, + 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, + 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, + 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, + 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, + 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, + 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, + 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, + 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, + 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, + 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, + 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, + 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, + 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, + 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, + 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, + 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, + 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, + 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, + 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, + 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, + 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, + 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, + 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, + 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, + 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, + 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, + 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, + 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, + 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, + 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, + 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, + 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, + 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, + 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, + 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, + 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, + 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, + 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, + 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, + 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, + 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, + 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, + 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, + 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, + 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, + 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, + 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, + 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, + 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, + 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, + 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, + 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, + 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, + 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, + 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, + 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, + 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, + 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, + 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, + 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, + 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, + 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, + 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, + 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, + 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, + 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, + 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, + 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, + 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, + 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, + 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, + 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, + 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, + 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, + 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, + 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, + 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, + 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, + 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, + 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, + 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, + 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, + 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, + 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, + 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, + 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, + 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, + 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, + 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, + 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 251, + 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, + 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, + 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, + 1, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, + 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, + 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, + 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, + 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, + 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, + 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, + 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, + 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, + 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, + 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, + 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, + 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, + 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, + 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, + 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, + 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, + 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, + 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, + 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 266, + 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, + 1, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, + 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, + 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 269, + 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, + 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, + 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, + 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, + 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, + 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, + 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, + 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, + 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, + 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, + 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, + 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, + 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 276, 1, 276, + 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, + 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, + 1, 277, 1, 277, 1, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, + 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 279, + 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, + 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, + 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, + 1, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, + 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, + 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, + 1, 286, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, + 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, + 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, + 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, + 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 291, 1, 291, 1, 291, + 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, + 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, + 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 294, 1, 294, + 1, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 295, 1, 295, 1, 296, 1, 296, + 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, + 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, + 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, + 1, 299, 1, 299, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, + 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, + 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 303, 1, 303, 1, 303, + 1, 303, 1, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, + 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 305, 1, 305, 1, 305, + 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, + 1, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, + 1, 307, 1, 307, 1, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, + 1, 308, 1, 308, 1, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, + 1, 309, 1, 309, 1, 309, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, + 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 311, 1, 311, + 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, + 1, 311, 1, 311, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, + 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, + 1, 312, 1, 312, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, + 1, 313, 1, 313, 1, 313, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, + 1, 314, 1, 314, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, + 1, 315, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, + 1, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, + 1, 317, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, + 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, + 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, + 1, 320, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, + 1, 321, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 323, + 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, + 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 325, + 1, 325, 1, 325, 1, 325, 1, 325, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, + 1, 326, 1, 326, 1, 326, 1, 326, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, + 1, 327, 1, 327, 1, 327, 1, 327, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, + 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, + 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 330, + 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 331, 1, 331, 1, 331, + 1, 331, 1, 331, 1, 331, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, + 1, 332, 1, 332, 1, 332, 1, 332, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, + 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 334, 1, 334, 1, 334, 1, 334, + 1, 335, 1, 335, 1, 335, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, + 1, 336, 1, 336, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, + 1, 337, 1, 337, 1, 337, 1, 337, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, + 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, + 1, 338, 1, 338, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, + 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 340, + 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, + 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 341, 1, 341, 1, 341, 1, 341, + 1, 341, 1, 341, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, + 1, 343, 1, 343, 1, 343, 1, 343, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, + 1, 344, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 346, 1, 346, 1, 346, + 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 347, 1, 347, 1, 347, 1, 347, + 1, 347, 1, 347, 1, 348, 1, 348, 1, 348, 1, 348, 1, 348, 1, 348, 1, 349, + 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 350, + 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 1, 351, 1, 351, 1, 351, 1, 351, + 1, 351, 1, 351, 1, 351, 1, 351, 1, 352, 1, 352, 1, 352, 1, 352, 1, 352, + 1, 352, 1, 352, 1, 352, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, + 1, 353, 1, 353, 1, 353, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, + 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 355, + 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 356, 1, 356, 1, 356, + 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, + 1, 356, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 358, + 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 359, 1, 359, 1, 359, 1, 359, + 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 360, 1, 360, + 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 361, 1, 361, + 1, 361, 1, 361, 1, 361, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, + 1, 362, 1, 362, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, + 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 364, 1, 364, + 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, + 1, 364, 1, 365, 1, 365, 1, 365, 1, 365, 1, 365, 1, 365, 1, 365, 1, 365, + 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 367, 1, 367, + 1, 367, 1, 367, 1, 367, 1, 367, 1, 367, 1, 367, 1, 368, 1, 368, 1, 368, + 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 369, + 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, + 1, 369, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, + 1, 370, 1, 370, 1, 370, 1, 370, 3, 370, 5515, 8, 370, 1, 370, 1, 370, 1, + 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, + 370, 1, 370, 3, 370, 5530, 8, 370, 3, 370, 5532, 8, 370, 1, 371, 1, 371, + 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, + 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 373, + 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, + 1, 373, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, + 1, 374, 1, 374, 1, 374, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, + 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, + 1, 375, 1, 375, 1, 375, 1, 375, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, + 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, + 1, 376, 1, 376, 1, 376, 1, 376, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, + 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, + 1, 377, 1, 377, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, + 1, 378, 1, 378, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, + 1, 379, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, + 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 381, 1, 381, 1, 381, 1, 381, + 1, 381, 1, 382, 1, 382, 1, 382, 1, 382, 1, 383, 1, 383, 1, 383, 1, 383, + 1, 383, 1, 383, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, + 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 385, 1, 385, 1, 385, 1, 385, + 1, 385, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, + 1, 386, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, + 1, 387, 1, 387, 1, 387, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, + 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 389, 1, 389, + 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 390, 1, 390, 1, 390, + 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, + 1, 390, 1, 390, 1, 390, 1, 390, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, + 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 392, + 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, + 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 394, + 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 395, 1, 395, + 1, 395, 1, 395, 1, 395, 1, 396, 1, 396, 1, 396, 1, 397, 1, 397, 1, 397, + 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 398, 1, 398, 1, 398, + 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 399, 1, 399, + 1, 399, 1, 399, 1, 399, 1, 399, 1, 399, 1, 399, 1, 400, 1, 400, 1, 400, + 1, 400, 1, 400, 1, 400, 1, 400, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, + 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 402, 1, 402, 1, 402, 1, 402, + 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 403, 1, 403, + 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, + 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 404, 1, 404, + 1, 404, 1, 404, 1, 405, 1, 405, 1, 405, 1, 405, 1, 405, 1, 406, 1, 406, + 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 407, 1, 407, 1, 407, 1, 407, + 1, 407, 1, 407, 1, 407, 1, 407, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, + 1, 408, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 410, + 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 411, 1, 411, 1, 411, + 1, 411, 1, 411, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 413, + 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 414, 1, 414, 1, 414, + 1, 414, 1, 414, 1, 414, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, + 1, 415, 1, 415, 1, 415, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, + 1, 416, 1, 416, 1, 416, 1, 416, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, + 1, 417, 1, 417, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, + 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, + 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, + 1, 420, 1, 420, 1, 420, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, + 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, + 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 422, 1, 422, + 1, 422, 1, 422, 1, 422, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, + 1, 423, 1, 424, 1, 424, 1, 424, 1, 424, 1, 424, 1, 424, 1, 424, 1, 425, + 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, + 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 426, 1, 426, 1, 426, + 1, 426, 1, 426, 1, 426, 1, 426, 1, 427, 1, 427, 1, 427, 1, 427, 1, 427, + 1, 427, 1, 428, 1, 428, 1, 428, 1, 428, 1, 428, 1, 428, 1, 429, 1, 429, + 1, 429, 1, 429, 1, 429, 1, 429, 1, 430, 1, 430, 1, 430, 1, 430, 1, 430, + 1, 430, 1, 430, 1, 430, 1, 430, 1, 430, 1, 431, 1, 431, 1, 431, 1, 431, + 1, 431, 1, 431, 1, 431, 1, 431, 1, 432, 1, 432, 1, 432, 1, 432, 1, 432, + 1, 432, 1, 433, 1, 433, 1, 433, 1, 433, 1, 433, 1, 434, 1, 434, 1, 434, + 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 435, 1, 435, 1, 435, + 1, 435, 1, 435, 1, 435, 1, 435, 1, 435, 1, 436, 1, 436, 1, 436, 1, 436, + 1, 436, 1, 436, 1, 436, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, + 1, 437, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, + 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, + 1, 438, 1, 439, 1, 439, 1, 439, 1, 439, 1, 439, 1, 439, 1, 439, 1, 439, + 1, 440, 1, 440, 1, 440, 1, 440, 1, 440, 1, 441, 1, 441, 1, 441, 1, 441, + 1, 441, 1, 442, 1, 442, 1, 442, 1, 442, 1, 442, 1, 442, 1, 442, 1, 442, + 1, 443, 1, 443, 1, 443, 1, 443, 1, 443, 1, 444, 1, 444, 1, 444, 1, 444, + 1, 444, 1, 444, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, + 1, 445, 1, 445, 1, 445, 1, 445, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, + 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, + 1, 446, 1, 446, 1, 446, 1, 446, 1, 447, 1, 447, 1, 447, 1, 447, 1, 447, + 1, 447, 1, 447, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, + 1, 448, 1, 448, 1, 448, 1, 449, 1, 449, 1, 449, 1, 449, 1, 449, 1, 449, + 1, 449, 1, 449, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, + 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 451, 1, 451, 1, 451, + 1, 451, 1, 451, 1, 451, 1, 451, 1, 451, 1, 452, 1, 452, 1, 452, 1, 452, + 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, + 1, 452, 1, 453, 1, 453, 1, 453, 1, 453, 1, 453, 1, 453, 1, 453, 1, 453, + 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, + 1, 455, 1, 455, 1, 455, 1, 455, 1, 455, 1, 455, 1, 455, 1, 455, 1, 456, + 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, 1, 456, + 1, 457, 1, 457, 1, 457, 1, 457, 1, 457, 1, 457, 1, 457, 1, 457, 1, 458, + 1, 458, 1, 458, 1, 459, 1, 459, 1, 459, 1, 459, 1, 459, 1, 459, 1, 459, + 1, 459, 1, 459, 1, 459, 1, 460, 1, 460, 1, 460, 1, 460, 1, 461, 1, 461, + 1, 461, 1, 461, 1, 461, 1, 461, 1, 461, 1, 461, 1, 461, 1, 461, 1, 462, + 1, 462, 1, 462, 1, 462, 1, 462, 1, 462, 1, 462, 1, 463, 1, 463, 1, 463, + 1, 463, 1, 463, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, + 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 465, + 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 1, 466, + 1, 466, 1, 466, 1, 466, 1, 466, 1, 467, 1, 467, 1, 467, 1, 467, 1, 467, + 1, 467, 1, 467, 1, 468, 1, 468, 1, 468, 1, 468, 1, 468, 1, 469, 1, 469, + 1, 469, 1, 469, 1, 469, 1, 469, 1, 470, 1, 470, 1, 470, 1, 470, 1, 470, + 1, 471, 1, 471, 1, 471, 1, 471, 1, 471, 1, 471, 1, 472, 1, 472, 1, 472, + 1, 472, 1, 472, 1, 472, 1, 472, 1, 472, 1, 473, 1, 473, 1, 473, 1, 473, + 1, 473, 1, 474, 1, 474, 1, 474, 1, 474, 1, 474, 1, 474, 1, 474, 1, 475, + 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, + 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, 1, 475, + 1, 475, 1, 475, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, + 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, + 1, 476, 1, 476, 1, 476, 1, 476, 1, 476, 1, 477, 1, 477, 1, 477, 1, 477, + 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, 1, 477, + 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, + 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, + 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 478, 1, 479, 1, 479, 1, 479, + 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, 1, 479, + 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, + 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 480, 1, 481, 1, 481, + 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, 1, 481, + 1, 481, 1, 481, 1, 481, 1, 481, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, + 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, 1, 482, + 1, 482, 1, 482, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, + 1, 483, 1, 483, 1, 483, 1, 483, 1, 483, 1, 484, 1, 484, 1, 484, 1, 484, + 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, + 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 484, 1, 485, 1, 485, 1, 485, + 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 485, 1, 486, + 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, 1, 486, + 1, 486, 1, 486, 1, 486, 1, 486, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, + 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, 1, 487, + 1, 487, 1, 487, 1, 487, 1, 487, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, + 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, 1, 488, + 1, 488, 1, 488, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, + 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, 1, 489, + 1, 489, 1, 489, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, + 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 490, 1, 491, + 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, + 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, 1, 491, + 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, + 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 492, 1, 493, 1, 493, 1, 493, + 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, + 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 493, 1, 494, 1, 494, + 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, 1, 494, + 1, 494, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, + 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, + 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 495, 1, 496, + 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, + 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, 1, 496, + 1, 496, 1, 496, 1, 497, 1, 497, 1, 497, 1, 497, 1, 497, 1, 497, 1, 497, + 1, 497, 1, 497, 1, 498, 1, 498, 1, 498, 1, 498, 1, 498, 1, 498, 1, 498, + 1, 498, 1, 498, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, + 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, + 1, 499, 1, 499, 1, 499, 1, 499, 1, 499, 1, 500, 1, 500, 1, 500, 1, 500, + 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, + 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 500, 1, 501, + 1, 501, 1, 501, 1, 501, 1, 501, 1, 501, 1, 501, 1, 502, 1, 502, 1, 502, + 1, 502, 1, 502, 1, 502, 1, 502, 1, 503, 1, 503, 1, 503, 1, 503, 1, 503, + 1, 503, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, + 1, 504, 1, 504, 1, 504, 1, 504, 1, 504, 1, 505, 1, 505, 1, 505, 1, 505, + 1, 506, 1, 506, 1, 506, 1, 506, 1, 506, 1, 506, 1, 506, 1, 506, 1, 507, + 1, 507, 1, 507, 1, 507, 1, 507, 1, 507, 1, 507, 1, 507, 1, 507, 1, 508, + 1, 508, 1, 508, 1, 508, 1, 508, 1, 509, 1, 509, 1, 509, 1, 509, 1, 509, + 1, 509, 1, 509, 1, 510, 1, 510, 1, 510, 1, 510, 1, 510, 1, 510, 1, 511, + 1, 511, 1, 511, 1, 511, 1, 511, 1, 511, 1, 512, 1, 512, 1, 512, 1, 512, + 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 512, 1, 513, + 1, 513, 1, 513, 1, 513, 1, 513, 1, 514, 1, 514, 1, 514, 1, 514, 1, 514, + 1, 514, 1, 515, 1, 515, 1, 515, 1, 515, 1, 515, 1, 515, 1, 516, 1, 516, + 1, 516, 1, 516, 1, 516, 1, 516, 1, 517, 1, 517, 1, 517, 1, 517, 1, 517, + 1, 518, 1, 518, 1, 518, 1, 519, 1, 519, 1, 519, 1, 519, 1, 519, 1, 519, + 1, 519, 1, 519, 1, 520, 1, 520, 1, 520, 1, 520, 1, 520, 1, 520, 1, 520, + 1, 521, 1, 521, 1, 521, 1, 521, 1, 521, 1, 521, 1, 521, 1, 521, 1, 522, + 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, 1, 522, + 1, 522, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, 1, 523, + 1, 523, 1, 523, 1, 523, 1, 524, 1, 524, 1, 524, 1, 524, 1, 524, 1, 524, + 1, 524, 1, 525, 1, 525, 1, 525, 1, 525, 1, 525, 1, 525, 1, 525, 1, 525, + 1, 525, 1, 525, 1, 526, 1, 526, 1, 526, 1, 526, 1, 526, 1, 527, 1, 527, + 1, 527, 1, 527, 1, 527, 1, 528, 1, 528, 1, 528, 1, 528, 1, 528, 1, 528, + 1, 528, 1, 528, 1, 529, 1, 529, 1, 529, 1, 529, 1, 529, 1, 529, 1, 529, + 1, 530, 1, 530, 1, 530, 1, 531, 1, 531, 1, 531, 1, 532, 1, 532, 1, 532, + 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, 1, 532, + 1, 532, 1, 533, 1, 533, 1, 533, 1, 533, 1, 534, 1, 534, 1, 534, 1, 534, + 1, 534, 1, 534, 1, 534, 1, 535, 1, 535, 1, 535, 1, 535, 1, 535, 1, 536, + 1, 536, 1, 536, 1, 536, 1, 536, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, + 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, 1, 537, + 1, 537, 1, 537, 1, 538, 1, 538, 1, 538, 1, 538, 1, 538, 1, 538, 1, 538, + 1, 538, 1, 539, 1, 539, 1, 539, 1, 539, 1, 539, 1, 539, 1, 540, 1, 540, + 1, 540, 1, 540, 1, 540, 1, 540, 1, 540, 1, 540, 1, 540, 1, 540, 1, 541, + 1, 541, 1, 541, 1, 541, 1, 541, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, + 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, 1, 542, + 1, 542, 1, 542, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, + 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, + 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 543, 1, 544, 1, 544, + 1, 544, 1, 544, 1, 544, 1, 544, 1, 544, 1, 545, 1, 545, 1, 545, 1, 545, + 1, 545, 1, 545, 1, 545, 1, 545, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, + 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 546, 1, 547, + 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, 1, 547, + 1, 547, 1, 548, 1, 548, 1, 548, 1, 548, 1, 548, 1, 548, 1, 548, 1, 548, + 1, 548, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, + 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, 1, 549, + 1, 549, 1, 549, 1, 550, 1, 550, 1, 550, 1, 550, 1, 550, 1, 550, 1, 551, + 1, 551, 1, 551, 1, 551, 1, 551, 1, 551, 1, 551, 1, 552, 1, 552, 1, 552, + 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 552, 1, 553, + 1, 553, 1, 553, 1, 553, 1, 553, 1, 553, 1, 553, 1, 553, 1, 554, 1, 554, + 1, 554, 1, 554, 1, 554, 1, 555, 1, 555, 1, 555, 1, 555, 1, 555, 1, 555, + 1, 555, 1, 555, 1, 555, 1, 556, 1, 556, 1, 556, 1, 556, 1, 556, 1, 556, + 1, 556, 1, 556, 1, 556, 1, 556, 1, 557, 1, 557, 1, 557, 1, 557, 1, 557, + 1, 557, 1, 557, 1, 557, 1, 558, 1, 558, 1, 558, 1, 558, 1, 558, 1, 558, + 1, 558, 1, 558, 1, 558, 1, 559, 1, 559, 1, 559, 1, 559, 1, 559, 1, 560, + 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, 1, 560, + 1, 560, 1, 560, 1, 561, 1, 561, 1, 561, 1, 561, 1, 561, 1, 561, 1, 561, + 1, 561, 1, 562, 1, 562, 1, 562, 1, 562, 1, 562, 1, 562, 1, 562, 1, 562, + 1, 562, 1, 563, 1, 563, 1, 563, 1, 563, 1, 563, 1, 563, 1, 564, 1, 564, + 1, 564, 1, 564, 1, 564, 1, 564, 1, 565, 1, 565, 1, 565, 1, 565, 1, 565, + 1, 565, 1, 566, 1, 566, 1, 566, 1, 566, 1, 566, 1, 566, 1, 566, 1, 566, + 1, 567, 1, 567, 1, 567, 1, 567, 1, 567, 1, 567, 1, 567, 1, 567, 1, 568, + 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, 1, 568, + 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, + 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 569, 1, 570, + 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, 1, 570, + 1, 571, 1, 571, 1, 571, 1, 571, 1, 571, 1, 571, 1, 572, 1, 572, 1, 572, + 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, 1, 572, + 1, 572, 1, 572, 1, 572, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, + 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 573, 1, 574, + 1, 574, 1, 574, 1, 574, 1, 574, 1, 574, 1, 574, 1, 574, 1, 574, 1, 575, + 1, 575, 1, 575, 1, 575, 1, 575, 1, 575, 1, 575, 1, 576, 1, 576, 1, 576, + 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 576, 1, 577, + 1, 577, 1, 577, 1, 577, 1, 577, 1, 577, 1, 577, 1, 578, 1, 578, 1, 578, + 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, 1, 578, + 1, 578, 1, 578, 1, 578, 1, 578, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, + 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, + 1, 579, 1, 579, 1, 579, 1, 579, 1, 579, 1, 580, 1, 580, 1, 580, 1, 580, + 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, + 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 580, 1, 581, 1, 581, + 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, + 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, 1, 581, + 1, 581, 1, 581, 1, 581, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, + 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, + 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 582, 1, 583, 1, 583, 1, 583, + 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, + 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, 1, 583, + 1, 583, 1, 583, 1, 583, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, + 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, + 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, 1, 584, + 1, 584, 1, 584, 1, 584, 1, 584, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, + 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 585, 1, 586, 1, 586, + 1, 586, 1, 586, 1, 586, 1, 586, 1, 587, 1, 587, 1, 587, 1, 587, 1, 587, + 1, 587, 1, 587, 1, 587, 1, 588, 1, 588, 1, 588, 1, 588, 1, 588, 1, 588, + 1, 588, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, + 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, 1, 589, + 1, 589, 1, 590, 1, 590, 1, 590, 1, 590, 1, 590, 1, 590, 1, 590, 1, 590, + 1, 590, 1, 590, 1, 591, 1, 591, 1, 591, 1, 591, 1, 591, 1, 591, 1, 591, + 1, 591, 1, 592, 1, 592, 1, 592, 1, 592, 1, 592, 1, 592, 1, 593, 1, 593, + 1, 593, 1, 593, 1, 593, 1, 594, 1, 594, 1, 594, 1, 594, 1, 594, 1, 594, + 1, 594, 1, 594, 1, 594, 1, 595, 1, 595, 1, 595, 1, 595, 1, 595, 1, 595, + 1, 595, 1, 596, 1, 596, 1, 596, 1, 596, 1, 596, 1, 596, 1, 596, 1, 597, + 1, 597, 1, 597, 1, 597, 1, 598, 1, 598, 1, 598, 1, 598, 1, 598, 1, 599, + 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, 1, 599, + 1, 599, 1, 600, 1, 600, 1, 600, 1, 600, 1, 600, 1, 600, 1, 601, 1, 601, + 1, 601, 1, 601, 1, 601, 1, 601, 1, 601, 1, 601, 1, 601, 1, 601, 1, 602, + 1, 602, 1, 602, 1, 602, 1, 602, 1, 602, 1, 602, 1, 602, 1, 602, 1, 603, + 1, 603, 1, 603, 1, 603, 1, 603, 1, 603, 1, 603, 1, 603, 1, 603, 1, 604, + 1, 604, 1, 604, 1, 604, 1, 604, 1, 604, 1, 604, 1, 604, 1, 604, 1, 605, + 1, 605, 1, 605, 1, 605, 1, 605, 1, 605, 1, 605, 1, 606, 1, 606, 1, 606, + 1, 606, 1, 606, 1, 606, 1, 606, 1, 606, 1, 607, 1, 607, 1, 607, 1, 607, + 1, 607, 1, 607, 1, 608, 1, 608, 1, 608, 1, 608, 1, 608, 1, 608, 1, 608, + 1, 609, 1, 609, 1, 609, 1, 609, 1, 609, 1, 609, 1, 609, 1, 610, 1, 610, + 1, 610, 1, 610, 1, 610, 1, 610, 1, 610, 1, 611, 1, 611, 1, 611, 1, 611, + 1, 611, 1, 611, 1, 612, 1, 612, 1, 612, 1, 612, 1, 612, 1, 613, 1, 613, + 1, 613, 1, 613, 1, 613, 1, 613, 1, 613, 1, 613, 1, 613, 1, 614, 1, 614, + 1, 614, 1, 614, 1, 614, 1, 614, 1, 614, 1, 615, 1, 615, 1, 615, 1, 615, + 1, 615, 1, 616, 1, 616, 1, 616, 1, 616, 1, 616, 1, 616, 1, 616, 1, 617, + 1, 617, 1, 617, 1, 617, 1, 617, 1, 617, 1, 617, 1, 618, 1, 618, 1, 618, + 1, 618, 1, 618, 1, 618, 1, 618, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, + 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, 1, 619, + 1, 619, 1, 619, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, + 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, 1, 620, + 1, 620, 1, 620, 1, 620, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, + 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, 1, 621, + 1, 621, 1, 621, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, + 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, 1, 622, + 1, 622, 1, 622, 1, 623, 1, 623, 1, 623, 1, 623, 1, 623, 1, 623, 1, 623, + 1, 623, 1, 623, 1, 623, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, + 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 624, 1, 625, 1, 625, + 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, 1, 625, + 1, 626, 1, 626, 1, 626, 1, 626, 1, 626, 1, 626, 1, 627, 1, 627, 1, 627, + 1, 627, 1, 627, 1, 627, 1, 627, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, + 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, 1, 628, + 1, 628, 1, 628, 1, 628, 1, 628, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, + 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, 1, 629, + 1, 629, 1, 629, 1, 629, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, + 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, 1, 630, + 1, 630, 1, 630, 1, 630, 1, 630, 1, 631, 1, 631, 1, 631, 1, 631, 1, 631, + 1, 631, 1, 631, 1, 632, 1, 632, 1, 632, 1, 632, 1, 632, 1, 633, 1, 633, + 1, 633, 1, 633, 1, 633, 1, 633, 1, 633, 1, 633, 1, 634, 1, 634, 1, 634, + 1, 634, 1, 634, 1, 634, 1, 634, 1, 635, 1, 635, 1, 635, 1, 635, 1, 635, + 1, 635, 1, 635, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, + 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, 1, 636, + 1, 637, 1, 637, 1, 637, 1, 637, 1, 637, 1, 637, 1, 637, 1, 637, 1, 638, + 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, 1, 638, + 1, 638, 1, 638, 1, 638, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, + 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 639, 1, 640, + 1, 640, 1, 640, 1, 640, 1, 640, 1, 640, 1, 640, 1, 640, 1, 641, 1, 641, + 1, 641, 1, 641, 1, 641, 1, 641, 1, 642, 1, 642, 1, 642, 1, 642, 1, 642, + 1, 642, 1, 642, 1, 642, 1, 642, 1, 643, 1, 643, 1, 643, 1, 643, 1, 643, + 1, 643, 1, 643, 1, 643, 1, 643, 1, 643, 1, 643, 1, 644, 1, 644, 1, 644, + 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 644, 1, 645, + 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, 1, 645, + 1, 645, 1, 646, 1, 646, 1, 646, 1, 646, 1, 646, 1, 646, 1, 646, 1, 646, + 1, 646, 1, 646, 1, 647, 1, 647, 1, 647, 1, 647, 1, 647, 1, 647, 1, 647, + 1, 647, 1, 647, 1, 647, 1, 648, 1, 648, 1, 648, 1, 648, 1, 648, 1, 649, + 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, 1, 649, + 1, 649, 1, 649, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, + 1, 650, 1, 650, 1, 650, 1, 650, 1, 650, 1, 651, 1, 651, 1, 651, 1, 651, + 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, 1, 651, + 1, 651, 1, 652, 1, 652, 1, 652, 1, 652, 1, 652, 1, 652, 1, 652, 1, 652, + 1, 652, 1, 653, 1, 653, 1, 653, 1, 653, 1, 653, 1, 653, 1, 653, 1, 653, + 1, 653, 1, 654, 1, 654, 1, 654, 1, 654, 1, 654, 1, 654, 1, 654, 1, 654, + 1, 654, 1, 654, 1, 655, 1, 655, 1, 655, 1, 655, 1, 655, 1, 655, 1, 655, + 1, 655, 1, 655, 1, 655, 1, 656, 1, 656, 1, 656, 1, 656, 1, 656, 1, 656, + 1, 656, 1, 656, 1, 656, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, + 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, 1, 657, + 1, 657, 1, 657, 1, 658, 1, 658, 1, 658, 1, 658, 1, 658, 1, 658, 1, 658, + 1, 658, 1, 658, 1, 658, 1, 659, 1, 659, 1, 659, 1, 659, 1, 659, 1, 659, + 1, 659, 1, 659, 1, 660, 1, 660, 1, 660, 1, 660, 1, 660, 1, 660, 1, 661, + 1, 661, 1, 661, 1, 661, 1, 661, 1, 661, 1, 661, 1, 661, 1, 662, 1, 662, + 1, 662, 1, 662, 1, 662, 1, 663, 1, 663, 1, 663, 1, 663, 1, 663, 1, 663, + 1, 663, 1, 663, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, + 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 664, 1, 665, + 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, 1, 665, + 1, 665, 1, 666, 1, 666, 1, 666, 1, 666, 1, 666, 1, 666, 1, 667, 1, 667, + 1, 667, 1, 667, 1, 667, 1, 667, 1, 667, 1, 667, 1, 667, 1, 667, 1, 668, + 1, 668, 1, 668, 1, 668, 1, 668, 1, 669, 1, 669, 1, 669, 1, 669, 1, 669, + 1, 669, 1, 669, 1, 669, 1, 670, 1, 670, 1, 670, 1, 670, 1, 670, 1, 670, + 1, 670, 1, 670, 1, 671, 1, 671, 1, 671, 1, 671, 1, 671, 1, 672, 1, 672, + 1, 672, 1, 672, 1, 672, 1, 672, 1, 672, 1, 672, 1, 672, 1, 673, 1, 673, + 1, 673, 1, 673, 1, 673, 1, 673, 1, 673, 1, 674, 1, 674, 1, 674, 1, 674, + 1, 674, 1, 674, 1, 674, 1, 674, 1, 675, 1, 675, 1, 675, 1, 675, 1, 675, + 1, 676, 1, 676, 1, 676, 1, 676, 1, 676, 1, 676, 1, 676, 1, 676, 1, 677, + 1, 677, 1, 677, 1, 677, 1, 677, 1, 678, 1, 678, 1, 678, 1, 679, 1, 679, + 1, 679, 1, 679, 1, 680, 1, 680, 1, 680, 1, 680, 1, 681, 1, 681, 1, 681, + 1, 681, 1, 682, 1, 682, 1, 682, 1, 682, 1, 683, 1, 683, 1, 683, 1, 683, + 1, 684, 1, 684, 1, 684, 1, 684, 1, 685, 1, 685, 1, 685, 1, 685, 1, 685, + 1, 685, 1, 685, 1, 685, 1, 685, 1, 686, 1, 686, 1, 686, 1, 686, 1, 686, + 1, 686, 1, 686, 1, 686, 1, 687, 1, 687, 1, 687, 1, 687, 1, 687, 1, 687, + 1, 688, 1, 688, 1, 688, 1, 688, 1, 689, 1, 689, 1, 689, 1, 689, 1, 689, + 1, 690, 1, 690, 1, 690, 1, 690, 1, 690, 1, 690, 1, 690, 1, 691, 1, 691, + 1, 691, 1, 691, 1, 691, 1, 692, 1, 692, 1, 692, 1, 692, 1, 692, 1, 692, + 1, 692, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, 1, 693, + 1, 693, 1, 693, 1, 693, 1, 693, 1, 694, 1, 694, 1, 694, 1, 694, 1, 694, + 1, 694, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, + 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, + 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, 1, 695, + 1, 695, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, 1, 696, + 1, 696, 1, 696, 1, 696, 1, 696, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, + 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 697, 1, 698, + 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, 1, 698, + 1, 698, 1, 698, 1, 698, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, + 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, + 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, 1, 699, + 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, 1, 700, + 1, 700, 1, 700, 1, 700, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, + 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, 1, 701, + 1, 701, 1, 701, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, + 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, + 1, 702, 1, 702, 1, 702, 1, 702, 1, 702, 1, 703, 1, 703, 1, 703, 1, 703, + 1, 703, 1, 703, 1, 703, 1, 703, 1, 704, 1, 704, 1, 704, 1, 704, 1, 704, + 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, + 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 705, 1, 706, 1, 706, 1, 706, + 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, 1, 706, + 1, 706, 1, 706, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, + 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, + 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 707, 1, 708, 1, 708, 1, 708, + 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, 1, 708, + 1, 708, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, + 1, 709, 1, 709, 1, 709, 1, 709, 1, 709, 1, 710, 1, 710, 1, 710, 1, 710, + 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, + 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 710, 1, 711, + 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, + 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, + 1, 711, 1, 711, 1, 711, 1, 711, 1, 711, 1, 712, 1, 712, 1, 712, 1, 712, + 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, + 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, 1, 712, + 1, 712, 1, 712, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, + 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, + 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 713, 1, 714, 1, 714, + 1, 714, 1, 714, 1, 714, 1, 714, 1, 714, 1, 715, 1, 715, 1, 715, 1, 715, + 1, 715, 1, 715, 1, 715, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, + 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, 1, 716, + 1, 716, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, + 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, + 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 717, 1, 718, 1, 718, + 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, + 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, + 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 718, 1, 719, 1, 719, + 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, 1, 719, + 1, 720, 1, 720, 1, 720, 1, 720, 1, 720, 1, 720, 1, 720, 1, 720, 1, 721, + 1, 721, 1, 721, 1, 721, 1, 721, 1, 721, 1, 721, 1, 722, 1, 722, 1, 722, + 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, + 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 722, 1, 723, + 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, + 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, + 1, 723, 1, 723, 1, 723, 1, 723, 1, 723, 1, 724, 1, 724, 1, 724, 1, 724, + 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, + 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 724, 1, 725, + 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, + 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, 1, 725, + 1, 725, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, 1, 726, + 1, 726, 1, 726, 1, 726, 1, 727, 1, 727, 1, 727, 1, 727, 1, 727, 1, 727, + 1, 727, 1, 727, 1, 728, 1, 728, 1, 728, 1, 729, 1, 729, 1, 729, 1, 729, + 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, + 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, 1, 729, + 1, 729, 1, 729, 1, 729, 1, 730, 3, 730, 9176, 8, 730, 1, 730, 1, 730, 1, + 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, + 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, 730, 1, + 730, 1, 730, 1, 730, 1, 730, 1, 730, 3, 730, 9203, 8, 730, 1, 731, 1, 731, + 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, 1, 731, + 1, 731, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, + 1, 732, 1, 732, 1, 732, 1, 732, 1, 732, 1, 733, 1, 733, 1, 733, 1, 733, + 1, 733, 1, 733, 1, 733, 1, 733, 1, 733, 1, 734, 1, 734, 1, 734, 1, 734, + 1, 734, 1, 734, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, + 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, + 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 735, 1, 736, 1, 736, + 1, 736, 1, 736, 1, 736, 1, 736, 1, 736, 1, 737, 1, 737, 1, 737, 1, 737, + 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, + 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, 1, 737, + 1, 737, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, + 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, 1, 738, + 1, 738, 1, 738, 1, 738, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, + 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, 1, 739, + 1, 739, 1, 739, 1, 740, 1, 740, 1, 740, 1, 740, 1, 740, 1, 740, 1, 740, + 1, 740, 1, 740, 1, 741, 1, 741, 1, 741, 1, 741, 1, 741, 1, 741, 1, 742, + 1, 742, 1, 742, 1, 742, 1, 742, 1, 743, 1, 743, 1, 743, 1, 743, 1, 743, + 1, 743, 1, 743, 1, 744, 1, 744, 1, 744, 1, 744, 1, 744, 1, 744, 1, 744, + 1, 745, 1, 745, 1, 745, 1, 745, 1, 745, 1, 745, 1, 745, 1, 746, 1, 746, + 1, 746, 1, 746, 1, 746, 1, 746, 1, 746, 1, 747, 1, 747, 1, 747, 1, 747, + 1, 747, 1, 747, 1, 748, 1, 748, 1, 748, 1, 748, 1, 748, 1, 748, 1, 749, + 1, 749, 1, 749, 1, 749, 1, 749, 1, 749, 1, 750, 1, 750, 1, 750, 1, 750, + 1, 750, 1, 750, 1, 751, 1, 751, 1, 751, 1, 751, 1, 751, 1, 752, 1, 752, + 1, 752, 1, 752, 1, 752, 1, 752, 1, 752, 1, 752, 1, 753, 1, 753, 1, 753, + 1, 753, 1, 753, 1, 753, 1, 754, 1, 754, 1, 754, 1, 754, 1, 754, 1, 754, + 1, 754, 1, 754, 1, 755, 1, 755, 1, 755, 1, 755, 1, 755, 1, 755, 1, 755, + 1, 756, 1, 756, 1, 756, 1, 756, 1, 757, 1, 757, 1, 757, 1, 757, 1, 757, + 1, 757, 1, 757, 1, 757, 1, 758, 1, 758, 1, 758, 1, 758, 1, 758, 1, 758, + 1, 759, 1, 759, 1, 759, 1, 759, 1, 759, 1, 759, 1, 759, 1, 760, 1, 760, + 1, 760, 1, 760, 1, 761, 1, 761, 1, 761, 1, 761, 1, 761, 1, 761, 1, 761, + 1, 761, 1, 762, 1, 762, 1, 762, 1, 762, 1, 762, 1, 762, 1, 763, 1, 763, + 1, 763, 1, 763, 1, 763, 1, 763, 1, 764, 1, 764, 1, 764, 1, 764, 1, 764, + 1, 764, 1, 764, 1, 765, 1, 765, 1, 765, 1, 765, 1, 765, 1, 765, 1, 765, + 1, 766, 1, 766, 1, 766, 1, 766, 1, 766, 1, 766, 1, 766, 1, 767, 1, 767, + 1, 767, 1, 767, 1, 767, 1, 767, 1, 767, 1, 768, 1, 768, 1, 768, 1, 768, + 1, 768, 1, 768, 1, 769, 1, 769, 1, 769, 1, 769, 1, 769, 1, 769, 1, 769, + 1, 769, 1, 769, 1, 770, 1, 770, 1, 770, 1, 770, 1, 770, 1, 771, 1, 771, + 1, 771, 1, 771, 1, 771, 1, 772, 1, 772, 1, 772, 1, 772, 1, 772, 1, 772, + 1, 772, 1, 773, 1, 773, 1, 773, 1, 773, 1, 773, 1, 774, 1, 774, 1, 774, + 1, 774, 1, 774, 1, 775, 1, 775, 1, 775, 1, 775, 1, 775, 1, 775, 1, 776, + 1, 776, 1, 776, 1, 776, 1, 776, 1, 776, 1, 776, 1, 776, 1, 777, 1, 777, + 1, 777, 1, 777, 1, 777, 1, 777, 1, 778, 1, 778, 1, 778, 1, 778, 1, 778, + 1, 779, 1, 779, 1, 779, 1, 779, 1, 779, 1, 779, 1, 779, 1, 779, 1, 780, + 1, 780, 1, 780, 1, 780, 1, 780, 1, 780, 1, 780, 1, 780, 1, 781, 1, 781, + 1, 781, 1, 781, 1, 781, 1, 781, 1, 781, 1, 781, 1, 782, 1, 782, 1, 782, + 1, 782, 1, 782, 1, 782, 1, 782, 1, 782, 1, 782, 1, 782, 1, 783, 1, 783, + 1, 783, 1, 783, 1, 784, 1, 784, 1, 784, 1, 784, 1, 784, 1, 784, 1, 784, + 1, 784, 1, 784, 1, 784, 1, 785, 1, 785, 1, 785, 1, 785, 1, 785, 1, 785, + 1, 785, 1, 786, 1, 786, 1, 786, 1, 786, 1, 786, 1, 786, 1, 786, 1, 787, + 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, 1, 787, + 1, 787, 1, 788, 1, 788, 1, 788, 1, 788, 1, 788, 1, 788, 1, 788, 1, 789, + 1, 789, 1, 789, 1, 789, 1, 790, 1, 790, 1, 790, 1, 790, 1, 790, 1, 790, + 1, 790, 1, 790, 1, 790, 1, 790, 1, 790, 1, 791, 1, 791, 1, 791, 1, 791, + 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, + 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 791, 1, 792, 1, 792, 1, 792, + 1, 792, 1, 792, 1, 792, 1, 792, 1, 793, 1, 793, 1, 793, 1, 793, 1, 793, + 1, 793, 1, 793, 1, 793, 1, 793, 1, 793, 1, 793, 1, 794, 1, 794, 1, 794, + 1, 794, 1, 794, 1, 794, 1, 794, 1, 794, 1, 794, 1, 794, 1, 795, 1, 795, + 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, 1, 795, + 1, 795, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, + 1, 796, 1, 796, 1, 796, 1, 796, 1, 796, 1, 797, 1, 797, 1, 797, 1, 797, + 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, + 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 797, 1, 798, 1, 798, 1, 798, + 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, 1, 798, + 1, 798, 1, 798, 1, 798, 1, 799, 1, 799, 1, 799, 1, 799, 1, 799, 1, 799, + 1, 799, 1, 799, 1, 799, 1, 800, 1, 800, 1, 800, 1, 800, 1, 800, 1, 800, + 1, 800, 1, 800, 1, 800, 1, 800, 1, 800, 1, 801, 1, 801, 1, 801, 1, 801, + 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, 1, 801, + 1, 801, 1, 801, 1, 801, 1, 802, 1, 802, 1, 802, 1, 802, 1, 802, 1, 802, + 1, 802, 1, 802, 1, 802, 1, 802, 1, 802, 1, 803, 1, 803, 1, 803, 1, 803, + 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, 1, 803, + 1, 804, 1, 804, 1, 804, 1, 804, 1, 804, 1, 804, 1, 805, 1, 805, 1, 805, + 1, 805, 1, 805, 1, 805, 1, 805, 1, 805, 1, 806, 1, 806, 1, 806, 1, 806, + 1, 807, 1, 807, 1, 807, 1, 807, 1, 807, 1, 808, 1, 808, 1, 808, 1, 808, + 1, 808, 1, 808, 1, 808, 1, 808, 1, 809, 1, 809, 1, 809, 1, 809, 1, 809, + 1, 809, 1, 809, 1, 809, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, + 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 810, 1, 811, 1, 811, 1, 811, + 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, 1, 811, + 1, 812, 1, 812, 1, 812, 1, 812, 1, 812, 1, 813, 1, 813, 1, 813, 1, 813, + 1, 813, 1, 813, 1, 813, 1, 813, 1, 813, 1, 814, 1, 814, 1, 814, 1, 814, + 1, 814, 1, 815, 1, 815, 1, 815, 1, 815, 1, 815, 1, 815, 1, 815, 1, 816, + 1, 816, 1, 816, 1, 816, 1, 816, 1, 816, 1, 817, 1, 817, 1, 817, 1, 817, + 1, 817, 1, 817, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, + 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, 1, 818, + 1, 818, 1, 818, 1, 818, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, + 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, 1, 819, + 1, 819, 1, 819, 1, 819, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, + 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, 1, 820, + 1, 820, 1, 820, 1, 820, 1, 820, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, + 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, 1, 821, + 1, 821, 1, 821, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, + 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, 1, 822, + 1, 822, 1, 822, 1, 823, 1, 823, 1, 823, 1, 823, 1, 823, 1, 824, 1, 824, + 1, 824, 1, 824, 1, 824, 1, 824, 1, 825, 1, 825, 1, 825, 1, 825, 1, 825, + 1, 825, 1, 825, 1, 825, 1, 825, 1, 825, 1, 826, 1, 826, 1, 826, 1, 826, + 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, 1, 827, + 1, 827, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, 1, 828, + 1, 828, 1, 828, 1, 828, 1, 829, 1, 829, 1, 829, 1, 829, 1, 829, 1, 829, + 1, 829, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, + 1, 830, 1, 830, 1, 830, 1, 830, 1, 830, 1, 831, 1, 831, 1, 831, 1, 831, + 1, 831, 1, 832, 1, 832, 1, 832, 1, 832, 1, 832, 1, 832, 1, 832, 1, 832, + 1, 833, 1, 833, 1, 833, 1, 833, 1, 833, 1, 833, 1, 833, 1, 833, 1, 833, + 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, + 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 834, 1, 835, + 1, 835, 1, 835, 1, 835, 1, 835, 1, 835, 1, 835, 1, 835, 1, 836, 1, 836, + 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, 1, 836, + 1, 836, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, + 1, 837, 1, 837, 1, 837, 1, 837, 1, 837, 1, 838, 1, 838, 1, 838, 1, 838, + 1, 838, 1, 838, 1, 838, 1, 838, 1, 838, 1, 838, 1, 839, 1, 839, 1, 839, + 1, 839, 1, 839, 1, 839, 1, 839, 1, 839, 1, 839, 1, 840, 1, 840, 1, 840, + 1, 840, 1, 840, 1, 840, 1, 840, 1, 841, 1, 841, 1, 841, 1, 841, 1, 841, + 1, 841, 1, 841, 1, 841, 1, 841, 1, 841, 1, 842, 1, 842, 1, 842, 1, 842, + 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, 1, 842, + 1, 842, 1, 843, 1, 843, 1, 843, 1, 843, 1, 843, 1, 844, 1, 844, 1, 844, + 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 844, 1, 845, + 1, 845, 1, 845, 1, 845, 1, 846, 1, 846, 1, 846, 1, 846, 1, 847, 1, 847, + 1, 847, 1, 847, 1, 847, 1, 847, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, + 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, + 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, 1, 848, + 1, 848, 1, 848, 1, 848, 1, 848, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, + 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, + 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, 1, 849, + 1, 849, 1, 849, 1, 849, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, + 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, + 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 850, 1, 851, 1, 851, 1, 851, + 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, 1, 851, + 1, 851, 1, 851, 1, 852, 1, 852, 1, 852, 1, 852, 1, 852, 1, 852, 1, 852, + 1, 852, 1, 853, 1, 853, 1, 853, 1, 853, 1, 853, 1, 853, 1, 853, 1, 853, + 1, 853, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, 1, 854, + 1, 854, 1, 854, 1, 854, 1, 854, 1, 855, 1, 855, 1, 855, 1, 855, 1, 855, + 1, 855, 1, 855, 1, 855, 1, 856, 1, 856, 1, 856, 1, 856, 1, 856, 1, 856, + 1, 856, 1, 856, 1, 856, 1, 856, 1, 856, 1, 857, 1, 857, 1, 857, 1, 857, + 1, 857, 1, 857, 1, 857, 1, 857, 1, 857, 1, 857, 1, 858, 1, 858, 1, 858, + 1, 858, 1, 858, 1, 858, 1, 858, 1, 858, 1, 858, 1, 858, 1, 859, 1, 859, + 1, 859, 1, 859, 1, 859, 1, 859, 1, 859, 1, 860, 1, 860, 1, 860, 1, 860, + 1, 860, 1, 860, 1, 860, 1, 860, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, + 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 861, 1, 862, 1, 862, + 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, 1, 862, + 1, 862, 1, 863, 1, 863, 1, 863, 1, 863, 1, 863, 1, 863, 1, 863, 1, 863, + 1, 863, 1, 863, 1, 864, 1, 864, 1, 864, 1, 864, 1, 864, 1, 864, 1, 864, + 1, 864, 1, 864, 1, 865, 1, 865, 1, 865, 1, 865, 1, 866, 1, 866, 1, 866, + 1, 866, 1, 866, 1, 866, 1, 866, 1, 867, 1, 867, 1, 867, 1, 867, 1, 867, + 1, 867, 1, 867, 1, 867, 1, 868, 1, 868, 1, 868, 1, 868, 1, 868, 1, 868, + 1, 868, 1, 868, 1, 868, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, + 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, 1, 869, + 1, 869, 1, 869, 1, 870, 1, 870, 1, 870, 1, 870, 1, 870, 1, 870, 1, 870, + 1, 870, 1, 870, 1, 871, 1, 871, 1, 871, 1, 871, 1, 871, 1, 871, 1, 871, + 1, 872, 1, 872, 1, 872, 1, 872, 1, 873, 1, 873, 1, 873, 1, 873, 1, 873, + 1, 873, 1, 873, 1, 873, 1, 873, 1, 873, 1, 873, 1, 874, 1, 874, 1, 874, + 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, 1, 874, + 1, 874, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, + 1, 875, 1, 875, 1, 875, 1, 875, 1, 875, 1, 876, 1, 876, 1, 876, 1, 876, + 1, 876, 1, 876, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, + 1, 877, 1, 877, 1, 877, 1, 877, 1, 877, 1, 878, 1, 878, 1, 878, 1, 878, + 1, 878, 1, 878, 1, 879, 1, 879, 1, 879, 1, 879, 1, 879, 1, 879, 1, 879, + 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, 1, 880, + 1, 880, 1, 880, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, + 1, 881, 1, 881, 1, 881, 1, 881, 1, 881, 1, 882, 1, 882, 1, 882, 1, 882, + 1, 882, 1, 882, 1, 882, 1, 882, 1, 882, 1, 882, 1, 883, 1, 883, 1, 883, + 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, 1, 883, + 1, 883, 1, 883, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, + 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, 1, 884, + 1, 884, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, + 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 885, 1, 886, + 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, + 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, + 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 886, 1, 887, + 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, + 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, + 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 887, 1, 888, 1, 888, + 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, + 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 888, 1, 889, 1, 889, 1, 889, + 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, 1, 889, + 1, 889, 1, 889, 1, 889, 1, 889, 1, 890, 1, 890, 1, 890, 1, 890, 1, 890, + 1, 890, 1, 890, 1, 890, 1, 890, 1, 890, 1, 891, 1, 891, 1, 891, 1, 891, + 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, 1, 891, + 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, 1, 892, + 1, 892, 1, 892, 1, 892, 1, 892, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, + 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 893, 1, 894, 1, 894, + 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, 1, 894, + 1, 895, 1, 895, 1, 895, 1, 895, 1, 895, 1, 895, 1, 895, 1, 895, 1, 895, + 1, 896, 1, 896, 1, 896, 1, 896, 1, 896, 1, 896, 1, 896, 1, 896, 1, 897, + 1, 897, 1, 897, 1, 897, 1, 897, 1, 897, 1, 897, 1, 897, 1, 897, 1, 898, + 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, 1, 898, + 1, 898, 1, 898, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, + 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 899, 1, 900, 1, 900, + 1, 900, 1, 900, 1, 901, 1, 901, 1, 901, 1, 901, 1, 901, 1, 901, 1, 901, + 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, 1, 902, + 1, 902, 1, 902, 1, 903, 1, 903, 1, 903, 1, 903, 1, 903, 1, 903, 1, 903, + 1, 903, 1, 903, 1, 903, 1, 903, 1, 904, 1, 904, 1, 904, 1, 904, 1, 904, + 1, 904, 1, 904, 1, 904, 1, 904, 1, 904, 1, 905, 1, 905, 1, 905, 1, 905, + 1, 905, 1, 905, 1, 905, 1, 905, 1, 905, 1, 905, 1, 906, 1, 906, 1, 906, + 1, 906, 1, 906, 1, 906, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, + 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 907, 1, 908, + 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, 1, 908, + 1, 908, 1, 909, 1, 909, 1, 909, 1, 909, 1, 909, 1, 909, 1, 909, 1, 909, + 1, 909, 1, 910, 1, 910, 1, 910, 1, 910, 1, 910, 1, 910, 1, 910, 1, 910, + 1, 911, 1, 911, 1, 911, 1, 911, 1, 911, 1, 911, 1, 911, 1, 912, 1, 912, + 1, 912, 1, 912, 1, 912, 1, 912, 1, 912, 1, 912, 1, 912, 1, 913, 1, 913, + 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, 1, 913, + 1, 913, 1, 913, 1, 914, 1, 914, 1, 914, 1, 914, 1, 914, 1, 914, 1, 914, + 1, 914, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, + 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 915, 1, 916, 1, 916, + 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, 1, 916, + 1, 916, 1, 916, 1, 916, 1, 916, 1, 917, 1, 917, 1, 917, 1, 917, 1, 917, + 1, 917, 1, 917, 1, 917, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, + 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 918, 1, 919, 1, 919, + 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, 1, 919, + 1, 919, 1, 919, 1, 919, 1, 919, 1, 920, 1, 920, 1, 920, 1, 920, 1, 920, + 1, 920, 1, 921, 1, 921, 1, 921, 1, 921, 1, 921, 1, 921, 1, 922, 1, 922, + 1, 922, 1, 922, 1, 922, 1, 922, 1, 922, 1, 923, 1, 923, 1, 923, 1, 923, + 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, 1, 923, + 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, 1, 924, + 1, 924, 1, 924, 1, 924, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, + 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, 1, 925, + 1, 925, 1, 925, 1, 925, 1, 925, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, + 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, 1, 926, + 1, 926, 1, 926, 1, 926, 1, 926, 1, 927, 1, 927, 1, 927, 1, 928, 1, 928, + 1, 928, 1, 928, 1, 928, 1, 928, 1, 928, 1, 928, 1, 928, 1, 928, 1, 929, + 1, 929, 1, 929, 1, 929, 1, 929, 1, 929, 1, 929, 1, 930, 1, 930, 1, 930, + 1, 930, 1, 931, 1, 931, 1, 931, 1, 931, 1, 931, 1, 931, 1, 932, 1, 932, + 1, 932, 1, 932, 1, 932, 1, 933, 1, 933, 1, 933, 1, 933, 1, 933, 1, 933, + 1, 934, 1, 934, 1, 934, 1, 934, 1, 934, 1, 935, 1, 935, 1, 935, 1, 935, + 1, 935, 1, 935, 1, 936, 1, 936, 1, 936, 1, 936, 1, 936, 1, 936, 1, 936, + 1, 936, 1, 936, 1, 937, 1, 937, 1, 937, 1, 937, 1, 937, 1, 937, 1, 937, + 1, 937, 1, 937, 1, 938, 1, 938, 1, 938, 1, 938, 1, 938, 1, 938, 1, 938, + 1, 938, 1, 938, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, + 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, 1, 939, + 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, 1, 940, + 1, 940, 1, 940, 1, 940, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, + 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 941, 1, 942, 1, 942, 1, 942, + 1, 942, 1, 942, 1, 942, 1, 942, 1, 942, 1, 942, 1, 943, 1, 943, 1, 943, + 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, 1, 943, + 1, 943, 1, 943, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, + 1, 944, 1, 944, 1, 944, 1, 944, 1, 944, 1, 945, 1, 945, 1, 945, 1, 945, + 1, 945, 1, 945, 1, 945, 1, 945, 1, 945, 1, 945, 1, 945, 1, 946, 1, 946, + 1, 946, 1, 946, 1, 946, 1, 946, 1, 946, 1, 946, 1, 946, 1, 946, 1, 947, + 1, 947, 1, 947, 1, 947, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, + 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 948, 1, 949, + 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, 1, 949, + 1, 949, 1, 949, 1, 949, 1, 950, 1, 950, 1, 950, 1, 950, 1, 950, 1, 950, + 1, 950, 1, 950, 1, 950, 1, 950, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, + 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, 1, 951, + 1, 951, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, + 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 952, 1, 953, 1, 953, 1, 953, + 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, 1, 953, + 1, 953, 1, 953, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, + 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 954, 1, 955, 1, 955, 1, 955, + 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, + 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, 1, 955, + 1, 955, 1, 955, 1, 955, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, + 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, + 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 956, 1, 957, + 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, + 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, 1, 957, + 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, + 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, 1, 958, + 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, + 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, 1, 959, + 1, 959, 1, 959, 1, 959, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, + 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, + 1, 960, 1, 960, 1, 960, 1, 960, 1, 960, 1, 961, 1, 961, 1, 961, 1, 961, + 1, 961, 1, 961, 1, 961, 1, 961, 1, 961, 1, 961, 1, 961, 1, 962, 1, 962, + 1, 962, 1, 962, 1, 962, 1, 962, 1, 962, 1, 963, 1, 963, 1, 963, 1, 963, + 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, 1, 963, + 1, 963, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, + 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, 1, 964, + 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, 1, 965, + 1, 965, 1, 966, 1, 966, 1, 966, 1, 966, 1, 967, 1, 967, 1, 967, 1, 967, + 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, 1, 967, + 1, 968, 1, 968, 1, 968, 1, 968, 1, 969, 1, 969, 1, 969, 1, 969, 1, 969, + 1, 969, 1, 969, 1, 969, 1, 969, 1, 970, 1, 970, 1, 970, 1, 970, 1, 970, + 1, 970, 1, 970, 1, 970, 1, 970, 1, 970, 1, 970, 1, 971, 1, 971, 1, 971, + 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, 1, 971, + 1, 972, 1, 972, 1, 972, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, + 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 973, 1, 974, + 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, 1, 974, + 1, 974, 1, 974, 1, 974, 1, 975, 1, 975, 1, 975, 1, 975, 1, 975, 1, 975, + 1, 975, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, + 1, 976, 1, 976, 1, 976, 1, 976, 1, 976, 1, 977, 1, 977, 1, 977, 1, 977, + 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 977, 1, 978, + 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, + 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 978, 1, 979, 1, 979, 1, 979, + 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, 1, 979, + 1, 979, 1, 979, 1, 979, 1, 980, 1, 980, 1, 980, 1, 980, 1, 981, 1, 981, + 1, 981, 1, 981, 1, 981, 1, 981, 1, 982, 1, 982, 1, 982, 1, 982, 1, 982, + 1, 982, 1, 983, 1, 983, 1, 983, 1, 983, 1, 983, 1, 983, 1, 983, 1, 983, + 1, 984, 1, 984, 1, 984, 1, 984, 1, 984, 1, 985, 1, 985, 1, 985, 1, 985, + 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, 1, 985, + 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, 1, 986, + 1, 986, 1, 986, 1, 986, 1, 986, 1, 987, 1, 987, 1, 987, 1, 987, 1, 987, + 1, 987, 1, 987, 1, 987, 1, 988, 1, 988, 1, 988, 1, 988, 1, 988, 1, 988, + 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, 1, 989, + 1, 989, 1, 990, 1, 990, 1, 990, 1, 990, 1, 990, 1, 991, 1, 991, 1, 991, + 1, 991, 1, 991, 1, 991, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, + 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 992, 1, 993, 1, 993, 1, 993, + 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, + 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, + 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 993, 1, 994, 1, 994, 1, 994, + 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, 1, 994, + 1, 994, 1, 995, 1, 995, 1, 995, 1, 995, 1, 996, 1, 996, 1, 996, 1, 996, + 1, 996, 1, 997, 1, 997, 1, 997, 1, 997, 1, 997, 1, 998, 1, 998, 1, 998, + 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, 1, 998, + 1, 999, 1, 999, 1, 999, 1, 999, 1, 999, 1, 1000, 1, 1000, 1, 1000, 1, 1000, + 1, 1001, 1, 1001, 1, 1001, 1, 1001, 1, 1001, 1, 1001, 1, 1002, 1, 1002, + 1, 1002, 1, 1002, 1, 1002, 1, 1002, 1, 1002, 1, 1002, 1, 1003, 1, 1003, + 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, + 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, + 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, 1, 1003, + 1, 1003, 1, 1003, 1, 1004, 1, 1004, 1, 1004, 1, 1004, 1, 1004, 1, 1005, + 1, 1005, 1, 1005, 1, 1005, 1, 1005, 1, 1006, 1, 1006, 1, 1006, 1, 1006, + 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1006, 1, 1007, + 1, 1007, 1, 1007, 1, 1007, 1, 1007, 1, 1007, 1, 1007, 1, 1008, 1, 1008, + 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, 1, 1008, + 1, 1008, 1, 1008, 1, 1009, 1, 1009, 1, 1009, 1, 1009, 1, 1009, 1, 1009, + 1, 1009, 1, 1009, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, + 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1010, 1, 1011, 1, 1011, + 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1011, 1, 1011, + 1, 1012, 1, 1012, 1, 1012, 1, 1012, 1, 1012, 1, 1012, 1, 1012, 1, 1012, + 1, 1012, 1, 1013, 1, 1013, 1, 1013, 1, 1013, 1, 1013, 1, 1013, 1, 1013, + 1, 1013, 1, 1013, 1, 1014, 1, 1014, 1, 1014, 1, 1014, 1, 1014, 1, 1014, + 1, 1014, 1, 1014, 1, 1014, 1, 1014, 1, 1015, 1, 1015, 1, 1015, 1, 1015, + 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, 1, 1015, + 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1016, + 1, 1016, 1, 1016, 1, 1016, 1, 1016, 1, 1017, 1, 1017, 1, 1017, 1, 1017, + 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1017, 1, 1018, + 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, + 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1018, 1, 1019, 1, 1019, 1, 1019, + 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, 1, 1019, + 1, 1019, 1, 1019, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, + 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1020, 1, 1021, 1, 1021, + 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, 1, 1021, + 1, 1021, 1, 1021, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, + 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1022, 1, 1023, 1, 1023, + 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, 1, 1023, + 1, 1023, 1, 1023, 1, 1024, 1, 1024, 1, 1024, 1, 1024, 1, 1024, 1, 1024, + 1, 1024, 1, 1024, 1, 1024, 1, 1024, 1, 1025, 1, 1025, 1, 1025, 1, 1025, + 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1025, + 1, 1025, 1, 1025, 1, 1025, 1, 1025, 1, 1026, 1, 1026, 1, 1026, 1, 1026, + 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, + 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, 1, 1026, + 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, + 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, 1, 1027, + 1, 1027, 1, 1027, 1, 1027, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, + 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, + 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1028, 1, 1029, 1, 1029, + 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, + 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, + 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1029, + 1, 1029, 1, 1029, 1, 1029, 1, 1029, 1, 1030, 1, 1030, 1, 1030, 1, 1030, + 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, + 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, + 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, 1, 1030, + 1, 1030, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, + 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, + 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1031, 1, 1032, 1, 1032, 1, 1032, + 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, + 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, 1, 1032, + 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, + 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1033, 1, 1034, 1, 1034, 1, 1034, + 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, + 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1034, 1, 1035, 1, 1035, 1, 1035, + 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, + 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1035, 1, 1036, 1, 1036, 1, 1036, + 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1036, + 1, 1036, 1, 1036, 1, 1036, 1, 1036, 1, 1037, 1, 1037, 1, 1037, 1, 1037, + 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, + 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1037, 1, 1038, 1, 1038, 1, 1038, + 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, + 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1038, 1, 1039, 1, 1039, 1, 1039, + 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, 1, 1039, + 1, 1039, 1, 1039, 1, 1039, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, + 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1040, 1, 1041, + 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, 1, 1041, + 1, 1041, 1, 1041, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, + 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1042, 1, 1043, 1, 1043, + 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, + 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1043, 1, 1044, 1, 1044, + 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, + 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1044, 1, 1045, 1, 1045, 1, 1045, + 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, + 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, 1, 1045, + 1, 1045, 1, 1045, 1, 1045, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, + 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, + 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, 1, 1046, + 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, + 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, 1, 1047, + 1, 1047, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, + 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1048, + 1, 1048, 1, 1048, 1, 1048, 1, 1048, 1, 1049, 1, 1049, 1, 1049, 1, 1049, + 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, + 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, 1, 1049, + 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, + 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1050, 1, 1051, 1, 1051, 1, 1051, + 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, 1, 1051, + 1, 1051, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, + 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, 1, 1052, + 1, 1052, 1, 1052, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, + 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, 1, 1053, + 1, 1053, 1, 1053, 1, 1054, 1, 1054, 1, 1054, 1, 1054, 1, 1054, 1, 1054, + 1, 1054, 1, 1054, 1, 1054, 1, 1054, 1, 1055, 1, 1055, 1, 1055, 1, 1055, + 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1055, + 1, 1055, 1, 1055, 1, 1055, 1, 1055, 1, 1056, 1, 1056, 1, 1056, 1, 1056, + 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, 1, 1056, + 1, 1056, 1, 1056, 1, 1056, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, + 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, + 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1057, 1, 1058, 1, 1058, + 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, + 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, 1, 1058, + 1, 1059, 1, 1059, 1, 1059, 1, 1059, 1, 1059, 1, 1059, 1, 1059, 1, 1059, + 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, + 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1060, 1, 1061, 1, 1061, + 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, + 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1061, 1, 1062, + 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, 1, 1062, + 1, 1062, 1, 1062, 1, 1063, 1, 1063, 1, 1063, 1, 1063, 1, 1063, 1, 1063, + 1, 1063, 1, 1063, 1, 1063, 1, 1064, 1, 1064, 1, 1064, 1, 1064, 1, 1064, + 1, 1064, 1, 1064, 1, 1064, 1, 1064, 1, 1064, 1, 1065, 1, 1065, 1, 1065, + 1, 1065, 1, 1065, 1, 1066, 1, 1066, 1, 1066, 1, 1066, 1, 1066, 1, 1067, + 1, 1067, 1, 1067, 1, 1067, 1, 1067, 1, 1067, 1, 1067, 1, 1067, 1, 1068, + 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, + 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1068, 1, 1069, + 1, 1069, 1, 1069, 1, 1069, 1, 1069, 1, 1069, 1, 1069, 1, 1069, 1, 1070, + 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, 1, 1070, + 1, 1070, 1, 1070, 1, 1070, 1, 1071, 1, 1071, 1, 1071, 1, 1071, 1, 1072, + 1, 1072, 1, 1072, 1, 1072, 1, 1072, 1, 1072, 1, 1072, 1, 1072, 1, 1072, + 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, + 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1073, 1, 1074, 1, 1074, 1, 1074, + 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, 1, 1074, + 1, 1074, 1, 1074, 1, 1074, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, + 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1075, 1, 1076, + 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, 1, 1076, + 1, 1076, 1, 1076, 1, 1076, 1, 1077, 1, 1077, 1, 1077, 1, 1077, 1, 1077, + 1, 1077, 1, 1077, 1, 1077, 1, 1078, 1, 1078, 1, 1078, 1, 1078, 1, 1078, + 1, 1078, 1, 1078, 1, 1078, 1, 1078, 1, 1078, 1, 1079, 1, 1079, 1, 1079, + 1, 1079, 1, 1079, 1, 1079, 1, 1079, 1, 1079, 1, 1080, 1, 1080, 1, 1080, + 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, 1, 1080, + 1, 1081, 1, 1081, 1, 1081, 1, 1081, 1, 1081, 1, 1081, 1, 1082, 1, 1082, + 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, 1, 1082, + 1, 1082, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, + 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, + 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1083, 1, 1084, 1, 1084, 1, 1084, + 1, 1084, 1, 1084, 1, 1084, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, + 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, 1, 1085, + 1, 1085, 1, 1085, 1, 1086, 1, 1086, 1, 1086, 1, 1086, 1, 1086, 1, 1086, + 1, 1086, 1, 1086, 1, 1086, 1, 1086, 1, 1087, 1, 1087, 1, 1087, 1, 1087, + 1, 1087, 1, 1087, 1, 1088, 1, 1088, 1, 1088, 1, 1088, 1, 1088, 1, 1089, + 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, 1, 1089, + 1, 1089, 1, 1089, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, + 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, + 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, + 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1090, 1, 1091, 1, 1091, 1, 1091, + 1, 1091, 1, 1091, 1, 1091, 1, 1091, 1, 1091, 1, 1092, 1, 1092, 1, 1092, + 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, + 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, + 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, + 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1092, 1, 1093, + 1, 1093, 1, 1093, 1, 1093, 1, 1093, 1, 1093, 1, 1093, 1, 1093, 1, 1094, + 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, 1, 1094, + 1, 1094, 1, 1094, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, + 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, 1, 1095, + 1, 1096, 1, 1096, 1, 1096, 1, 1096, 1, 1096, 1, 1096, 1, 1096, 1, 1097, + 1, 1097, 1, 1097, 1, 1097, 1, 1097, 1, 1097, 1, 1097, 1, 1097, 1, 1097, + 1, 1098, 1, 1098, 1, 1099, 1, 1099, 1, 1100, 1, 1100, 1, 1100, 1, 1101, + 1, 1101, 1, 1101, 1, 1102, 1, 1102, 1, 1102, 1, 1103, 1, 1103, 1, 1103, + 1, 1104, 1, 1104, 1, 1104, 1, 1105, 1, 1105, 1, 1105, 1, 1106, 1, 1106, + 1, 1106, 1, 1107, 1, 1107, 1, 1107, 1, 1108, 1, 1108, 1, 1108, 1, 1109, + 1, 1109, 1, 1110, 1, 1110, 1, 1111, 1, 1111, 1, 1112, 1, 1112, 1, 1113, + 1, 1113, 1, 1114, 1, 1114, 1, 1114, 1, 1114, 1, 1115, 1, 1115, 1, 1115, + 1, 1115, 1, 1116, 1, 1116, 1, 1117, 1, 1117, 1, 1118, 1, 1118, 1, 1119, + 1, 1119, 1, 1120, 1, 1120, 1, 1121, 1, 1121, 1, 1122, 1, 1122, 1, 1123, + 1, 1123, 1, 1124, 1, 1124, 1, 1125, 1, 1125, 1, 1126, 1, 1126, 1, 1127, + 1, 1127, 1, 1128, 1, 1128, 1, 1129, 1, 1129, 1, 1130, 1, 1130, 1, 1131, + 1, 1131, 1, 1132, 1, 1132, 1, 1133, 1, 1133, 1, 1134, 1, 1134, 1, 1135, + 1, 1135, 1, 1136, 1, 1136, 1, 1137, 1, 1137, 1, 1137, 3, 1137, 13309, 8, + 1137, 1, 1138, 1, 1138, 1, 1138, 1, 1138, 1, 1139, 4, 1139, 13316, 8, 1139, + 11, 1139, 12, 1139, 13317, 1, 1139, 1, 1139, 1, 1140, 1, 1140, 1, 1140, + 1, 1141, 1, 1141, 1, 1141, 3, 1141, 13328, 8, 1141, 1, 1142, 4, 1142, 13331, + 8, 1142, 11, 1142, 12, 1142, 13332, 1, 1143, 1, 1143, 1, 1143, 1, 1143, + 1, 1143, 4, 1143, 13340, 8, 1143, 11, 1143, 12, 1143, 13341, 1, 1143, 1, + 1143, 1, 1143, 1, 1143, 1, 1143, 1, 1143, 4, 1143, 13350, 8, 1143, 11, + 1143, 12, 1143, 13351, 3, 1143, 13354, 8, 1143, 1, 1144, 4, 1144, 13357, + 8, 1144, 11, 1144, 12, 1144, 13358, 3, 1144, 13361, 8, 1144, 1, 1144, 1, + 1144, 4, 1144, 13365, 8, 1144, 11, 1144, 12, 1144, 13366, 1, 1144, 4, 1144, + 13370, 8, 1144, 11, 1144, 12, 1144, 13371, 1, 1144, 1, 1144, 1, 1144, 1, + 1144, 4, 1144, 13378, 8, 1144, 11, 1144, 12, 1144, 13379, 3, 1144, 13382, + 8, 1144, 1, 1144, 1, 1144, 4, 1144, 13386, 8, 1144, 11, 1144, 12, 1144, + 13387, 1, 1144, 1, 1144, 1, 1144, 4, 1144, 13393, 8, 1144, 11, 1144, 12, + 1144, 13394, 1, 1144, 1, 1144, 3, 1144, 13399, 8, 1144, 1, 1145, 1, 1145, + 1, 1145, 1, 1146, 1, 1146, 1, 1147, 1, 1147, 1, 1147, 1, 1148, 1, 1148, + 1, 1148, 1, 1149, 1, 1149, 1, 1150, 1, 1150, 4, 1150, 13416, 8, 1150, 11, + 1150, 12, 1150, 13417, 1, 1150, 1, 1150, 1, 1151, 1, 1151, 1, 1151, 1, + 1151, 3, 1151, 13426, 8, 1151, 1, 1151, 1, 1151, 1, 1151, 1, 1151, 1, 1151, + 1, 1151, 3, 1151, 13434, 8, 1151, 1, 1152, 4, 1152, 13437, 8, 1152, 11, + 1152, 12, 1152, 13438, 1, 1152, 1, 1152, 4, 1152, 13443, 8, 1152, 11, 1152, + 12, 1152, 13444, 1, 1152, 4, 1152, 13448, 8, 1152, 11, 1152, 12, 1152, + 13449, 1, 1152, 1, 1152, 4, 1152, 13454, 8, 1152, 11, 1152, 12, 1152, 13455, + 3, 1152, 13458, 8, 1152, 1, 1153, 1, 1153, 4, 1153, 13462, 8, 1153, 11, + 1153, 12, 1153, 13463, 1, 1153, 1, 1153, 1, 1153, 3, 1153, 13469, 8, 1153, + 1, 1154, 1, 1154, 1, 1154, 4, 1154, 13474, 8, 1154, 11, 1154, 12, 1154, + 13475, 1, 1154, 3, 1154, 13479, 8, 1154, 1, 1155, 1, 1155, 1, 1155, 1, + 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, + 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, + 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, + 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, + 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 1, 1155, 3, 1155, 13522, 8, 1155, + 1, 1156, 1, 1156, 3, 1156, 13526, 8, 1156, 1, 1156, 4, 1156, 13529, 8, + 1156, 11, 1156, 12, 1156, 13530, 1, 1157, 5, 1157, 13534, 8, 1157, 10, + 1157, 12, 1157, 13537, 9, 1157, 1, 1157, 4, 1157, 13540, 8, 1157, 11, 1157, + 12, 1157, 13541, 1, 1157, 5, 1157, 13545, 8, 1157, 10, 1157, 12, 1157, + 13548, 9, 1157, 1, 1158, 1, 1158, 1, 1158, 1, 1158, 1, 1158, 1, 1158, 5, + 1158, 13556, 8, 1158, 10, 1158, 12, 1158, 13559, 9, 1158, 1, 1158, 1, 1158, + 1, 1159, 1, 1159, 1, 1159, 1, 1159, 1, 1159, 1, 1159, 5, 1159, 13569, 8, + 1159, 10, 1159, 12, 1159, 13572, 9, 1159, 1, 1159, 1, 1159, 1, 1160, 1, + 1160, 1, 1160, 1, 1160, 1, 1160, 1, 1160, 5, 1160, 13582, 8, 1160, 10, + 1160, 12, 1160, 13585, 9, 1160, 1, 1160, 1, 1160, 1, 1161, 1, 1161, 1, + 1162, 1, 1162, 1, 1163, 1, 1163, 1, 1163, 4, 1163, 13596, 8, 1163, 11, + 1163, 12, 1163, 13597, 1, 1163, 1, 1163, 1, 1164, 1, 1164, 1, 1164, 1, + 1164, 4, 2345, 2358, 13535, 13541, 0, 1165, 1, 1, 3, 2, 5, 3, 7, 4, 9, + 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, + 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, + 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, + 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, + 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, + 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, + 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, + 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, + 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, + 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, + 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, + 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, + 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, + 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, + 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, + 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, + 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, + 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, + 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, + 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, + 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, + 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, + 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, + 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, + 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, + 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, + 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, + 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, + 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, + 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, + 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, + 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, + 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 263, + 527, 264, 529, 265, 531, 266, 533, 267, 535, 268, 537, 269, 539, 270, 541, + 271, 543, 272, 545, 273, 547, 274, 549, 275, 551, 276, 553, 277, 555, 278, + 557, 279, 559, 280, 561, 281, 563, 282, 565, 283, 567, 284, 569, 285, 571, + 286, 573, 287, 575, 288, 577, 289, 579, 290, 581, 291, 583, 292, 585, 293, + 587, 294, 589, 295, 591, 296, 593, 297, 595, 298, 597, 299, 599, 300, 601, + 301, 603, 302, 605, 303, 607, 304, 609, 305, 611, 306, 613, 307, 615, 308, + 617, 309, 619, 310, 621, 311, 623, 312, 625, 313, 627, 314, 629, 315, 631, + 316, 633, 317, 635, 318, 637, 319, 639, 320, 641, 321, 643, 322, 645, 323, + 647, 324, 649, 325, 651, 326, 653, 327, 655, 328, 657, 329, 659, 330, 661, + 331, 663, 332, 665, 333, 667, 334, 669, 335, 671, 336, 673, 337, 675, 338, + 677, 339, 679, 340, 681, 341, 683, 342, 685, 343, 687, 344, 689, 345, 691, + 346, 693, 347, 695, 348, 697, 349, 699, 350, 701, 351, 703, 352, 705, 353, + 707, 354, 709, 355, 711, 356, 713, 357, 715, 358, 717, 359, 719, 360, 721, + 361, 723, 362, 725, 363, 727, 364, 729, 365, 731, 366, 733, 367, 735, 368, + 737, 369, 739, 370, 741, 371, 743, 372, 745, 373, 747, 374, 749, 375, 751, + 376, 753, 377, 755, 378, 757, 379, 759, 380, 761, 381, 763, 382, 765, 383, + 767, 384, 769, 385, 771, 386, 773, 387, 775, 388, 777, 389, 779, 390, 781, + 391, 783, 392, 785, 393, 787, 394, 789, 395, 791, 396, 793, 397, 795, 398, + 797, 399, 799, 400, 801, 401, 803, 402, 805, 403, 807, 404, 809, 405, 811, + 406, 813, 407, 815, 408, 817, 409, 819, 410, 821, 411, 823, 412, 825, 413, + 827, 414, 829, 415, 831, 416, 833, 417, 835, 418, 837, 419, 839, 420, 841, + 421, 843, 422, 845, 423, 847, 424, 849, 425, 851, 426, 853, 427, 855, 428, + 857, 429, 859, 430, 861, 431, 863, 432, 865, 433, 867, 434, 869, 435, 871, + 436, 873, 437, 875, 438, 877, 439, 879, 440, 881, 441, 883, 442, 885, 443, + 887, 444, 889, 445, 891, 446, 893, 447, 895, 448, 897, 449, 899, 450, 901, + 451, 903, 452, 905, 453, 907, 454, 909, 455, 911, 456, 913, 457, 915, 458, + 917, 459, 919, 460, 921, 461, 923, 462, 925, 463, 927, 464, 929, 465, 931, + 466, 933, 467, 935, 468, 937, 469, 939, 470, 941, 471, 943, 472, 945, 473, + 947, 474, 949, 475, 951, 476, 953, 477, 955, 478, 957, 479, 959, 480, 961, + 481, 963, 482, 965, 483, 967, 484, 969, 485, 971, 486, 973, 487, 975, 488, + 977, 489, 979, 490, 981, 491, 983, 492, 985, 493, 987, 494, 989, 495, 991, + 496, 993, 497, 995, 498, 997, 499, 999, 500, 1001, 501, 1003, 502, 1005, + 503, 1007, 504, 1009, 505, 1011, 506, 1013, 507, 1015, 508, 1017, 509, + 1019, 510, 1021, 511, 1023, 512, 1025, 513, 1027, 514, 1029, 515, 1031, + 516, 1033, 517, 1035, 518, 1037, 519, 1039, 520, 1041, 521, 1043, 522, + 1045, 523, 1047, 524, 1049, 525, 1051, 526, 1053, 527, 1055, 528, 1057, + 529, 1059, 530, 1061, 531, 1063, 532, 1065, 533, 1067, 534, 1069, 535, + 1071, 536, 1073, 537, 1075, 538, 1077, 539, 1079, 540, 1081, 541, 1083, + 542, 1085, 543, 1087, 544, 1089, 545, 1091, 546, 1093, 547, 1095, 548, + 1097, 549, 1099, 550, 1101, 551, 1103, 552, 1105, 553, 1107, 554, 1109, + 555, 1111, 556, 1113, 557, 1115, 558, 1117, 559, 1119, 560, 1121, 561, + 1123, 562, 1125, 563, 1127, 564, 1129, 565, 1131, 566, 1133, 567, 1135, + 568, 1137, 569, 1139, 570, 1141, 571, 1143, 572, 1145, 573, 1147, 574, + 1149, 575, 1151, 576, 1153, 577, 1155, 578, 1157, 579, 1159, 580, 1161, + 581, 1163, 582, 1165, 583, 1167, 584, 1169, 585, 1171, 586, 1173, 587, + 1175, 588, 1177, 589, 1179, 590, 1181, 591, 1183, 592, 1185, 593, 1187, + 594, 1189, 595, 1191, 596, 1193, 597, 1195, 598, 1197, 599, 1199, 600, + 1201, 601, 1203, 602, 1205, 603, 1207, 604, 1209, 605, 1211, 606, 1213, + 607, 1215, 608, 1217, 609, 1219, 610, 1221, 611, 1223, 612, 1225, 613, + 1227, 614, 1229, 615, 1231, 616, 1233, 617, 1235, 618, 1237, 619, 1239, + 620, 1241, 621, 1243, 622, 1245, 623, 1247, 624, 1249, 625, 1251, 626, + 1253, 627, 1255, 628, 1257, 629, 1259, 630, 1261, 631, 1263, 632, 1265, + 633, 1267, 634, 1269, 635, 1271, 636, 1273, 637, 1275, 638, 1277, 639, + 1279, 640, 1281, 641, 1283, 642, 1285, 643, 1287, 644, 1289, 645, 1291, + 646, 1293, 647, 1295, 648, 1297, 649, 1299, 650, 1301, 651, 1303, 652, + 1305, 653, 1307, 654, 1309, 655, 1311, 656, 1313, 657, 1315, 658, 1317, + 659, 1319, 660, 1321, 661, 1323, 662, 1325, 663, 1327, 664, 1329, 665, + 1331, 666, 1333, 667, 1335, 668, 1337, 669, 1339, 670, 1341, 671, 1343, + 672, 1345, 673, 1347, 674, 1349, 675, 1351, 676, 1353, 677, 1355, 678, + 1357, 679, 1359, 680, 1361, 681, 1363, 682, 1365, 683, 1367, 684, 1369, + 685, 1371, 686, 1373, 687, 1375, 688, 1377, 689, 1379, 690, 1381, 691, + 1383, 692, 1385, 693, 1387, 694, 1389, 695, 1391, 696, 1393, 697, 1395, + 698, 1397, 699, 1399, 700, 1401, 701, 1403, 702, 1405, 703, 1407, 704, + 1409, 705, 1411, 706, 1413, 707, 1415, 708, 1417, 709, 1419, 710, 1421, + 711, 1423, 712, 1425, 713, 1427, 714, 1429, 715, 1431, 716, 1433, 717, + 1435, 718, 1437, 719, 1439, 720, 1441, 721, 1443, 722, 1445, 723, 1447, + 724, 1449, 725, 1451, 726, 1453, 727, 1455, 728, 1457, 729, 1459, 730, + 1461, 731, 1463, 732, 1465, 733, 1467, 734, 1469, 735, 1471, 736, 1473, + 737, 1475, 738, 1477, 739, 1479, 740, 1481, 741, 1483, 742, 1485, 743, + 1487, 744, 1489, 745, 1491, 746, 1493, 747, 1495, 748, 1497, 749, 1499, + 750, 1501, 751, 1503, 752, 1505, 753, 1507, 754, 1509, 755, 1511, 756, + 1513, 757, 1515, 758, 1517, 759, 1519, 760, 1521, 761, 1523, 762, 1525, + 763, 1527, 764, 1529, 765, 1531, 766, 1533, 767, 1535, 768, 1537, 769, + 1539, 770, 1541, 771, 1543, 772, 1545, 773, 1547, 774, 1549, 775, 1551, + 776, 1553, 777, 1555, 778, 1557, 779, 1559, 780, 1561, 781, 1563, 782, + 1565, 783, 1567, 784, 1569, 785, 1571, 786, 1573, 787, 1575, 788, 1577, + 789, 1579, 790, 1581, 791, 1583, 792, 1585, 793, 1587, 794, 1589, 795, + 1591, 796, 1593, 797, 1595, 798, 1597, 799, 1599, 800, 1601, 801, 1603, + 802, 1605, 803, 1607, 804, 1609, 805, 1611, 806, 1613, 807, 1615, 808, + 1617, 809, 1619, 810, 1621, 811, 1623, 812, 1625, 813, 1627, 814, 1629, + 815, 1631, 816, 1633, 817, 1635, 818, 1637, 819, 1639, 820, 1641, 821, + 1643, 822, 1645, 823, 1647, 824, 1649, 825, 1651, 826, 1653, 827, 1655, + 828, 1657, 829, 1659, 830, 1661, 831, 1663, 832, 1665, 833, 1667, 834, + 1669, 835, 1671, 836, 1673, 837, 1675, 838, 1677, 839, 1679, 840, 1681, + 841, 1683, 842, 1685, 843, 1687, 844, 1689, 845, 1691, 846, 1693, 847, + 1695, 848, 1697, 849, 1699, 850, 1701, 851, 1703, 852, 1705, 853, 1707, + 854, 1709, 855, 1711, 856, 1713, 857, 1715, 858, 1717, 859, 1719, 860, + 1721, 861, 1723, 862, 1725, 863, 1727, 864, 1729, 865, 1731, 866, 1733, + 867, 1735, 868, 1737, 869, 1739, 870, 1741, 871, 1743, 872, 1745, 873, + 1747, 874, 1749, 875, 1751, 876, 1753, 877, 1755, 878, 1757, 879, 1759, + 880, 1761, 881, 1763, 882, 1765, 883, 1767, 884, 1769, 885, 1771, 886, + 1773, 887, 1775, 888, 1777, 889, 1779, 890, 1781, 891, 1783, 892, 1785, + 893, 1787, 894, 1789, 895, 1791, 896, 1793, 897, 1795, 898, 1797, 899, + 1799, 900, 1801, 901, 1803, 902, 1805, 903, 1807, 904, 1809, 905, 1811, + 906, 1813, 907, 1815, 908, 1817, 909, 1819, 910, 1821, 911, 1823, 912, + 1825, 913, 1827, 914, 1829, 915, 1831, 916, 1833, 917, 1835, 918, 1837, + 919, 1839, 920, 1841, 921, 1843, 922, 1845, 923, 1847, 924, 1849, 925, + 1851, 926, 1853, 927, 1855, 928, 1857, 929, 1859, 930, 1861, 931, 1863, + 932, 1865, 933, 1867, 934, 1869, 935, 1871, 936, 1873, 937, 1875, 938, + 1877, 939, 1879, 940, 1881, 941, 1883, 942, 1885, 943, 1887, 944, 1889, + 945, 1891, 946, 1893, 947, 1895, 948, 1897, 949, 1899, 950, 1901, 951, + 1903, 952, 1905, 953, 1907, 954, 1909, 955, 1911, 956, 1913, 957, 1915, + 958, 1917, 959, 1919, 960, 1921, 961, 1923, 962, 1925, 963, 1927, 964, + 1929, 965, 1931, 966, 1933, 967, 1935, 968, 1937, 969, 1939, 970, 1941, + 971, 1943, 972, 1945, 973, 1947, 974, 1949, 975, 1951, 976, 1953, 977, + 1955, 978, 1957, 979, 1959, 980, 1961, 981, 1963, 982, 1965, 983, 1967, + 984, 1969, 985, 1971, 986, 1973, 987, 1975, 988, 1977, 989, 1979, 990, + 1981, 991, 1983, 992, 1985, 993, 1987, 994, 1989, 995, 1991, 996, 1993, + 997, 1995, 998, 1997, 999, 1999, 1000, 2001, 1001, 2003, 1002, 2005, 1003, + 2007, 1004, 2009, 1005, 2011, 1006, 2013, 1007, 2015, 1008, 2017, 1009, + 2019, 1010, 2021, 1011, 2023, 1012, 2025, 1013, 2027, 1014, 2029, 1015, + 2031, 1016, 2033, 1017, 2035, 1018, 2037, 1019, 2039, 1020, 2041, 1021, + 2043, 1022, 2045, 1023, 2047, 1024, 2049, 1025, 2051, 1026, 2053, 1027, + 2055, 1028, 2057, 1029, 2059, 1030, 2061, 1031, 2063, 1032, 2065, 1033, + 2067, 1034, 2069, 1035, 2071, 1036, 2073, 1037, 2075, 1038, 2077, 1039, + 2079, 1040, 2081, 1041, 2083, 1042, 2085, 1043, 2087, 1044, 2089, 1045, + 2091, 1046, 2093, 1047, 2095, 1048, 2097, 1049, 2099, 1050, 2101, 1051, + 2103, 1052, 2105, 1053, 2107, 1054, 2109, 1055, 2111, 1056, 2113, 1057, + 2115, 1058, 2117, 1059, 2119, 1060, 2121, 1061, 2123, 1062, 2125, 1063, + 2127, 1064, 2129, 1065, 2131, 1066, 2133, 1067, 2135, 1068, 2137, 1069, + 2139, 1070, 2141, 1071, 2143, 1072, 2145, 1073, 2147, 1074, 2149, 1075, + 2151, 1076, 2153, 1077, 2155, 1078, 2157, 1079, 2159, 1080, 2161, 1081, + 2163, 1082, 2165, 1083, 2167, 1084, 2169, 1085, 2171, 1086, 2173, 1087, + 2175, 1088, 2177, 1089, 2179, 1090, 2181, 1091, 2183, 1092, 2185, 1093, + 2187, 1094, 2189, 1095, 2191, 1096, 2193, 1097, 2195, 1098, 2197, 1099, + 2199, 1100, 2201, 1101, 2203, 1102, 2205, 1103, 2207, 1104, 2209, 1105, + 2211, 1106, 2213, 1107, 2215, 1108, 2217, 1109, 2219, 1110, 2221, 1111, + 2223, 1112, 2225, 1113, 2227, 1114, 2229, 1115, 2231, 1116, 2233, 1117, + 2235, 1118, 2237, 1119, 2239, 1120, 2241, 1121, 2243, 1122, 2245, 1123, + 2247, 1124, 2249, 1125, 2251, 1126, 2253, 1127, 2255, 1128, 2257, 1129, + 2259, 1130, 2261, 1131, 2263, 1132, 2265, 1133, 2267, 1134, 2269, 1135, + 2271, 1136, 2273, 1137, 2275, 0, 2277, 1138, 2279, 1139, 2281, 1140, 2283, + 1141, 2285, 1142, 2287, 1143, 2289, 1144, 2291, 1145, 2293, 1146, 2295, + 1147, 2297, 1148, 2299, 1149, 2301, 1150, 2303, 1151, 2305, 1152, 2307, + 1153, 2309, 1154, 2311, 0, 2313, 0, 2315, 0, 2317, 0, 2319, 0, 2321, 0, + 2323, 0, 2325, 0, 2327, 0, 2329, 1155, 1, 0, 43, 3, 0, 9, 10, 13, 13, 32, + 32, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, 13, 13, 2, 0, 65, 65, 97, 97, 2, + 0, 68, 68, 100, 100, 2, 0, 76, 76, 108, 108, 2, 0, 84, 84, 116, 116, 2, + 0, 69, 69, 101, 101, 2, 0, 82, 82, 114, 114, 2, 0, 87, 87, 119, 119, 2, + 0, 89, 89, 121, 121, 2, 0, 83, 83, 115, 115, 2, 0, 78, 78, 110, 110, 2, + 0, 90, 90, 122, 122, 2, 0, 67, 67, 99, 99, 2, 0, 73, 73, 105, 105, 2, 0, + 66, 66, 98, 98, 2, 0, 85, 85, 117, 117, 2, 0, 70, 70, 102, 102, 2, 0, 79, + 79, 111, 111, 2, 0, 72, 72, 104, 104, 2, 0, 75, 75, 107, 107, 2, 0, 71, + 71, 103, 103, 2, 0, 77, 77, 109, 109, 2, 0, 86, 86, 118, 118, 2, 0, 80, + 80, 112, 112, 2, 0, 88, 88, 120, 120, 2, 0, 74, 74, 106, 106, 2, 0, 81, + 81, 113, 113, 8, 0, 71, 71, 75, 75, 77, 77, 84, 84, 103, 103, 107, 107, + 109, 109, 116, 116, 1, 0, 96, 96, 1, 0, 48, 57, 2, 0, 46, 46, 48, 57, 3, + 0, 48, 58, 65, 70, 97, 102, 6, 0, 36, 36, 46, 46, 48, 57, 65, 90, 95, 95, + 97, 122, 2, 0, 43, 43, 45, 45, 6, 0, 36, 36, 48, 57, 65, 90, 95, 95, 97, + 122, 128, 65535, 5, 0, 36, 36, 65, 90, 95, 95, 97, 122, 128, 65535, 2, + 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 92, 92, 96, 96, 3, 0, 48, + 57, 65, 70, 97, 102, 1, 0, 48, 49, 13704, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, + 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, + 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, + 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, + 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, + 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, + 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, + 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, + 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, + 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, + 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, + 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, + 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, + 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, + 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, + 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, + 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, + 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, + 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, + 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, + 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, + 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, + 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, + 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, + 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, + 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, + 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, + 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, + 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, + 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, + 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, + 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, + 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, + 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, + 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, + 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, + 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, + 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, + 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, + 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, + 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, + 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, + 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, + 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, + 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, + 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, + 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, + 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, + 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, + 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, + 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, + 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, + 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, + 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, + 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, + 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, + 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, + 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, + 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, + 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, + 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, + 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, + 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, + 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, + 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, + 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, + 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, + 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, + 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, + 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, + 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, + 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, + 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, + 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, + 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, + 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, + 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, + 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, + 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, + 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 577, 1, 0, 0, 0, 0, + 579, 1, 0, 0, 0, 0, 581, 1, 0, 0, 0, 0, 583, 1, 0, 0, 0, 0, 585, 1, 0, + 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, + 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, + 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, + 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 0, 613, 1, 0, 0, 0, 0, + 615, 1, 0, 0, 0, 0, 617, 1, 0, 0, 0, 0, 619, 1, 0, 0, 0, 0, 621, 1, 0, + 0, 0, 0, 623, 1, 0, 0, 0, 0, 625, 1, 0, 0, 0, 0, 627, 1, 0, 0, 0, 0, 629, + 1, 0, 0, 0, 0, 631, 1, 0, 0, 0, 0, 633, 1, 0, 0, 0, 0, 635, 1, 0, 0, 0, + 0, 637, 1, 0, 0, 0, 0, 639, 1, 0, 0, 0, 0, 641, 1, 0, 0, 0, 0, 643, 1, + 0, 0, 0, 0, 645, 1, 0, 0, 0, 0, 647, 1, 0, 0, 0, 0, 649, 1, 0, 0, 0, 0, + 651, 1, 0, 0, 0, 0, 653, 1, 0, 0, 0, 0, 655, 1, 0, 0, 0, 0, 657, 1, 0, + 0, 0, 0, 659, 1, 0, 0, 0, 0, 661, 1, 0, 0, 0, 0, 663, 1, 0, 0, 0, 0, 665, + 1, 0, 0, 0, 0, 667, 1, 0, 0, 0, 0, 669, 1, 0, 0, 0, 0, 671, 1, 0, 0, 0, + 0, 673, 1, 0, 0, 0, 0, 675, 1, 0, 0, 0, 0, 677, 1, 0, 0, 0, 0, 679, 1, + 0, 0, 0, 0, 681, 1, 0, 0, 0, 0, 683, 1, 0, 0, 0, 0, 685, 1, 0, 0, 0, 0, + 687, 1, 0, 0, 0, 0, 689, 1, 0, 0, 0, 0, 691, 1, 0, 0, 0, 0, 693, 1, 0, + 0, 0, 0, 695, 1, 0, 0, 0, 0, 697, 1, 0, 0, 0, 0, 699, 1, 0, 0, 0, 0, 701, + 1, 0, 0, 0, 0, 703, 1, 0, 0, 0, 0, 705, 1, 0, 0, 0, 0, 707, 1, 0, 0, 0, + 0, 709, 1, 0, 0, 0, 0, 711, 1, 0, 0, 0, 0, 713, 1, 0, 0, 0, 0, 715, 1, + 0, 0, 0, 0, 717, 1, 0, 0, 0, 0, 719, 1, 0, 0, 0, 0, 721, 1, 0, 0, 0, 0, + 723, 1, 0, 0, 0, 0, 725, 1, 0, 0, 0, 0, 727, 1, 0, 0, 0, 0, 729, 1, 0, + 0, 0, 0, 731, 1, 0, 0, 0, 0, 733, 1, 0, 0, 0, 0, 735, 1, 0, 0, 0, 0, 737, + 1, 0, 0, 0, 0, 739, 1, 0, 0, 0, 0, 741, 1, 0, 0, 0, 0, 743, 1, 0, 0, 0, + 0, 745, 1, 0, 0, 0, 0, 747, 1, 0, 0, 0, 0, 749, 1, 0, 0, 0, 0, 751, 1, + 0, 0, 0, 0, 753, 1, 0, 0, 0, 0, 755, 1, 0, 0, 0, 0, 757, 1, 0, 0, 0, 0, + 759, 1, 0, 0, 0, 0, 761, 1, 0, 0, 0, 0, 763, 1, 0, 0, 0, 0, 765, 1, 0, + 0, 0, 0, 767, 1, 0, 0, 0, 0, 769, 1, 0, 0, 0, 0, 771, 1, 0, 0, 0, 0, 773, + 1, 0, 0, 0, 0, 775, 1, 0, 0, 0, 0, 777, 1, 0, 0, 0, 0, 779, 1, 0, 0, 0, + 0, 781, 1, 0, 0, 0, 0, 783, 1, 0, 0, 0, 0, 785, 1, 0, 0, 0, 0, 787, 1, + 0, 0, 0, 0, 789, 1, 0, 0, 0, 0, 791, 1, 0, 0, 0, 0, 793, 1, 0, 0, 0, 0, + 795, 1, 0, 0, 0, 0, 797, 1, 0, 0, 0, 0, 799, 1, 0, 0, 0, 0, 801, 1, 0, + 0, 0, 0, 803, 1, 0, 0, 0, 0, 805, 1, 0, 0, 0, 0, 807, 1, 0, 0, 0, 0, 809, + 1, 0, 0, 0, 0, 811, 1, 0, 0, 0, 0, 813, 1, 0, 0, 0, 0, 815, 1, 0, 0, 0, + 0, 817, 1, 0, 0, 0, 0, 819, 1, 0, 0, 0, 0, 821, 1, 0, 0, 0, 0, 823, 1, + 0, 0, 0, 0, 825, 1, 0, 0, 0, 0, 827, 1, 0, 0, 0, 0, 829, 1, 0, 0, 0, 0, + 831, 1, 0, 0, 0, 0, 833, 1, 0, 0, 0, 0, 835, 1, 0, 0, 0, 0, 837, 1, 0, + 0, 0, 0, 839, 1, 0, 0, 0, 0, 841, 1, 0, 0, 0, 0, 843, 1, 0, 0, 0, 0, 845, + 1, 0, 0, 0, 0, 847, 1, 0, 0, 0, 0, 849, 1, 0, 0, 0, 0, 851, 1, 0, 0, 0, + 0, 853, 1, 0, 0, 0, 0, 855, 1, 0, 0, 0, 0, 857, 1, 0, 0, 0, 0, 859, 1, + 0, 0, 0, 0, 861, 1, 0, 0, 0, 0, 863, 1, 0, 0, 0, 0, 865, 1, 0, 0, 0, 0, + 867, 1, 0, 0, 0, 0, 869, 1, 0, 0, 0, 0, 871, 1, 0, 0, 0, 0, 873, 1, 0, + 0, 0, 0, 875, 1, 0, 0, 0, 0, 877, 1, 0, 0, 0, 0, 879, 1, 0, 0, 0, 0, 881, + 1, 0, 0, 0, 0, 883, 1, 0, 0, 0, 0, 885, 1, 0, 0, 0, 0, 887, 1, 0, 0, 0, + 0, 889, 1, 0, 0, 0, 0, 891, 1, 0, 0, 0, 0, 893, 1, 0, 0, 0, 0, 895, 1, + 0, 0, 0, 0, 897, 1, 0, 0, 0, 0, 899, 1, 0, 0, 0, 0, 901, 1, 0, 0, 0, 0, + 903, 1, 0, 0, 0, 0, 905, 1, 0, 0, 0, 0, 907, 1, 0, 0, 0, 0, 909, 1, 0, + 0, 0, 0, 911, 1, 0, 0, 0, 0, 913, 1, 0, 0, 0, 0, 915, 1, 0, 0, 0, 0, 917, + 1, 0, 0, 0, 0, 919, 1, 0, 0, 0, 0, 921, 1, 0, 0, 0, 0, 923, 1, 0, 0, 0, + 0, 925, 1, 0, 0, 0, 0, 927, 1, 0, 0, 0, 0, 929, 1, 0, 0, 0, 0, 931, 1, + 0, 0, 0, 0, 933, 1, 0, 0, 0, 0, 935, 1, 0, 0, 0, 0, 937, 1, 0, 0, 0, 0, + 939, 1, 0, 0, 0, 0, 941, 1, 0, 0, 0, 0, 943, 1, 0, 0, 0, 0, 945, 1, 0, + 0, 0, 0, 947, 1, 0, 0, 0, 0, 949, 1, 0, 0, 0, 0, 951, 1, 0, 0, 0, 0, 953, + 1, 0, 0, 0, 0, 955, 1, 0, 0, 0, 0, 957, 1, 0, 0, 0, 0, 959, 1, 0, 0, 0, + 0, 961, 1, 0, 0, 0, 0, 963, 1, 0, 0, 0, 0, 965, 1, 0, 0, 0, 0, 967, 1, + 0, 0, 0, 0, 969, 1, 0, 0, 0, 0, 971, 1, 0, 0, 0, 0, 973, 1, 0, 0, 0, 0, + 975, 1, 0, 0, 0, 0, 977, 1, 0, 0, 0, 0, 979, 1, 0, 0, 0, 0, 981, 1, 0, + 0, 0, 0, 983, 1, 0, 0, 0, 0, 985, 1, 0, 0, 0, 0, 987, 1, 0, 0, 0, 0, 989, + 1, 0, 0, 0, 0, 991, 1, 0, 0, 0, 0, 993, 1, 0, 0, 0, 0, 995, 1, 0, 0, 0, + 0, 997, 1, 0, 0, 0, 0, 999, 1, 0, 0, 0, 0, 1001, 1, 0, 0, 0, 0, 1003, 1, + 0, 0, 0, 0, 1005, 1, 0, 0, 0, 0, 1007, 1, 0, 0, 0, 0, 1009, 1, 0, 0, 0, + 0, 1011, 1, 0, 0, 0, 0, 1013, 1, 0, 0, 0, 0, 1015, 1, 0, 0, 0, 0, 1017, + 1, 0, 0, 0, 0, 1019, 1, 0, 0, 0, 0, 1021, 1, 0, 0, 0, 0, 1023, 1, 0, 0, + 0, 0, 1025, 1, 0, 0, 0, 0, 1027, 1, 0, 0, 0, 0, 1029, 1, 0, 0, 0, 0, 1031, + 1, 0, 0, 0, 0, 1033, 1, 0, 0, 0, 0, 1035, 1, 0, 0, 0, 0, 1037, 1, 0, 0, + 0, 0, 1039, 1, 0, 0, 0, 0, 1041, 1, 0, 0, 0, 0, 1043, 1, 0, 0, 0, 0, 1045, + 1, 0, 0, 0, 0, 1047, 1, 0, 0, 0, 0, 1049, 1, 0, 0, 0, 0, 1051, 1, 0, 0, + 0, 0, 1053, 1, 0, 0, 0, 0, 1055, 1, 0, 0, 0, 0, 1057, 1, 0, 0, 0, 0, 1059, + 1, 0, 0, 0, 0, 1061, 1, 0, 0, 0, 0, 1063, 1, 0, 0, 0, 0, 1065, 1, 0, 0, + 0, 0, 1067, 1, 0, 0, 0, 0, 1069, 1, 0, 0, 0, 0, 1071, 1, 0, 0, 0, 0, 1073, + 1, 0, 0, 0, 0, 1075, 1, 0, 0, 0, 0, 1077, 1, 0, 0, 0, 0, 1079, 1, 0, 0, + 0, 0, 1081, 1, 0, 0, 0, 0, 1083, 1, 0, 0, 0, 0, 1085, 1, 0, 0, 0, 0, 1087, + 1, 0, 0, 0, 0, 1089, 1, 0, 0, 0, 0, 1091, 1, 0, 0, 0, 0, 1093, 1, 0, 0, + 0, 0, 1095, 1, 0, 0, 0, 0, 1097, 1, 0, 0, 0, 0, 1099, 1, 0, 0, 0, 0, 1101, + 1, 0, 0, 0, 0, 1103, 1, 0, 0, 0, 0, 1105, 1, 0, 0, 0, 0, 1107, 1, 0, 0, + 0, 0, 1109, 1, 0, 0, 0, 0, 1111, 1, 0, 0, 0, 0, 1113, 1, 0, 0, 0, 0, 1115, + 1, 0, 0, 0, 0, 1117, 1, 0, 0, 0, 0, 1119, 1, 0, 0, 0, 0, 1121, 1, 0, 0, + 0, 0, 1123, 1, 0, 0, 0, 0, 1125, 1, 0, 0, 0, 0, 1127, 1, 0, 0, 0, 0, 1129, + 1, 0, 0, 0, 0, 1131, 1, 0, 0, 0, 0, 1133, 1, 0, 0, 0, 0, 1135, 1, 0, 0, + 0, 0, 1137, 1, 0, 0, 0, 0, 1139, 1, 0, 0, 0, 0, 1141, 1, 0, 0, 0, 0, 1143, + 1, 0, 0, 0, 0, 1145, 1, 0, 0, 0, 0, 1147, 1, 0, 0, 0, 0, 1149, 1, 0, 0, + 0, 0, 1151, 1, 0, 0, 0, 0, 1153, 1, 0, 0, 0, 0, 1155, 1, 0, 0, 0, 0, 1157, + 1, 0, 0, 0, 0, 1159, 1, 0, 0, 0, 0, 1161, 1, 0, 0, 0, 0, 1163, 1, 0, 0, + 0, 0, 1165, 1, 0, 0, 0, 0, 1167, 1, 0, 0, 0, 0, 1169, 1, 0, 0, 0, 0, 1171, + 1, 0, 0, 0, 0, 1173, 1, 0, 0, 0, 0, 1175, 1, 0, 0, 0, 0, 1177, 1, 0, 0, + 0, 0, 1179, 1, 0, 0, 0, 0, 1181, 1, 0, 0, 0, 0, 1183, 1, 0, 0, 0, 0, 1185, + 1, 0, 0, 0, 0, 1187, 1, 0, 0, 0, 0, 1189, 1, 0, 0, 0, 0, 1191, 1, 0, 0, + 0, 0, 1193, 1, 0, 0, 0, 0, 1195, 1, 0, 0, 0, 0, 1197, 1, 0, 0, 0, 0, 1199, + 1, 0, 0, 0, 0, 1201, 1, 0, 0, 0, 0, 1203, 1, 0, 0, 0, 0, 1205, 1, 0, 0, + 0, 0, 1207, 1, 0, 0, 0, 0, 1209, 1, 0, 0, 0, 0, 1211, 1, 0, 0, 0, 0, 1213, + 1, 0, 0, 0, 0, 1215, 1, 0, 0, 0, 0, 1217, 1, 0, 0, 0, 0, 1219, 1, 0, 0, + 0, 0, 1221, 1, 0, 0, 0, 0, 1223, 1, 0, 0, 0, 0, 1225, 1, 0, 0, 0, 0, 1227, + 1, 0, 0, 0, 0, 1229, 1, 0, 0, 0, 0, 1231, 1, 0, 0, 0, 0, 1233, 1, 0, 0, + 0, 0, 1235, 1, 0, 0, 0, 0, 1237, 1, 0, 0, 0, 0, 1239, 1, 0, 0, 0, 0, 1241, + 1, 0, 0, 0, 0, 1243, 1, 0, 0, 0, 0, 1245, 1, 0, 0, 0, 0, 1247, 1, 0, 0, + 0, 0, 1249, 1, 0, 0, 0, 0, 1251, 1, 0, 0, 0, 0, 1253, 1, 0, 0, 0, 0, 1255, + 1, 0, 0, 0, 0, 1257, 1, 0, 0, 0, 0, 1259, 1, 0, 0, 0, 0, 1261, 1, 0, 0, + 0, 0, 1263, 1, 0, 0, 0, 0, 1265, 1, 0, 0, 0, 0, 1267, 1, 0, 0, 0, 0, 1269, + 1, 0, 0, 0, 0, 1271, 1, 0, 0, 0, 0, 1273, 1, 0, 0, 0, 0, 1275, 1, 0, 0, + 0, 0, 1277, 1, 0, 0, 0, 0, 1279, 1, 0, 0, 0, 0, 1281, 1, 0, 0, 0, 0, 1283, + 1, 0, 0, 0, 0, 1285, 1, 0, 0, 0, 0, 1287, 1, 0, 0, 0, 0, 1289, 1, 0, 0, + 0, 0, 1291, 1, 0, 0, 0, 0, 1293, 1, 0, 0, 0, 0, 1295, 1, 0, 0, 0, 0, 1297, + 1, 0, 0, 0, 0, 1299, 1, 0, 0, 0, 0, 1301, 1, 0, 0, 0, 0, 1303, 1, 0, 0, + 0, 0, 1305, 1, 0, 0, 0, 0, 1307, 1, 0, 0, 0, 0, 1309, 1, 0, 0, 0, 0, 1311, + 1, 0, 0, 0, 0, 1313, 1, 0, 0, 0, 0, 1315, 1, 0, 0, 0, 0, 1317, 1, 0, 0, + 0, 0, 1319, 1, 0, 0, 0, 0, 1321, 1, 0, 0, 0, 0, 1323, 1, 0, 0, 0, 0, 1325, + 1, 0, 0, 0, 0, 1327, 1, 0, 0, 0, 0, 1329, 1, 0, 0, 0, 0, 1331, 1, 0, 0, + 0, 0, 1333, 1, 0, 0, 0, 0, 1335, 1, 0, 0, 0, 0, 1337, 1, 0, 0, 0, 0, 1339, + 1, 0, 0, 0, 0, 1341, 1, 0, 0, 0, 0, 1343, 1, 0, 0, 0, 0, 1345, 1, 0, 0, + 0, 0, 1347, 1, 0, 0, 0, 0, 1349, 1, 0, 0, 0, 0, 1351, 1, 0, 0, 0, 0, 1353, + 1, 0, 0, 0, 0, 1355, 1, 0, 0, 0, 0, 1357, 1, 0, 0, 0, 0, 1359, 1, 0, 0, + 0, 0, 1361, 1, 0, 0, 0, 0, 1363, 1, 0, 0, 0, 0, 1365, 1, 0, 0, 0, 0, 1367, + 1, 0, 0, 0, 0, 1369, 1, 0, 0, 0, 0, 1371, 1, 0, 0, 0, 0, 1373, 1, 0, 0, + 0, 0, 1375, 1, 0, 0, 0, 0, 1377, 1, 0, 0, 0, 0, 1379, 1, 0, 0, 0, 0, 1381, + 1, 0, 0, 0, 0, 1383, 1, 0, 0, 0, 0, 1385, 1, 0, 0, 0, 0, 1387, 1, 0, 0, + 0, 0, 1389, 1, 0, 0, 0, 0, 1391, 1, 0, 0, 0, 0, 1393, 1, 0, 0, 0, 0, 1395, + 1, 0, 0, 0, 0, 1397, 1, 0, 0, 0, 0, 1399, 1, 0, 0, 0, 0, 1401, 1, 0, 0, + 0, 0, 1403, 1, 0, 0, 0, 0, 1405, 1, 0, 0, 0, 0, 1407, 1, 0, 0, 0, 0, 1409, + 1, 0, 0, 0, 0, 1411, 1, 0, 0, 0, 0, 1413, 1, 0, 0, 0, 0, 1415, 1, 0, 0, + 0, 0, 1417, 1, 0, 0, 0, 0, 1419, 1, 0, 0, 0, 0, 1421, 1, 0, 0, 0, 0, 1423, + 1, 0, 0, 0, 0, 1425, 1, 0, 0, 0, 0, 1427, 1, 0, 0, 0, 0, 1429, 1, 0, 0, + 0, 0, 1431, 1, 0, 0, 0, 0, 1433, 1, 0, 0, 0, 0, 1435, 1, 0, 0, 0, 0, 1437, + 1, 0, 0, 0, 0, 1439, 1, 0, 0, 0, 0, 1441, 1, 0, 0, 0, 0, 1443, 1, 0, 0, + 0, 0, 1445, 1, 0, 0, 0, 0, 1447, 1, 0, 0, 0, 0, 1449, 1, 0, 0, 0, 0, 1451, + 1, 0, 0, 0, 0, 1453, 1, 0, 0, 0, 0, 1455, 1, 0, 0, 0, 0, 1457, 1, 0, 0, + 0, 0, 1459, 1, 0, 0, 0, 0, 1461, 1, 0, 0, 0, 0, 1463, 1, 0, 0, 0, 0, 1465, + 1, 0, 0, 0, 0, 1467, 1, 0, 0, 0, 0, 1469, 1, 0, 0, 0, 0, 1471, 1, 0, 0, + 0, 0, 1473, 1, 0, 0, 0, 0, 1475, 1, 0, 0, 0, 0, 1477, 1, 0, 0, 0, 0, 1479, + 1, 0, 0, 0, 0, 1481, 1, 0, 0, 0, 0, 1483, 1, 0, 0, 0, 0, 1485, 1, 0, 0, + 0, 0, 1487, 1, 0, 0, 0, 0, 1489, 1, 0, 0, 0, 0, 1491, 1, 0, 0, 0, 0, 1493, + 1, 0, 0, 0, 0, 1495, 1, 0, 0, 0, 0, 1497, 1, 0, 0, 0, 0, 1499, 1, 0, 0, + 0, 0, 1501, 1, 0, 0, 0, 0, 1503, 1, 0, 0, 0, 0, 1505, 1, 0, 0, 0, 0, 1507, + 1, 0, 0, 0, 0, 1509, 1, 0, 0, 0, 0, 1511, 1, 0, 0, 0, 0, 1513, 1, 0, 0, + 0, 0, 1515, 1, 0, 0, 0, 0, 1517, 1, 0, 0, 0, 0, 1519, 1, 0, 0, 0, 0, 1521, + 1, 0, 0, 0, 0, 1523, 1, 0, 0, 0, 0, 1525, 1, 0, 0, 0, 0, 1527, 1, 0, 0, + 0, 0, 1529, 1, 0, 0, 0, 0, 1531, 1, 0, 0, 0, 0, 1533, 1, 0, 0, 0, 0, 1535, + 1, 0, 0, 0, 0, 1537, 1, 0, 0, 0, 0, 1539, 1, 0, 0, 0, 0, 1541, 1, 0, 0, + 0, 0, 1543, 1, 0, 0, 0, 0, 1545, 1, 0, 0, 0, 0, 1547, 1, 0, 0, 0, 0, 1549, + 1, 0, 0, 0, 0, 1551, 1, 0, 0, 0, 0, 1553, 1, 0, 0, 0, 0, 1555, 1, 0, 0, + 0, 0, 1557, 1, 0, 0, 0, 0, 1559, 1, 0, 0, 0, 0, 1561, 1, 0, 0, 0, 0, 1563, + 1, 0, 0, 0, 0, 1565, 1, 0, 0, 0, 0, 1567, 1, 0, 0, 0, 0, 1569, 1, 0, 0, + 0, 0, 1571, 1, 0, 0, 0, 0, 1573, 1, 0, 0, 0, 0, 1575, 1, 0, 0, 0, 0, 1577, + 1, 0, 0, 0, 0, 1579, 1, 0, 0, 0, 0, 1581, 1, 0, 0, 0, 0, 1583, 1, 0, 0, + 0, 0, 1585, 1, 0, 0, 0, 0, 1587, 1, 0, 0, 0, 0, 1589, 1, 0, 0, 0, 0, 1591, + 1, 0, 0, 0, 0, 1593, 1, 0, 0, 0, 0, 1595, 1, 0, 0, 0, 0, 1597, 1, 0, 0, + 0, 0, 1599, 1, 0, 0, 0, 0, 1601, 1, 0, 0, 0, 0, 1603, 1, 0, 0, 0, 0, 1605, + 1, 0, 0, 0, 0, 1607, 1, 0, 0, 0, 0, 1609, 1, 0, 0, 0, 0, 1611, 1, 0, 0, + 0, 0, 1613, 1, 0, 0, 0, 0, 1615, 1, 0, 0, 0, 0, 1617, 1, 0, 0, 0, 0, 1619, + 1, 0, 0, 0, 0, 1621, 1, 0, 0, 0, 0, 1623, 1, 0, 0, 0, 0, 1625, 1, 0, 0, + 0, 0, 1627, 1, 0, 0, 0, 0, 1629, 1, 0, 0, 0, 0, 1631, 1, 0, 0, 0, 0, 1633, + 1, 0, 0, 0, 0, 1635, 1, 0, 0, 0, 0, 1637, 1, 0, 0, 0, 0, 1639, 1, 0, 0, + 0, 0, 1641, 1, 0, 0, 0, 0, 1643, 1, 0, 0, 0, 0, 1645, 1, 0, 0, 0, 0, 1647, + 1, 0, 0, 0, 0, 1649, 1, 0, 0, 0, 0, 1651, 1, 0, 0, 0, 0, 1653, 1, 0, 0, + 0, 0, 1655, 1, 0, 0, 0, 0, 1657, 1, 0, 0, 0, 0, 1659, 1, 0, 0, 0, 0, 1661, + 1, 0, 0, 0, 0, 1663, 1, 0, 0, 0, 0, 1665, 1, 0, 0, 0, 0, 1667, 1, 0, 0, + 0, 0, 1669, 1, 0, 0, 0, 0, 1671, 1, 0, 0, 0, 0, 1673, 1, 0, 0, 0, 0, 1675, + 1, 0, 0, 0, 0, 1677, 1, 0, 0, 0, 0, 1679, 1, 0, 0, 0, 0, 1681, 1, 0, 0, + 0, 0, 1683, 1, 0, 0, 0, 0, 1685, 1, 0, 0, 0, 0, 1687, 1, 0, 0, 0, 0, 1689, + 1, 0, 0, 0, 0, 1691, 1, 0, 0, 0, 0, 1693, 1, 0, 0, 0, 0, 1695, 1, 0, 0, + 0, 0, 1697, 1, 0, 0, 0, 0, 1699, 1, 0, 0, 0, 0, 1701, 1, 0, 0, 0, 0, 1703, + 1, 0, 0, 0, 0, 1705, 1, 0, 0, 0, 0, 1707, 1, 0, 0, 0, 0, 1709, 1, 0, 0, + 0, 0, 1711, 1, 0, 0, 0, 0, 1713, 1, 0, 0, 0, 0, 1715, 1, 0, 0, 0, 0, 1717, + 1, 0, 0, 0, 0, 1719, 1, 0, 0, 0, 0, 1721, 1, 0, 0, 0, 0, 1723, 1, 0, 0, + 0, 0, 1725, 1, 0, 0, 0, 0, 1727, 1, 0, 0, 0, 0, 1729, 1, 0, 0, 0, 0, 1731, + 1, 0, 0, 0, 0, 1733, 1, 0, 0, 0, 0, 1735, 1, 0, 0, 0, 0, 1737, 1, 0, 0, + 0, 0, 1739, 1, 0, 0, 0, 0, 1741, 1, 0, 0, 0, 0, 1743, 1, 0, 0, 0, 0, 1745, + 1, 0, 0, 0, 0, 1747, 1, 0, 0, 0, 0, 1749, 1, 0, 0, 0, 0, 1751, 1, 0, 0, + 0, 0, 1753, 1, 0, 0, 0, 0, 1755, 1, 0, 0, 0, 0, 1757, 1, 0, 0, 0, 0, 1759, + 1, 0, 0, 0, 0, 1761, 1, 0, 0, 0, 0, 1763, 1, 0, 0, 0, 0, 1765, 1, 0, 0, + 0, 0, 1767, 1, 0, 0, 0, 0, 1769, 1, 0, 0, 0, 0, 1771, 1, 0, 0, 0, 0, 1773, + 1, 0, 0, 0, 0, 1775, 1, 0, 0, 0, 0, 1777, 1, 0, 0, 0, 0, 1779, 1, 0, 0, + 0, 0, 1781, 1, 0, 0, 0, 0, 1783, 1, 0, 0, 0, 0, 1785, 1, 0, 0, 0, 0, 1787, + 1, 0, 0, 0, 0, 1789, 1, 0, 0, 0, 0, 1791, 1, 0, 0, 0, 0, 1793, 1, 0, 0, + 0, 0, 1795, 1, 0, 0, 0, 0, 1797, 1, 0, 0, 0, 0, 1799, 1, 0, 0, 0, 0, 1801, + 1, 0, 0, 0, 0, 1803, 1, 0, 0, 0, 0, 1805, 1, 0, 0, 0, 0, 1807, 1, 0, 0, + 0, 0, 1809, 1, 0, 0, 0, 0, 1811, 1, 0, 0, 0, 0, 1813, 1, 0, 0, 0, 0, 1815, + 1, 0, 0, 0, 0, 1817, 1, 0, 0, 0, 0, 1819, 1, 0, 0, 0, 0, 1821, 1, 0, 0, + 0, 0, 1823, 1, 0, 0, 0, 0, 1825, 1, 0, 0, 0, 0, 1827, 1, 0, 0, 0, 0, 1829, + 1, 0, 0, 0, 0, 1831, 1, 0, 0, 0, 0, 1833, 1, 0, 0, 0, 0, 1835, 1, 0, 0, + 0, 0, 1837, 1, 0, 0, 0, 0, 1839, 1, 0, 0, 0, 0, 1841, 1, 0, 0, 0, 0, 1843, + 1, 0, 0, 0, 0, 1845, 1, 0, 0, 0, 0, 1847, 1, 0, 0, 0, 0, 1849, 1, 0, 0, + 0, 0, 1851, 1, 0, 0, 0, 0, 1853, 1, 0, 0, 0, 0, 1855, 1, 0, 0, 0, 0, 1857, + 1, 0, 0, 0, 0, 1859, 1, 0, 0, 0, 0, 1861, 1, 0, 0, 0, 0, 1863, 1, 0, 0, + 0, 0, 1865, 1, 0, 0, 0, 0, 1867, 1, 0, 0, 0, 0, 1869, 1, 0, 0, 0, 0, 1871, + 1, 0, 0, 0, 0, 1873, 1, 0, 0, 0, 0, 1875, 1, 0, 0, 0, 0, 1877, 1, 0, 0, + 0, 0, 1879, 1, 0, 0, 0, 0, 1881, 1, 0, 0, 0, 0, 1883, 1, 0, 0, 0, 0, 1885, + 1, 0, 0, 0, 0, 1887, 1, 0, 0, 0, 0, 1889, 1, 0, 0, 0, 0, 1891, 1, 0, 0, + 0, 0, 1893, 1, 0, 0, 0, 0, 1895, 1, 0, 0, 0, 0, 1897, 1, 0, 0, 0, 0, 1899, + 1, 0, 0, 0, 0, 1901, 1, 0, 0, 0, 0, 1903, 1, 0, 0, 0, 0, 1905, 1, 0, 0, + 0, 0, 1907, 1, 0, 0, 0, 0, 1909, 1, 0, 0, 0, 0, 1911, 1, 0, 0, 0, 0, 1913, + 1, 0, 0, 0, 0, 1915, 1, 0, 0, 0, 0, 1917, 1, 0, 0, 0, 0, 1919, 1, 0, 0, + 0, 0, 1921, 1, 0, 0, 0, 0, 1923, 1, 0, 0, 0, 0, 1925, 1, 0, 0, 0, 0, 1927, + 1, 0, 0, 0, 0, 1929, 1, 0, 0, 0, 0, 1931, 1, 0, 0, 0, 0, 1933, 1, 0, 0, + 0, 0, 1935, 1, 0, 0, 0, 0, 1937, 1, 0, 0, 0, 0, 1939, 1, 0, 0, 0, 0, 1941, + 1, 0, 0, 0, 0, 1943, 1, 0, 0, 0, 0, 1945, 1, 0, 0, 0, 0, 1947, 1, 0, 0, + 0, 0, 1949, 1, 0, 0, 0, 0, 1951, 1, 0, 0, 0, 0, 1953, 1, 0, 0, 0, 0, 1955, + 1, 0, 0, 0, 0, 1957, 1, 0, 0, 0, 0, 1959, 1, 0, 0, 0, 0, 1961, 1, 0, 0, + 0, 0, 1963, 1, 0, 0, 0, 0, 1965, 1, 0, 0, 0, 0, 1967, 1, 0, 0, 0, 0, 1969, + 1, 0, 0, 0, 0, 1971, 1, 0, 0, 0, 0, 1973, 1, 0, 0, 0, 0, 1975, 1, 0, 0, + 0, 0, 1977, 1, 0, 0, 0, 0, 1979, 1, 0, 0, 0, 0, 1981, 1, 0, 0, 0, 0, 1983, + 1, 0, 0, 0, 0, 1985, 1, 0, 0, 0, 0, 1987, 1, 0, 0, 0, 0, 1989, 1, 0, 0, + 0, 0, 1991, 1, 0, 0, 0, 0, 1993, 1, 0, 0, 0, 0, 1995, 1, 0, 0, 0, 0, 1997, + 1, 0, 0, 0, 0, 1999, 1, 0, 0, 0, 0, 2001, 1, 0, 0, 0, 0, 2003, 1, 0, 0, + 0, 0, 2005, 1, 0, 0, 0, 0, 2007, 1, 0, 0, 0, 0, 2009, 1, 0, 0, 0, 0, 2011, + 1, 0, 0, 0, 0, 2013, 1, 0, 0, 0, 0, 2015, 1, 0, 0, 0, 0, 2017, 1, 0, 0, + 0, 0, 2019, 1, 0, 0, 0, 0, 2021, 1, 0, 0, 0, 0, 2023, 1, 0, 0, 0, 0, 2025, + 1, 0, 0, 0, 0, 2027, 1, 0, 0, 0, 0, 2029, 1, 0, 0, 0, 0, 2031, 1, 0, 0, + 0, 0, 2033, 1, 0, 0, 0, 0, 2035, 1, 0, 0, 0, 0, 2037, 1, 0, 0, 0, 0, 2039, + 1, 0, 0, 0, 0, 2041, 1, 0, 0, 0, 0, 2043, 1, 0, 0, 0, 0, 2045, 1, 0, 0, + 0, 0, 2047, 1, 0, 0, 0, 0, 2049, 1, 0, 0, 0, 0, 2051, 1, 0, 0, 0, 0, 2053, + 1, 0, 0, 0, 0, 2055, 1, 0, 0, 0, 0, 2057, 1, 0, 0, 0, 0, 2059, 1, 0, 0, + 0, 0, 2061, 1, 0, 0, 0, 0, 2063, 1, 0, 0, 0, 0, 2065, 1, 0, 0, 0, 0, 2067, + 1, 0, 0, 0, 0, 2069, 1, 0, 0, 0, 0, 2071, 1, 0, 0, 0, 0, 2073, 1, 0, 0, + 0, 0, 2075, 1, 0, 0, 0, 0, 2077, 1, 0, 0, 0, 0, 2079, 1, 0, 0, 0, 0, 2081, + 1, 0, 0, 0, 0, 2083, 1, 0, 0, 0, 0, 2085, 1, 0, 0, 0, 0, 2087, 1, 0, 0, + 0, 0, 2089, 1, 0, 0, 0, 0, 2091, 1, 0, 0, 0, 0, 2093, 1, 0, 0, 0, 0, 2095, + 1, 0, 0, 0, 0, 2097, 1, 0, 0, 0, 0, 2099, 1, 0, 0, 0, 0, 2101, 1, 0, 0, + 0, 0, 2103, 1, 0, 0, 0, 0, 2105, 1, 0, 0, 0, 0, 2107, 1, 0, 0, 0, 0, 2109, + 1, 0, 0, 0, 0, 2111, 1, 0, 0, 0, 0, 2113, 1, 0, 0, 0, 0, 2115, 1, 0, 0, + 0, 0, 2117, 1, 0, 0, 0, 0, 2119, 1, 0, 0, 0, 0, 2121, 1, 0, 0, 0, 0, 2123, + 1, 0, 0, 0, 0, 2125, 1, 0, 0, 0, 0, 2127, 1, 0, 0, 0, 0, 2129, 1, 0, 0, + 0, 0, 2131, 1, 0, 0, 0, 0, 2133, 1, 0, 0, 0, 0, 2135, 1, 0, 0, 0, 0, 2137, + 1, 0, 0, 0, 0, 2139, 1, 0, 0, 0, 0, 2141, 1, 0, 0, 0, 0, 2143, 1, 0, 0, + 0, 0, 2145, 1, 0, 0, 0, 0, 2147, 1, 0, 0, 0, 0, 2149, 1, 0, 0, 0, 0, 2151, + 1, 0, 0, 0, 0, 2153, 1, 0, 0, 0, 0, 2155, 1, 0, 0, 0, 0, 2157, 1, 0, 0, + 0, 0, 2159, 1, 0, 0, 0, 0, 2161, 1, 0, 0, 0, 0, 2163, 1, 0, 0, 0, 0, 2165, + 1, 0, 0, 0, 0, 2167, 1, 0, 0, 0, 0, 2169, 1, 0, 0, 0, 0, 2171, 1, 0, 0, + 0, 0, 2173, 1, 0, 0, 0, 0, 2175, 1, 0, 0, 0, 0, 2177, 1, 0, 0, 0, 0, 2179, + 1, 0, 0, 0, 0, 2181, 1, 0, 0, 0, 0, 2183, 1, 0, 0, 0, 0, 2185, 1, 0, 0, + 0, 0, 2187, 1, 0, 0, 0, 0, 2189, 1, 0, 0, 0, 0, 2191, 1, 0, 0, 0, 0, 2193, + 1, 0, 0, 0, 0, 2195, 1, 0, 0, 0, 0, 2197, 1, 0, 0, 0, 0, 2199, 1, 0, 0, + 0, 0, 2201, 1, 0, 0, 0, 0, 2203, 1, 0, 0, 0, 0, 2205, 1, 0, 0, 0, 0, 2207, + 1, 0, 0, 0, 0, 2209, 1, 0, 0, 0, 0, 2211, 1, 0, 0, 0, 0, 2213, 1, 0, 0, + 0, 0, 2215, 1, 0, 0, 0, 0, 2217, 1, 0, 0, 0, 0, 2219, 1, 0, 0, 0, 0, 2221, + 1, 0, 0, 0, 0, 2223, 1, 0, 0, 0, 0, 2225, 1, 0, 0, 0, 0, 2227, 1, 0, 0, + 0, 0, 2229, 1, 0, 0, 0, 0, 2231, 1, 0, 0, 0, 0, 2233, 1, 0, 0, 0, 0, 2235, + 1, 0, 0, 0, 0, 2237, 1, 0, 0, 0, 0, 2239, 1, 0, 0, 0, 0, 2241, 1, 0, 0, + 0, 0, 2243, 1, 0, 0, 0, 0, 2245, 1, 0, 0, 0, 0, 2247, 1, 0, 0, 0, 0, 2249, + 1, 0, 0, 0, 0, 2251, 1, 0, 0, 0, 0, 2253, 1, 0, 0, 0, 0, 2255, 1, 0, 0, + 0, 0, 2257, 1, 0, 0, 0, 0, 2259, 1, 0, 0, 0, 0, 2261, 1, 0, 0, 0, 0, 2263, + 1, 0, 0, 0, 0, 2265, 1, 0, 0, 0, 0, 2267, 1, 0, 0, 0, 0, 2269, 1, 0, 0, + 0, 0, 2271, 1, 0, 0, 0, 0, 2273, 1, 0, 0, 0, 0, 2277, 1, 0, 0, 0, 0, 2279, + 1, 0, 0, 0, 0, 2281, 1, 0, 0, 0, 0, 2283, 1, 0, 0, 0, 0, 2285, 1, 0, 0, + 0, 0, 2287, 1, 0, 0, 0, 0, 2289, 1, 0, 0, 0, 0, 2291, 1, 0, 0, 0, 0, 2293, + 1, 0, 0, 0, 0, 2295, 1, 0, 0, 0, 0, 2297, 1, 0, 0, 0, 0, 2299, 1, 0, 0, + 0, 0, 2301, 1, 0, 0, 0, 0, 2303, 1, 0, 0, 0, 0, 2305, 1, 0, 0, 0, 0, 2307, + 1, 0, 0, 0, 0, 2309, 1, 0, 0, 0, 0, 2329, 1, 0, 0, 0, 1, 2332, 1, 0, 0, + 0, 3, 2338, 1, 0, 0, 0, 5, 2352, 1, 0, 0, 0, 7, 2401, 1, 0, 0, 0, 9, 2405, + 1, 0, 0, 0, 11, 2409, 1, 0, 0, 0, 13, 2413, 1, 0, 0, 0, 15, 2419, 1, 0, + 0, 0, 17, 2426, 1, 0, 0, 0, 19, 2434, 1, 0, 0, 0, 21, 2438, 1, 0, 0, 0, + 23, 2444, 1, 0, 0, 0, 25, 2447, 1, 0, 0, 0, 27, 2451, 1, 0, 0, 0, 29, 2461, + 1, 0, 0, 0, 31, 2468, 1, 0, 0, 0, 33, 2476, 1, 0, 0, 0, 35, 2481, 1, 0, + 0, 0, 37, 2489, 1, 0, 0, 0, 39, 2492, 1, 0, 0, 0, 41, 2497, 1, 0, 0, 0, + 43, 2505, 1, 0, 0, 0, 45, 2510, 1, 0, 0, 0, 47, 2515, 1, 0, 0, 0, 49, 2522, + 1, 0, 0, 0, 51, 2532, 1, 0, 0, 0, 53, 2538, 1, 0, 0, 0, 55, 2546, 1, 0, + 0, 0, 57, 2553, 1, 0, 0, 0, 59, 2563, 1, 0, 0, 0, 61, 2574, 1, 0, 0, 0, + 63, 2583, 1, 0, 0, 0, 65, 2591, 1, 0, 0, 0, 67, 2598, 1, 0, 0, 0, 69, 2604, + 1, 0, 0, 0, 71, 2612, 1, 0, 0, 0, 73, 2625, 1, 0, 0, 0, 75, 2638, 1, 0, + 0, 0, 77, 2645, 1, 0, 0, 0, 79, 2654, 1, 0, 0, 0, 81, 2664, 1, 0, 0, 0, + 83, 2672, 1, 0, 0, 0, 85, 2680, 1, 0, 0, 0, 87, 2688, 1, 0, 0, 0, 89, 2695, + 1, 0, 0, 0, 91, 2700, 1, 0, 0, 0, 93, 2709, 1, 0, 0, 0, 95, 2723, 1, 0, + 0, 0, 97, 2735, 1, 0, 0, 0, 99, 2744, 1, 0, 0, 0, 101, 2756, 1, 0, 0, 0, + 103, 2761, 1, 0, 0, 0, 105, 2766, 1, 0, 0, 0, 107, 2771, 1, 0, 0, 0, 109, + 2778, 1, 0, 0, 0, 111, 2784, 1, 0, 0, 0, 113, 2793, 1, 0, 0, 0, 115, 2801, + 1, 0, 0, 0, 117, 2808, 1, 0, 0, 0, 119, 2815, 1, 0, 0, 0, 121, 2820, 1, + 0, 0, 0, 123, 2828, 1, 0, 0, 0, 125, 2834, 1, 0, 0, 0, 127, 2840, 1, 0, + 0, 0, 129, 2844, 1, 0, 0, 0, 131, 2850, 1, 0, 0, 0, 133, 2858, 1, 0, 0, + 0, 135, 2863, 1, 0, 0, 0, 137, 2872, 1, 0, 0, 0, 139, 2882, 1, 0, 0, 0, + 141, 2886, 1, 0, 0, 0, 143, 2892, 1, 0, 0, 0, 145, 2898, 1, 0, 0, 0, 147, + 2905, 1, 0, 0, 0, 149, 2919, 1, 0, 0, 0, 151, 2929, 1, 0, 0, 0, 153, 2932, + 1, 0, 0, 0, 155, 2939, 1, 0, 0, 0, 157, 2947, 1, 0, 0, 0, 159, 2950, 1, + 0, 0, 0, 161, 2956, 1, 0, 0, 0, 163, 2963, 1, 0, 0, 0, 165, 2969, 1, 0, + 0, 0, 167, 2975, 1, 0, 0, 0, 169, 2982, 1, 0, 0, 0, 171, 2991, 1, 0, 0, + 0, 173, 2996, 1, 0, 0, 0, 175, 2999, 1, 0, 0, 0, 177, 3007, 1, 0, 0, 0, + 179, 3012, 1, 0, 0, 0, 181, 3016, 1, 0, 0, 0, 183, 3021, 1, 0, 0, 0, 185, + 3026, 1, 0, 0, 0, 187, 3034, 1, 0, 0, 0, 189, 3042, 1, 0, 0, 0, 191, 3048, + 1, 0, 0, 0, 193, 3053, 1, 0, 0, 0, 195, 3058, 1, 0, 0, 0, 197, 3064, 1, + 0, 0, 0, 199, 3071, 1, 0, 0, 0, 201, 3077, 1, 0, 0, 0, 203, 3082, 1, 0, + 0, 0, 205, 3087, 1, 0, 0, 0, 207, 3094, 1, 0, 0, 0, 209, 3099, 1, 0, 0, + 0, 211, 3112, 1, 0, 0, 0, 213, 3124, 1, 0, 0, 0, 215, 3154, 1, 0, 0, 0, + 217, 3160, 1, 0, 0, 0, 219, 3169, 1, 0, 0, 0, 221, 3178, 1, 0, 0, 0, 223, + 3187, 1, 0, 0, 0, 225, 3195, 1, 0, 0, 0, 227, 3199, 1, 0, 0, 0, 229, 3218, + 1, 0, 0, 0, 231, 3223, 1, 0, 0, 0, 233, 3230, 1, 0, 0, 0, 235, 3233, 1, + 0, 0, 0, 237, 3242, 1, 0, 0, 0, 239, 3249, 1, 0, 0, 0, 241, 3258, 1, 0, + 0, 0, 243, 3269, 1, 0, 0, 0, 245, 3272, 1, 0, 0, 0, 247, 3278, 1, 0, 0, + 0, 249, 3282, 1, 0, 0, 0, 251, 3288, 1, 0, 0, 0, 253, 3296, 1, 0, 0, 0, + 255, 3301, 1, 0, 0, 0, 257, 3311, 1, 0, 0, 0, 259, 3319, 1, 0, 0, 0, 261, + 3329, 1, 0, 0, 0, 263, 3335, 1, 0, 0, 0, 265, 3341, 1, 0, 0, 0, 267, 3346, + 1, 0, 0, 0, 269, 3352, 1, 0, 0, 0, 271, 3363, 1, 0, 0, 0, 273, 3370, 1, + 0, 0, 0, 275, 3378, 1, 0, 0, 0, 277, 3385, 1, 0, 0, 0, 279, 3392, 1, 0, + 0, 0, 281, 3400, 1, 0, 0, 0, 283, 3408, 1, 0, 0, 0, 285, 3417, 1, 0, 0, + 0, 287, 3426, 1, 0, 0, 0, 289, 3433, 1, 0, 0, 0, 291, 3440, 1, 0, 0, 0, + 293, 3447, 1, 0, 0, 0, 295, 3453, 1, 0, 0, 0, 297, 3459, 1, 0, 0, 0, 299, + 3466, 1, 0, 0, 0, 301, 3474, 1, 0, 0, 0, 303, 3481, 1, 0, 0, 0, 305, 3485, + 1, 0, 0, 0, 307, 3495, 1, 0, 0, 0, 309, 3500, 1, 0, 0, 0, 311, 3507, 1, + 0, 0, 0, 313, 3512, 1, 0, 0, 0, 315, 3520, 1, 0, 0, 0, 317, 3524, 1, 0, + 0, 0, 319, 3537, 1, 0, 0, 0, 321, 3546, 1, 0, 0, 0, 323, 3557, 1, 0, 0, + 0, 325, 3572, 1, 0, 0, 0, 327, 3592, 1, 0, 0, 0, 329, 3609, 1, 0, 0, 0, + 331, 3613, 1, 0, 0, 0, 333, 3621, 1, 0, 0, 0, 335, 3630, 1, 0, 0, 0, 337, + 3640, 1, 0, 0, 0, 339, 3654, 1, 0, 0, 0, 341, 3660, 1, 0, 0, 0, 343, 3671, + 1, 0, 0, 0, 345, 3676, 1, 0, 0, 0, 347, 3679, 1, 0, 0, 0, 349, 3688, 1, + 0, 0, 0, 351, 3696, 1, 0, 0, 0, 353, 3701, 1, 0, 0, 0, 355, 3706, 1, 0, + 0, 0, 357, 3712, 1, 0, 0, 0, 359, 3719, 1, 0, 0, 0, 361, 3726, 1, 0, 0, + 0, 363, 3735, 1, 0, 0, 0, 365, 3742, 1, 0, 0, 0, 367, 3748, 1, 0, 0, 0, + 369, 3752, 1, 0, 0, 0, 371, 3758, 1, 0, 0, 0, 373, 3765, 1, 0, 0, 0, 375, + 3770, 1, 0, 0, 0, 377, 3776, 1, 0, 0, 0, 379, 3782, 1, 0, 0, 0, 381, 3787, + 1, 0, 0, 0, 383, 3793, 1, 0, 0, 0, 385, 3797, 1, 0, 0, 0, 387, 3806, 1, + 0, 0, 0, 389, 3814, 1, 0, 0, 0, 391, 3823, 1, 0, 0, 0, 393, 3833, 1, 0, + 0, 0, 395, 3843, 1, 0, 0, 0, 397, 3847, 1, 0, 0, 0, 399, 3852, 1, 0, 0, + 0, 401, 3857, 1, 0, 0, 0, 403, 3862, 1, 0, 0, 0, 405, 3867, 1, 0, 0, 0, + 407, 3872, 1, 0, 0, 0, 409, 3880, 1, 0, 0, 0, 411, 3887, 1, 0, 0, 0, 413, + 3892, 1, 0, 0, 0, 415, 3899, 1, 0, 0, 0, 417, 3909, 1, 0, 0, 0, 419, 3915, + 1, 0, 0, 0, 421, 3922, 1, 0, 0, 0, 423, 3929, 1, 0, 0, 0, 425, 3937, 1, + 0, 0, 0, 427, 3941, 1, 0, 0, 0, 429, 3949, 1, 0, 0, 0, 431, 3954, 1, 0, + 0, 0, 433, 3959, 1, 0, 0, 0, 435, 3969, 1, 0, 0, 0, 437, 3978, 1, 0, 0, + 0, 439, 3983, 1, 0, 0, 0, 441, 3988, 1, 0, 0, 0, 443, 3996, 1, 0, 0, 0, + 445, 4005, 1, 0, 0, 0, 447, 4014, 1, 0, 0, 0, 449, 4021, 1, 0, 0, 0, 451, + 4031, 1, 0, 0, 0, 453, 4040, 1, 0, 0, 0, 455, 4045, 1, 0, 0, 0, 457, 4056, + 1, 0, 0, 0, 459, 4061, 1, 0, 0, 0, 461, 4070, 1, 0, 0, 0, 463, 4079, 1, + 0, 0, 0, 465, 4084, 1, 0, 0, 0, 467, 4095, 1, 0, 0, 0, 469, 4104, 1, 0, + 0, 0, 471, 4109, 1, 0, 0, 0, 473, 4117, 1, 0, 0, 0, 475, 4124, 1, 0, 0, + 0, 477, 4135, 1, 0, 0, 0, 479, 4144, 1, 0, 0, 0, 481, 4155, 1, 0, 0, 0, + 483, 4166, 1, 0, 0, 0, 485, 4178, 1, 0, 0, 0, 487, 4190, 1, 0, 0, 0, 489, + 4204, 1, 0, 0, 0, 491, 4223, 1, 0, 0, 0, 493, 4242, 1, 0, 0, 0, 495, 4259, + 1, 0, 0, 0, 497, 4275, 1, 0, 0, 0, 499, 4286, 1, 0, 0, 0, 501, 4300, 1, + 0, 0, 0, 503, 4318, 1, 0, 0, 0, 505, 4336, 1, 0, 0, 0, 507, 4350, 1, 0, + 0, 0, 509, 4369, 1, 0, 0, 0, 511, 4380, 1, 0, 0, 0, 513, 4393, 1, 0, 0, + 0, 515, 4405, 1, 0, 0, 0, 517, 4415, 1, 0, 0, 0, 519, 4427, 1, 0, 0, 0, + 521, 4438, 1, 0, 0, 0, 523, 4455, 1, 0, 0, 0, 525, 4475, 1, 0, 0, 0, 527, + 4487, 1, 0, 0, 0, 529, 4502, 1, 0, 0, 0, 531, 4516, 1, 0, 0, 0, 533, 4528, + 1, 0, 0, 0, 535, 4539, 1, 0, 0, 0, 537, 4551, 1, 0, 0, 0, 539, 4564, 1, + 0, 0, 0, 541, 4582, 1, 0, 0, 0, 543, 4612, 1, 0, 0, 0, 545, 4624, 1, 0, + 0, 0, 547, 4633, 1, 0, 0, 0, 549, 4651, 1, 0, 0, 0, 551, 4669, 1, 0, 0, + 0, 553, 4680, 1, 0, 0, 0, 555, 4690, 1, 0, 0, 0, 557, 4703, 1, 0, 0, 0, + 559, 4714, 1, 0, 0, 0, 561, 4725, 1, 0, 0, 0, 563, 4732, 1, 0, 0, 0, 565, + 4743, 1, 0, 0, 0, 567, 4748, 1, 0, 0, 0, 569, 4752, 1, 0, 0, 0, 571, 4760, + 1, 0, 0, 0, 573, 4767, 1, 0, 0, 0, 575, 4775, 1, 0, 0, 0, 577, 4781, 1, + 0, 0, 0, 579, 4791, 1, 0, 0, 0, 581, 4802, 1, 0, 0, 0, 583, 4814, 1, 0, + 0, 0, 585, 4827, 1, 0, 0, 0, 587, 4831, 1, 0, 0, 0, 589, 4842, 1, 0, 0, + 0, 591, 4847, 1, 0, 0, 0, 593, 4851, 1, 0, 0, 0, 595, 4855, 1, 0, 0, 0, + 597, 4861, 1, 0, 0, 0, 599, 4871, 1, 0, 0, 0, 601, 4884, 1, 0, 0, 0, 603, + 4889, 1, 0, 0, 0, 605, 4900, 1, 0, 0, 0, 607, 4904, 1, 0, 0, 0, 609, 4911, + 1, 0, 0, 0, 611, 4922, 1, 0, 0, 0, 613, 4934, 1, 0, 0, 0, 615, 4938, 1, + 0, 0, 0, 617, 4946, 1, 0, 0, 0, 619, 4955, 1, 0, 0, 0, 621, 4964, 1, 0, + 0, 0, 623, 4977, 1, 0, 0, 0, 625, 4990, 1, 0, 0, 0, 627, 5008, 1, 0, 0, + 0, 629, 5018, 1, 0, 0, 0, 631, 5026, 1, 0, 0, 0, 633, 5034, 1, 0, 0, 0, + 635, 5043, 1, 0, 0, 0, 637, 5052, 1, 0, 0, 0, 639, 5060, 1, 0, 0, 0, 641, + 5075, 1, 0, 0, 0, 643, 5079, 1, 0, 0, 0, 645, 5088, 1, 0, 0, 0, 647, 5095, + 1, 0, 0, 0, 649, 5105, 1, 0, 0, 0, 651, 5113, 1, 0, 0, 0, 653, 5118, 1, + 0, 0, 0, 655, 5127, 1, 0, 0, 0, 657, 5136, 1, 0, 0, 0, 659, 5150, 1, 0, + 0, 0, 661, 5158, 1, 0, 0, 0, 663, 5165, 1, 0, 0, 0, 665, 5171, 1, 0, 0, + 0, 667, 5181, 1, 0, 0, 0, 669, 5191, 1, 0, 0, 0, 671, 5195, 1, 0, 0, 0, + 673, 5198, 1, 0, 0, 0, 675, 5206, 1, 0, 0, 0, 677, 5217, 1, 0, 0, 0, 679, + 5233, 1, 0, 0, 0, 681, 5248, 1, 0, 0, 0, 683, 5263, 1, 0, 0, 0, 685, 5269, + 1, 0, 0, 0, 687, 5276, 1, 0, 0, 0, 689, 5280, 1, 0, 0, 0, 691, 5286, 1, + 0, 0, 0, 693, 5291, 1, 0, 0, 0, 695, 5299, 1, 0, 0, 0, 697, 5305, 1, 0, + 0, 0, 699, 5311, 1, 0, 0, 0, 701, 5320, 1, 0, 0, 0, 703, 5326, 1, 0, 0, + 0, 705, 5334, 1, 0, 0, 0, 707, 5342, 1, 0, 0, 0, 709, 5351, 1, 0, 0, 0, + 711, 5365, 1, 0, 0, 0, 713, 5372, 1, 0, 0, 0, 715, 5385, 1, 0, 0, 0, 717, + 5392, 1, 0, 0, 0, 719, 5398, 1, 0, 0, 0, 721, 5409, 1, 0, 0, 0, 723, 5418, + 1, 0, 0, 0, 725, 5423, 1, 0, 0, 0, 727, 5431, 1, 0, 0, 0, 729, 5445, 1, + 0, 0, 0, 731, 5457, 1, 0, 0, 0, 733, 5465, 1, 0, 0, 0, 735, 5472, 1, 0, + 0, 0, 737, 5480, 1, 0, 0, 0, 739, 5491, 1, 0, 0, 0, 741, 5531, 1, 0, 0, + 0, 743, 5533, 1, 0, 0, 0, 745, 5544, 1, 0, 0, 0, 747, 5552, 1, 0, 0, 0, + 749, 5563, 1, 0, 0, 0, 751, 5574, 1, 0, 0, 0, 753, 5593, 1, 0, 0, 0, 755, + 5611, 1, 0, 0, 0, 757, 5627, 1, 0, 0, 0, 759, 5636, 1, 0, 0, 0, 761, 5644, + 1, 0, 0, 0, 763, 5657, 1, 0, 0, 0, 765, 5662, 1, 0, 0, 0, 767, 5666, 1, + 0, 0, 0, 769, 5672, 1, 0, 0, 0, 771, 5684, 1, 0, 0, 0, 773, 5689, 1, 0, + 0, 0, 775, 5698, 1, 0, 0, 0, 777, 5709, 1, 0, 0, 0, 779, 5722, 1, 0, 0, + 0, 781, 5730, 1, 0, 0, 0, 783, 5746, 1, 0, 0, 0, 785, 5759, 1, 0, 0, 0, + 787, 5769, 1, 0, 0, 0, 789, 5777, 1, 0, 0, 0, 791, 5785, 1, 0, 0, 0, 793, + 5790, 1, 0, 0, 0, 795, 5793, 1, 0, 0, 0, 797, 5802, 1, 0, 0, 0, 799, 5812, + 1, 0, 0, 0, 801, 5820, 1, 0, 0, 0, 803, 5827, 1, 0, 0, 0, 805, 5837, 1, + 0, 0, 0, 807, 5848, 1, 0, 0, 0, 809, 5866, 1, 0, 0, 0, 811, 5870, 1, 0, + 0, 0, 813, 5875, 1, 0, 0, 0, 815, 5882, 1, 0, 0, 0, 817, 5890, 1, 0, 0, + 0, 819, 5896, 1, 0, 0, 0, 821, 5903, 1, 0, 0, 0, 823, 5910, 1, 0, 0, 0, + 825, 5915, 1, 0, 0, 0, 827, 5921, 1, 0, 0, 0, 829, 5928, 1, 0, 0, 0, 831, + 5934, 1, 0, 0, 0, 833, 5943, 1, 0, 0, 0, 835, 5953, 1, 0, 0, 0, 837, 5960, + 1, 0, 0, 0, 839, 5967, 1, 0, 0, 0, 841, 5976, 1, 0, 0, 0, 843, 5988, 1, + 0, 0, 0, 845, 6010, 1, 0, 0, 0, 847, 6015, 1, 0, 0, 0, 849, 6022, 1, 0, + 0, 0, 851, 6029, 1, 0, 0, 0, 853, 6045, 1, 0, 0, 0, 855, 6052, 1, 0, 0, + 0, 857, 6058, 1, 0, 0, 0, 859, 6064, 1, 0, 0, 0, 861, 6070, 1, 0, 0, 0, + 863, 6080, 1, 0, 0, 0, 865, 6088, 1, 0, 0, 0, 867, 6094, 1, 0, 0, 0, 869, + 6099, 1, 0, 0, 0, 871, 6108, 1, 0, 0, 0, 873, 6116, 1, 0, 0, 0, 875, 6123, + 1, 0, 0, 0, 877, 6130, 1, 0, 0, 0, 879, 6148, 1, 0, 0, 0, 881, 6156, 1, + 0, 0, 0, 883, 6161, 1, 0, 0, 0, 885, 6166, 1, 0, 0, 0, 887, 6174, 1, 0, + 0, 0, 889, 6179, 1, 0, 0, 0, 891, 6185, 1, 0, 0, 0, 893, 6196, 1, 0, 0, + 0, 895, 6214, 1, 0, 0, 0, 897, 6221, 1, 0, 0, 0, 899, 6231, 1, 0, 0, 0, + 901, 6239, 1, 0, 0, 0, 903, 6252, 1, 0, 0, 0, 905, 6260, 1, 0, 0, 0, 907, + 6274, 1, 0, 0, 0, 909, 6282, 1, 0, 0, 0, 911, 6291, 1, 0, 0, 0, 913, 6299, + 1, 0, 0, 0, 915, 6309, 1, 0, 0, 0, 917, 6317, 1, 0, 0, 0, 919, 6320, 1, + 0, 0, 0, 921, 6330, 1, 0, 0, 0, 923, 6334, 1, 0, 0, 0, 925, 6344, 1, 0, + 0, 0, 927, 6351, 1, 0, 0, 0, 929, 6356, 1, 0, 0, 0, 931, 6371, 1, 0, 0, + 0, 933, 6380, 1, 0, 0, 0, 935, 6385, 1, 0, 0, 0, 937, 6392, 1, 0, 0, 0, + 939, 6397, 1, 0, 0, 0, 941, 6403, 1, 0, 0, 0, 943, 6408, 1, 0, 0, 0, 945, + 6414, 1, 0, 0, 0, 947, 6422, 1, 0, 0, 0, 949, 6427, 1, 0, 0, 0, 951, 6434, + 1, 0, 0, 0, 953, 6455, 1, 0, 0, 0, 955, 6476, 1, 0, 0, 0, 957, 6489, 1, + 0, 0, 0, 959, 6513, 1, 0, 0, 0, 961, 6525, 1, 0, 0, 0, 963, 6541, 1, 0, + 0, 0, 965, 6556, 1, 0, 0, 0, 967, 6572, 1, 0, 0, 0, 969, 6584, 1, 0, 0, + 0, 971, 6603, 1, 0, 0, 0, 973, 6614, 1, 0, 0, 0, 975, 6628, 1, 0, 0, 0, + 977, 6646, 1, 0, 0, 0, 979, 6662, 1, 0, 0, 0, 981, 6680, 1, 0, 0, 0, 983, + 6695, 1, 0, 0, 0, 985, 6714, 1, 0, 0, 0, 987, 6729, 1, 0, 0, 0, 989, 6748, + 1, 0, 0, 0, 991, 6760, 1, 0, 0, 0, 993, 6785, 1, 0, 0, 0, 995, 6806, 1, + 0, 0, 0, 997, 6815, 1, 0, 0, 0, 999, 6824, 1, 0, 0, 0, 1001, 6845, 1, 0, + 0, 0, 1003, 6866, 1, 0, 0, 0, 1005, 6873, 1, 0, 0, 0, 1007, 6880, 1, 0, + 0, 0, 1009, 6886, 1, 0, 0, 0, 1011, 6899, 1, 0, 0, 0, 1013, 6903, 1, 0, + 0, 0, 1015, 6911, 1, 0, 0, 0, 1017, 6920, 1, 0, 0, 0, 1019, 6925, 1, 0, + 0, 0, 1021, 6932, 1, 0, 0, 0, 1023, 6938, 1, 0, 0, 0, 1025, 6944, 1, 0, + 0, 0, 1027, 6956, 1, 0, 0, 0, 1029, 6961, 1, 0, 0, 0, 1031, 6967, 1, 0, + 0, 0, 1033, 6973, 1, 0, 0, 0, 1035, 6979, 1, 0, 0, 0, 1037, 6984, 1, 0, + 0, 0, 1039, 6987, 1, 0, 0, 0, 1041, 6995, 1, 0, 0, 0, 1043, 7002, 1, 0, + 0, 0, 1045, 7010, 1, 0, 0, 0, 1047, 7021, 1, 0, 0, 0, 1049, 7032, 1, 0, + 0, 0, 1051, 7039, 1, 0, 0, 0, 1053, 7049, 1, 0, 0, 0, 1055, 7054, 1, 0, + 0, 0, 1057, 7059, 1, 0, 0, 0, 1059, 7067, 1, 0, 0, 0, 1061, 7074, 1, 0, + 0, 0, 1063, 7077, 1, 0, 0, 0, 1065, 7080, 1, 0, 0, 0, 1067, 7093, 1, 0, + 0, 0, 1069, 7097, 1, 0, 0, 0, 1071, 7104, 1, 0, 0, 0, 1073, 7109, 1, 0, + 0, 0, 1075, 7114, 1, 0, 0, 0, 1077, 7130, 1, 0, 0, 0, 1079, 7138, 1, 0, + 0, 0, 1081, 7144, 1, 0, 0, 0, 1083, 7154, 1, 0, 0, 0, 1085, 7159, 1, 0, + 0, 0, 1087, 7175, 1, 0, 0, 0, 1089, 7198, 1, 0, 0, 0, 1091, 7205, 1, 0, + 0, 0, 1093, 7213, 1, 0, 0, 0, 1095, 7226, 1, 0, 0, 0, 1097, 7237, 1, 0, + 0, 0, 1099, 7246, 1, 0, 0, 0, 1101, 7265, 1, 0, 0, 0, 1103, 7271, 1, 0, + 0, 0, 1105, 7278, 1, 0, 0, 0, 1107, 7289, 1, 0, 0, 0, 1109, 7297, 1, 0, + 0, 0, 1111, 7302, 1, 0, 0, 0, 1113, 7311, 1, 0, 0, 0, 1115, 7321, 1, 0, + 0, 0, 1117, 7329, 1, 0, 0, 0, 1119, 7338, 1, 0, 0, 0, 1121, 7343, 1, 0, + 0, 0, 1123, 7355, 1, 0, 0, 0, 1125, 7363, 1, 0, 0, 0, 1127, 7372, 1, 0, + 0, 0, 1129, 7378, 1, 0, 0, 0, 1131, 7384, 1, 0, 0, 0, 1133, 7390, 1, 0, + 0, 0, 1135, 7398, 1, 0, 0, 0, 1137, 7406, 1, 0, 0, 0, 1139, 7416, 1, 0, + 0, 0, 1141, 7433, 1, 0, 0, 0, 1143, 7443, 1, 0, 0, 0, 1145, 7449, 1, 0, + 0, 0, 1147, 7464, 1, 0, 0, 0, 1149, 7478, 1, 0, 0, 0, 1151, 7487, 1, 0, + 0, 0, 1153, 7494, 1, 0, 0, 0, 1155, 7505, 1, 0, 0, 0, 1157, 7512, 1, 0, + 0, 0, 1159, 7528, 1, 0, 0, 0, 1161, 7547, 1, 0, 0, 0, 1163, 7567, 1, 0, + 0, 0, 1165, 7590, 1, 0, 0, 0, 1167, 7611, 1, 0, 0, 0, 1169, 7635, 1, 0, + 0, 0, 1171, 7663, 1, 0, 0, 0, 1173, 7675, 1, 0, 0, 0, 1175, 7681, 1, 0, + 0, 0, 1177, 7689, 1, 0, 0, 0, 1179, 7696, 1, 0, 0, 0, 1181, 7714, 1, 0, + 0, 0, 1183, 7724, 1, 0, 0, 0, 1185, 7732, 1, 0, 0, 0, 1187, 7738, 1, 0, + 0, 0, 1189, 7743, 1, 0, 0, 0, 1191, 7752, 1, 0, 0, 0, 1193, 7759, 1, 0, + 0, 0, 1195, 7766, 1, 0, 0, 0, 1197, 7770, 1, 0, 0, 0, 1199, 7775, 1, 0, + 0, 0, 1201, 7786, 1, 0, 0, 0, 1203, 7792, 1, 0, 0, 0, 1205, 7802, 1, 0, + 0, 0, 1207, 7811, 1, 0, 0, 0, 1209, 7820, 1, 0, 0, 0, 1211, 7829, 1, 0, + 0, 0, 1213, 7836, 1, 0, 0, 0, 1215, 7844, 1, 0, 0, 0, 1217, 7850, 1, 0, + 0, 0, 1219, 7857, 1, 0, 0, 0, 1221, 7864, 1, 0, 0, 0, 1223, 7871, 1, 0, + 0, 0, 1225, 7877, 1, 0, 0, 0, 1227, 7882, 1, 0, 0, 0, 1229, 7891, 1, 0, + 0, 0, 1231, 7898, 1, 0, 0, 0, 1233, 7903, 1, 0, 0, 0, 1235, 7910, 1, 0, + 0, 0, 1237, 7917, 1, 0, 0, 0, 1239, 7924, 1, 0, 0, 0, 1241, 7940, 1, 0, + 0, 0, 1243, 7959, 1, 0, 0, 0, 1245, 7976, 1, 0, 0, 0, 1247, 7994, 1, 0, + 0, 0, 1249, 8004, 1, 0, 0, 0, 1251, 8017, 1, 0, 0, 0, 1253, 8028, 1, 0, + 0, 0, 1255, 8034, 1, 0, 0, 0, 1257, 8041, 1, 0, 0, 0, 1259, 8059, 1, 0, + 0, 0, 1261, 8076, 1, 0, 0, 0, 1263, 8095, 1, 0, 0, 0, 1265, 8102, 1, 0, + 0, 0, 1267, 8107, 1, 0, 0, 0, 1269, 8115, 1, 0, 0, 0, 1271, 8122, 1, 0, + 0, 0, 1273, 8129, 1, 0, 0, 0, 1275, 8145, 1, 0, 0, 0, 1277, 8153, 1, 0, + 0, 0, 1279, 8166, 1, 0, 0, 0, 1281, 8180, 1, 0, 0, 0, 1283, 8188, 1, 0, + 0, 0, 1285, 8194, 1, 0, 0, 0, 1287, 8203, 1, 0, 0, 0, 1289, 8214, 1, 0, + 0, 0, 1291, 8225, 1, 0, 0, 0, 1293, 8236, 1, 0, 0, 0, 1295, 8246, 1, 0, + 0, 0, 1297, 8256, 1, 0, 0, 0, 1299, 8261, 1, 0, 0, 0, 1301, 8273, 1, 0, + 0, 0, 1303, 8285, 1, 0, 0, 0, 1305, 8299, 1, 0, 0, 0, 1307, 8308, 1, 0, + 0, 0, 1309, 8317, 1, 0, 0, 0, 1311, 8327, 1, 0, 0, 0, 1313, 8337, 1, 0, + 0, 0, 1315, 8346, 1, 0, 0, 0, 1317, 8363, 1, 0, 0, 0, 1319, 8373, 1, 0, + 0, 0, 1321, 8381, 1, 0, 0, 0, 1323, 8387, 1, 0, 0, 0, 1325, 8395, 1, 0, + 0, 0, 1327, 8400, 1, 0, 0, 0, 1329, 8408, 1, 0, 0, 0, 1331, 8423, 1, 0, + 0, 0, 1333, 8434, 1, 0, 0, 0, 1335, 8440, 1, 0, 0, 0, 1337, 8450, 1, 0, + 0, 0, 1339, 8455, 1, 0, 0, 0, 1341, 8463, 1, 0, 0, 0, 1343, 8471, 1, 0, + 0, 0, 1345, 8476, 1, 0, 0, 0, 1347, 8485, 1, 0, 0, 0, 1349, 8492, 1, 0, + 0, 0, 1351, 8500, 1, 0, 0, 0, 1353, 8505, 1, 0, 0, 0, 1355, 8513, 1, 0, + 0, 0, 1357, 8518, 1, 0, 0, 0, 1359, 8521, 1, 0, 0, 0, 1361, 8525, 1, 0, + 0, 0, 1363, 8529, 1, 0, 0, 0, 1365, 8533, 1, 0, 0, 0, 1367, 8537, 1, 0, + 0, 0, 1369, 8541, 1, 0, 0, 0, 1371, 8545, 1, 0, 0, 0, 1373, 8554, 1, 0, + 0, 0, 1375, 8562, 1, 0, 0, 0, 1377, 8568, 1, 0, 0, 0, 1379, 8572, 1, 0, + 0, 0, 1381, 8577, 1, 0, 0, 0, 1383, 8584, 1, 0, 0, 0, 1385, 8589, 1, 0, + 0, 0, 1387, 8596, 1, 0, 0, 0, 1389, 8608, 1, 0, 0, 0, 1391, 8614, 1, 0, + 0, 0, 1393, 8641, 1, 0, 0, 0, 1395, 8653, 1, 0, 0, 0, 1397, 8666, 1, 0, + 0, 0, 1399, 8679, 1, 0, 0, 0, 1401, 8703, 1, 0, 0, 0, 1403, 8715, 1, 0, + 0, 0, 1405, 8732, 1, 0, 0, 0, 1407, 8753, 1, 0, 0, 0, 1409, 8761, 1, 0, + 0, 0, 1411, 8766, 1, 0, 0, 0, 1413, 8781, 1, 0, 0, 0, 1415, 8795, 1, 0, + 0, 0, 1417, 8817, 1, 0, 0, 0, 1419, 8830, 1, 0, 0, 0, 1421, 8843, 1, 0, + 0, 0, 1423, 8864, 1, 0, 0, 0, 1425, 8888, 1, 0, 0, 0, 1427, 8912, 1, 0, + 0, 0, 1429, 8935, 1, 0, 0, 0, 1431, 8942, 1, 0, 0, 0, 1433, 8949, 1, 0, + 0, 0, 1435, 8965, 1, 0, 0, 0, 1437, 8989, 1, 0, 0, 0, 1439, 9016, 1, 0, + 0, 0, 1441, 9027, 1, 0, 0, 0, 1443, 9035, 1, 0, 0, 0, 1445, 9042, 1, 0, + 0, 0, 1447, 9062, 1, 0, 0, 0, 1449, 9086, 1, 0, 0, 0, 1451, 9107, 1, 0, + 0, 0, 1453, 9127, 1, 0, 0, 0, 1455, 9138, 1, 0, 0, 0, 1457, 9146, 1, 0, + 0, 0, 1459, 9149, 1, 0, 0, 0, 1461, 9175, 1, 0, 0, 0, 1463, 9204, 1, 0, + 0, 0, 1465, 9216, 1, 0, 0, 0, 1467, 9229, 1, 0, 0, 0, 1469, 9238, 1, 0, + 0, 0, 1471, 9244, 1, 0, 0, 0, 1473, 9267, 1, 0, 0, 0, 1475, 9274, 1, 0, + 0, 0, 1477, 9297, 1, 0, 0, 0, 1479, 9317, 1, 0, 0, 0, 1481, 9334, 1, 0, + 0, 0, 1483, 9343, 1, 0, 0, 0, 1485, 9349, 1, 0, 0, 0, 1487, 9354, 1, 0, + 0, 0, 1489, 9361, 1, 0, 0, 0, 1491, 9368, 1, 0, 0, 0, 1493, 9375, 1, 0, + 0, 0, 1495, 9382, 1, 0, 0, 0, 1497, 9388, 1, 0, 0, 0, 1499, 9394, 1, 0, + 0, 0, 1501, 9400, 1, 0, 0, 0, 1503, 9406, 1, 0, 0, 0, 1505, 9411, 1, 0, + 0, 0, 1507, 9419, 1, 0, 0, 0, 1509, 9425, 1, 0, 0, 0, 1511, 9433, 1, 0, + 0, 0, 1513, 9440, 1, 0, 0, 0, 1515, 9444, 1, 0, 0, 0, 1517, 9452, 1, 0, + 0, 0, 1519, 9458, 1, 0, 0, 0, 1521, 9465, 1, 0, 0, 0, 1523, 9469, 1, 0, + 0, 0, 1525, 9477, 1, 0, 0, 0, 1527, 9483, 1, 0, 0, 0, 1529, 9489, 1, 0, + 0, 0, 1531, 9496, 1, 0, 0, 0, 1533, 9503, 1, 0, 0, 0, 1535, 9510, 1, 0, + 0, 0, 1537, 9517, 1, 0, 0, 0, 1539, 9523, 1, 0, 0, 0, 1541, 9532, 1, 0, + 0, 0, 1543, 9537, 1, 0, 0, 0, 1545, 9542, 1, 0, 0, 0, 1547, 9549, 1, 0, + 0, 0, 1549, 9554, 1, 0, 0, 0, 1551, 9559, 1, 0, 0, 0, 1553, 9565, 1, 0, + 0, 0, 1555, 9573, 1, 0, 0, 0, 1557, 9579, 1, 0, 0, 0, 1559, 9584, 1, 0, + 0, 0, 1561, 9592, 1, 0, 0, 0, 1563, 9600, 1, 0, 0, 0, 1565, 9608, 1, 0, + 0, 0, 1567, 9618, 1, 0, 0, 0, 1569, 9622, 1, 0, 0, 0, 1571, 9632, 1, 0, + 0, 0, 1573, 9639, 1, 0, 0, 0, 1575, 9646, 1, 0, 0, 0, 1577, 9657, 1, 0, + 0, 0, 1579, 9664, 1, 0, 0, 0, 1581, 9668, 1, 0, 0, 0, 1583, 9679, 1, 0, + 0, 0, 1585, 9698, 1, 0, 0, 0, 1587, 9705, 1, 0, 0, 0, 1589, 9716, 1, 0, + 0, 0, 1591, 9726, 1, 0, 0, 0, 1593, 9738, 1, 0, 0, 0, 1595, 9751, 1, 0, + 0, 0, 1597, 9770, 1, 0, 0, 0, 1599, 9785, 1, 0, 0, 0, 1601, 9794, 1, 0, + 0, 0, 1603, 9805, 1, 0, 0, 0, 1605, 9821, 1, 0, 0, 0, 1607, 9832, 1, 0, + 0, 0, 1609, 9845, 1, 0, 0, 0, 1611, 9851, 1, 0, 0, 0, 1613, 9859, 1, 0, + 0, 0, 1615, 9863, 1, 0, 0, 0, 1617, 9868, 1, 0, 0, 0, 1619, 9876, 1, 0, + 0, 0, 1621, 9884, 1, 0, 0, 0, 1623, 9896, 1, 0, 0, 0, 1625, 9908, 1, 0, + 0, 0, 1627, 9913, 1, 0, 0, 0, 1629, 9922, 1, 0, 0, 0, 1631, 9927, 1, 0, + 0, 0, 1633, 9934, 1, 0, 0, 0, 1635, 9940, 1, 0, 0, 0, 1637, 9946, 1, 0, + 0, 0, 1639, 9965, 1, 0, 0, 0, 1641, 9983, 1, 0, 0, 0, 1643, 10002, 1, 0, + 0, 0, 1645, 10018, 1, 0, 0, 0, 1647, 10036, 1, 0, 0, 0, 1649, 10041, 1, + 0, 0, 0, 1651, 10047, 1, 0, 0, 0, 1653, 10057, 1, 0, 0, 0, 1655, 10061, + 1, 0, 0, 0, 1657, 10071, 1, 0, 0, 0, 1659, 10082, 1, 0, 0, 0, 1661, 10089, + 1, 0, 0, 0, 1663, 10102, 1, 0, 0, 0, 1665, 10107, 1, 0, 0, 0, 1667, 10115, + 1, 0, 0, 0, 1669, 10124, 1, 0, 0, 0, 1671, 10141, 1, 0, 0, 0, 1673, 10149, + 1, 0, 0, 0, 1675, 10161, 1, 0, 0, 0, 1677, 10174, 1, 0, 0, 0, 1679, 10184, + 1, 0, 0, 0, 1681, 10193, 1, 0, 0, 0, 1683, 10200, 1, 0, 0, 0, 1685, 10210, + 1, 0, 0, 0, 1687, 10224, 1, 0, 0, 0, 1689, 10229, 1, 0, 0, 0, 1691, 10240, + 1, 0, 0, 0, 1693, 10244, 1, 0, 0, 0, 1695, 10248, 1, 0, 0, 0, 1697, 10254, + 1, 0, 0, 0, 1699, 10281, 1, 0, 0, 0, 1701, 10307, 1, 0, 0, 0, 1703, 10328, + 1, 0, 0, 0, 1705, 10342, 1, 0, 0, 0, 1707, 10350, 1, 0, 0, 0, 1709, 10359, + 1, 0, 0, 0, 1711, 10371, 1, 0, 0, 0, 1713, 10379, 1, 0, 0, 0, 1715, 10390, + 1, 0, 0, 0, 1717, 10400, 1, 0, 0, 0, 1719, 10410, 1, 0, 0, 0, 1721, 10417, + 1, 0, 0, 0, 1723, 10425, 1, 0, 0, 0, 1725, 10437, 1, 0, 0, 0, 1727, 10449, + 1, 0, 0, 0, 1729, 10459, 1, 0, 0, 0, 1731, 10468, 1, 0, 0, 0, 1733, 10472, + 1, 0, 0, 0, 1735, 10479, 1, 0, 0, 0, 1737, 10487, 1, 0, 0, 0, 1739, 10496, + 1, 0, 0, 0, 1741, 10513, 1, 0, 0, 0, 1743, 10522, 1, 0, 0, 0, 1745, 10529, + 1, 0, 0, 0, 1747, 10533, 1, 0, 0, 0, 1749, 10544, 1, 0, 0, 0, 1751, 10557, + 1, 0, 0, 0, 1753, 10570, 1, 0, 0, 0, 1755, 10576, 1, 0, 0, 0, 1757, 10588, + 1, 0, 0, 0, 1759, 10594, 1, 0, 0, 0, 1761, 10601, 1, 0, 0, 0, 1763, 10612, + 1, 0, 0, 0, 1765, 10624, 1, 0, 0, 0, 1767, 10634, 1, 0, 0, 0, 1769, 10648, + 1, 0, 0, 0, 1771, 10665, 1, 0, 0, 0, 1773, 10681, 1, 0, 0, 0, 1775, 10708, + 1, 0, 0, 0, 1777, 10734, 1, 0, 0, 0, 1779, 10751, 1, 0, 0, 0, 1781, 10767, + 1, 0, 0, 0, 1783, 10777, 1, 0, 0, 0, 1785, 10790, 1, 0, 0, 0, 1787, 10803, + 1, 0, 0, 0, 1789, 10815, 1, 0, 0, 0, 1791, 10826, 1, 0, 0, 0, 1793, 10835, + 1, 0, 0, 0, 1795, 10843, 1, 0, 0, 0, 1797, 10852, 1, 0, 0, 0, 1799, 10864, + 1, 0, 0, 0, 1801, 10878, 1, 0, 0, 0, 1803, 10882, 1, 0, 0, 0, 1805, 10889, + 1, 0, 0, 0, 1807, 10900, 1, 0, 0, 0, 1809, 10911, 1, 0, 0, 0, 1811, 10921, + 1, 0, 0, 0, 1813, 10931, 1, 0, 0, 0, 1815, 10937, 1, 0, 0, 0, 1817, 10951, + 1, 0, 0, 0, 1819, 10962, 1, 0, 0, 0, 1821, 10971, 1, 0, 0, 0, 1823, 10979, + 1, 0, 0, 0, 1825, 10986, 1, 0, 0, 0, 1827, 10995, 1, 0, 0, 0, 1829, 11008, + 1, 0, 0, 0, 1831, 11016, 1, 0, 0, 0, 1833, 11031, 1, 0, 0, 0, 1835, 11046, + 1, 0, 0, 0, 1837, 11054, 1, 0, 0, 0, 1839, 11067, 1, 0, 0, 0, 1841, 11082, + 1, 0, 0, 0, 1843, 11088, 1, 0, 0, 0, 1845, 11094, 1, 0, 0, 0, 1847, 11101, + 1, 0, 0, 0, 1849, 11114, 1, 0, 0, 0, 1851, 11126, 1, 0, 0, 0, 1853, 11145, + 1, 0, 0, 0, 1855, 11163, 1, 0, 0, 0, 1857, 11166, 1, 0, 0, 0, 1859, 11176, + 1, 0, 0, 0, 1861, 11183, 1, 0, 0, 0, 1863, 11187, 1, 0, 0, 0, 1865, 11193, + 1, 0, 0, 0, 1867, 11198, 1, 0, 0, 0, 1869, 11204, 1, 0, 0, 0, 1871, 11209, + 1, 0, 0, 0, 1873, 11215, 1, 0, 0, 0, 1875, 11224, 1, 0, 0, 0, 1877, 11233, + 1, 0, 0, 0, 1879, 11242, 1, 0, 0, 0, 1881, 11258, 1, 0, 0, 0, 1883, 11270, + 1, 0, 0, 0, 1885, 11282, 1, 0, 0, 0, 1887, 11291, 1, 0, 0, 0, 1889, 11305, + 1, 0, 0, 0, 1891, 11317, 1, 0, 0, 0, 1893, 11328, 1, 0, 0, 0, 1895, 11338, + 1, 0, 0, 0, 1897, 11342, 1, 0, 0, 0, 1899, 11356, 1, 0, 0, 0, 1901, 11369, + 1, 0, 0, 0, 1903, 11379, 1, 0, 0, 0, 1905, 11394, 1, 0, 0, 0, 1907, 11408, + 1, 0, 0, 0, 1909, 11422, 1, 0, 0, 0, 1911, 11435, 1, 0, 0, 0, 1913, 11459, + 1, 0, 0, 0, 1915, 11482, 1, 0, 0, 0, 1917, 11501, 1, 0, 0, 0, 1919, 11519, + 1, 0, 0, 0, 1921, 11540, 1, 0, 0, 0, 1923, 11560, 1, 0, 0, 0, 1925, 11571, + 1, 0, 0, 0, 1927, 11578, 1, 0, 0, 0, 1929, 11592, 1, 0, 0, 0, 1931, 11609, + 1, 0, 0, 0, 1933, 11619, 1, 0, 0, 0, 1935, 11623, 1, 0, 0, 0, 1937, 11636, + 1, 0, 0, 0, 1939, 11640, 1, 0, 0, 0, 1941, 11649, 1, 0, 0, 0, 1943, 11660, + 1, 0, 0, 0, 1945, 11672, 1, 0, 0, 0, 1947, 11675, 1, 0, 0, 0, 1949, 11689, + 1, 0, 0, 0, 1951, 11702, 1, 0, 0, 0, 1953, 11709, 1, 0, 0, 0, 1955, 11722, + 1, 0, 0, 0, 1957, 11734, 1, 0, 0, 0, 1959, 11750, 1, 0, 0, 0, 1961, 11765, + 1, 0, 0, 0, 1963, 11769, 1, 0, 0, 0, 1965, 11775, 1, 0, 0, 0, 1967, 11781, + 1, 0, 0, 0, 1969, 11789, 1, 0, 0, 0, 1971, 11794, 1, 0, 0, 0, 1973, 11807, + 1, 0, 0, 0, 1975, 11820, 1, 0, 0, 0, 1977, 11828, 1, 0, 0, 0, 1979, 11834, + 1, 0, 0, 0, 1981, 11844, 1, 0, 0, 0, 1983, 11849, 1, 0, 0, 0, 1985, 11855, + 1, 0, 0, 0, 1987, 11867, 1, 0, 0, 0, 1989, 11894, 1, 0, 0, 0, 1991, 11907, + 1, 0, 0, 0, 1993, 11911, 1, 0, 0, 0, 1995, 11916, 1, 0, 0, 0, 1997, 11921, + 1, 0, 0, 0, 1999, 11933, 1, 0, 0, 0, 2001, 11938, 1, 0, 0, 0, 2003, 11942, + 1, 0, 0, 0, 2005, 11948, 1, 0, 0, 0, 2007, 11956, 1, 0, 0, 0, 2009, 11984, + 1, 0, 0, 0, 2011, 11989, 1, 0, 0, 0, 2013, 11994, 1, 0, 0, 0, 2015, 12005, + 1, 0, 0, 0, 2017, 12012, 1, 0, 0, 0, 2019, 12024, 1, 0, 0, 0, 2021, 12032, + 1, 0, 0, 0, 2023, 12044, 1, 0, 0, 0, 2025, 12054, 1, 0, 0, 0, 2027, 12063, + 1, 0, 0, 0, 2029, 12072, 1, 0, 0, 0, 2031, 12082, 1, 0, 0, 0, 2033, 12094, + 1, 0, 0, 0, 2035, 12106, 1, 0, 0, 0, 2037, 12117, 1, 0, 0, 0, 2039, 12131, + 1, 0, 0, 0, 2041, 12144, 1, 0, 0, 0, 2043, 12156, 1, 0, 0, 0, 2045, 12168, + 1, 0, 0, 0, 2047, 12180, 1, 0, 0, 0, 2049, 12192, 1, 0, 0, 0, 2051, 12202, + 1, 0, 0, 0, 2053, 12218, 1, 0, 0, 0, 2055, 12238, 1, 0, 0, 0, 2057, 12257, + 1, 0, 0, 0, 2059, 12276, 1, 0, 0, 0, 2061, 12306, 1, 0, 0, 0, 2063, 12335, + 1, 0, 0, 0, 2065, 12355, 1, 0, 0, 0, 2067, 12374, 1, 0, 0, 0, 2069, 12387, + 1, 0, 0, 0, 2071, 12403, 1, 0, 0, 0, 2073, 12419, 1, 0, 0, 0, 2075, 12434, + 1, 0, 0, 0, 2077, 12451, 1, 0, 0, 0, 2079, 12467, 1, 0, 0, 0, 2081, 12481, + 1, 0, 0, 0, 2083, 12493, 1, 0, 0, 0, 2085, 12504, 1, 0, 0, 0, 2087, 12516, + 1, 0, 0, 0, 2089, 12532, 1, 0, 0, 0, 2091, 12547, 1, 0, 0, 0, 2093, 12569, + 1, 0, 0, 0, 2095, 12590, 1, 0, 0, 0, 2097, 12607, 1, 0, 0, 0, 2099, 12626, + 1, 0, 0, 0, 2101, 12646, 1, 0, 0, 0, 2103, 12659, 1, 0, 0, 0, 2105, 12671, + 1, 0, 0, 0, 2107, 12688, 1, 0, 0, 0, 2109, 12704, 1, 0, 0, 0, 2111, 12714, + 1, 0, 0, 0, 2113, 12730, 1, 0, 0, 0, 2115, 12745, 1, 0, 0, 0, 2117, 12764, + 1, 0, 0, 0, 2119, 12782, 1, 0, 0, 0, 2121, 12790, 1, 0, 0, 0, 2123, 12804, + 1, 0, 0, 0, 2125, 12821, 1, 0, 0, 0, 2127, 12832, 1, 0, 0, 0, 2129, 12841, + 1, 0, 0, 0, 2131, 12851, 1, 0, 0, 0, 2133, 12856, 1, 0, 0, 0, 2135, 12861, + 1, 0, 0, 0, 2137, 12869, 1, 0, 0, 0, 2139, 12885, 1, 0, 0, 0, 2141, 12893, + 1, 0, 0, 0, 2143, 12905, 1, 0, 0, 0, 2145, 12909, 1, 0, 0, 0, 2147, 12918, + 1, 0, 0, 0, 2149, 12931, 1, 0, 0, 0, 2151, 12945, 1, 0, 0, 0, 2153, 12957, + 1, 0, 0, 0, 2155, 12969, 1, 0, 0, 0, 2157, 12977, 1, 0, 0, 0, 2159, 12987, + 1, 0, 0, 0, 2161, 12995, 1, 0, 0, 0, 2163, 13006, 1, 0, 0, 0, 2165, 13012, + 1, 0, 0, 0, 2167, 13023, 1, 0, 0, 0, 2169, 13043, 1, 0, 0, 0, 2171, 13049, + 1, 0, 0, 0, 2173, 13064, 1, 0, 0, 0, 2175, 13074, 1, 0, 0, 0, 2177, 13080, + 1, 0, 0, 0, 2179, 13085, 1, 0, 0, 0, 2181, 13096, 1, 0, 0, 0, 2183, 13123, + 1, 0, 0, 0, 2185, 13131, 1, 0, 0, 0, 2187, 13165, 1, 0, 0, 0, 2189, 13173, + 1, 0, 0, 0, 2191, 13184, 1, 0, 0, 0, 2193, 13198, 1, 0, 0, 0, 2195, 13205, + 1, 0, 0, 0, 2197, 13214, 1, 0, 0, 0, 2199, 13216, 1, 0, 0, 0, 2201, 13218, + 1, 0, 0, 0, 2203, 13221, 1, 0, 0, 0, 2205, 13224, 1, 0, 0, 0, 2207, 13227, + 1, 0, 0, 0, 2209, 13230, 1, 0, 0, 0, 2211, 13233, 1, 0, 0, 0, 2213, 13236, + 1, 0, 0, 0, 2215, 13239, 1, 0, 0, 0, 2217, 13242, 1, 0, 0, 0, 2219, 13245, + 1, 0, 0, 0, 2221, 13247, 1, 0, 0, 0, 2223, 13249, 1, 0, 0, 0, 2225, 13251, + 1, 0, 0, 0, 2227, 13253, 1, 0, 0, 0, 2229, 13255, 1, 0, 0, 0, 2231, 13259, + 1, 0, 0, 0, 2233, 13263, 1, 0, 0, 0, 2235, 13265, 1, 0, 0, 0, 2237, 13267, + 1, 0, 0, 0, 2239, 13269, 1, 0, 0, 0, 2241, 13271, 1, 0, 0, 0, 2243, 13273, + 1, 0, 0, 0, 2245, 13275, 1, 0, 0, 0, 2247, 13277, 1, 0, 0, 0, 2249, 13279, + 1, 0, 0, 0, 2251, 13281, 1, 0, 0, 0, 2253, 13283, 1, 0, 0, 0, 2255, 13285, + 1, 0, 0, 0, 2257, 13287, 1, 0, 0, 0, 2259, 13289, 1, 0, 0, 0, 2261, 13291, + 1, 0, 0, 0, 2263, 13293, 1, 0, 0, 0, 2265, 13295, 1, 0, 0, 0, 2267, 13297, + 1, 0, 0, 0, 2269, 13299, 1, 0, 0, 0, 2271, 13301, 1, 0, 0, 0, 2273, 13303, + 1, 0, 0, 0, 2275, 13308, 1, 0, 0, 0, 2277, 13310, 1, 0, 0, 0, 2279, 13315, + 1, 0, 0, 0, 2281, 13321, 1, 0, 0, 0, 2283, 13327, 1, 0, 0, 0, 2285, 13330, + 1, 0, 0, 0, 2287, 13353, 1, 0, 0, 0, 2289, 13398, 1, 0, 0, 0, 2291, 13400, + 1, 0, 0, 0, 2293, 13403, 1, 0, 0, 0, 2295, 13405, 1, 0, 0, 0, 2297, 13408, + 1, 0, 0, 0, 2299, 13411, 1, 0, 0, 0, 2301, 13413, 1, 0, 0, 0, 2303, 13425, + 1, 0, 0, 0, 2305, 13457, 1, 0, 0, 0, 2307, 13459, 1, 0, 0, 0, 2309, 13470, + 1, 0, 0, 0, 2311, 13521, 1, 0, 0, 0, 2313, 13523, 1, 0, 0, 0, 2315, 13535, + 1, 0, 0, 0, 2317, 13549, 1, 0, 0, 0, 2319, 13562, 1, 0, 0, 0, 2321, 13575, + 1, 0, 0, 0, 2323, 13588, 1, 0, 0, 0, 2325, 13590, 1, 0, 0, 0, 2327, 13592, + 1, 0, 0, 0, 2329, 13601, 1, 0, 0, 0, 2331, 2333, 7, 0, 0, 0, 2332, 2331, + 1, 0, 0, 0, 2333, 2334, 1, 0, 0, 0, 2334, 2332, 1, 0, 0, 0, 2334, 2335, + 1, 0, 0, 0, 2335, 2336, 1, 0, 0, 0, 2336, 2337, 6, 0, 0, 0, 2337, 2, 1, + 0, 0, 0, 2338, 2339, 5, 47, 0, 0, 2339, 2340, 5, 42, 0, 0, 2340, 2341, + 5, 33, 0, 0, 2341, 2343, 1, 0, 0, 0, 2342, 2344, 9, 0, 0, 0, 2343, 2342, + 1, 0, 0, 0, 2344, 2345, 1, 0, 0, 0, 2345, 2346, 1, 0, 0, 0, 2345, 2343, + 1, 0, 0, 0, 2346, 2347, 1, 0, 0, 0, 2347, 2348, 5, 42, 0, 0, 2348, 2349, + 5, 47, 0, 0, 2349, 2350, 1, 0, 0, 0, 2350, 2351, 6, 1, 1, 0, 2351, 4, 1, + 0, 0, 0, 2352, 2353, 5, 47, 0, 0, 2353, 2354, 5, 42, 0, 0, 2354, 2358, + 1, 0, 0, 0, 2355, 2357, 9, 0, 0, 0, 2356, 2355, 1, 0, 0, 0, 2357, 2360, + 1, 0, 0, 0, 2358, 2359, 1, 0, 0, 0, 2358, 2356, 1, 0, 0, 0, 2359, 2361, + 1, 0, 0, 0, 2360, 2358, 1, 0, 0, 0, 2361, 2362, 5, 42, 0, 0, 2362, 2363, + 5, 47, 0, 0, 2363, 2364, 1, 0, 0, 0, 2364, 2365, 6, 2, 0, 0, 2365, 6, 1, + 0, 0, 0, 2366, 2367, 5, 45, 0, 0, 2367, 2368, 5, 45, 0, 0, 2368, 2372, + 1, 0, 0, 0, 2369, 2371, 7, 1, 0, 0, 2370, 2369, 1, 0, 0, 0, 2371, 2374, + 1, 0, 0, 0, 2372, 2370, 1, 0, 0, 0, 2372, 2373, 1, 0, 0, 0, 2373, 2377, + 1, 0, 0, 0, 2374, 2372, 1, 0, 0, 0, 2375, 2377, 5, 35, 0, 0, 2376, 2366, + 1, 0, 0, 0, 2376, 2375, 1, 0, 0, 0, 2377, 2381, 1, 0, 0, 0, 2378, 2380, + 8, 2, 0, 0, 2379, 2378, 1, 0, 0, 0, 2380, 2383, 1, 0, 0, 0, 2381, 2379, + 1, 0, 0, 0, 2381, 2382, 1, 0, 0, 0, 2382, 2389, 1, 0, 0, 0, 2383, 2381, + 1, 0, 0, 0, 2384, 2386, 5, 13, 0, 0, 2385, 2384, 1, 0, 0, 0, 2385, 2386, + 1, 0, 0, 0, 2386, 2387, 1, 0, 0, 0, 2387, 2390, 5, 10, 0, 0, 2388, 2390, + 5, 0, 0, 1, 2389, 2385, 1, 0, 0, 0, 2389, 2388, 1, 0, 0, 0, 2390, 2402, + 1, 0, 0, 0, 2391, 2392, 5, 45, 0, 0, 2392, 2393, 5, 45, 0, 0, 2393, 2399, + 1, 0, 0, 0, 2394, 2396, 5, 13, 0, 0, 2395, 2394, 1, 0, 0, 0, 2395, 2396, + 1, 0, 0, 0, 2396, 2397, 1, 0, 0, 0, 2397, 2400, 5, 10, 0, 0, 2398, 2400, + 5, 0, 0, 1, 2399, 2395, 1, 0, 0, 0, 2399, 2398, 1, 0, 0, 0, 2400, 2402, + 1, 0, 0, 0, 2401, 2376, 1, 0, 0, 0, 2401, 2391, 1, 0, 0, 0, 2402, 2403, + 1, 0, 0, 0, 2403, 2404, 6, 3, 0, 0, 2404, 8, 1, 0, 0, 0, 2405, 2406, 7, + 3, 0, 0, 2406, 2407, 7, 4, 0, 0, 2407, 2408, 7, 4, 0, 0, 2408, 10, 1, 0, + 0, 0, 2409, 2410, 7, 3, 0, 0, 2410, 2411, 7, 5, 0, 0, 2411, 2412, 7, 5, + 0, 0, 2412, 12, 1, 0, 0, 0, 2413, 2414, 7, 3, 0, 0, 2414, 2415, 7, 5, 0, + 0, 2415, 2416, 7, 6, 0, 0, 2416, 2417, 7, 7, 0, 0, 2417, 2418, 7, 8, 0, + 0, 2418, 14, 1, 0, 0, 0, 2419, 2420, 7, 3, 0, 0, 2420, 2421, 7, 5, 0, 0, + 2421, 2422, 7, 9, 0, 0, 2422, 2423, 7, 3, 0, 0, 2423, 2424, 7, 10, 0, 0, + 2424, 2425, 7, 11, 0, 0, 2425, 16, 1, 0, 0, 0, 2426, 2427, 7, 3, 0, 0, + 2427, 2428, 7, 12, 0, 0, 2428, 2429, 7, 3, 0, 0, 2429, 2430, 7, 5, 0, 0, + 2430, 2431, 7, 10, 0, 0, 2431, 2432, 7, 13, 0, 0, 2432, 2433, 7, 7, 0, + 0, 2433, 18, 1, 0, 0, 0, 2434, 2435, 7, 3, 0, 0, 2435, 2436, 7, 12, 0, + 0, 2436, 2437, 7, 4, 0, 0, 2437, 20, 1, 0, 0, 0, 2438, 2439, 7, 3, 0, 0, + 2439, 2440, 7, 8, 0, 0, 2440, 2441, 7, 8, 0, 0, 2441, 2442, 7, 3, 0, 0, + 2442, 2443, 7, 10, 0, 0, 2443, 22, 1, 0, 0, 0, 2444, 2445, 7, 3, 0, 0, + 2445, 2446, 7, 11, 0, 0, 2446, 24, 1, 0, 0, 0, 2447, 2448, 7, 3, 0, 0, + 2448, 2449, 7, 11, 0, 0, 2449, 2450, 7, 14, 0, 0, 2450, 26, 1, 0, 0, 0, + 2451, 2452, 7, 3, 0, 0, 2452, 2453, 7, 6, 0, 0, 2453, 2454, 7, 6, 0, 0, + 2454, 2455, 7, 8, 0, 0, 2455, 2456, 7, 15, 0, 0, 2456, 2457, 7, 16, 0, + 0, 2457, 2458, 7, 17, 0, 0, 2458, 2459, 7, 6, 0, 0, 2459, 2460, 7, 7, 0, + 0, 2460, 28, 1, 0, 0, 0, 2461, 2462, 7, 16, 0, 0, 2462, 2463, 7, 7, 0, + 0, 2463, 2464, 7, 18, 0, 0, 2464, 2465, 7, 19, 0, 0, 2465, 2466, 7, 8, + 0, 0, 2466, 2467, 7, 7, 0, 0, 2467, 30, 1, 0, 0, 0, 2468, 2469, 7, 16, + 0, 0, 2469, 2470, 7, 7, 0, 0, 2470, 2471, 7, 6, 0, 0, 2471, 2472, 7, 9, + 0, 0, 2472, 2473, 7, 7, 0, 0, 2473, 2474, 7, 7, 0, 0, 2474, 2475, 7, 12, + 0, 0, 2475, 32, 1, 0, 0, 0, 2476, 2477, 7, 16, 0, 0, 2477, 2478, 7, 19, + 0, 0, 2478, 2479, 7, 6, 0, 0, 2479, 2480, 7, 20, 0, 0, 2480, 34, 1, 0, + 0, 0, 2481, 2482, 7, 16, 0, 0, 2482, 2483, 7, 17, 0, 0, 2483, 2484, 7, + 14, 0, 0, 2484, 2485, 7, 21, 0, 0, 2485, 2486, 7, 7, 0, 0, 2486, 2487, + 7, 6, 0, 0, 2487, 2488, 7, 11, 0, 0, 2488, 36, 1, 0, 0, 0, 2489, 2490, + 7, 16, 0, 0, 2490, 2491, 7, 10, 0, 0, 2491, 38, 1, 0, 0, 0, 2492, 2493, + 7, 14, 0, 0, 2493, 2494, 7, 3, 0, 0, 2494, 2495, 7, 5, 0, 0, 2495, 2496, + 7, 5, 0, 0, 2496, 40, 1, 0, 0, 0, 2497, 2498, 7, 14, 0, 0, 2498, 2499, + 7, 3, 0, 0, 2499, 2500, 7, 11, 0, 0, 2500, 2501, 7, 14, 0, 0, 2501, 2502, + 7, 3, 0, 0, 2502, 2503, 7, 4, 0, 0, 2503, 2504, 7, 7, 0, 0, 2504, 42, 1, + 0, 0, 0, 2505, 2506, 7, 14, 0, 0, 2506, 2507, 7, 3, 0, 0, 2507, 2508, 7, + 11, 0, 0, 2508, 2509, 7, 7, 0, 0, 2509, 44, 1, 0, 0, 0, 2510, 2511, 7, + 14, 0, 0, 2511, 2512, 7, 3, 0, 0, 2512, 2513, 7, 11, 0, 0, 2513, 2514, + 7, 6, 0, 0, 2514, 46, 1, 0, 0, 0, 2515, 2516, 7, 14, 0, 0, 2516, 2517, + 7, 20, 0, 0, 2517, 2518, 7, 3, 0, 0, 2518, 2519, 7, 12, 0, 0, 2519, 2520, + 7, 22, 0, 0, 2520, 2521, 7, 7, 0, 0, 2521, 48, 1, 0, 0, 0, 2522, 2523, + 7, 14, 0, 0, 2523, 2524, 7, 20, 0, 0, 2524, 2525, 7, 3, 0, 0, 2525, 2526, + 7, 8, 0, 0, 2526, 2527, 7, 3, 0, 0, 2527, 2528, 7, 14, 0, 0, 2528, 2529, + 7, 6, 0, 0, 2529, 2530, 7, 7, 0, 0, 2530, 2531, 7, 8, 0, 0, 2531, 50, 1, + 0, 0, 0, 2532, 2533, 7, 14, 0, 0, 2533, 2534, 7, 20, 0, 0, 2534, 2535, + 7, 7, 0, 0, 2535, 2536, 7, 14, 0, 0, 2536, 2537, 7, 21, 0, 0, 2537, 52, + 1, 0, 0, 0, 2538, 2539, 7, 14, 0, 0, 2539, 2540, 7, 19, 0, 0, 2540, 2541, + 7, 5, 0, 0, 2541, 2542, 7, 5, 0, 0, 2542, 2543, 7, 3, 0, 0, 2543, 2544, + 7, 6, 0, 0, 2544, 2545, 7, 7, 0, 0, 2545, 54, 1, 0, 0, 0, 2546, 2547, 7, + 14, 0, 0, 2547, 2548, 7, 19, 0, 0, 2548, 2549, 7, 5, 0, 0, 2549, 2550, + 7, 17, 0, 0, 2550, 2551, 7, 23, 0, 0, 2551, 2552, 7, 12, 0, 0, 2552, 56, + 1, 0, 0, 0, 2553, 2554, 7, 14, 0, 0, 2554, 2555, 7, 19, 0, 0, 2555, 2556, + 7, 12, 0, 0, 2556, 2557, 7, 4, 0, 0, 2557, 2558, 7, 15, 0, 0, 2558, 2559, + 7, 6, 0, 0, 2559, 2560, 7, 15, 0, 0, 2560, 2561, 7, 19, 0, 0, 2561, 2562, + 7, 12, 0, 0, 2562, 58, 1, 0, 0, 0, 2563, 2564, 7, 14, 0, 0, 2564, 2565, + 7, 19, 0, 0, 2565, 2566, 7, 12, 0, 0, 2566, 2567, 7, 11, 0, 0, 2567, 2568, + 7, 6, 0, 0, 2568, 2569, 7, 8, 0, 0, 2569, 2570, 7, 3, 0, 0, 2570, 2571, + 7, 15, 0, 0, 2571, 2572, 7, 12, 0, 0, 2572, 2573, 7, 6, 0, 0, 2573, 60, + 1, 0, 0, 0, 2574, 2575, 7, 14, 0, 0, 2575, 2576, 7, 19, 0, 0, 2576, 2577, + 7, 12, 0, 0, 2577, 2578, 7, 6, 0, 0, 2578, 2579, 7, 15, 0, 0, 2579, 2580, + 7, 12, 0, 0, 2580, 2581, 7, 17, 0, 0, 2581, 2582, 7, 7, 0, 0, 2582, 62, + 1, 0, 0, 0, 2583, 2584, 7, 14, 0, 0, 2584, 2585, 7, 19, 0, 0, 2585, 2586, + 7, 12, 0, 0, 2586, 2587, 7, 24, 0, 0, 2587, 2588, 7, 7, 0, 0, 2588, 2589, + 7, 8, 0, 0, 2589, 2590, 7, 6, 0, 0, 2590, 64, 1, 0, 0, 0, 2591, 2592, 7, + 14, 0, 0, 2592, 2593, 7, 8, 0, 0, 2593, 2594, 7, 7, 0, 0, 2594, 2595, 7, + 3, 0, 0, 2595, 2596, 7, 6, 0, 0, 2596, 2597, 7, 7, 0, 0, 2597, 66, 1, 0, + 0, 0, 2598, 2599, 7, 14, 0, 0, 2599, 2600, 7, 8, 0, 0, 2600, 2601, 7, 19, + 0, 0, 2601, 2602, 7, 11, 0, 0, 2602, 2603, 7, 11, 0, 0, 2603, 68, 1, 0, + 0, 0, 2604, 2605, 7, 14, 0, 0, 2605, 2606, 7, 17, 0, 0, 2606, 2607, 7, + 8, 0, 0, 2607, 2608, 7, 8, 0, 0, 2608, 2609, 7, 7, 0, 0, 2609, 2610, 7, + 12, 0, 0, 2610, 2611, 7, 6, 0, 0, 2611, 70, 1, 0, 0, 0, 2612, 2613, 7, + 14, 0, 0, 2613, 2614, 7, 17, 0, 0, 2614, 2615, 7, 8, 0, 0, 2615, 2616, + 7, 8, 0, 0, 2616, 2617, 7, 7, 0, 0, 2617, 2618, 7, 12, 0, 0, 2618, 2619, + 7, 6, 0, 0, 2619, 2620, 5, 95, 0, 0, 2620, 2621, 7, 8, 0, 0, 2621, 2622, + 7, 19, 0, 0, 2622, 2623, 7, 5, 0, 0, 2623, 2624, 7, 7, 0, 0, 2624, 72, + 1, 0, 0, 0, 2625, 2626, 7, 14, 0, 0, 2626, 2627, 7, 17, 0, 0, 2627, 2628, + 7, 8, 0, 0, 2628, 2629, 7, 8, 0, 0, 2629, 2630, 7, 7, 0, 0, 2630, 2631, + 7, 12, 0, 0, 2631, 2632, 7, 6, 0, 0, 2632, 2633, 5, 95, 0, 0, 2633, 2634, + 7, 17, 0, 0, 2634, 2635, 7, 11, 0, 0, 2635, 2636, 7, 7, 0, 0, 2636, 2637, + 7, 8, 0, 0, 2637, 74, 1, 0, 0, 0, 2638, 2639, 7, 14, 0, 0, 2639, 2640, + 7, 17, 0, 0, 2640, 2641, 7, 8, 0, 0, 2641, 2642, 7, 11, 0, 0, 2642, 2643, + 7, 19, 0, 0, 2643, 2644, 7, 8, 0, 0, 2644, 76, 1, 0, 0, 0, 2645, 2646, + 7, 4, 0, 0, 2646, 2647, 7, 3, 0, 0, 2647, 2648, 7, 6, 0, 0, 2648, 2649, + 7, 3, 0, 0, 2649, 2650, 7, 16, 0, 0, 2650, 2651, 7, 3, 0, 0, 2651, 2652, + 7, 11, 0, 0, 2652, 2653, 7, 7, 0, 0, 2653, 78, 1, 0, 0, 0, 2654, 2655, + 7, 4, 0, 0, 2655, 2656, 7, 3, 0, 0, 2656, 2657, 7, 6, 0, 0, 2657, 2658, + 7, 3, 0, 0, 2658, 2659, 7, 16, 0, 0, 2659, 2660, 7, 3, 0, 0, 2660, 2661, + 7, 11, 0, 0, 2661, 2662, 7, 7, 0, 0, 2662, 2663, 7, 11, 0, 0, 2663, 80, + 1, 0, 0, 0, 2664, 2665, 7, 4, 0, 0, 2665, 2666, 7, 7, 0, 0, 2666, 2667, + 7, 14, 0, 0, 2667, 2668, 7, 5, 0, 0, 2668, 2669, 7, 3, 0, 0, 2669, 2670, + 7, 8, 0, 0, 2670, 2671, 7, 7, 0, 0, 2671, 82, 1, 0, 0, 0, 2672, 2673, 7, + 4, 0, 0, 2673, 2674, 7, 7, 0, 0, 2674, 2675, 7, 18, 0, 0, 2675, 2676, 7, + 3, 0, 0, 2676, 2677, 7, 17, 0, 0, 2677, 2678, 7, 5, 0, 0, 2678, 2679, 7, + 6, 0, 0, 2679, 84, 1, 0, 0, 0, 2680, 2681, 7, 4, 0, 0, 2681, 2682, 7, 7, + 0, 0, 2682, 2683, 7, 5, 0, 0, 2683, 2684, 7, 3, 0, 0, 2684, 2685, 7, 10, + 0, 0, 2685, 2686, 7, 7, 0, 0, 2686, 2687, 7, 4, 0, 0, 2687, 86, 1, 0, 0, + 0, 2688, 2689, 7, 4, 0, 0, 2689, 2690, 7, 7, 0, 0, 2690, 2691, 7, 5, 0, + 0, 2691, 2692, 7, 7, 0, 0, 2692, 2693, 7, 6, 0, 0, 2693, 2694, 7, 7, 0, + 0, 2694, 88, 1, 0, 0, 0, 2695, 2696, 7, 4, 0, 0, 2696, 2697, 7, 7, 0, 0, + 2697, 2698, 7, 11, 0, 0, 2698, 2699, 7, 14, 0, 0, 2699, 90, 1, 0, 0, 0, + 2700, 2701, 7, 4, 0, 0, 2701, 2702, 7, 7, 0, 0, 2702, 2703, 7, 11, 0, 0, + 2703, 2704, 7, 14, 0, 0, 2704, 2705, 7, 8, 0, 0, 2705, 2706, 7, 15, 0, + 0, 2706, 2707, 7, 16, 0, 0, 2707, 2708, 7, 7, 0, 0, 2708, 92, 1, 0, 0, + 0, 2709, 2710, 7, 4, 0, 0, 2710, 2711, 7, 7, 0, 0, 2711, 2712, 7, 6, 0, + 0, 2712, 2713, 7, 7, 0, 0, 2713, 2714, 7, 8, 0, 0, 2714, 2715, 7, 23, 0, + 0, 2715, 2716, 7, 15, 0, 0, 2716, 2717, 7, 12, 0, 0, 2717, 2718, 7, 15, + 0, 0, 2718, 2719, 7, 11, 0, 0, 2719, 2720, 7, 6, 0, 0, 2720, 2721, 7, 15, + 0, 0, 2721, 2722, 7, 14, 0, 0, 2722, 94, 1, 0, 0, 0, 2723, 2724, 7, 4, + 0, 0, 2724, 2725, 7, 15, 0, 0, 2725, 2726, 7, 3, 0, 0, 2726, 2727, 7, 22, + 0, 0, 2727, 2728, 7, 12, 0, 0, 2728, 2729, 7, 19, 0, 0, 2729, 2730, 7, + 11, 0, 0, 2730, 2731, 7, 6, 0, 0, 2731, 2732, 7, 15, 0, 0, 2732, 2733, + 7, 14, 0, 0, 2733, 2734, 7, 11, 0, 0, 2734, 96, 1, 0, 0, 0, 2735, 2736, + 7, 4, 0, 0, 2736, 2737, 7, 15, 0, 0, 2737, 2738, 7, 11, 0, 0, 2738, 2739, + 7, 6, 0, 0, 2739, 2740, 7, 15, 0, 0, 2740, 2741, 7, 12, 0, 0, 2741, 2742, + 7, 14, 0, 0, 2742, 2743, 7, 6, 0, 0, 2743, 98, 1, 0, 0, 0, 2744, 2745, + 7, 4, 0, 0, 2745, 2746, 7, 15, 0, 0, 2746, 2747, 7, 11, 0, 0, 2747, 2748, + 7, 6, 0, 0, 2748, 2749, 7, 15, 0, 0, 2749, 2750, 7, 12, 0, 0, 2750, 2751, + 7, 14, 0, 0, 2751, 2752, 7, 6, 0, 0, 2752, 2753, 7, 8, 0, 0, 2753, 2754, + 7, 19, 0, 0, 2754, 2755, 7, 9, 0, 0, 2755, 100, 1, 0, 0, 0, 2756, 2757, + 7, 4, 0, 0, 2757, 2758, 7, 8, 0, 0, 2758, 2759, 7, 19, 0, 0, 2759, 2760, + 7, 25, 0, 0, 2760, 102, 1, 0, 0, 0, 2761, 2762, 7, 7, 0, 0, 2762, 2763, + 7, 3, 0, 0, 2763, 2764, 7, 14, 0, 0, 2764, 2765, 7, 20, 0, 0, 2765, 104, + 1, 0, 0, 0, 2766, 2767, 7, 7, 0, 0, 2767, 2768, 7, 5, 0, 0, 2768, 2769, + 7, 11, 0, 0, 2769, 2770, 7, 7, 0, 0, 2770, 106, 1, 0, 0, 0, 2771, 2772, + 7, 7, 0, 0, 2772, 2773, 7, 5, 0, 0, 2773, 2774, 7, 11, 0, 0, 2774, 2775, + 7, 7, 0, 0, 2775, 2776, 7, 15, 0, 0, 2776, 2777, 7, 18, 0, 0, 2777, 108, + 1, 0, 0, 0, 2778, 2779, 7, 7, 0, 0, 2779, 2780, 7, 23, 0, 0, 2780, 2781, + 7, 25, 0, 0, 2781, 2782, 7, 6, 0, 0, 2782, 2783, 7, 10, 0, 0, 2783, 110, + 1, 0, 0, 0, 2784, 2785, 7, 7, 0, 0, 2785, 2786, 7, 12, 0, 0, 2786, 2787, + 7, 14, 0, 0, 2787, 2788, 7, 5, 0, 0, 2788, 2789, 7, 19, 0, 0, 2789, 2790, + 7, 11, 0, 0, 2790, 2791, 7, 7, 0, 0, 2791, 2792, 7, 4, 0, 0, 2792, 112, + 1, 0, 0, 0, 2793, 2794, 7, 7, 0, 0, 2794, 2795, 7, 11, 0, 0, 2795, 2796, + 7, 14, 0, 0, 2796, 2797, 7, 3, 0, 0, 2797, 2798, 7, 25, 0, 0, 2798, 2799, + 7, 7, 0, 0, 2799, 2800, 7, 4, 0, 0, 2800, 114, 1, 0, 0, 0, 2801, 2802, + 7, 7, 0, 0, 2802, 2803, 7, 26, 0, 0, 2803, 2804, 7, 14, 0, 0, 2804, 2805, + 7, 7, 0, 0, 2805, 2806, 7, 25, 0, 0, 2806, 2807, 7, 6, 0, 0, 2807, 116, + 1, 0, 0, 0, 2808, 2809, 7, 7, 0, 0, 2809, 2810, 7, 26, 0, 0, 2810, 2811, + 7, 15, 0, 0, 2811, 2812, 7, 11, 0, 0, 2812, 2813, 7, 6, 0, 0, 2813, 2814, + 7, 11, 0, 0, 2814, 118, 1, 0, 0, 0, 2815, 2816, 7, 7, 0, 0, 2816, 2817, + 7, 26, 0, 0, 2817, 2818, 7, 15, 0, 0, 2818, 2819, 7, 6, 0, 0, 2819, 120, + 1, 0, 0, 0, 2820, 2821, 7, 7, 0, 0, 2821, 2822, 7, 26, 0, 0, 2822, 2823, + 7, 25, 0, 0, 2823, 2824, 7, 5, 0, 0, 2824, 2825, 7, 3, 0, 0, 2825, 2826, + 7, 15, 0, 0, 2826, 2827, 7, 12, 0, 0, 2827, 122, 1, 0, 0, 0, 2828, 2829, + 7, 18, 0, 0, 2829, 2830, 7, 3, 0, 0, 2830, 2831, 7, 5, 0, 0, 2831, 2832, + 7, 11, 0, 0, 2832, 2833, 7, 7, 0, 0, 2833, 124, 1, 0, 0, 0, 2834, 2835, + 7, 18, 0, 0, 2835, 2836, 7, 7, 0, 0, 2836, 2837, 7, 6, 0, 0, 2837, 2838, + 7, 14, 0, 0, 2838, 2839, 7, 20, 0, 0, 2839, 126, 1, 0, 0, 0, 2840, 2841, + 7, 18, 0, 0, 2841, 2842, 7, 19, 0, 0, 2842, 2843, 7, 8, 0, 0, 2843, 128, + 1, 0, 0, 0, 2844, 2845, 7, 18, 0, 0, 2845, 2846, 7, 19, 0, 0, 2846, 2847, + 7, 8, 0, 0, 2847, 2848, 7, 14, 0, 0, 2848, 2849, 7, 7, 0, 0, 2849, 130, + 1, 0, 0, 0, 2850, 2851, 7, 18, 0, 0, 2851, 2852, 7, 19, 0, 0, 2852, 2853, + 7, 8, 0, 0, 2853, 2854, 7, 7, 0, 0, 2854, 2855, 7, 15, 0, 0, 2855, 2856, + 7, 22, 0, 0, 2856, 2857, 7, 12, 0, 0, 2857, 132, 1, 0, 0, 0, 2858, 2859, + 7, 18, 0, 0, 2859, 2860, 7, 8, 0, 0, 2860, 2861, 7, 19, 0, 0, 2861, 2862, + 7, 23, 0, 0, 2862, 134, 1, 0, 0, 0, 2863, 2864, 7, 18, 0, 0, 2864, 2865, + 7, 17, 0, 0, 2865, 2866, 7, 5, 0, 0, 2866, 2867, 7, 5, 0, 0, 2867, 2868, + 7, 6, 0, 0, 2868, 2869, 7, 7, 0, 0, 2869, 2870, 7, 26, 0, 0, 2870, 2871, + 7, 6, 0, 0, 2871, 136, 1, 0, 0, 0, 2872, 2873, 7, 22, 0, 0, 2873, 2874, + 7, 7, 0, 0, 2874, 2875, 7, 12, 0, 0, 2875, 2876, 7, 7, 0, 0, 2876, 2877, + 7, 8, 0, 0, 2877, 2878, 7, 3, 0, 0, 2878, 2879, 7, 6, 0, 0, 2879, 2880, + 7, 7, 0, 0, 2880, 2881, 7, 4, 0, 0, 2881, 138, 1, 0, 0, 0, 2882, 2883, + 7, 22, 0, 0, 2883, 2884, 7, 7, 0, 0, 2884, 2885, 7, 6, 0, 0, 2885, 140, + 1, 0, 0, 0, 2886, 2887, 7, 22, 0, 0, 2887, 2888, 7, 8, 0, 0, 2888, 2889, + 7, 3, 0, 0, 2889, 2890, 7, 12, 0, 0, 2890, 2891, 7, 6, 0, 0, 2891, 142, + 1, 0, 0, 0, 2892, 2893, 7, 22, 0, 0, 2893, 2894, 7, 8, 0, 0, 2894, 2895, + 7, 19, 0, 0, 2895, 2896, 7, 17, 0, 0, 2896, 2897, 7, 25, 0, 0, 2897, 144, + 1, 0, 0, 0, 2898, 2899, 7, 20, 0, 0, 2899, 2900, 7, 3, 0, 0, 2900, 2901, + 7, 24, 0, 0, 2901, 2902, 7, 15, 0, 0, 2902, 2903, 7, 12, 0, 0, 2903, 2904, + 7, 22, 0, 0, 2904, 146, 1, 0, 0, 0, 2905, 2906, 7, 20, 0, 0, 2906, 2907, + 7, 15, 0, 0, 2907, 2908, 7, 22, 0, 0, 2908, 2909, 7, 20, 0, 0, 2909, 2910, + 5, 95, 0, 0, 2910, 2911, 7, 25, 0, 0, 2911, 2912, 7, 8, 0, 0, 2912, 2913, + 7, 15, 0, 0, 2913, 2914, 7, 19, 0, 0, 2914, 2915, 7, 8, 0, 0, 2915, 2916, + 7, 15, 0, 0, 2916, 2917, 7, 6, 0, 0, 2917, 2918, 7, 10, 0, 0, 2918, 148, + 1, 0, 0, 0, 2919, 2920, 7, 20, 0, 0, 2920, 2921, 7, 15, 0, 0, 2921, 2922, + 7, 11, 0, 0, 2922, 2923, 7, 6, 0, 0, 2923, 2924, 7, 19, 0, 0, 2924, 2925, + 7, 22, 0, 0, 2925, 2926, 7, 8, 0, 0, 2926, 2927, 7, 3, 0, 0, 2927, 2928, + 7, 23, 0, 0, 2928, 150, 1, 0, 0, 0, 2929, 2930, 7, 15, 0, 0, 2930, 2931, + 7, 18, 0, 0, 2931, 152, 1, 0, 0, 0, 2932, 2933, 7, 15, 0, 0, 2933, 2934, + 7, 22, 0, 0, 2934, 2935, 7, 12, 0, 0, 2935, 2936, 7, 19, 0, 0, 2936, 2937, + 7, 8, 0, 0, 2937, 2938, 7, 7, 0, 0, 2938, 154, 1, 0, 0, 0, 2939, 2940, + 7, 15, 0, 0, 2940, 2941, 7, 22, 0, 0, 2941, 2942, 7, 12, 0, 0, 2942, 2943, + 7, 19, 0, 0, 2943, 2944, 7, 8, 0, 0, 2944, 2945, 7, 7, 0, 0, 2945, 2946, + 7, 4, 0, 0, 2946, 156, 1, 0, 0, 0, 2947, 2948, 7, 15, 0, 0, 2948, 2949, + 7, 12, 0, 0, 2949, 158, 1, 0, 0, 0, 2950, 2951, 7, 15, 0, 0, 2951, 2952, + 7, 12, 0, 0, 2952, 2953, 7, 4, 0, 0, 2953, 2954, 7, 7, 0, 0, 2954, 2955, + 7, 26, 0, 0, 2955, 160, 1, 0, 0, 0, 2956, 2957, 7, 15, 0, 0, 2957, 2958, + 7, 12, 0, 0, 2958, 2959, 7, 18, 0, 0, 2959, 2960, 7, 15, 0, 0, 2960, 2961, + 7, 5, 0, 0, 2961, 2962, 7, 7, 0, 0, 2962, 162, 1, 0, 0, 0, 2963, 2964, + 7, 15, 0, 0, 2964, 2965, 7, 12, 0, 0, 2965, 2966, 7, 12, 0, 0, 2966, 2967, + 7, 7, 0, 0, 2967, 2968, 7, 8, 0, 0, 2968, 164, 1, 0, 0, 0, 2969, 2970, + 7, 15, 0, 0, 2970, 2971, 7, 12, 0, 0, 2971, 2972, 7, 19, 0, 0, 2972, 2973, + 7, 17, 0, 0, 2973, 2974, 7, 6, 0, 0, 2974, 166, 1, 0, 0, 0, 2975, 2976, + 7, 15, 0, 0, 2976, 2977, 7, 12, 0, 0, 2977, 2978, 7, 11, 0, 0, 2978, 2979, + 7, 7, 0, 0, 2979, 2980, 7, 8, 0, 0, 2980, 2981, 7, 6, 0, 0, 2981, 168, + 1, 0, 0, 0, 2982, 2983, 7, 15, 0, 0, 2983, 2984, 7, 12, 0, 0, 2984, 2985, + 7, 6, 0, 0, 2985, 2986, 7, 7, 0, 0, 2986, 2987, 7, 8, 0, 0, 2987, 2988, + 7, 24, 0, 0, 2988, 2989, 7, 3, 0, 0, 2989, 2990, 7, 5, 0, 0, 2990, 170, + 1, 0, 0, 0, 2991, 2992, 7, 15, 0, 0, 2992, 2993, 7, 12, 0, 0, 2993, 2994, + 7, 6, 0, 0, 2994, 2995, 7, 19, 0, 0, 2995, 172, 1, 0, 0, 0, 2996, 2997, + 7, 15, 0, 0, 2997, 2998, 7, 11, 0, 0, 2998, 174, 1, 0, 0, 0, 2999, 3000, + 7, 15, 0, 0, 3000, 3001, 7, 6, 0, 0, 3001, 3002, 7, 7, 0, 0, 3002, 3003, + 7, 8, 0, 0, 3003, 3004, 7, 3, 0, 0, 3004, 3005, 7, 6, 0, 0, 3005, 3006, + 7, 7, 0, 0, 3006, 176, 1, 0, 0, 0, 3007, 3008, 7, 27, 0, 0, 3008, 3009, + 7, 19, 0, 0, 3009, 3010, 7, 15, 0, 0, 3010, 3011, 7, 12, 0, 0, 3011, 178, + 1, 0, 0, 0, 3012, 3013, 7, 21, 0, 0, 3013, 3014, 7, 7, 0, 0, 3014, 3015, + 7, 10, 0, 0, 3015, 180, 1, 0, 0, 0, 3016, 3017, 7, 21, 0, 0, 3017, 3018, + 7, 7, 0, 0, 3018, 3019, 7, 10, 0, 0, 3019, 3020, 7, 11, 0, 0, 3020, 182, + 1, 0, 0, 0, 3021, 3022, 7, 21, 0, 0, 3022, 3023, 7, 15, 0, 0, 3023, 3024, + 7, 5, 0, 0, 3024, 3025, 7, 5, 0, 0, 3025, 184, 1, 0, 0, 0, 3026, 3027, + 7, 5, 0, 0, 3027, 3028, 7, 3, 0, 0, 3028, 3029, 7, 6, 0, 0, 3029, 3030, + 7, 7, 0, 0, 3030, 3031, 7, 8, 0, 0, 3031, 3032, 7, 3, 0, 0, 3032, 3033, + 7, 5, 0, 0, 3033, 186, 1, 0, 0, 0, 3034, 3035, 7, 5, 0, 0, 3035, 3036, + 7, 7, 0, 0, 3036, 3037, 7, 3, 0, 0, 3037, 3038, 7, 4, 0, 0, 3038, 3039, + 7, 15, 0, 0, 3039, 3040, 7, 12, 0, 0, 3040, 3041, 7, 22, 0, 0, 3041, 188, + 1, 0, 0, 0, 3042, 3043, 7, 5, 0, 0, 3043, 3044, 7, 7, 0, 0, 3044, 3045, + 7, 3, 0, 0, 3045, 3046, 7, 24, 0, 0, 3046, 3047, 7, 7, 0, 0, 3047, 190, + 1, 0, 0, 0, 3048, 3049, 7, 5, 0, 0, 3049, 3050, 7, 7, 0, 0, 3050, 3051, + 7, 18, 0, 0, 3051, 3052, 7, 6, 0, 0, 3052, 192, 1, 0, 0, 0, 3053, 3054, + 7, 5, 0, 0, 3054, 3055, 7, 15, 0, 0, 3055, 3056, 7, 21, 0, 0, 3056, 3057, + 7, 7, 0, 0, 3057, 194, 1, 0, 0, 0, 3058, 3059, 7, 5, 0, 0, 3059, 3060, + 7, 15, 0, 0, 3060, 3061, 7, 23, 0, 0, 3061, 3062, 7, 15, 0, 0, 3062, 3063, + 7, 6, 0, 0, 3063, 196, 1, 0, 0, 0, 3064, 3065, 7, 5, 0, 0, 3065, 3066, + 7, 15, 0, 0, 3066, 3067, 7, 12, 0, 0, 3067, 3068, 7, 7, 0, 0, 3068, 3069, + 7, 3, 0, 0, 3069, 3070, 7, 8, 0, 0, 3070, 198, 1, 0, 0, 0, 3071, 3072, + 7, 5, 0, 0, 3072, 3073, 7, 15, 0, 0, 3073, 3074, 7, 12, 0, 0, 3074, 3075, + 7, 7, 0, 0, 3075, 3076, 7, 11, 0, 0, 3076, 200, 1, 0, 0, 0, 3077, 3078, + 7, 5, 0, 0, 3078, 3079, 7, 19, 0, 0, 3079, 3080, 7, 3, 0, 0, 3080, 3081, + 7, 4, 0, 0, 3081, 202, 1, 0, 0, 0, 3082, 3083, 7, 5, 0, 0, 3083, 3084, + 7, 19, 0, 0, 3084, 3085, 7, 14, 0, 0, 3085, 3086, 7, 21, 0, 0, 3086, 204, + 1, 0, 0, 0, 3087, 3088, 7, 5, 0, 0, 3088, 3089, 7, 19, 0, 0, 3089, 3090, + 7, 14, 0, 0, 3090, 3091, 7, 21, 0, 0, 3091, 3092, 7, 7, 0, 0, 3092, 3093, + 7, 4, 0, 0, 3093, 206, 1, 0, 0, 0, 3094, 3095, 7, 5, 0, 0, 3095, 3096, + 7, 19, 0, 0, 3096, 3097, 7, 19, 0, 0, 3097, 3098, 7, 25, 0, 0, 3098, 208, + 1, 0, 0, 0, 3099, 3100, 7, 5, 0, 0, 3100, 3101, 7, 19, 0, 0, 3101, 3102, + 7, 9, 0, 0, 3102, 3103, 5, 95, 0, 0, 3103, 3104, 7, 25, 0, 0, 3104, 3105, + 7, 8, 0, 0, 3105, 3106, 7, 15, 0, 0, 3106, 3107, 7, 19, 0, 0, 3107, 3108, + 7, 8, 0, 0, 3108, 3109, 7, 15, 0, 0, 3109, 3110, 7, 6, 0, 0, 3110, 3111, + 7, 10, 0, 0, 3111, 210, 1, 0, 0, 0, 3112, 3113, 7, 23, 0, 0, 3113, 3114, + 7, 3, 0, 0, 3114, 3115, 7, 11, 0, 0, 3115, 3116, 7, 6, 0, 0, 3116, 3117, + 7, 7, 0, 0, 3117, 3118, 7, 8, 0, 0, 3118, 3119, 5, 95, 0, 0, 3119, 3120, + 7, 16, 0, 0, 3120, 3121, 7, 15, 0, 0, 3121, 3122, 7, 12, 0, 0, 3122, 3123, + 7, 4, 0, 0, 3123, 212, 1, 0, 0, 0, 3124, 3125, 7, 23, 0, 0, 3125, 3126, + 7, 3, 0, 0, 3126, 3127, 7, 11, 0, 0, 3127, 3128, 7, 6, 0, 0, 3128, 3129, + 7, 7, 0, 0, 3129, 3130, 7, 8, 0, 0, 3130, 3131, 5, 95, 0, 0, 3131, 3132, + 7, 11, 0, 0, 3132, 3133, 7, 11, 0, 0, 3133, 3134, 7, 5, 0, 0, 3134, 3135, + 5, 95, 0, 0, 3135, 3136, 7, 24, 0, 0, 3136, 3137, 7, 7, 0, 0, 3137, 3138, + 7, 8, 0, 0, 3138, 3139, 7, 15, 0, 0, 3139, 3140, 7, 18, 0, 0, 3140, 3141, + 7, 10, 0, 0, 3141, 3142, 5, 95, 0, 0, 3142, 3143, 7, 11, 0, 0, 3143, 3144, + 7, 7, 0, 0, 3144, 3145, 7, 8, 0, 0, 3145, 3146, 7, 24, 0, 0, 3146, 3147, + 7, 7, 0, 0, 3147, 3148, 7, 8, 0, 0, 3148, 3149, 5, 95, 0, 0, 3149, 3150, + 7, 14, 0, 0, 3150, 3151, 7, 7, 0, 0, 3151, 3152, 7, 8, 0, 0, 3152, 3153, + 7, 6, 0, 0, 3153, 214, 1, 0, 0, 0, 3154, 3155, 7, 23, 0, 0, 3155, 3156, + 7, 3, 0, 0, 3156, 3157, 7, 6, 0, 0, 3157, 3158, 7, 14, 0, 0, 3158, 3159, + 7, 20, 0, 0, 3159, 216, 1, 0, 0, 0, 3160, 3161, 7, 23, 0, 0, 3161, 3162, + 7, 3, 0, 0, 3162, 3163, 7, 26, 0, 0, 3163, 3164, 7, 24, 0, 0, 3164, 3165, + 7, 3, 0, 0, 3165, 3166, 7, 5, 0, 0, 3166, 3167, 7, 17, 0, 0, 3167, 3168, + 7, 7, 0, 0, 3168, 218, 1, 0, 0, 0, 3169, 3170, 7, 23, 0, 0, 3170, 3171, + 7, 15, 0, 0, 3171, 3172, 7, 12, 0, 0, 3172, 3173, 7, 24, 0, 0, 3173, 3174, + 7, 3, 0, 0, 3174, 3175, 7, 5, 0, 0, 3175, 3176, 7, 17, 0, 0, 3176, 3177, + 7, 7, 0, 0, 3177, 220, 1, 0, 0, 0, 3178, 3179, 7, 23, 0, 0, 3179, 3180, + 7, 19, 0, 0, 3180, 3181, 7, 4, 0, 0, 3181, 3182, 7, 15, 0, 0, 3182, 3183, + 7, 18, 0, 0, 3183, 3184, 7, 15, 0, 0, 3184, 3185, 7, 7, 0, 0, 3185, 3186, + 7, 11, 0, 0, 3186, 222, 1, 0, 0, 0, 3187, 3188, 7, 12, 0, 0, 3188, 3189, + 7, 3, 0, 0, 3189, 3190, 7, 6, 0, 0, 3190, 3191, 7, 17, 0, 0, 3191, 3192, + 7, 8, 0, 0, 3192, 3193, 7, 3, 0, 0, 3193, 3194, 7, 5, 0, 0, 3194, 224, + 1, 0, 0, 0, 3195, 3196, 7, 12, 0, 0, 3196, 3197, 7, 19, 0, 0, 3197, 3198, + 7, 6, 0, 0, 3198, 226, 1, 0, 0, 0, 3199, 3200, 7, 12, 0, 0, 3200, 3201, + 7, 19, 0, 0, 3201, 3202, 5, 95, 0, 0, 3202, 3203, 7, 9, 0, 0, 3203, 3204, + 7, 8, 0, 0, 3204, 3205, 7, 15, 0, 0, 3205, 3206, 7, 6, 0, 0, 3206, 3207, + 7, 7, 0, 0, 3207, 3208, 5, 95, 0, 0, 3208, 3209, 7, 6, 0, 0, 3209, 3210, + 7, 19, 0, 0, 3210, 3211, 5, 95, 0, 0, 3211, 3212, 7, 16, 0, 0, 3212, 3213, + 7, 15, 0, 0, 3213, 3214, 7, 12, 0, 0, 3214, 3215, 7, 5, 0, 0, 3215, 3216, + 7, 19, 0, 0, 3216, 3217, 7, 22, 0, 0, 3217, 228, 1, 0, 0, 0, 3218, 3219, + 7, 12, 0, 0, 3219, 3220, 7, 17, 0, 0, 3220, 3221, 7, 5, 0, 0, 3221, 3222, + 7, 5, 0, 0, 3222, 230, 1, 0, 0, 0, 3223, 3224, 7, 12, 0, 0, 3224, 3225, + 7, 17, 0, 0, 3225, 3226, 7, 23, 0, 0, 3226, 3227, 7, 16, 0, 0, 3227, 3228, + 7, 7, 0, 0, 3228, 3229, 7, 8, 0, 0, 3229, 232, 1, 0, 0, 0, 3230, 3231, + 7, 19, 0, 0, 3231, 3232, 7, 12, 0, 0, 3232, 234, 1, 0, 0, 0, 3233, 3234, + 7, 19, 0, 0, 3234, 3235, 7, 25, 0, 0, 3235, 3236, 7, 6, 0, 0, 3236, 3237, + 7, 15, 0, 0, 3237, 3238, 7, 23, 0, 0, 3238, 3239, 7, 15, 0, 0, 3239, 3240, + 7, 13, 0, 0, 3240, 3241, 7, 7, 0, 0, 3241, 236, 1, 0, 0, 0, 3242, 3243, + 7, 19, 0, 0, 3243, 3244, 7, 25, 0, 0, 3244, 3245, 7, 6, 0, 0, 3245, 3246, + 7, 15, 0, 0, 3246, 3247, 7, 19, 0, 0, 3247, 3248, 7, 12, 0, 0, 3248, 238, + 1, 0, 0, 0, 3249, 3250, 7, 19, 0, 0, 3250, 3251, 7, 25, 0, 0, 3251, 3252, + 7, 6, 0, 0, 3252, 3253, 7, 15, 0, 0, 3253, 3254, 7, 19, 0, 0, 3254, 3255, + 7, 12, 0, 0, 3255, 3256, 7, 3, 0, 0, 3256, 3257, 7, 5, 0, 0, 3257, 240, + 1, 0, 0, 0, 3258, 3259, 7, 19, 0, 0, 3259, 3260, 7, 25, 0, 0, 3260, 3261, + 7, 6, 0, 0, 3261, 3262, 7, 15, 0, 0, 3262, 3263, 7, 19, 0, 0, 3263, 3264, + 7, 12, 0, 0, 3264, 3265, 7, 3, 0, 0, 3265, 3266, 7, 5, 0, 0, 3266, 3267, + 7, 5, 0, 0, 3267, 3268, 7, 10, 0, 0, 3268, 242, 1, 0, 0, 0, 3269, 3270, + 7, 19, 0, 0, 3270, 3271, 7, 8, 0, 0, 3271, 244, 1, 0, 0, 0, 3272, 3273, + 7, 19, 0, 0, 3273, 3274, 7, 8, 0, 0, 3274, 3275, 7, 4, 0, 0, 3275, 3276, + 7, 7, 0, 0, 3276, 3277, 7, 8, 0, 0, 3277, 246, 1, 0, 0, 0, 3278, 3279, + 7, 19, 0, 0, 3279, 3280, 7, 17, 0, 0, 3280, 3281, 7, 6, 0, 0, 3281, 248, + 1, 0, 0, 0, 3282, 3283, 7, 19, 0, 0, 3283, 3284, 7, 17, 0, 0, 3284, 3285, + 7, 6, 0, 0, 3285, 3286, 7, 7, 0, 0, 3286, 3287, 7, 8, 0, 0, 3287, 250, + 1, 0, 0, 0, 3288, 3289, 7, 19, 0, 0, 3289, 3290, 7, 17, 0, 0, 3290, 3291, + 7, 6, 0, 0, 3291, 3292, 7, 18, 0, 0, 3292, 3293, 7, 15, 0, 0, 3293, 3294, + 7, 5, 0, 0, 3294, 3295, 7, 7, 0, 0, 3295, 252, 1, 0, 0, 0, 3296, 3297, + 7, 19, 0, 0, 3297, 3298, 7, 24, 0, 0, 3298, 3299, 7, 7, 0, 0, 3299, 3300, + 7, 8, 0, 0, 3300, 254, 1, 0, 0, 0, 3301, 3302, 7, 25, 0, 0, 3302, 3303, + 7, 3, 0, 0, 3303, 3304, 7, 8, 0, 0, 3304, 3305, 7, 6, 0, 0, 3305, 3306, + 7, 15, 0, 0, 3306, 3307, 7, 6, 0, 0, 3307, 3308, 7, 15, 0, 0, 3308, 3309, + 7, 19, 0, 0, 3309, 3310, 7, 12, 0, 0, 3310, 256, 1, 0, 0, 0, 3311, 3312, + 7, 25, 0, 0, 3312, 3313, 7, 8, 0, 0, 3313, 3314, 7, 15, 0, 0, 3314, 3315, + 7, 23, 0, 0, 3315, 3316, 7, 3, 0, 0, 3316, 3317, 7, 8, 0, 0, 3317, 3318, + 7, 10, 0, 0, 3318, 258, 1, 0, 0, 0, 3319, 3320, 7, 25, 0, 0, 3320, 3321, + 7, 8, 0, 0, 3321, 3322, 7, 19, 0, 0, 3322, 3323, 7, 14, 0, 0, 3323, 3324, + 7, 7, 0, 0, 3324, 3325, 7, 4, 0, 0, 3325, 3326, 7, 17, 0, 0, 3326, 3327, + 7, 8, 0, 0, 3327, 3328, 7, 7, 0, 0, 3328, 260, 1, 0, 0, 0, 3329, 3330, + 7, 25, 0, 0, 3330, 3331, 7, 17, 0, 0, 3331, 3332, 7, 8, 0, 0, 3332, 3333, + 7, 22, 0, 0, 3333, 3334, 7, 7, 0, 0, 3334, 262, 1, 0, 0, 0, 3335, 3336, + 7, 8, 0, 0, 3336, 3337, 7, 3, 0, 0, 3337, 3338, 7, 12, 0, 0, 3338, 3339, + 7, 22, 0, 0, 3339, 3340, 7, 7, 0, 0, 3340, 264, 1, 0, 0, 0, 3341, 3342, + 7, 8, 0, 0, 3342, 3343, 7, 7, 0, 0, 3343, 3344, 7, 3, 0, 0, 3344, 3345, + 7, 4, 0, 0, 3345, 266, 1, 0, 0, 0, 3346, 3347, 7, 8, 0, 0, 3347, 3348, + 7, 7, 0, 0, 3348, 3349, 7, 3, 0, 0, 3349, 3350, 7, 4, 0, 0, 3350, 3351, + 7, 11, 0, 0, 3351, 268, 1, 0, 0, 0, 3352, 3353, 7, 8, 0, 0, 3353, 3354, + 7, 7, 0, 0, 3354, 3355, 7, 18, 0, 0, 3355, 3356, 7, 7, 0, 0, 3356, 3357, + 7, 8, 0, 0, 3357, 3358, 7, 7, 0, 0, 3358, 3359, 7, 12, 0, 0, 3359, 3360, + 7, 14, 0, 0, 3360, 3361, 7, 7, 0, 0, 3361, 3362, 7, 11, 0, 0, 3362, 270, + 1, 0, 0, 0, 3363, 3364, 7, 8, 0, 0, 3364, 3365, 7, 7, 0, 0, 3365, 3366, + 7, 22, 0, 0, 3366, 3367, 7, 7, 0, 0, 3367, 3368, 7, 26, 0, 0, 3368, 3369, + 7, 25, 0, 0, 3369, 272, 1, 0, 0, 0, 3370, 3371, 7, 8, 0, 0, 3371, 3372, + 7, 7, 0, 0, 3372, 3373, 7, 5, 0, 0, 3373, 3374, 7, 7, 0, 0, 3374, 3375, + 7, 3, 0, 0, 3375, 3376, 7, 11, 0, 0, 3376, 3377, 7, 7, 0, 0, 3377, 274, + 1, 0, 0, 0, 3378, 3379, 7, 8, 0, 0, 3379, 3380, 7, 7, 0, 0, 3380, 3381, + 7, 12, 0, 0, 3381, 3382, 7, 3, 0, 0, 3382, 3383, 7, 23, 0, 0, 3383, 3384, + 7, 7, 0, 0, 3384, 276, 1, 0, 0, 0, 3385, 3386, 7, 8, 0, 0, 3386, 3387, + 7, 7, 0, 0, 3387, 3388, 7, 25, 0, 0, 3388, 3389, 7, 7, 0, 0, 3389, 3390, + 7, 3, 0, 0, 3390, 3391, 7, 6, 0, 0, 3391, 278, 1, 0, 0, 0, 3392, 3393, + 7, 8, 0, 0, 3393, 3394, 7, 7, 0, 0, 3394, 3395, 7, 25, 0, 0, 3395, 3396, + 7, 5, 0, 0, 3396, 3397, 7, 3, 0, 0, 3397, 3398, 7, 14, 0, 0, 3398, 3399, + 7, 7, 0, 0, 3399, 280, 1, 0, 0, 0, 3400, 3401, 7, 8, 0, 0, 3401, 3402, + 7, 7, 0, 0, 3402, 3403, 7, 28, 0, 0, 3403, 3404, 7, 17, 0, 0, 3404, 3405, + 7, 15, 0, 0, 3405, 3406, 7, 8, 0, 0, 3406, 3407, 7, 7, 0, 0, 3407, 282, + 1, 0, 0, 0, 3408, 3409, 7, 8, 0, 0, 3409, 3410, 7, 7, 0, 0, 3410, 3411, + 7, 11, 0, 0, 3411, 3412, 7, 15, 0, 0, 3412, 3413, 7, 22, 0, 0, 3413, 3414, + 7, 12, 0, 0, 3414, 3415, 7, 3, 0, 0, 3415, 3416, 7, 5, 0, 0, 3416, 284, + 1, 0, 0, 0, 3417, 3418, 7, 8, 0, 0, 3418, 3419, 7, 7, 0, 0, 3419, 3420, + 7, 11, 0, 0, 3420, 3421, 7, 6, 0, 0, 3421, 3422, 7, 8, 0, 0, 3422, 3423, + 7, 15, 0, 0, 3423, 3424, 7, 14, 0, 0, 3424, 3425, 7, 6, 0, 0, 3425, 286, + 1, 0, 0, 0, 3426, 3427, 7, 8, 0, 0, 3427, 3428, 7, 7, 0, 0, 3428, 3429, + 7, 6, 0, 0, 3429, 3430, 7, 3, 0, 0, 3430, 3431, 7, 15, 0, 0, 3431, 3432, + 7, 12, 0, 0, 3432, 288, 1, 0, 0, 0, 3433, 3434, 7, 8, 0, 0, 3434, 3435, + 7, 7, 0, 0, 3435, 3436, 7, 6, 0, 0, 3436, 3437, 7, 17, 0, 0, 3437, 3438, + 7, 8, 0, 0, 3438, 3439, 7, 12, 0, 0, 3439, 290, 1, 0, 0, 0, 3440, 3441, + 7, 8, 0, 0, 3441, 3442, 7, 7, 0, 0, 3442, 3443, 7, 24, 0, 0, 3443, 3444, + 7, 19, 0, 0, 3444, 3445, 7, 21, 0, 0, 3445, 3446, 7, 7, 0, 0, 3446, 292, + 1, 0, 0, 0, 3447, 3448, 7, 8, 0, 0, 3448, 3449, 7, 15, 0, 0, 3449, 3450, + 7, 22, 0, 0, 3450, 3451, 7, 20, 0, 0, 3451, 3452, 7, 6, 0, 0, 3452, 294, + 1, 0, 0, 0, 3453, 3454, 7, 8, 0, 0, 3454, 3455, 7, 5, 0, 0, 3455, 3456, + 7, 15, 0, 0, 3456, 3457, 7, 21, 0, 0, 3457, 3458, 7, 7, 0, 0, 3458, 296, + 1, 0, 0, 0, 3459, 3460, 7, 11, 0, 0, 3460, 3461, 7, 14, 0, 0, 3461, 3462, + 7, 20, 0, 0, 3462, 3463, 7, 7, 0, 0, 3463, 3464, 7, 23, 0, 0, 3464, 3465, + 7, 3, 0, 0, 3465, 298, 1, 0, 0, 0, 3466, 3467, 7, 11, 0, 0, 3467, 3468, + 7, 14, 0, 0, 3468, 3469, 7, 20, 0, 0, 3469, 3470, 7, 7, 0, 0, 3470, 3471, + 7, 23, 0, 0, 3471, 3472, 7, 3, 0, 0, 3472, 3473, 7, 11, 0, 0, 3473, 300, + 1, 0, 0, 0, 3474, 3475, 7, 11, 0, 0, 3475, 3476, 7, 7, 0, 0, 3476, 3477, + 7, 5, 0, 0, 3477, 3478, 7, 7, 0, 0, 3478, 3479, 7, 14, 0, 0, 3479, 3480, + 7, 6, 0, 0, 3480, 302, 1, 0, 0, 0, 3481, 3482, 7, 11, 0, 0, 3482, 3483, + 7, 7, 0, 0, 3483, 3484, 7, 6, 0, 0, 3484, 304, 1, 0, 0, 0, 3485, 3486, + 7, 11, 0, 0, 3486, 3487, 7, 7, 0, 0, 3487, 3488, 7, 25, 0, 0, 3488, 3489, + 7, 3, 0, 0, 3489, 3490, 7, 8, 0, 0, 3490, 3491, 7, 3, 0, 0, 3491, 3492, + 7, 6, 0, 0, 3492, 3493, 7, 19, 0, 0, 3493, 3494, 7, 8, 0, 0, 3494, 306, + 1, 0, 0, 0, 3495, 3496, 7, 11, 0, 0, 3496, 3497, 7, 20, 0, 0, 3497, 3498, + 7, 19, 0, 0, 3498, 3499, 7, 9, 0, 0, 3499, 308, 1, 0, 0, 0, 3500, 3501, + 7, 11, 0, 0, 3501, 3502, 7, 15, 0, 0, 3502, 3503, 7, 22, 0, 0, 3503, 3504, + 7, 12, 0, 0, 3504, 3505, 7, 3, 0, 0, 3505, 3506, 7, 5, 0, 0, 3506, 310, + 1, 0, 0, 0, 3507, 3508, 7, 11, 0, 0, 3508, 3509, 7, 21, 0, 0, 3509, 3510, + 7, 15, 0, 0, 3510, 3511, 7, 25, 0, 0, 3511, 312, 1, 0, 0, 0, 3512, 3513, + 7, 11, 0, 0, 3513, 3514, 7, 25, 0, 0, 3514, 3515, 7, 3, 0, 0, 3515, 3516, + 7, 6, 0, 0, 3516, 3517, 7, 15, 0, 0, 3517, 3518, 7, 3, 0, 0, 3518, 3519, + 7, 5, 0, 0, 3519, 314, 1, 0, 0, 0, 3520, 3521, 7, 11, 0, 0, 3521, 3522, + 7, 28, 0, 0, 3522, 3523, 7, 5, 0, 0, 3523, 316, 1, 0, 0, 0, 3524, 3525, + 7, 11, 0, 0, 3525, 3526, 7, 28, 0, 0, 3526, 3527, 7, 5, 0, 0, 3527, 3528, + 7, 7, 0, 0, 3528, 3529, 7, 26, 0, 0, 3529, 3530, 7, 14, 0, 0, 3530, 3531, + 7, 7, 0, 0, 3531, 3532, 7, 25, 0, 0, 3532, 3533, 7, 6, 0, 0, 3533, 3534, + 7, 15, 0, 0, 3534, 3535, 7, 19, 0, 0, 3535, 3536, 7, 12, 0, 0, 3536, 318, + 1, 0, 0, 0, 3537, 3538, 7, 11, 0, 0, 3538, 3539, 7, 28, 0, 0, 3539, 3540, + 7, 5, 0, 0, 3540, 3541, 7, 11, 0, 0, 3541, 3542, 7, 6, 0, 0, 3542, 3543, + 7, 3, 0, 0, 3543, 3544, 7, 6, 0, 0, 3544, 3545, 7, 7, 0, 0, 3545, 320, + 1, 0, 0, 0, 3546, 3547, 7, 11, 0, 0, 3547, 3548, 7, 28, 0, 0, 3548, 3549, + 7, 5, 0, 0, 3549, 3550, 7, 9, 0, 0, 3550, 3551, 7, 3, 0, 0, 3551, 3552, + 7, 8, 0, 0, 3552, 3553, 7, 12, 0, 0, 3553, 3554, 7, 15, 0, 0, 3554, 3555, + 7, 12, 0, 0, 3555, 3556, 7, 22, 0, 0, 3556, 322, 1, 0, 0, 0, 3557, 3558, + 7, 11, 0, 0, 3558, 3559, 7, 28, 0, 0, 3559, 3560, 7, 5, 0, 0, 3560, 3561, + 5, 95, 0, 0, 3561, 3562, 7, 16, 0, 0, 3562, 3563, 7, 15, 0, 0, 3563, 3564, + 7, 22, 0, 0, 3564, 3565, 5, 95, 0, 0, 3565, 3566, 7, 8, 0, 0, 3566, 3567, + 7, 7, 0, 0, 3567, 3568, 7, 11, 0, 0, 3568, 3569, 7, 17, 0, 0, 3569, 3570, + 7, 5, 0, 0, 3570, 3571, 7, 6, 0, 0, 3571, 324, 1, 0, 0, 0, 3572, 3573, + 7, 11, 0, 0, 3573, 3574, 7, 28, 0, 0, 3574, 3575, 7, 5, 0, 0, 3575, 3576, + 5, 95, 0, 0, 3576, 3577, 7, 14, 0, 0, 3577, 3578, 7, 3, 0, 0, 3578, 3579, + 7, 5, 0, 0, 3579, 3580, 7, 14, 0, 0, 3580, 3581, 5, 95, 0, 0, 3581, 3582, + 7, 18, 0, 0, 3582, 3583, 7, 19, 0, 0, 3583, 3584, 7, 17, 0, 0, 3584, 3585, + 7, 12, 0, 0, 3585, 3586, 7, 4, 0, 0, 3586, 3587, 5, 95, 0, 0, 3587, 3588, + 7, 8, 0, 0, 3588, 3589, 7, 19, 0, 0, 3589, 3590, 7, 9, 0, 0, 3590, 3591, + 7, 11, 0, 0, 3591, 326, 1, 0, 0, 0, 3592, 3593, 7, 11, 0, 0, 3593, 3594, + 7, 28, 0, 0, 3594, 3595, 7, 5, 0, 0, 3595, 3596, 5, 95, 0, 0, 3596, 3597, + 7, 11, 0, 0, 3597, 3598, 7, 23, 0, 0, 3598, 3599, 7, 3, 0, 0, 3599, 3600, + 7, 5, 0, 0, 3600, 3601, 7, 5, 0, 0, 3601, 3602, 5, 95, 0, 0, 3602, 3603, + 7, 8, 0, 0, 3603, 3604, 7, 7, 0, 0, 3604, 3605, 7, 11, 0, 0, 3605, 3606, + 7, 17, 0, 0, 3606, 3607, 7, 5, 0, 0, 3607, 3608, 7, 6, 0, 0, 3608, 328, + 1, 0, 0, 0, 3609, 3610, 7, 11, 0, 0, 3610, 3611, 7, 11, 0, 0, 3611, 3612, + 7, 5, 0, 0, 3612, 330, 1, 0, 0, 0, 3613, 3614, 7, 11, 0, 0, 3614, 3615, + 7, 6, 0, 0, 3615, 3616, 7, 3, 0, 0, 3616, 3617, 7, 14, 0, 0, 3617, 3618, + 7, 21, 0, 0, 3618, 3619, 7, 7, 0, 0, 3619, 3620, 7, 4, 0, 0, 3620, 332, + 1, 0, 0, 0, 3621, 3622, 7, 11, 0, 0, 3622, 3623, 7, 6, 0, 0, 3623, 3624, + 7, 3, 0, 0, 3624, 3625, 7, 8, 0, 0, 3625, 3626, 7, 6, 0, 0, 3626, 3627, + 7, 15, 0, 0, 3627, 3628, 7, 12, 0, 0, 3628, 3629, 7, 22, 0, 0, 3629, 334, + 1, 0, 0, 0, 3630, 3631, 7, 11, 0, 0, 3631, 3632, 7, 6, 0, 0, 3632, 3633, + 7, 3, 0, 0, 3633, 3634, 7, 6, 0, 0, 3634, 3635, 7, 7, 0, 0, 3635, 3636, + 7, 23, 0, 0, 3636, 3637, 7, 7, 0, 0, 3637, 3638, 7, 12, 0, 0, 3638, 3639, + 7, 6, 0, 0, 3639, 336, 1, 0, 0, 0, 3640, 3641, 7, 11, 0, 0, 3641, 3642, + 7, 6, 0, 0, 3642, 3643, 7, 8, 0, 0, 3643, 3644, 7, 3, 0, 0, 3644, 3645, + 7, 15, 0, 0, 3645, 3646, 7, 22, 0, 0, 3646, 3647, 7, 20, 0, 0, 3647, 3648, + 7, 6, 0, 0, 3648, 3649, 5, 95, 0, 0, 3649, 3650, 7, 27, 0, 0, 3650, 3651, + 7, 19, 0, 0, 3651, 3652, 7, 15, 0, 0, 3652, 3653, 7, 12, 0, 0, 3653, 338, + 1, 0, 0, 0, 3654, 3655, 7, 6, 0, 0, 3655, 3656, 7, 3, 0, 0, 3656, 3657, + 7, 16, 0, 0, 3657, 3658, 7, 5, 0, 0, 3658, 3659, 7, 7, 0, 0, 3659, 340, + 1, 0, 0, 0, 3660, 3661, 7, 6, 0, 0, 3661, 3662, 7, 7, 0, 0, 3662, 3663, + 7, 8, 0, 0, 3663, 3664, 7, 23, 0, 0, 3664, 3665, 7, 15, 0, 0, 3665, 3666, + 7, 12, 0, 0, 3666, 3667, 7, 3, 0, 0, 3667, 3668, 7, 6, 0, 0, 3668, 3669, + 7, 7, 0, 0, 3669, 3670, 7, 4, 0, 0, 3670, 342, 1, 0, 0, 0, 3671, 3672, + 7, 6, 0, 0, 3672, 3673, 7, 20, 0, 0, 3673, 3674, 7, 7, 0, 0, 3674, 3675, + 7, 12, 0, 0, 3675, 344, 1, 0, 0, 0, 3676, 3677, 7, 6, 0, 0, 3677, 3678, + 7, 19, 0, 0, 3678, 346, 1, 0, 0, 0, 3679, 3680, 7, 6, 0, 0, 3680, 3681, + 7, 8, 0, 0, 3681, 3682, 7, 3, 0, 0, 3682, 3683, 7, 15, 0, 0, 3683, 3684, + 7, 5, 0, 0, 3684, 3685, 7, 15, 0, 0, 3685, 3686, 7, 12, 0, 0, 3686, 3687, + 7, 22, 0, 0, 3687, 348, 1, 0, 0, 0, 3688, 3689, 7, 6, 0, 0, 3689, 3690, + 7, 8, 0, 0, 3690, 3691, 7, 15, 0, 0, 3691, 3692, 7, 22, 0, 0, 3692, 3693, + 7, 22, 0, 0, 3693, 3694, 7, 7, 0, 0, 3694, 3695, 7, 8, 0, 0, 3695, 350, + 1, 0, 0, 0, 3696, 3697, 7, 6, 0, 0, 3697, 3698, 7, 8, 0, 0, 3698, 3699, + 7, 17, 0, 0, 3699, 3700, 7, 7, 0, 0, 3700, 352, 1, 0, 0, 0, 3701, 3702, + 7, 17, 0, 0, 3702, 3703, 7, 12, 0, 0, 3703, 3704, 7, 4, 0, 0, 3704, 3705, + 7, 19, 0, 0, 3705, 354, 1, 0, 0, 0, 3706, 3707, 7, 17, 0, 0, 3707, 3708, + 7, 12, 0, 0, 3708, 3709, 7, 15, 0, 0, 3709, 3710, 7, 19, 0, 0, 3710, 3711, + 7, 12, 0, 0, 3711, 356, 1, 0, 0, 0, 3712, 3713, 7, 17, 0, 0, 3713, 3714, + 7, 12, 0, 0, 3714, 3715, 7, 15, 0, 0, 3715, 3716, 7, 28, 0, 0, 3716, 3717, + 7, 17, 0, 0, 3717, 3718, 7, 7, 0, 0, 3718, 358, 1, 0, 0, 0, 3719, 3720, + 7, 17, 0, 0, 3720, 3721, 7, 12, 0, 0, 3721, 3722, 7, 5, 0, 0, 3722, 3723, + 7, 19, 0, 0, 3723, 3724, 7, 14, 0, 0, 3724, 3725, 7, 21, 0, 0, 3725, 360, + 1, 0, 0, 0, 3726, 3727, 7, 17, 0, 0, 3727, 3728, 7, 12, 0, 0, 3728, 3729, + 7, 11, 0, 0, 3729, 3730, 7, 15, 0, 0, 3730, 3731, 7, 22, 0, 0, 3731, 3732, + 7, 12, 0, 0, 3732, 3733, 7, 7, 0, 0, 3733, 3734, 7, 4, 0, 0, 3734, 362, + 1, 0, 0, 0, 3735, 3736, 7, 17, 0, 0, 3736, 3737, 7, 25, 0, 0, 3737, 3738, + 7, 4, 0, 0, 3738, 3739, 7, 3, 0, 0, 3739, 3740, 7, 6, 0, 0, 3740, 3741, + 7, 7, 0, 0, 3741, 364, 1, 0, 0, 0, 3742, 3743, 7, 17, 0, 0, 3743, 3744, + 7, 11, 0, 0, 3744, 3745, 7, 3, 0, 0, 3745, 3746, 7, 22, 0, 0, 3746, 3747, + 7, 7, 0, 0, 3747, 366, 1, 0, 0, 0, 3748, 3749, 7, 17, 0, 0, 3749, 3750, + 7, 11, 0, 0, 3750, 3751, 7, 7, 0, 0, 3751, 368, 1, 0, 0, 0, 3752, 3753, + 7, 17, 0, 0, 3753, 3754, 7, 11, 0, 0, 3754, 3755, 7, 15, 0, 0, 3755, 3756, + 7, 12, 0, 0, 3756, 3757, 7, 22, 0, 0, 3757, 370, 1, 0, 0, 0, 3758, 3759, + 7, 24, 0, 0, 3759, 3760, 7, 3, 0, 0, 3760, 3761, 7, 5, 0, 0, 3761, 3762, + 7, 17, 0, 0, 3762, 3763, 7, 7, 0, 0, 3763, 3764, 7, 11, 0, 0, 3764, 372, + 1, 0, 0, 0, 3765, 3766, 7, 9, 0, 0, 3766, 3767, 7, 20, 0, 0, 3767, 3768, + 7, 7, 0, 0, 3768, 3769, 7, 12, 0, 0, 3769, 374, 1, 0, 0, 0, 3770, 3771, + 7, 9, 0, 0, 3771, 3772, 7, 20, 0, 0, 3772, 3773, 7, 7, 0, 0, 3773, 3774, + 7, 8, 0, 0, 3774, 3775, 7, 7, 0, 0, 3775, 376, 1, 0, 0, 0, 3776, 3777, + 7, 9, 0, 0, 3777, 3778, 7, 20, 0, 0, 3778, 3779, 7, 15, 0, 0, 3779, 3780, + 7, 5, 0, 0, 3780, 3781, 7, 7, 0, 0, 3781, 378, 1, 0, 0, 0, 3782, 3783, + 7, 9, 0, 0, 3783, 3784, 7, 15, 0, 0, 3784, 3785, 7, 6, 0, 0, 3785, 3786, + 7, 20, 0, 0, 3786, 380, 1, 0, 0, 0, 3787, 3788, 7, 9, 0, 0, 3788, 3789, + 7, 8, 0, 0, 3789, 3790, 7, 15, 0, 0, 3790, 3791, 7, 6, 0, 0, 3791, 3792, + 7, 7, 0, 0, 3792, 382, 1, 0, 0, 0, 3793, 3794, 7, 26, 0, 0, 3794, 3795, + 7, 19, 0, 0, 3795, 3796, 7, 8, 0, 0, 3796, 384, 1, 0, 0, 0, 3797, 3798, + 7, 13, 0, 0, 3798, 3799, 7, 7, 0, 0, 3799, 3800, 7, 8, 0, 0, 3800, 3801, + 7, 19, 0, 0, 3801, 3802, 7, 18, 0, 0, 3802, 3803, 7, 15, 0, 0, 3803, 3804, + 7, 5, 0, 0, 3804, 3805, 7, 5, 0, 0, 3805, 386, 1, 0, 0, 0, 3806, 3807, + 7, 6, 0, 0, 3807, 3808, 7, 15, 0, 0, 3808, 3809, 7, 12, 0, 0, 3809, 3810, + 7, 10, 0, 0, 3810, 3811, 7, 15, 0, 0, 3811, 3812, 7, 12, 0, 0, 3812, 3813, + 7, 6, 0, 0, 3813, 388, 1, 0, 0, 0, 3814, 3815, 7, 11, 0, 0, 3815, 3816, + 7, 23, 0, 0, 3816, 3817, 7, 3, 0, 0, 3817, 3818, 7, 5, 0, 0, 3818, 3819, + 7, 5, 0, 0, 3819, 3820, 7, 15, 0, 0, 3820, 3821, 7, 12, 0, 0, 3821, 3822, + 7, 6, 0, 0, 3822, 390, 1, 0, 0, 0, 3823, 3824, 7, 23, 0, 0, 3824, 3825, + 7, 7, 0, 0, 3825, 3826, 7, 4, 0, 0, 3826, 3827, 7, 15, 0, 0, 3827, 3828, + 7, 17, 0, 0, 3828, 3829, 7, 23, 0, 0, 3829, 3830, 7, 15, 0, 0, 3830, 3831, + 7, 12, 0, 0, 3831, 3832, 7, 6, 0, 0, 3832, 392, 1, 0, 0, 0, 3833, 3834, + 7, 23, 0, 0, 3834, 3835, 7, 15, 0, 0, 3835, 3836, 7, 4, 0, 0, 3836, 3837, + 7, 4, 0, 0, 3837, 3838, 7, 5, 0, 0, 3838, 3839, 7, 7, 0, 0, 3839, 3840, + 7, 15, 0, 0, 3840, 3841, 7, 12, 0, 0, 3841, 3842, 7, 6, 0, 0, 3842, 394, + 1, 0, 0, 0, 3843, 3844, 7, 15, 0, 0, 3844, 3845, 7, 12, 0, 0, 3845, 3846, + 7, 6, 0, 0, 3846, 396, 1, 0, 0, 0, 3847, 3848, 7, 15, 0, 0, 3848, 3849, + 7, 12, 0, 0, 3849, 3850, 7, 6, 0, 0, 3850, 3851, 5, 49, 0, 0, 3851, 398, + 1, 0, 0, 0, 3852, 3853, 7, 15, 0, 0, 3853, 3854, 7, 12, 0, 0, 3854, 3855, + 7, 6, 0, 0, 3855, 3856, 5, 50, 0, 0, 3856, 400, 1, 0, 0, 0, 3857, 3858, + 7, 15, 0, 0, 3858, 3859, 7, 12, 0, 0, 3859, 3860, 7, 6, 0, 0, 3860, 3861, + 5, 51, 0, 0, 3861, 402, 1, 0, 0, 0, 3862, 3863, 7, 15, 0, 0, 3863, 3864, + 7, 12, 0, 0, 3864, 3865, 7, 6, 0, 0, 3865, 3866, 5, 52, 0, 0, 3866, 404, + 1, 0, 0, 0, 3867, 3868, 7, 15, 0, 0, 3868, 3869, 7, 12, 0, 0, 3869, 3870, + 7, 6, 0, 0, 3870, 3871, 5, 56, 0, 0, 3871, 406, 1, 0, 0, 0, 3872, 3873, + 7, 15, 0, 0, 3873, 3874, 7, 12, 0, 0, 3874, 3875, 7, 6, 0, 0, 3875, 3876, + 7, 7, 0, 0, 3876, 3877, 7, 22, 0, 0, 3877, 3878, 7, 7, 0, 0, 3878, 3879, + 7, 8, 0, 0, 3879, 408, 1, 0, 0, 0, 3880, 3881, 7, 16, 0, 0, 3881, 3882, + 7, 15, 0, 0, 3882, 3883, 7, 22, 0, 0, 3883, 3884, 7, 15, 0, 0, 3884, 3885, + 7, 12, 0, 0, 3885, 3886, 7, 6, 0, 0, 3886, 410, 1, 0, 0, 0, 3887, 3888, + 7, 8, 0, 0, 3888, 3889, 7, 7, 0, 0, 3889, 3890, 7, 3, 0, 0, 3890, 3891, + 7, 5, 0, 0, 3891, 412, 1, 0, 0, 0, 3892, 3893, 7, 4, 0, 0, 3893, 3894, + 7, 19, 0, 0, 3894, 3895, 7, 17, 0, 0, 3895, 3896, 7, 16, 0, 0, 3896, 3897, + 7, 5, 0, 0, 3897, 3898, 7, 7, 0, 0, 3898, 414, 1, 0, 0, 0, 3899, 3900, + 7, 25, 0, 0, 3900, 3901, 7, 8, 0, 0, 3901, 3902, 7, 7, 0, 0, 3902, 3903, + 7, 14, 0, 0, 3903, 3904, 7, 15, 0, 0, 3904, 3905, 7, 11, 0, 0, 3905, 3906, + 7, 15, 0, 0, 3906, 3907, 7, 19, 0, 0, 3907, 3908, 7, 12, 0, 0, 3908, 416, + 1, 0, 0, 0, 3909, 3910, 7, 18, 0, 0, 3910, 3911, 7, 5, 0, 0, 3911, 3912, + 7, 19, 0, 0, 3912, 3913, 7, 3, 0, 0, 3913, 3914, 7, 6, 0, 0, 3914, 418, + 1, 0, 0, 0, 3915, 3916, 7, 18, 0, 0, 3916, 3917, 7, 5, 0, 0, 3917, 3918, + 7, 19, 0, 0, 3918, 3919, 7, 3, 0, 0, 3919, 3920, 7, 6, 0, 0, 3920, 3921, + 5, 52, 0, 0, 3921, 420, 1, 0, 0, 0, 3922, 3923, 7, 18, 0, 0, 3923, 3924, + 7, 5, 0, 0, 3924, 3925, 7, 19, 0, 0, 3925, 3926, 7, 3, 0, 0, 3926, 3927, + 7, 6, 0, 0, 3927, 3928, 5, 56, 0, 0, 3928, 422, 1, 0, 0, 0, 3929, 3930, + 7, 4, 0, 0, 3930, 3931, 7, 7, 0, 0, 3931, 3932, 7, 14, 0, 0, 3932, 3933, + 7, 15, 0, 0, 3933, 3934, 7, 23, 0, 0, 3934, 3935, 7, 3, 0, 0, 3935, 3936, + 7, 5, 0, 0, 3936, 424, 1, 0, 0, 0, 3937, 3938, 7, 4, 0, 0, 3938, 3939, + 7, 7, 0, 0, 3939, 3940, 7, 14, 0, 0, 3940, 426, 1, 0, 0, 0, 3941, 3942, + 7, 12, 0, 0, 3942, 3943, 7, 17, 0, 0, 3943, 3944, 7, 23, 0, 0, 3944, 3945, + 7, 7, 0, 0, 3945, 3946, 7, 8, 0, 0, 3946, 3947, 7, 15, 0, 0, 3947, 3948, + 7, 14, 0, 0, 3948, 428, 1, 0, 0, 0, 3949, 3950, 7, 4, 0, 0, 3950, 3951, + 7, 3, 0, 0, 3951, 3952, 7, 6, 0, 0, 3952, 3953, 7, 7, 0, 0, 3953, 430, + 1, 0, 0, 0, 3954, 3955, 7, 6, 0, 0, 3955, 3956, 7, 15, 0, 0, 3956, 3957, + 7, 23, 0, 0, 3957, 3958, 7, 7, 0, 0, 3958, 432, 1, 0, 0, 0, 3959, 3960, + 7, 6, 0, 0, 3960, 3961, 7, 15, 0, 0, 3961, 3962, 7, 23, 0, 0, 3962, 3963, + 7, 7, 0, 0, 3963, 3964, 7, 11, 0, 0, 3964, 3965, 7, 6, 0, 0, 3965, 3966, + 7, 3, 0, 0, 3966, 3967, 7, 23, 0, 0, 3967, 3968, 7, 25, 0, 0, 3968, 434, + 1, 0, 0, 0, 3969, 3970, 7, 4, 0, 0, 3970, 3971, 7, 3, 0, 0, 3971, 3972, + 7, 6, 0, 0, 3972, 3973, 7, 7, 0, 0, 3973, 3974, 7, 6, 0, 0, 3974, 3975, + 7, 15, 0, 0, 3975, 3976, 7, 23, 0, 0, 3976, 3977, 7, 7, 0, 0, 3977, 436, + 1, 0, 0, 0, 3978, 3979, 7, 10, 0, 0, 3979, 3980, 7, 7, 0, 0, 3980, 3981, + 7, 3, 0, 0, 3981, 3982, 7, 8, 0, 0, 3982, 438, 1, 0, 0, 0, 3983, 3984, + 7, 14, 0, 0, 3984, 3985, 7, 20, 0, 0, 3985, 3986, 7, 3, 0, 0, 3986, 3987, + 7, 8, 0, 0, 3987, 440, 1, 0, 0, 0, 3988, 3989, 7, 24, 0, 0, 3989, 3990, + 7, 3, 0, 0, 3990, 3991, 7, 8, 0, 0, 3991, 3992, 7, 14, 0, 0, 3992, 3993, + 7, 20, 0, 0, 3993, 3994, 7, 3, 0, 0, 3994, 3995, 7, 8, 0, 0, 3995, 442, + 1, 0, 0, 0, 3996, 3997, 7, 12, 0, 0, 3997, 3998, 7, 24, 0, 0, 3998, 3999, + 7, 3, 0, 0, 3999, 4000, 7, 8, 0, 0, 4000, 4001, 7, 14, 0, 0, 4001, 4002, + 7, 20, 0, 0, 4002, 4003, 7, 3, 0, 0, 4003, 4004, 7, 8, 0, 0, 4004, 444, + 1, 0, 0, 0, 4005, 4006, 7, 12, 0, 0, 4006, 4007, 7, 3, 0, 0, 4007, 4008, + 7, 6, 0, 0, 4008, 4009, 7, 15, 0, 0, 4009, 4010, 7, 19, 0, 0, 4010, 4011, + 7, 12, 0, 0, 4011, 4012, 7, 3, 0, 0, 4012, 4013, 7, 5, 0, 0, 4013, 446, + 1, 0, 0, 0, 4014, 4015, 7, 16, 0, 0, 4015, 4016, 7, 15, 0, 0, 4016, 4017, + 7, 12, 0, 0, 4017, 4018, 7, 3, 0, 0, 4018, 4019, 7, 8, 0, 0, 4019, 4020, + 7, 10, 0, 0, 4020, 448, 1, 0, 0, 0, 4021, 4022, 7, 24, 0, 0, 4022, 4023, + 7, 3, 0, 0, 4023, 4024, 7, 8, 0, 0, 4024, 4025, 7, 16, 0, 0, 4025, 4026, + 7, 15, 0, 0, 4026, 4027, 7, 12, 0, 0, 4027, 4028, 7, 3, 0, 0, 4028, 4029, + 7, 8, 0, 0, 4029, 4030, 7, 10, 0, 0, 4030, 450, 1, 0, 0, 0, 4031, 4032, + 7, 6, 0, 0, 4032, 4033, 7, 15, 0, 0, 4033, 4034, 7, 12, 0, 0, 4034, 4035, + 7, 10, 0, 0, 4035, 4036, 7, 16, 0, 0, 4036, 4037, 7, 5, 0, 0, 4037, 4038, + 7, 19, 0, 0, 4038, 4039, 7, 16, 0, 0, 4039, 452, 1, 0, 0, 0, 4040, 4041, + 7, 16, 0, 0, 4041, 4042, 7, 5, 0, 0, 4042, 4043, 7, 19, 0, 0, 4043, 4044, + 7, 16, 0, 0, 4044, 454, 1, 0, 0, 0, 4045, 4046, 7, 23, 0, 0, 4046, 4047, + 7, 7, 0, 0, 4047, 4048, 7, 4, 0, 0, 4048, 4049, 7, 15, 0, 0, 4049, 4050, + 7, 17, 0, 0, 4050, 4051, 7, 23, 0, 0, 4051, 4052, 7, 16, 0, 0, 4052, 4053, + 7, 5, 0, 0, 4053, 4054, 7, 19, 0, 0, 4054, 4055, 7, 16, 0, 0, 4055, 456, + 1, 0, 0, 0, 4056, 4057, 7, 5, 0, 0, 4057, 4058, 7, 19, 0, 0, 4058, 4059, + 7, 12, 0, 0, 4059, 4060, 7, 22, 0, 0, 4060, 458, 1, 0, 0, 0, 4061, 4062, + 7, 5, 0, 0, 4062, 4063, 7, 19, 0, 0, 4063, 4064, 7, 12, 0, 0, 4064, 4065, + 7, 22, 0, 0, 4065, 4066, 7, 16, 0, 0, 4066, 4067, 7, 5, 0, 0, 4067, 4068, + 7, 19, 0, 0, 4068, 4069, 7, 16, 0, 0, 4069, 460, 1, 0, 0, 0, 4070, 4071, + 7, 6, 0, 0, 4071, 4072, 7, 15, 0, 0, 4072, 4073, 7, 12, 0, 0, 4073, 4074, + 7, 10, 0, 0, 4074, 4075, 7, 6, 0, 0, 4075, 4076, 7, 7, 0, 0, 4076, 4077, + 7, 26, 0, 0, 4077, 4078, 7, 6, 0, 0, 4078, 462, 1, 0, 0, 0, 4079, 4080, + 7, 6, 0, 0, 4080, 4081, 7, 7, 0, 0, 4081, 4082, 7, 26, 0, 0, 4082, 4083, + 7, 6, 0, 0, 4083, 464, 1, 0, 0, 0, 4084, 4085, 7, 23, 0, 0, 4085, 4086, + 7, 7, 0, 0, 4086, 4087, 7, 4, 0, 0, 4087, 4088, 7, 15, 0, 0, 4088, 4089, + 7, 17, 0, 0, 4089, 4090, 7, 23, 0, 0, 4090, 4091, 7, 6, 0, 0, 4091, 4092, + 7, 7, 0, 0, 4092, 4093, 7, 26, 0, 0, 4093, 4094, 7, 6, 0, 0, 4094, 466, + 1, 0, 0, 0, 4095, 4096, 7, 5, 0, 0, 4096, 4097, 7, 19, 0, 0, 4097, 4098, + 7, 12, 0, 0, 4098, 4099, 7, 22, 0, 0, 4099, 4100, 7, 6, 0, 0, 4100, 4101, + 7, 7, 0, 0, 4101, 4102, 7, 26, 0, 0, 4102, 4103, 7, 6, 0, 0, 4103, 468, + 1, 0, 0, 0, 4104, 4105, 7, 7, 0, 0, 4105, 4106, 7, 12, 0, 0, 4106, 4107, + 7, 17, 0, 0, 4107, 4108, 7, 23, 0, 0, 4108, 470, 1, 0, 0, 0, 4109, 4110, + 7, 24, 0, 0, 4110, 4111, 7, 3, 0, 0, 4111, 4112, 7, 8, 0, 0, 4112, 4113, + 7, 10, 0, 0, 4113, 4114, 7, 15, 0, 0, 4114, 4115, 7, 12, 0, 0, 4115, 4116, + 7, 22, 0, 0, 4116, 472, 1, 0, 0, 0, 4117, 4118, 7, 11, 0, 0, 4118, 4119, + 7, 7, 0, 0, 4119, 4120, 7, 8, 0, 0, 4120, 4121, 7, 15, 0, 0, 4121, 4122, + 7, 3, 0, 0, 4122, 4123, 7, 5, 0, 0, 4123, 474, 1, 0, 0, 0, 4124, 4125, + 7, 10, 0, 0, 4125, 4126, 7, 7, 0, 0, 4126, 4127, 7, 3, 0, 0, 4127, 4128, + 7, 8, 0, 0, 4128, 4129, 5, 95, 0, 0, 4129, 4130, 7, 23, 0, 0, 4130, 4131, + 7, 19, 0, 0, 4131, 4132, 7, 12, 0, 0, 4132, 4133, 7, 6, 0, 0, 4133, 4134, + 7, 20, 0, 0, 4134, 476, 1, 0, 0, 0, 4135, 4136, 7, 4, 0, 0, 4136, 4137, + 7, 3, 0, 0, 4137, 4138, 7, 10, 0, 0, 4138, 4139, 5, 95, 0, 0, 4139, 4140, + 7, 20, 0, 0, 4140, 4141, 7, 19, 0, 0, 4141, 4142, 7, 17, 0, 0, 4142, 4143, + 7, 8, 0, 0, 4143, 478, 1, 0, 0, 0, 4144, 4145, 7, 4, 0, 0, 4145, 4146, + 7, 3, 0, 0, 4146, 4147, 7, 10, 0, 0, 4147, 4148, 5, 95, 0, 0, 4148, 4149, + 7, 23, 0, 0, 4149, 4150, 7, 15, 0, 0, 4150, 4151, 7, 12, 0, 0, 4151, 4152, + 7, 17, 0, 0, 4152, 4153, 7, 6, 0, 0, 4153, 4154, 7, 7, 0, 0, 4154, 480, + 1, 0, 0, 0, 4155, 4156, 7, 4, 0, 0, 4156, 4157, 7, 3, 0, 0, 4157, 4158, + 7, 10, 0, 0, 4158, 4159, 5, 95, 0, 0, 4159, 4160, 7, 11, 0, 0, 4160, 4161, + 7, 7, 0, 0, 4161, 4162, 7, 14, 0, 0, 4162, 4163, 7, 19, 0, 0, 4163, 4164, + 7, 12, 0, 0, 4164, 4165, 7, 4, 0, 0, 4165, 482, 1, 0, 0, 0, 4166, 4167, + 7, 20, 0, 0, 4167, 4168, 7, 19, 0, 0, 4168, 4169, 7, 17, 0, 0, 4169, 4170, + 7, 8, 0, 0, 4170, 4171, 5, 95, 0, 0, 4171, 4172, 7, 23, 0, 0, 4172, 4173, + 7, 15, 0, 0, 4173, 4174, 7, 12, 0, 0, 4174, 4175, 7, 17, 0, 0, 4175, 4176, + 7, 6, 0, 0, 4176, 4177, 7, 7, 0, 0, 4177, 484, 1, 0, 0, 0, 4178, 4179, + 7, 20, 0, 0, 4179, 4180, 7, 19, 0, 0, 4180, 4181, 7, 17, 0, 0, 4181, 4182, + 7, 8, 0, 0, 4182, 4183, 5, 95, 0, 0, 4183, 4184, 7, 11, 0, 0, 4184, 4185, + 7, 7, 0, 0, 4185, 4186, 7, 14, 0, 0, 4186, 4187, 7, 19, 0, 0, 4187, 4188, + 7, 12, 0, 0, 4188, 4189, 7, 4, 0, 0, 4189, 486, 1, 0, 0, 0, 4190, 4191, + 7, 23, 0, 0, 4191, 4192, 7, 15, 0, 0, 4192, 4193, 7, 12, 0, 0, 4193, 4194, + 7, 17, 0, 0, 4194, 4195, 7, 6, 0, 0, 4195, 4196, 7, 7, 0, 0, 4196, 4197, + 5, 95, 0, 0, 4197, 4198, 7, 11, 0, 0, 4198, 4199, 7, 7, 0, 0, 4199, 4200, + 7, 14, 0, 0, 4200, 4201, 7, 19, 0, 0, 4201, 4202, 7, 12, 0, 0, 4202, 4203, + 7, 4, 0, 0, 4203, 488, 1, 0, 0, 0, 4204, 4205, 7, 11, 0, 0, 4205, 4206, + 7, 7, 0, 0, 4206, 4207, 7, 14, 0, 0, 4207, 4208, 7, 19, 0, 0, 4208, 4209, + 7, 12, 0, 0, 4209, 4210, 7, 4, 0, 0, 4210, 4211, 5, 95, 0, 0, 4211, 4212, + 7, 23, 0, 0, 4212, 4213, 7, 15, 0, 0, 4213, 4214, 7, 14, 0, 0, 4214, 4215, + 7, 8, 0, 0, 4215, 4216, 7, 19, 0, 0, 4216, 4217, 7, 11, 0, 0, 4217, 4218, + 7, 7, 0, 0, 4218, 4219, 7, 14, 0, 0, 4219, 4220, 7, 19, 0, 0, 4220, 4221, + 7, 12, 0, 0, 4221, 4222, 7, 4, 0, 0, 4222, 490, 1, 0, 0, 0, 4223, 4224, + 7, 23, 0, 0, 4224, 4225, 7, 15, 0, 0, 4225, 4226, 7, 12, 0, 0, 4226, 4227, + 7, 17, 0, 0, 4227, 4228, 7, 6, 0, 0, 4228, 4229, 7, 7, 0, 0, 4229, 4230, + 5, 95, 0, 0, 4230, 4231, 7, 23, 0, 0, 4231, 4232, 7, 15, 0, 0, 4232, 4233, + 7, 14, 0, 0, 4233, 4234, 7, 8, 0, 0, 4234, 4235, 7, 19, 0, 0, 4235, 4236, + 7, 11, 0, 0, 4236, 4237, 7, 7, 0, 0, 4237, 4238, 7, 14, 0, 0, 4238, 4239, + 7, 19, 0, 0, 4239, 4240, 7, 12, 0, 0, 4240, 4241, 7, 4, 0, 0, 4241, 492, + 1, 0, 0, 0, 4242, 4243, 7, 20, 0, 0, 4243, 4244, 7, 19, 0, 0, 4244, 4245, + 7, 17, 0, 0, 4245, 4246, 7, 8, 0, 0, 4246, 4247, 5, 95, 0, 0, 4247, 4248, + 7, 23, 0, 0, 4248, 4249, 7, 15, 0, 0, 4249, 4250, 7, 14, 0, 0, 4250, 4251, + 7, 8, 0, 0, 4251, 4252, 7, 19, 0, 0, 4252, 4253, 7, 11, 0, 0, 4253, 4254, + 7, 7, 0, 0, 4254, 4255, 7, 14, 0, 0, 4255, 4256, 7, 19, 0, 0, 4256, 4257, + 7, 12, 0, 0, 4257, 4258, 7, 4, 0, 0, 4258, 494, 1, 0, 0, 0, 4259, 4260, + 7, 4, 0, 0, 4260, 4261, 7, 3, 0, 0, 4261, 4262, 7, 10, 0, 0, 4262, 4263, + 5, 95, 0, 0, 4263, 4264, 7, 23, 0, 0, 4264, 4265, 7, 15, 0, 0, 4265, 4266, + 7, 14, 0, 0, 4266, 4267, 7, 8, 0, 0, 4267, 4268, 7, 19, 0, 0, 4268, 4269, + 7, 11, 0, 0, 4269, 4270, 7, 7, 0, 0, 4270, 4271, 7, 14, 0, 0, 4271, 4272, + 7, 19, 0, 0, 4272, 4273, 7, 12, 0, 0, 4273, 4274, 7, 4, 0, 0, 4274, 496, + 1, 0, 0, 0, 4275, 4276, 7, 27, 0, 0, 4276, 4277, 7, 11, 0, 0, 4277, 4278, + 7, 19, 0, 0, 4278, 4279, 7, 12, 0, 0, 4279, 4280, 5, 95, 0, 0, 4280, 4281, + 7, 3, 0, 0, 4281, 4282, 7, 8, 0, 0, 4282, 4283, 7, 8, 0, 0, 4283, 4284, + 7, 3, 0, 0, 4284, 4285, 7, 10, 0, 0, 4285, 498, 1, 0, 0, 0, 4286, 4287, + 7, 27, 0, 0, 4287, 4288, 7, 11, 0, 0, 4288, 4289, 7, 19, 0, 0, 4289, 4290, + 7, 12, 0, 0, 4290, 4291, 5, 95, 0, 0, 4291, 4292, 7, 3, 0, 0, 4292, 4293, + 7, 8, 0, 0, 4293, 4294, 7, 8, 0, 0, 4294, 4295, 7, 3, 0, 0, 4295, 4296, + 7, 10, 0, 0, 4296, 4297, 7, 3, 0, 0, 4297, 4298, 7, 22, 0, 0, 4298, 4299, + 7, 22, 0, 0, 4299, 500, 1, 0, 0, 0, 4300, 4301, 7, 27, 0, 0, 4301, 4302, + 7, 11, 0, 0, 4302, 4303, 7, 19, 0, 0, 4303, 4304, 7, 12, 0, 0, 4304, 4305, + 5, 95, 0, 0, 4305, 4306, 7, 3, 0, 0, 4306, 4307, 7, 8, 0, 0, 4307, 4308, + 7, 8, 0, 0, 4308, 4309, 7, 3, 0, 0, 4309, 4310, 7, 10, 0, 0, 4310, 4311, + 5, 95, 0, 0, 4311, 4312, 7, 3, 0, 0, 4312, 4313, 7, 25, 0, 0, 4313, 4314, + 7, 25, 0, 0, 4314, 4315, 7, 7, 0, 0, 4315, 4316, 7, 12, 0, 0, 4316, 4317, + 7, 4, 0, 0, 4317, 502, 1, 0, 0, 0, 4318, 4319, 7, 27, 0, 0, 4319, 4320, + 7, 11, 0, 0, 4320, 4321, 7, 19, 0, 0, 4321, 4322, 7, 12, 0, 0, 4322, 4323, + 5, 95, 0, 0, 4323, 4324, 7, 3, 0, 0, 4324, 4325, 7, 8, 0, 0, 4325, 4326, + 7, 8, 0, 0, 4326, 4327, 7, 3, 0, 0, 4327, 4328, 7, 10, 0, 0, 4328, 4329, + 5, 95, 0, 0, 4329, 4330, 7, 15, 0, 0, 4330, 4331, 7, 12, 0, 0, 4331, 4332, + 7, 11, 0, 0, 4332, 4333, 7, 7, 0, 0, 4333, 4334, 7, 8, 0, 0, 4334, 4335, + 7, 6, 0, 0, 4335, 504, 1, 0, 0, 0, 4336, 4337, 7, 27, 0, 0, 4337, 4338, + 7, 11, 0, 0, 4338, 4339, 7, 19, 0, 0, 4339, 4340, 7, 12, 0, 0, 4340, 4341, + 5, 95, 0, 0, 4341, 4342, 7, 14, 0, 0, 4342, 4343, 7, 19, 0, 0, 4343, 4344, + 7, 12, 0, 0, 4344, 4345, 7, 6, 0, 0, 4345, 4346, 7, 3, 0, 0, 4346, 4347, + 7, 15, 0, 0, 4347, 4348, 7, 12, 0, 0, 4348, 4349, 7, 11, 0, 0, 4349, 506, + 1, 0, 0, 0, 4350, 4351, 7, 27, 0, 0, 4351, 4352, 7, 11, 0, 0, 4352, 4353, + 7, 19, 0, 0, 4353, 4354, 7, 12, 0, 0, 4354, 4355, 5, 95, 0, 0, 4355, 4356, + 7, 14, 0, 0, 4356, 4357, 7, 19, 0, 0, 4357, 4358, 7, 12, 0, 0, 4358, 4359, + 7, 6, 0, 0, 4359, 4360, 7, 3, 0, 0, 4360, 4361, 7, 15, 0, 0, 4361, 4362, + 7, 12, 0, 0, 4362, 4363, 7, 11, 0, 0, 4363, 4364, 5, 95, 0, 0, 4364, 4365, + 7, 25, 0, 0, 4365, 4366, 7, 3, 0, 0, 4366, 4367, 7, 6, 0, 0, 4367, 4368, + 7, 20, 0, 0, 4368, 508, 1, 0, 0, 0, 4369, 4370, 7, 27, 0, 0, 4370, 4371, + 7, 11, 0, 0, 4371, 4372, 7, 19, 0, 0, 4372, 4373, 7, 12, 0, 0, 4373, 4374, + 5, 95, 0, 0, 4374, 4375, 7, 4, 0, 0, 4375, 4376, 7, 7, 0, 0, 4376, 4377, + 7, 25, 0, 0, 4377, 4378, 7, 6, 0, 0, 4378, 4379, 7, 20, 0, 0, 4379, 510, + 1, 0, 0, 0, 4380, 4381, 7, 27, 0, 0, 4381, 4382, 7, 11, 0, 0, 4382, 4383, + 7, 19, 0, 0, 4383, 4384, 7, 12, 0, 0, 4384, 4385, 5, 95, 0, 0, 4385, 4386, + 7, 7, 0, 0, 4386, 4387, 7, 26, 0, 0, 4387, 4388, 7, 6, 0, 0, 4388, 4389, + 7, 8, 0, 0, 4389, 4390, 7, 3, 0, 0, 4390, 4391, 7, 14, 0, 0, 4391, 4392, + 7, 6, 0, 0, 4392, 512, 1, 0, 0, 0, 4393, 4394, 7, 27, 0, 0, 4394, 4395, + 7, 11, 0, 0, 4395, 4396, 7, 19, 0, 0, 4396, 4397, 7, 12, 0, 0, 4397, 4398, + 5, 95, 0, 0, 4398, 4399, 7, 15, 0, 0, 4399, 4400, 7, 12, 0, 0, 4400, 4401, + 7, 11, 0, 0, 4401, 4402, 7, 7, 0, 0, 4402, 4403, 7, 8, 0, 0, 4403, 4404, + 7, 6, 0, 0, 4404, 514, 1, 0, 0, 0, 4405, 4406, 7, 27, 0, 0, 4406, 4407, + 7, 11, 0, 0, 4407, 4408, 7, 19, 0, 0, 4408, 4409, 7, 12, 0, 0, 4409, 4410, + 5, 95, 0, 0, 4410, 4411, 7, 21, 0, 0, 4411, 4412, 7, 7, 0, 0, 4412, 4413, + 7, 10, 0, 0, 4413, 4414, 7, 11, 0, 0, 4414, 516, 1, 0, 0, 0, 4415, 4416, + 7, 27, 0, 0, 4416, 4417, 7, 11, 0, 0, 4417, 4418, 7, 19, 0, 0, 4418, 4419, + 7, 12, 0, 0, 4419, 4420, 5, 95, 0, 0, 4420, 4421, 7, 5, 0, 0, 4421, 4422, + 7, 7, 0, 0, 4422, 4423, 7, 12, 0, 0, 4423, 4424, 7, 22, 0, 0, 4424, 4425, + 7, 6, 0, 0, 4425, 4426, 7, 20, 0, 0, 4426, 518, 1, 0, 0, 0, 4427, 4428, + 7, 27, 0, 0, 4428, 4429, 7, 11, 0, 0, 4429, 4430, 7, 19, 0, 0, 4430, 4431, + 7, 12, 0, 0, 4431, 4432, 5, 95, 0, 0, 4432, 4433, 7, 23, 0, 0, 4433, 4434, + 7, 7, 0, 0, 4434, 4435, 7, 8, 0, 0, 4435, 4436, 7, 22, 0, 0, 4436, 4437, + 7, 7, 0, 0, 4437, 520, 1, 0, 0, 0, 4438, 4439, 7, 27, 0, 0, 4439, 4440, + 7, 11, 0, 0, 4440, 4441, 7, 19, 0, 0, 4441, 4442, 7, 12, 0, 0, 4442, 4443, + 5, 95, 0, 0, 4443, 4444, 7, 23, 0, 0, 4444, 4445, 7, 7, 0, 0, 4445, 4446, + 7, 8, 0, 0, 4446, 4447, 7, 22, 0, 0, 4447, 4448, 7, 7, 0, 0, 4448, 4449, + 5, 95, 0, 0, 4449, 4450, 7, 25, 0, 0, 4450, 4451, 7, 3, 0, 0, 4451, 4452, + 7, 6, 0, 0, 4452, 4453, 7, 14, 0, 0, 4453, 4454, 7, 20, 0, 0, 4454, 522, + 1, 0, 0, 0, 4455, 4456, 7, 27, 0, 0, 4456, 4457, 7, 11, 0, 0, 4457, 4458, + 7, 19, 0, 0, 4458, 4459, 7, 12, 0, 0, 4459, 4460, 5, 95, 0, 0, 4460, 4461, + 7, 23, 0, 0, 4461, 4462, 7, 7, 0, 0, 4462, 4463, 7, 8, 0, 0, 4463, 4464, + 7, 22, 0, 0, 4464, 4465, 7, 7, 0, 0, 4465, 4466, 5, 95, 0, 0, 4466, 4467, + 7, 25, 0, 0, 4467, 4468, 7, 8, 0, 0, 4468, 4469, 7, 7, 0, 0, 4469, 4470, + 7, 11, 0, 0, 4470, 4471, 7, 7, 0, 0, 4471, 4472, 7, 8, 0, 0, 4472, 4473, + 7, 24, 0, 0, 4473, 4474, 7, 7, 0, 0, 4474, 524, 1, 0, 0, 0, 4475, 4476, + 7, 27, 0, 0, 4476, 4477, 7, 11, 0, 0, 4477, 4478, 7, 19, 0, 0, 4478, 4479, + 7, 12, 0, 0, 4479, 4480, 5, 95, 0, 0, 4480, 4481, 7, 19, 0, 0, 4481, 4482, + 7, 16, 0, 0, 4482, 4483, 7, 27, 0, 0, 4483, 4484, 7, 7, 0, 0, 4484, 4485, + 7, 14, 0, 0, 4485, 4486, 7, 6, 0, 0, 4486, 526, 1, 0, 0, 0, 4487, 4488, + 7, 27, 0, 0, 4488, 4489, 7, 11, 0, 0, 4489, 4490, 7, 19, 0, 0, 4490, 4491, + 7, 12, 0, 0, 4491, 4492, 5, 95, 0, 0, 4492, 4493, 7, 19, 0, 0, 4493, 4494, + 7, 16, 0, 0, 4494, 4495, 7, 27, 0, 0, 4495, 4496, 7, 7, 0, 0, 4496, 4497, + 7, 14, 0, 0, 4497, 4498, 7, 6, 0, 0, 4498, 4499, 7, 3, 0, 0, 4499, 4500, + 7, 22, 0, 0, 4500, 4501, 7, 22, 0, 0, 4501, 528, 1, 0, 0, 0, 4502, 4503, + 7, 27, 0, 0, 4503, 4504, 7, 11, 0, 0, 4504, 4505, 7, 19, 0, 0, 4505, 4506, + 7, 12, 0, 0, 4506, 4507, 5, 95, 0, 0, 4507, 4508, 7, 19, 0, 0, 4508, 4509, + 7, 24, 0, 0, 4509, 4510, 7, 7, 0, 0, 4510, 4511, 7, 8, 0, 0, 4511, 4512, + 7, 5, 0, 0, 4512, 4513, 7, 3, 0, 0, 4513, 4514, 7, 25, 0, 0, 4514, 4515, + 7, 11, 0, 0, 4515, 530, 1, 0, 0, 0, 4516, 4517, 7, 27, 0, 0, 4517, 4518, + 7, 11, 0, 0, 4518, 4519, 7, 19, 0, 0, 4519, 4520, 7, 12, 0, 0, 4520, 4521, + 5, 95, 0, 0, 4521, 4522, 7, 25, 0, 0, 4522, 4523, 7, 8, 0, 0, 4523, 4524, + 7, 7, 0, 0, 4524, 4525, 7, 6, 0, 0, 4525, 4526, 7, 6, 0, 0, 4526, 4527, + 7, 10, 0, 0, 4527, 532, 1, 0, 0, 0, 4528, 4529, 7, 27, 0, 0, 4529, 4530, + 7, 11, 0, 0, 4530, 4531, 7, 19, 0, 0, 4531, 4532, 7, 12, 0, 0, 4532, 4533, + 5, 95, 0, 0, 4533, 4534, 7, 28, 0, 0, 4534, 4535, 7, 17, 0, 0, 4535, 4536, + 7, 19, 0, 0, 4536, 4537, 7, 6, 0, 0, 4537, 4538, 7, 7, 0, 0, 4538, 534, + 1, 0, 0, 0, 4539, 4540, 7, 27, 0, 0, 4540, 4541, 7, 11, 0, 0, 4541, 4542, + 7, 19, 0, 0, 4542, 4543, 7, 12, 0, 0, 4543, 4544, 5, 95, 0, 0, 4544, 4545, + 7, 8, 0, 0, 4545, 4546, 7, 7, 0, 0, 4546, 4547, 7, 23, 0, 0, 4547, 4548, + 7, 19, 0, 0, 4548, 4549, 7, 24, 0, 0, 4549, 4550, 7, 7, 0, 0, 4550, 536, + 1, 0, 0, 0, 4551, 4552, 7, 27, 0, 0, 4552, 4553, 7, 11, 0, 0, 4553, 4554, + 7, 19, 0, 0, 4554, 4555, 7, 12, 0, 0, 4555, 4556, 5, 95, 0, 0, 4556, 4557, + 7, 8, 0, 0, 4557, 4558, 7, 7, 0, 0, 4558, 4559, 7, 25, 0, 0, 4559, 4560, + 7, 5, 0, 0, 4560, 4561, 7, 3, 0, 0, 4561, 4562, 7, 14, 0, 0, 4562, 4563, + 7, 7, 0, 0, 4563, 538, 1, 0, 0, 0, 4564, 4565, 7, 27, 0, 0, 4565, 4566, + 7, 11, 0, 0, 4566, 4567, 7, 19, 0, 0, 4567, 4568, 7, 12, 0, 0, 4568, 4569, + 5, 95, 0, 0, 4569, 4570, 7, 11, 0, 0, 4570, 4571, 7, 14, 0, 0, 4571, 4572, + 7, 20, 0, 0, 4572, 4573, 7, 7, 0, 0, 4573, 4574, 7, 23, 0, 0, 4574, 4575, + 7, 3, 0, 0, 4575, 4576, 5, 95, 0, 0, 4576, 4577, 7, 24, 0, 0, 4577, 4578, + 7, 3, 0, 0, 4578, 4579, 7, 5, 0, 0, 4579, 4580, 7, 15, 0, 0, 4580, 4581, + 7, 4, 0, 0, 4581, 540, 1, 0, 0, 0, 4582, 4583, 7, 27, 0, 0, 4583, 4584, + 7, 11, 0, 0, 4584, 4585, 7, 19, 0, 0, 4585, 4586, 7, 12, 0, 0, 4586, 4587, + 5, 95, 0, 0, 4587, 4588, 7, 11, 0, 0, 4588, 4589, 7, 14, 0, 0, 4589, 4590, + 7, 20, 0, 0, 4590, 4591, 7, 7, 0, 0, 4591, 4592, 7, 23, 0, 0, 4592, 4593, + 7, 3, 0, 0, 4593, 4594, 5, 95, 0, 0, 4594, 4595, 7, 24, 0, 0, 4595, 4596, + 7, 3, 0, 0, 4596, 4597, 7, 5, 0, 0, 4597, 4598, 7, 15, 0, 0, 4598, 4599, + 7, 4, 0, 0, 4599, 4600, 7, 3, 0, 0, 4600, 4601, 7, 6, 0, 0, 4601, 4602, + 7, 15, 0, 0, 4602, 4603, 7, 19, 0, 0, 4603, 4604, 7, 12, 0, 0, 4604, 4605, + 5, 95, 0, 0, 4605, 4606, 7, 8, 0, 0, 4606, 4607, 7, 7, 0, 0, 4607, 4608, + 7, 25, 0, 0, 4608, 4609, 7, 19, 0, 0, 4609, 4610, 7, 8, 0, 0, 4610, 4611, + 7, 6, 0, 0, 4611, 542, 1, 0, 0, 0, 4612, 4613, 7, 27, 0, 0, 4613, 4614, + 7, 11, 0, 0, 4614, 4615, 7, 19, 0, 0, 4615, 4616, 7, 12, 0, 0, 4616, 4617, + 5, 95, 0, 0, 4617, 4618, 7, 11, 0, 0, 4618, 4619, 7, 7, 0, 0, 4619, 4620, + 7, 3, 0, 0, 4620, 4621, 7, 8, 0, 0, 4621, 4622, 7, 14, 0, 0, 4622, 4623, + 7, 20, 0, 0, 4623, 544, 1, 0, 0, 0, 4624, 4625, 7, 27, 0, 0, 4625, 4626, + 7, 11, 0, 0, 4626, 4627, 7, 19, 0, 0, 4627, 4628, 7, 12, 0, 0, 4628, 4629, + 5, 95, 0, 0, 4629, 4630, 7, 11, 0, 0, 4630, 4631, 7, 7, 0, 0, 4631, 4632, + 7, 6, 0, 0, 4632, 546, 1, 0, 0, 0, 4633, 4634, 7, 27, 0, 0, 4634, 4635, + 7, 11, 0, 0, 4635, 4636, 7, 19, 0, 0, 4636, 4637, 7, 12, 0, 0, 4637, 4638, + 5, 95, 0, 0, 4638, 4639, 7, 11, 0, 0, 4639, 4640, 7, 6, 0, 0, 4640, 4641, + 7, 19, 0, 0, 4641, 4642, 7, 8, 0, 0, 4642, 4643, 7, 3, 0, 0, 4643, 4644, + 7, 22, 0, 0, 4644, 4645, 7, 7, 0, 0, 4645, 4646, 5, 95, 0, 0, 4646, 4647, + 7, 18, 0, 0, 4647, 4648, 7, 8, 0, 0, 4648, 4649, 7, 7, 0, 0, 4649, 4650, + 7, 7, 0, 0, 4650, 548, 1, 0, 0, 0, 4651, 4652, 7, 27, 0, 0, 4652, 4653, + 7, 11, 0, 0, 4653, 4654, 7, 19, 0, 0, 4654, 4655, 7, 12, 0, 0, 4655, 4656, + 5, 95, 0, 0, 4656, 4657, 7, 11, 0, 0, 4657, 4658, 7, 6, 0, 0, 4658, 4659, + 7, 19, 0, 0, 4659, 4660, 7, 8, 0, 0, 4660, 4661, 7, 3, 0, 0, 4661, 4662, + 7, 22, 0, 0, 4662, 4663, 7, 7, 0, 0, 4663, 4664, 5, 95, 0, 0, 4664, 4665, + 7, 11, 0, 0, 4665, 4666, 7, 15, 0, 0, 4666, 4667, 7, 13, 0, 0, 4667, 4668, + 7, 7, 0, 0, 4668, 550, 1, 0, 0, 0, 4669, 4670, 7, 27, 0, 0, 4670, 4671, + 7, 11, 0, 0, 4671, 4672, 7, 19, 0, 0, 4672, 4673, 7, 12, 0, 0, 4673, 4674, + 5, 95, 0, 0, 4674, 4675, 7, 6, 0, 0, 4675, 4676, 7, 3, 0, 0, 4676, 4677, + 7, 16, 0, 0, 4677, 4678, 7, 5, 0, 0, 4678, 4679, 7, 7, 0, 0, 4679, 552, + 1, 0, 0, 0, 4680, 4681, 7, 27, 0, 0, 4681, 4682, 7, 11, 0, 0, 4682, 4683, + 7, 19, 0, 0, 4683, 4684, 7, 12, 0, 0, 4684, 4685, 5, 95, 0, 0, 4685, 4686, + 7, 6, 0, 0, 4686, 4687, 7, 10, 0, 0, 4687, 4688, 7, 25, 0, 0, 4688, 4689, + 7, 7, 0, 0, 4689, 554, 1, 0, 0, 0, 4690, 4691, 7, 27, 0, 0, 4691, 4692, + 7, 11, 0, 0, 4692, 4693, 7, 19, 0, 0, 4693, 4694, 7, 12, 0, 0, 4694, 4695, + 5, 95, 0, 0, 4695, 4696, 7, 17, 0, 0, 4696, 4697, 7, 12, 0, 0, 4697, 4698, + 7, 28, 0, 0, 4698, 4699, 7, 17, 0, 0, 4699, 4700, 7, 19, 0, 0, 4700, 4701, + 7, 6, 0, 0, 4701, 4702, 7, 7, 0, 0, 4702, 556, 1, 0, 0, 0, 4703, 4704, + 7, 27, 0, 0, 4704, 4705, 7, 11, 0, 0, 4705, 4706, 7, 19, 0, 0, 4706, 4707, + 7, 12, 0, 0, 4707, 4708, 5, 95, 0, 0, 4708, 4709, 7, 24, 0, 0, 4709, 4710, + 7, 3, 0, 0, 4710, 4711, 7, 5, 0, 0, 4711, 4712, 7, 15, 0, 0, 4712, 4713, + 7, 4, 0, 0, 4713, 558, 1, 0, 0, 0, 4714, 4715, 7, 27, 0, 0, 4715, 4716, + 7, 11, 0, 0, 4716, 4717, 7, 19, 0, 0, 4717, 4718, 7, 12, 0, 0, 4718, 4719, + 5, 95, 0, 0, 4719, 4720, 7, 24, 0, 0, 4720, 4721, 7, 3, 0, 0, 4721, 4722, + 7, 5, 0, 0, 4722, 4723, 7, 17, 0, 0, 4723, 4724, 7, 7, 0, 0, 4724, 560, + 1, 0, 0, 0, 4725, 4726, 7, 12, 0, 0, 4726, 4727, 7, 7, 0, 0, 4727, 4728, + 7, 11, 0, 0, 4728, 4729, 7, 6, 0, 0, 4729, 4730, 7, 7, 0, 0, 4730, 4731, + 7, 4, 0, 0, 4731, 562, 1, 0, 0, 0, 4732, 4733, 7, 19, 0, 0, 4733, 4734, + 7, 8, 0, 0, 4734, 4735, 7, 4, 0, 0, 4735, 4736, 7, 15, 0, 0, 4736, 4737, + 7, 12, 0, 0, 4737, 4738, 7, 3, 0, 0, 4738, 4739, 7, 5, 0, 0, 4739, 4740, + 7, 15, 0, 0, 4740, 4741, 7, 6, 0, 0, 4741, 4742, 7, 10, 0, 0, 4742, 564, + 1, 0, 0, 0, 4743, 4744, 7, 25, 0, 0, 4744, 4745, 7, 3, 0, 0, 4745, 4746, + 7, 6, 0, 0, 4746, 4747, 7, 20, 0, 0, 4747, 566, 1, 0, 0, 0, 4748, 4749, + 7, 3, 0, 0, 4749, 4750, 7, 24, 0, 0, 4750, 4751, 7, 22, 0, 0, 4751, 568, + 1, 0, 0, 0, 4752, 4753, 7, 16, 0, 0, 4753, 4754, 7, 15, 0, 0, 4754, 4755, + 7, 6, 0, 0, 4755, 4756, 5, 95, 0, 0, 4756, 4757, 7, 3, 0, 0, 4757, 4758, + 7, 12, 0, 0, 4758, 4759, 7, 4, 0, 0, 4759, 570, 1, 0, 0, 0, 4760, 4761, + 7, 16, 0, 0, 4761, 4762, 7, 15, 0, 0, 4762, 4763, 7, 6, 0, 0, 4763, 4764, + 5, 95, 0, 0, 4764, 4765, 7, 19, 0, 0, 4765, 4766, 7, 8, 0, 0, 4766, 572, + 1, 0, 0, 0, 4767, 4768, 7, 16, 0, 0, 4768, 4769, 7, 15, 0, 0, 4769, 4770, + 7, 6, 0, 0, 4770, 4771, 5, 95, 0, 0, 4771, 4772, 7, 26, 0, 0, 4772, 4773, + 7, 19, 0, 0, 4773, 4774, 7, 8, 0, 0, 4774, 574, 1, 0, 0, 0, 4775, 4776, + 7, 14, 0, 0, 4776, 4777, 7, 19, 0, 0, 4777, 4778, 7, 17, 0, 0, 4778, 4779, + 7, 12, 0, 0, 4779, 4780, 7, 6, 0, 0, 4780, 576, 1, 0, 0, 0, 4781, 4782, + 7, 14, 0, 0, 4782, 4783, 7, 17, 0, 0, 4783, 4784, 7, 23, 0, 0, 4784, 4785, + 7, 7, 0, 0, 4785, 4786, 5, 95, 0, 0, 4786, 4787, 7, 4, 0, 0, 4787, 4788, + 7, 15, 0, 0, 4788, 4789, 7, 11, 0, 0, 4789, 4790, 7, 6, 0, 0, 4790, 578, + 1, 0, 0, 0, 4791, 4792, 7, 4, 0, 0, 4792, 4793, 7, 7, 0, 0, 4793, 4794, + 7, 12, 0, 0, 4794, 4795, 7, 11, 0, 0, 4795, 4796, 7, 7, 0, 0, 4796, 4797, + 5, 95, 0, 0, 4797, 4798, 7, 8, 0, 0, 4798, 4799, 7, 3, 0, 0, 4799, 4800, + 7, 12, 0, 0, 4800, 4801, 7, 21, 0, 0, 4801, 580, 1, 0, 0, 0, 4802, 4803, + 7, 18, 0, 0, 4803, 4804, 7, 15, 0, 0, 4804, 4805, 7, 8, 0, 0, 4805, 4806, + 7, 11, 0, 0, 4806, 4807, 7, 6, 0, 0, 4807, 4808, 5, 95, 0, 0, 4808, 4809, + 7, 24, 0, 0, 4809, 4810, 7, 3, 0, 0, 4810, 4811, 7, 5, 0, 0, 4811, 4812, + 7, 17, 0, 0, 4812, 4813, 7, 7, 0, 0, 4813, 582, 1, 0, 0, 0, 4814, 4815, + 7, 22, 0, 0, 4815, 4816, 7, 8, 0, 0, 4816, 4817, 7, 19, 0, 0, 4817, 4818, + 7, 17, 0, 0, 4818, 4819, 7, 25, 0, 0, 4819, 4820, 5, 95, 0, 0, 4820, 4821, + 7, 14, 0, 0, 4821, 4822, 7, 19, 0, 0, 4822, 4823, 7, 12, 0, 0, 4823, 4824, + 7, 14, 0, 0, 4824, 4825, 7, 3, 0, 0, 4825, 4826, 7, 6, 0, 0, 4826, 584, + 1, 0, 0, 0, 4827, 4828, 7, 5, 0, 0, 4828, 4829, 7, 3, 0, 0, 4829, 4830, + 7, 22, 0, 0, 4830, 586, 1, 0, 0, 0, 4831, 4832, 7, 5, 0, 0, 4832, 4833, + 7, 3, 0, 0, 4833, 4834, 7, 11, 0, 0, 4834, 4835, 7, 6, 0, 0, 4835, 4836, + 5, 95, 0, 0, 4836, 4837, 7, 24, 0, 0, 4837, 4838, 7, 3, 0, 0, 4838, 4839, + 7, 5, 0, 0, 4839, 4840, 7, 17, 0, 0, 4840, 4841, 7, 7, 0, 0, 4841, 588, + 1, 0, 0, 0, 4842, 4843, 7, 5, 0, 0, 4843, 4844, 7, 7, 0, 0, 4844, 4845, + 7, 3, 0, 0, 4845, 4846, 7, 4, 0, 0, 4846, 590, 1, 0, 0, 0, 4847, 4848, + 7, 23, 0, 0, 4848, 4849, 7, 3, 0, 0, 4849, 4850, 7, 26, 0, 0, 4850, 592, + 1, 0, 0, 0, 4851, 4852, 7, 23, 0, 0, 4852, 4853, 7, 15, 0, 0, 4853, 4854, + 7, 12, 0, 0, 4854, 594, 1, 0, 0, 0, 4855, 4856, 7, 12, 0, 0, 4856, 4857, + 7, 6, 0, 0, 4857, 4858, 7, 15, 0, 0, 4858, 4859, 7, 5, 0, 0, 4859, 4860, + 7, 7, 0, 0, 4860, 596, 1, 0, 0, 0, 4861, 4862, 7, 12, 0, 0, 4862, 4863, + 7, 6, 0, 0, 4863, 4864, 7, 20, 0, 0, 4864, 4865, 5, 95, 0, 0, 4865, 4866, + 7, 24, 0, 0, 4866, 4867, 7, 3, 0, 0, 4867, 4868, 7, 5, 0, 0, 4868, 4869, + 7, 17, 0, 0, 4869, 4870, 7, 7, 0, 0, 4870, 598, 1, 0, 0, 0, 4871, 4872, + 7, 25, 0, 0, 4872, 4873, 7, 7, 0, 0, 4873, 4874, 7, 8, 0, 0, 4874, 4875, + 7, 14, 0, 0, 4875, 4876, 7, 7, 0, 0, 4876, 4877, 7, 12, 0, 0, 4877, 4878, + 7, 6, 0, 0, 4878, 4879, 5, 95, 0, 0, 4879, 4880, 7, 8, 0, 0, 4880, 4881, + 7, 3, 0, 0, 4881, 4882, 7, 12, 0, 0, 4882, 4883, 7, 21, 0, 0, 4883, 600, + 1, 0, 0, 0, 4884, 4885, 7, 8, 0, 0, 4885, 4886, 7, 3, 0, 0, 4886, 4887, + 7, 12, 0, 0, 4887, 4888, 7, 21, 0, 0, 4888, 602, 1, 0, 0, 0, 4889, 4890, + 7, 8, 0, 0, 4890, 4891, 7, 19, 0, 0, 4891, 4892, 7, 9, 0, 0, 4892, 4893, + 5, 95, 0, 0, 4893, 4894, 7, 12, 0, 0, 4894, 4895, 7, 17, 0, 0, 4895, 4896, + 7, 23, 0, 0, 4896, 4897, 7, 16, 0, 0, 4897, 4898, 7, 7, 0, 0, 4898, 4899, + 7, 8, 0, 0, 4899, 604, 1, 0, 0, 0, 4900, 4901, 7, 11, 0, 0, 4901, 4902, + 7, 6, 0, 0, 4902, 4903, 7, 4, 0, 0, 4903, 606, 1, 0, 0, 0, 4904, 4905, + 7, 11, 0, 0, 4905, 4906, 7, 6, 0, 0, 4906, 4907, 7, 4, 0, 0, 4907, 4908, + 7, 4, 0, 0, 4908, 4909, 7, 7, 0, 0, 4909, 4910, 7, 24, 0, 0, 4910, 608, + 1, 0, 0, 0, 4911, 4912, 7, 11, 0, 0, 4912, 4913, 7, 6, 0, 0, 4913, 4914, + 7, 4, 0, 0, 4914, 4915, 7, 4, 0, 0, 4915, 4916, 7, 7, 0, 0, 4916, 4917, + 7, 24, 0, 0, 4917, 4918, 5, 95, 0, 0, 4918, 4919, 7, 25, 0, 0, 4919, 4920, + 7, 19, 0, 0, 4920, 4921, 7, 25, 0, 0, 4921, 610, 1, 0, 0, 0, 4922, 4923, + 7, 11, 0, 0, 4923, 4924, 7, 6, 0, 0, 4924, 4925, 7, 4, 0, 0, 4925, 4926, + 7, 4, 0, 0, 4926, 4927, 7, 7, 0, 0, 4927, 4928, 7, 24, 0, 0, 4928, 4929, + 5, 95, 0, 0, 4929, 4930, 7, 11, 0, 0, 4930, 4931, 7, 3, 0, 0, 4931, 4932, + 7, 23, 0, 0, 4932, 4933, 7, 25, 0, 0, 4933, 612, 1, 0, 0, 0, 4934, 4935, + 7, 11, 0, 0, 4935, 4936, 7, 17, 0, 0, 4936, 4937, 7, 23, 0, 0, 4937, 614, + 1, 0, 0, 0, 4938, 4939, 7, 24, 0, 0, 4939, 4940, 7, 3, 0, 0, 4940, 4941, + 7, 8, 0, 0, 4941, 4942, 5, 95, 0, 0, 4942, 4943, 7, 25, 0, 0, 4943, 4944, + 7, 19, 0, 0, 4944, 4945, 7, 25, 0, 0, 4945, 616, 1, 0, 0, 0, 4946, 4947, + 7, 24, 0, 0, 4947, 4948, 7, 3, 0, 0, 4948, 4949, 7, 8, 0, 0, 4949, 4950, + 5, 95, 0, 0, 4950, 4951, 7, 11, 0, 0, 4951, 4952, 7, 3, 0, 0, 4952, 4953, + 7, 23, 0, 0, 4953, 4954, 7, 25, 0, 0, 4954, 618, 1, 0, 0, 0, 4955, 4956, + 7, 24, 0, 0, 4956, 4957, 7, 3, 0, 0, 4957, 4958, 7, 8, 0, 0, 4958, 4959, + 7, 15, 0, 0, 4959, 4960, 7, 3, 0, 0, 4960, 4961, 7, 12, 0, 0, 4961, 4962, + 7, 14, 0, 0, 4962, 4963, 7, 7, 0, 0, 4963, 620, 1, 0, 0, 0, 4964, 4965, + 7, 14, 0, 0, 4965, 4966, 7, 17, 0, 0, 4966, 4967, 7, 8, 0, 0, 4967, 4968, + 7, 8, 0, 0, 4968, 4969, 7, 7, 0, 0, 4969, 4970, 7, 12, 0, 0, 4970, 4971, + 7, 6, 0, 0, 4971, 4972, 5, 95, 0, 0, 4972, 4973, 7, 4, 0, 0, 4973, 4974, + 7, 3, 0, 0, 4974, 4975, 7, 6, 0, 0, 4975, 4976, 7, 7, 0, 0, 4976, 622, + 1, 0, 0, 0, 4977, 4978, 7, 14, 0, 0, 4978, 4979, 7, 17, 0, 0, 4979, 4980, + 7, 8, 0, 0, 4980, 4981, 7, 8, 0, 0, 4981, 4982, 7, 7, 0, 0, 4982, 4983, + 7, 12, 0, 0, 4983, 4984, 7, 6, 0, 0, 4984, 4985, 5, 95, 0, 0, 4985, 4986, + 7, 6, 0, 0, 4986, 4987, 7, 15, 0, 0, 4987, 4988, 7, 23, 0, 0, 4988, 4989, + 7, 7, 0, 0, 4989, 624, 1, 0, 0, 0, 4990, 4991, 7, 14, 0, 0, 4991, 4992, + 7, 17, 0, 0, 4992, 4993, 7, 8, 0, 0, 4993, 4994, 7, 8, 0, 0, 4994, 4995, + 7, 7, 0, 0, 4995, 4996, 7, 12, 0, 0, 4996, 4997, 7, 6, 0, 0, 4997, 4998, + 5, 95, 0, 0, 4998, 4999, 7, 6, 0, 0, 4999, 5000, 7, 15, 0, 0, 5000, 5001, + 7, 23, 0, 0, 5001, 5002, 7, 7, 0, 0, 5002, 5003, 7, 11, 0, 0, 5003, 5004, + 7, 6, 0, 0, 5004, 5005, 7, 3, 0, 0, 5005, 5006, 7, 23, 0, 0, 5006, 5007, + 7, 25, 0, 0, 5007, 626, 1, 0, 0, 0, 5008, 5009, 7, 5, 0, 0, 5009, 5010, + 7, 19, 0, 0, 5010, 5011, 7, 14, 0, 0, 5011, 5012, 7, 3, 0, 0, 5012, 5013, + 7, 5, 0, 0, 5013, 5014, 7, 6, 0, 0, 5014, 5015, 7, 15, 0, 0, 5015, 5016, + 7, 23, 0, 0, 5016, 5017, 7, 7, 0, 0, 5017, 628, 1, 0, 0, 0, 5018, 5019, + 7, 14, 0, 0, 5019, 5020, 7, 17, 0, 0, 5020, 5021, 7, 8, 0, 0, 5021, 5022, + 7, 4, 0, 0, 5022, 5023, 7, 3, 0, 0, 5023, 5024, 7, 6, 0, 0, 5024, 5025, + 7, 7, 0, 0, 5025, 630, 1, 0, 0, 0, 5026, 5027, 7, 14, 0, 0, 5027, 5028, + 7, 17, 0, 0, 5028, 5029, 7, 8, 0, 0, 5029, 5030, 7, 6, 0, 0, 5030, 5031, + 7, 15, 0, 0, 5031, 5032, 7, 23, 0, 0, 5032, 5033, 7, 7, 0, 0, 5033, 632, + 1, 0, 0, 0, 5034, 5035, 7, 4, 0, 0, 5035, 5036, 7, 3, 0, 0, 5036, 5037, + 7, 6, 0, 0, 5037, 5038, 7, 7, 0, 0, 5038, 5039, 5, 95, 0, 0, 5039, 5040, + 7, 3, 0, 0, 5040, 5041, 7, 4, 0, 0, 5041, 5042, 7, 4, 0, 0, 5042, 634, + 1, 0, 0, 0, 5043, 5044, 7, 4, 0, 0, 5044, 5045, 7, 3, 0, 0, 5045, 5046, + 7, 6, 0, 0, 5046, 5047, 7, 7, 0, 0, 5047, 5048, 5, 95, 0, 0, 5048, 5049, + 7, 11, 0, 0, 5049, 5050, 7, 17, 0, 0, 5050, 5051, 7, 16, 0, 0, 5051, 636, + 1, 0, 0, 0, 5052, 5053, 7, 7, 0, 0, 5053, 5054, 7, 26, 0, 0, 5054, 5055, + 7, 6, 0, 0, 5055, 5056, 7, 8, 0, 0, 5056, 5057, 7, 3, 0, 0, 5057, 5058, + 7, 14, 0, 0, 5058, 5059, 7, 6, 0, 0, 5059, 638, 1, 0, 0, 0, 5060, 5061, + 7, 5, 0, 0, 5061, 5062, 7, 19, 0, 0, 5062, 5063, 7, 14, 0, 0, 5063, 5064, + 7, 3, 0, 0, 5064, 5065, 7, 5, 0, 0, 5065, 5066, 7, 6, 0, 0, 5066, 5067, + 7, 15, 0, 0, 5067, 5068, 7, 23, 0, 0, 5068, 5069, 7, 7, 0, 0, 5069, 5070, + 7, 11, 0, 0, 5070, 5071, 7, 6, 0, 0, 5071, 5072, 7, 3, 0, 0, 5072, 5073, + 7, 23, 0, 0, 5073, 5074, 7, 25, 0, 0, 5074, 640, 1, 0, 0, 0, 5075, 5076, + 7, 12, 0, 0, 5076, 5077, 7, 19, 0, 0, 5077, 5078, 7, 9, 0, 0, 5078, 642, + 1, 0, 0, 0, 5079, 5080, 7, 25, 0, 0, 5080, 5081, 7, 19, 0, 0, 5081, 5082, + 7, 11, 0, 0, 5082, 5083, 7, 15, 0, 0, 5083, 5084, 7, 6, 0, 0, 5084, 5085, + 7, 15, 0, 0, 5085, 5086, 7, 19, 0, 0, 5086, 5087, 7, 12, 0, 0, 5087, 644, + 1, 0, 0, 0, 5088, 5089, 7, 11, 0, 0, 5089, 5090, 7, 17, 0, 0, 5090, 5091, + 7, 16, 0, 0, 5091, 5092, 7, 11, 0, 0, 5092, 5093, 7, 6, 0, 0, 5093, 5094, + 7, 8, 0, 0, 5094, 646, 1, 0, 0, 0, 5095, 5096, 7, 11, 0, 0, 5096, 5097, + 7, 17, 0, 0, 5097, 5098, 7, 16, 0, 0, 5098, 5099, 7, 11, 0, 0, 5099, 5100, + 7, 6, 0, 0, 5100, 5101, 7, 8, 0, 0, 5101, 5102, 7, 15, 0, 0, 5102, 5103, + 7, 12, 0, 0, 5103, 5104, 7, 22, 0, 0, 5104, 648, 1, 0, 0, 0, 5105, 5106, + 7, 11, 0, 0, 5106, 5107, 7, 10, 0, 0, 5107, 5108, 7, 11, 0, 0, 5108, 5109, + 7, 4, 0, 0, 5109, 5110, 7, 3, 0, 0, 5110, 5111, 7, 6, 0, 0, 5111, 5112, + 7, 7, 0, 0, 5112, 650, 1, 0, 0, 0, 5113, 5114, 7, 6, 0, 0, 5114, 5115, + 7, 8, 0, 0, 5115, 5116, 7, 15, 0, 0, 5116, 5117, 7, 23, 0, 0, 5117, 652, + 1, 0, 0, 0, 5118, 5119, 7, 17, 0, 0, 5119, 5120, 7, 6, 0, 0, 5120, 5121, + 7, 14, 0, 0, 5121, 5122, 5, 95, 0, 0, 5122, 5123, 7, 4, 0, 0, 5123, 5124, + 7, 3, 0, 0, 5124, 5125, 7, 6, 0, 0, 5125, 5126, 7, 7, 0, 0, 5126, 654, + 1, 0, 0, 0, 5127, 5128, 7, 17, 0, 0, 5128, 5129, 7, 6, 0, 0, 5129, 5130, + 7, 14, 0, 0, 5130, 5131, 5, 95, 0, 0, 5131, 5132, 7, 6, 0, 0, 5132, 5133, + 7, 15, 0, 0, 5133, 5134, 7, 23, 0, 0, 5134, 5135, 7, 7, 0, 0, 5135, 656, + 1, 0, 0, 0, 5136, 5137, 7, 17, 0, 0, 5137, 5138, 7, 6, 0, 0, 5138, 5139, + 7, 14, 0, 0, 5139, 5140, 5, 95, 0, 0, 5140, 5141, 7, 6, 0, 0, 5141, 5142, + 7, 15, 0, 0, 5142, 5143, 7, 23, 0, 0, 5143, 5144, 7, 7, 0, 0, 5144, 5145, + 7, 11, 0, 0, 5145, 5146, 7, 6, 0, 0, 5146, 5147, 7, 3, 0, 0, 5147, 5148, + 7, 23, 0, 0, 5148, 5149, 7, 25, 0, 0, 5149, 658, 1, 0, 0, 0, 5150, 5151, + 7, 3, 0, 0, 5151, 5152, 7, 14, 0, 0, 5152, 5153, 7, 14, 0, 0, 5153, 5154, + 7, 19, 0, 0, 5154, 5155, 7, 17, 0, 0, 5155, 5156, 7, 12, 0, 0, 5156, 5157, + 7, 6, 0, 0, 5157, 660, 1, 0, 0, 0, 5158, 5159, 7, 3, 0, 0, 5159, 5160, + 7, 14, 0, 0, 5160, 5161, 7, 6, 0, 0, 5161, 5162, 7, 15, 0, 0, 5162, 5163, + 7, 19, 0, 0, 5163, 5164, 7, 12, 0, 0, 5164, 662, 1, 0, 0, 0, 5165, 5166, + 7, 3, 0, 0, 5166, 5167, 7, 18, 0, 0, 5167, 5168, 7, 6, 0, 0, 5168, 5169, + 7, 7, 0, 0, 5169, 5170, 7, 8, 0, 0, 5170, 664, 1, 0, 0, 0, 5171, 5172, + 7, 3, 0, 0, 5172, 5173, 7, 22, 0, 0, 5173, 5174, 7, 22, 0, 0, 5174, 5175, + 7, 8, 0, 0, 5175, 5176, 7, 7, 0, 0, 5176, 5177, 7, 22, 0, 0, 5177, 5178, + 7, 3, 0, 0, 5178, 5179, 7, 6, 0, 0, 5179, 5180, 7, 7, 0, 0, 5180, 666, + 1, 0, 0, 0, 5181, 5182, 7, 3, 0, 0, 5182, 5183, 7, 5, 0, 0, 5183, 5184, + 7, 22, 0, 0, 5184, 5185, 7, 19, 0, 0, 5185, 5186, 7, 8, 0, 0, 5186, 5187, + 7, 15, 0, 0, 5187, 5188, 7, 6, 0, 0, 5188, 5189, 7, 20, 0, 0, 5189, 5190, + 7, 23, 0, 0, 5190, 668, 1, 0, 0, 0, 5191, 5192, 7, 3, 0, 0, 5192, 5193, + 7, 12, 0, 0, 5193, 5194, 7, 10, 0, 0, 5194, 670, 1, 0, 0, 0, 5195, 5196, + 7, 3, 0, 0, 5196, 5197, 7, 6, 0, 0, 5197, 672, 1, 0, 0, 0, 5198, 5199, + 7, 3, 0, 0, 5199, 5200, 7, 17, 0, 0, 5200, 5201, 7, 6, 0, 0, 5201, 5202, + 7, 20, 0, 0, 5202, 5203, 7, 19, 0, 0, 5203, 5204, 7, 8, 0, 0, 5204, 5205, + 7, 11, 0, 0, 5205, 674, 1, 0, 0, 0, 5206, 5207, 7, 3, 0, 0, 5207, 5208, + 7, 17, 0, 0, 5208, 5209, 7, 6, 0, 0, 5209, 5210, 7, 19, 0, 0, 5210, 5211, + 7, 14, 0, 0, 5211, 5212, 7, 19, 0, 0, 5212, 5213, 7, 23, 0, 0, 5213, 5214, + 7, 23, 0, 0, 5214, 5215, 7, 15, 0, 0, 5215, 5216, 7, 6, 0, 0, 5216, 676, + 1, 0, 0, 0, 5217, 5218, 7, 3, 0, 0, 5218, 5219, 7, 17, 0, 0, 5219, 5220, + 7, 6, 0, 0, 5220, 5221, 7, 19, 0, 0, 5221, 5222, 7, 7, 0, 0, 5222, 5223, + 7, 26, 0, 0, 5223, 5224, 7, 6, 0, 0, 5224, 5225, 7, 7, 0, 0, 5225, 5226, + 7, 12, 0, 0, 5226, 5227, 7, 4, 0, 0, 5227, 5228, 5, 95, 0, 0, 5228, 5229, + 7, 11, 0, 0, 5229, 5230, 7, 15, 0, 0, 5230, 5231, 7, 13, 0, 0, 5231, 5232, + 7, 7, 0, 0, 5232, 678, 1, 0, 0, 0, 5233, 5234, 7, 3, 0, 0, 5234, 5235, + 7, 17, 0, 0, 5235, 5236, 7, 6, 0, 0, 5236, 5237, 7, 19, 0, 0, 5237, 5238, + 5, 95, 0, 0, 5238, 5239, 7, 15, 0, 0, 5239, 5240, 7, 12, 0, 0, 5240, 5241, + 7, 14, 0, 0, 5241, 5242, 7, 8, 0, 0, 5242, 5243, 7, 7, 0, 0, 5243, 5244, + 7, 23, 0, 0, 5244, 5245, 7, 7, 0, 0, 5245, 5246, 7, 12, 0, 0, 5246, 5247, + 7, 6, 0, 0, 5247, 680, 1, 0, 0, 0, 5248, 5249, 7, 3, 0, 0, 5249, 5250, + 7, 24, 0, 0, 5250, 5251, 7, 22, 0, 0, 5251, 5252, 5, 95, 0, 0, 5252, 5253, + 7, 8, 0, 0, 5253, 5254, 7, 19, 0, 0, 5254, 5255, 7, 9, 0, 0, 5255, 5256, + 5, 95, 0, 0, 5256, 5257, 7, 5, 0, 0, 5257, 5258, 7, 7, 0, 0, 5258, 5259, + 7, 12, 0, 0, 5259, 5260, 7, 22, 0, 0, 5260, 5261, 7, 6, 0, 0, 5261, 5262, + 7, 20, 0, 0, 5262, 682, 1, 0, 0, 0, 5263, 5264, 7, 16, 0, 0, 5264, 5265, + 7, 7, 0, 0, 5265, 5266, 7, 22, 0, 0, 5266, 5267, 7, 15, 0, 0, 5267, 5268, + 7, 12, 0, 0, 5268, 684, 1, 0, 0, 0, 5269, 5270, 7, 16, 0, 0, 5270, 5271, + 7, 15, 0, 0, 5271, 5272, 7, 12, 0, 0, 5272, 5273, 7, 5, 0, 0, 5273, 5274, + 7, 19, 0, 0, 5274, 5275, 7, 22, 0, 0, 5275, 686, 1, 0, 0, 0, 5276, 5277, + 7, 16, 0, 0, 5277, 5278, 7, 15, 0, 0, 5278, 5279, 7, 6, 0, 0, 5279, 688, + 1, 0, 0, 0, 5280, 5281, 7, 16, 0, 0, 5281, 5282, 7, 5, 0, 0, 5282, 5283, + 7, 19, 0, 0, 5283, 5284, 7, 14, 0, 0, 5284, 5285, 7, 21, 0, 0, 5285, 690, + 1, 0, 0, 0, 5286, 5287, 7, 16, 0, 0, 5287, 5288, 7, 19, 0, 0, 5288, 5289, + 7, 19, 0, 0, 5289, 5290, 7, 5, 0, 0, 5290, 692, 1, 0, 0, 0, 5291, 5292, + 7, 16, 0, 0, 5292, 5293, 7, 19, 0, 0, 5293, 5294, 7, 19, 0, 0, 5294, 5295, + 7, 5, 0, 0, 5295, 5296, 7, 7, 0, 0, 5296, 5297, 7, 3, 0, 0, 5297, 5298, + 7, 12, 0, 0, 5298, 694, 1, 0, 0, 0, 5299, 5300, 7, 16, 0, 0, 5300, 5301, + 7, 6, 0, 0, 5301, 5302, 7, 8, 0, 0, 5302, 5303, 7, 7, 0, 0, 5303, 5304, + 7, 7, 0, 0, 5304, 696, 1, 0, 0, 0, 5305, 5306, 7, 14, 0, 0, 5306, 5307, + 7, 3, 0, 0, 5307, 5308, 7, 14, 0, 0, 5308, 5309, 7, 20, 0, 0, 5309, 5310, + 7, 7, 0, 0, 5310, 698, 1, 0, 0, 0, 5311, 5312, 7, 14, 0, 0, 5312, 5313, + 7, 3, 0, 0, 5313, 5314, 7, 11, 0, 0, 5314, 5315, 7, 14, 0, 0, 5315, 5316, + 7, 3, 0, 0, 5316, 5317, 7, 4, 0, 0, 5317, 5318, 7, 7, 0, 0, 5318, 5319, + 7, 4, 0, 0, 5319, 700, 1, 0, 0, 0, 5320, 5321, 7, 14, 0, 0, 5321, 5322, + 7, 20, 0, 0, 5322, 5323, 7, 3, 0, 0, 5323, 5324, 7, 15, 0, 0, 5324, 5325, + 7, 12, 0, 0, 5325, 702, 1, 0, 0, 0, 5326, 5327, 7, 14, 0, 0, 5327, 5328, + 7, 20, 0, 0, 5328, 5329, 7, 3, 0, 0, 5329, 5330, 7, 12, 0, 0, 5330, 5331, + 7, 22, 0, 0, 5331, 5332, 7, 7, 0, 0, 5332, 5333, 7, 4, 0, 0, 5333, 704, + 1, 0, 0, 0, 5334, 5335, 7, 14, 0, 0, 5335, 5336, 7, 20, 0, 0, 5336, 5337, + 7, 3, 0, 0, 5337, 5338, 7, 12, 0, 0, 5338, 5339, 7, 12, 0, 0, 5339, 5340, + 7, 7, 0, 0, 5340, 5341, 7, 5, 0, 0, 5341, 706, 1, 0, 0, 0, 5342, 5343, + 7, 14, 0, 0, 5343, 5344, 7, 20, 0, 0, 5344, 5345, 7, 7, 0, 0, 5345, 5346, + 7, 14, 0, 0, 5346, 5347, 7, 21, 0, 0, 5347, 5348, 7, 11, 0, 0, 5348, 5349, + 7, 17, 0, 0, 5349, 5350, 7, 23, 0, 0, 5350, 708, 1, 0, 0, 0, 5351, 5352, + 7, 25, 0, 0, 5352, 5353, 7, 3, 0, 0, 5353, 5354, 7, 22, 0, 0, 5354, 5355, + 7, 7, 0, 0, 5355, 5356, 5, 95, 0, 0, 5356, 5357, 7, 14, 0, 0, 5357, 5358, + 7, 20, 0, 0, 5358, 5359, 7, 7, 0, 0, 5359, 5360, 7, 14, 0, 0, 5360, 5361, + 7, 21, 0, 0, 5361, 5362, 7, 11, 0, 0, 5362, 5363, 7, 17, 0, 0, 5363, 5364, + 7, 23, 0, 0, 5364, 710, 1, 0, 0, 0, 5365, 5366, 7, 14, 0, 0, 5366, 5367, + 7, 15, 0, 0, 5367, 5368, 7, 25, 0, 0, 5368, 5369, 7, 20, 0, 0, 5369, 5370, + 7, 7, 0, 0, 5370, 5371, 7, 8, 0, 0, 5371, 712, 1, 0, 0, 0, 5372, 5373, + 7, 14, 0, 0, 5373, 5374, 7, 5, 0, 0, 5374, 5375, 7, 3, 0, 0, 5375, 5376, + 7, 11, 0, 0, 5376, 5377, 7, 11, 0, 0, 5377, 5378, 5, 95, 0, 0, 5378, 5379, + 7, 19, 0, 0, 5379, 5380, 7, 8, 0, 0, 5380, 5381, 7, 15, 0, 0, 5381, 5382, + 7, 22, 0, 0, 5382, 5383, 7, 15, 0, 0, 5383, 5384, 7, 12, 0, 0, 5384, 714, + 1, 0, 0, 0, 5385, 5386, 7, 14, 0, 0, 5386, 5387, 7, 5, 0, 0, 5387, 5388, + 7, 15, 0, 0, 5388, 5389, 7, 7, 0, 0, 5389, 5390, 7, 12, 0, 0, 5390, 5391, + 7, 6, 0, 0, 5391, 716, 1, 0, 0, 0, 5392, 5393, 7, 14, 0, 0, 5393, 5394, + 7, 5, 0, 0, 5394, 5395, 7, 19, 0, 0, 5395, 5396, 7, 11, 0, 0, 5396, 5397, + 7, 7, 0, 0, 5397, 718, 1, 0, 0, 0, 5398, 5399, 7, 14, 0, 0, 5399, 5400, + 7, 5, 0, 0, 5400, 5401, 7, 17, 0, 0, 5401, 5402, 7, 11, 0, 0, 5402, 5403, + 7, 6, 0, 0, 5403, 5404, 7, 7, 0, 0, 5404, 5405, 7, 8, 0, 0, 5405, 5406, + 7, 15, 0, 0, 5406, 5407, 7, 12, 0, 0, 5407, 5408, 7, 22, 0, 0, 5408, 720, + 1, 0, 0, 0, 5409, 5410, 7, 14, 0, 0, 5410, 5411, 7, 19, 0, 0, 5411, 5412, + 7, 3, 0, 0, 5412, 5413, 7, 5, 0, 0, 5413, 5414, 7, 7, 0, 0, 5414, 5415, + 7, 11, 0, 0, 5415, 5416, 7, 14, 0, 0, 5416, 5417, 7, 7, 0, 0, 5417, 722, + 1, 0, 0, 0, 5418, 5419, 7, 14, 0, 0, 5419, 5420, 7, 19, 0, 0, 5420, 5421, + 7, 4, 0, 0, 5421, 5422, 7, 7, 0, 0, 5422, 724, 1, 0, 0, 0, 5423, 5424, + 7, 14, 0, 0, 5424, 5425, 7, 19, 0, 0, 5425, 5426, 7, 5, 0, 0, 5426, 5427, + 7, 17, 0, 0, 5427, 5428, 7, 23, 0, 0, 5428, 5429, 7, 12, 0, 0, 5429, 5430, + 7, 11, 0, 0, 5430, 726, 1, 0, 0, 0, 5431, 5432, 7, 14, 0, 0, 5432, 5433, + 7, 19, 0, 0, 5433, 5434, 7, 5, 0, 0, 5434, 5435, 7, 17, 0, 0, 5435, 5436, + 7, 23, 0, 0, 5436, 5437, 7, 12, 0, 0, 5437, 5438, 5, 95, 0, 0, 5438, 5439, + 7, 18, 0, 0, 5439, 5440, 7, 19, 0, 0, 5440, 5441, 7, 8, 0, 0, 5441, 5442, + 7, 23, 0, 0, 5442, 5443, 7, 3, 0, 0, 5443, 5444, 7, 6, 0, 0, 5444, 728, + 1, 0, 0, 0, 5445, 5446, 7, 14, 0, 0, 5446, 5447, 7, 19, 0, 0, 5447, 5448, + 7, 5, 0, 0, 5448, 5449, 7, 17, 0, 0, 5449, 5450, 7, 23, 0, 0, 5450, 5451, + 7, 12, 0, 0, 5451, 5452, 5, 95, 0, 0, 5452, 5453, 7, 12, 0, 0, 5453, 5454, + 7, 3, 0, 0, 5454, 5455, 7, 23, 0, 0, 5455, 5456, 7, 7, 0, 0, 5456, 730, + 1, 0, 0, 0, 5457, 5458, 7, 14, 0, 0, 5458, 5459, 7, 19, 0, 0, 5459, 5460, + 7, 23, 0, 0, 5460, 5461, 7, 23, 0, 0, 5461, 5462, 7, 7, 0, 0, 5462, 5463, + 7, 12, 0, 0, 5463, 5464, 7, 6, 0, 0, 5464, 732, 1, 0, 0, 0, 5465, 5466, + 7, 14, 0, 0, 5466, 5467, 7, 19, 0, 0, 5467, 5468, 7, 23, 0, 0, 5468, 5469, + 7, 23, 0, 0, 5469, 5470, 7, 15, 0, 0, 5470, 5471, 7, 6, 0, 0, 5471, 734, + 1, 0, 0, 0, 5472, 5473, 7, 14, 0, 0, 5473, 5474, 7, 19, 0, 0, 5474, 5475, + 7, 23, 0, 0, 5475, 5476, 7, 25, 0, 0, 5476, 5477, 7, 3, 0, 0, 5477, 5478, + 7, 14, 0, 0, 5478, 5479, 7, 6, 0, 0, 5479, 736, 1, 0, 0, 0, 5480, 5481, + 7, 14, 0, 0, 5481, 5482, 7, 19, 0, 0, 5482, 5483, 7, 23, 0, 0, 5483, 5484, + 7, 25, 0, 0, 5484, 5485, 7, 5, 0, 0, 5485, 5486, 7, 7, 0, 0, 5486, 5487, + 7, 6, 0, 0, 5487, 5488, 7, 15, 0, 0, 5488, 5489, 7, 19, 0, 0, 5489, 5490, + 7, 12, 0, 0, 5490, 738, 1, 0, 0, 0, 5491, 5492, 7, 14, 0, 0, 5492, 5493, + 7, 19, 0, 0, 5493, 5494, 7, 23, 0, 0, 5494, 5495, 7, 25, 0, 0, 5495, 5496, + 7, 8, 0, 0, 5496, 5497, 7, 7, 0, 0, 5497, 5498, 7, 11, 0, 0, 5498, 5499, + 7, 11, 0, 0, 5499, 5500, 7, 7, 0, 0, 5500, 5501, 7, 4, 0, 0, 5501, 740, + 1, 0, 0, 0, 5502, 5503, 7, 14, 0, 0, 5503, 5504, 7, 19, 0, 0, 5504, 5505, + 7, 23, 0, 0, 5505, 5506, 7, 25, 0, 0, 5506, 5507, 7, 8, 0, 0, 5507, 5508, + 7, 7, 0, 0, 5508, 5509, 7, 11, 0, 0, 5509, 5510, 7, 11, 0, 0, 5510, 5511, + 7, 15, 0, 0, 5511, 5512, 7, 19, 0, 0, 5512, 5532, 7, 12, 0, 0, 5513, 5515, + 3, 2275, 1137, 0, 5514, 5513, 1, 0, 0, 0, 5514, 5515, 1, 0, 0, 0, 5515, + 5516, 1, 0, 0, 0, 5516, 5517, 7, 14, 0, 0, 5517, 5518, 7, 19, 0, 0, 5518, + 5519, 7, 23, 0, 0, 5519, 5520, 7, 25, 0, 0, 5520, 5521, 7, 8, 0, 0, 5521, + 5522, 7, 7, 0, 0, 5522, 5523, 7, 11, 0, 0, 5523, 5524, 7, 11, 0, 0, 5524, + 5525, 7, 15, 0, 0, 5525, 5526, 7, 19, 0, 0, 5526, 5527, 7, 12, 0, 0, 5527, + 5529, 1, 0, 0, 0, 5528, 5530, 3, 2275, 1137, 0, 5529, 5528, 1, 0, 0, 0, + 5529, 5530, 1, 0, 0, 0, 5530, 5532, 1, 0, 0, 0, 5531, 5502, 1, 0, 0, 0, + 5531, 5514, 1, 0, 0, 0, 5532, 742, 1, 0, 0, 0, 5533, 5534, 7, 14, 0, 0, + 5534, 5535, 7, 19, 0, 0, 5535, 5536, 7, 12, 0, 0, 5536, 5537, 7, 14, 0, + 0, 5537, 5538, 7, 17, 0, 0, 5538, 5539, 7, 8, 0, 0, 5539, 5540, 7, 8, 0, + 0, 5540, 5541, 7, 7, 0, 0, 5541, 5542, 7, 12, 0, 0, 5542, 5543, 7, 6, 0, + 0, 5543, 744, 1, 0, 0, 0, 5544, 5545, 7, 14, 0, 0, 5545, 5546, 7, 19, 0, + 0, 5546, 5547, 7, 12, 0, 0, 5547, 5548, 7, 12, 0, 0, 5548, 5549, 7, 7, + 0, 0, 5549, 5550, 7, 14, 0, 0, 5550, 5551, 7, 6, 0, 0, 5551, 746, 1, 0, + 0, 0, 5552, 5553, 7, 14, 0, 0, 5553, 5554, 7, 19, 0, 0, 5554, 5555, 7, + 12, 0, 0, 5555, 5556, 7, 12, 0, 0, 5556, 5557, 7, 7, 0, 0, 5557, 5558, + 7, 14, 0, 0, 5558, 5559, 7, 6, 0, 0, 5559, 5560, 7, 15, 0, 0, 5560, 5561, + 7, 19, 0, 0, 5561, 5562, 7, 12, 0, 0, 5562, 748, 1, 0, 0, 0, 5563, 5564, + 7, 14, 0, 0, 5564, 5565, 7, 19, 0, 0, 5565, 5566, 7, 12, 0, 0, 5566, 5567, + 7, 11, 0, 0, 5567, 5568, 7, 15, 0, 0, 5568, 5569, 7, 11, 0, 0, 5569, 5570, + 7, 6, 0, 0, 5570, 5571, 7, 7, 0, 0, 5571, 5572, 7, 12, 0, 0, 5572, 5573, + 7, 6, 0, 0, 5573, 750, 1, 0, 0, 0, 5574, 5575, 7, 14, 0, 0, 5575, 5576, + 7, 19, 0, 0, 5576, 5577, 7, 12, 0, 0, 5577, 5578, 7, 11, 0, 0, 5578, 5579, + 7, 6, 0, 0, 5579, 5580, 7, 8, 0, 0, 5580, 5581, 7, 3, 0, 0, 5581, 5582, + 7, 15, 0, 0, 5582, 5583, 7, 12, 0, 0, 5583, 5584, 7, 6, 0, 0, 5584, 5585, + 5, 95, 0, 0, 5585, 5586, 7, 14, 0, 0, 5586, 5587, 7, 3, 0, 0, 5587, 5588, + 7, 6, 0, 0, 5588, 5589, 7, 3, 0, 0, 5589, 5590, 7, 5, 0, 0, 5590, 5591, + 7, 19, 0, 0, 5591, 5592, 7, 22, 0, 0, 5592, 752, 1, 0, 0, 0, 5593, 5594, + 7, 14, 0, 0, 5594, 5595, 7, 19, 0, 0, 5595, 5596, 7, 12, 0, 0, 5596, 5597, + 7, 11, 0, 0, 5597, 5598, 7, 6, 0, 0, 5598, 5599, 7, 8, 0, 0, 5599, 5600, + 7, 3, 0, 0, 5600, 5601, 7, 15, 0, 0, 5601, 5602, 7, 12, 0, 0, 5602, 5603, + 7, 6, 0, 0, 5603, 5604, 5, 95, 0, 0, 5604, 5605, 7, 11, 0, 0, 5605, 5606, + 7, 14, 0, 0, 5606, 5607, 7, 20, 0, 0, 5607, 5608, 7, 7, 0, 0, 5608, 5609, + 7, 23, 0, 0, 5609, 5610, 7, 3, 0, 0, 5610, 754, 1, 0, 0, 0, 5611, 5612, + 7, 14, 0, 0, 5612, 5613, 7, 19, 0, 0, 5613, 5614, 7, 12, 0, 0, 5614, 5615, + 7, 11, 0, 0, 5615, 5616, 7, 6, 0, 0, 5616, 5617, 7, 8, 0, 0, 5617, 5618, + 7, 3, 0, 0, 5618, 5619, 7, 15, 0, 0, 5619, 5620, 7, 12, 0, 0, 5620, 5621, + 7, 6, 0, 0, 5621, 5622, 5, 95, 0, 0, 5622, 5623, 7, 12, 0, 0, 5623, 5624, + 7, 3, 0, 0, 5624, 5625, 7, 23, 0, 0, 5625, 5626, 7, 7, 0, 0, 5626, 756, + 1, 0, 0, 0, 5627, 5628, 7, 14, 0, 0, 5628, 5629, 7, 19, 0, 0, 5629, 5630, + 7, 12, 0, 0, 5630, 5631, 7, 6, 0, 0, 5631, 5632, 7, 3, 0, 0, 5632, 5633, + 7, 15, 0, 0, 5633, 5634, 7, 12, 0, 0, 5634, 5635, 7, 11, 0, 0, 5635, 758, + 1, 0, 0, 0, 5636, 5637, 7, 14, 0, 0, 5637, 5638, 7, 19, 0, 0, 5638, 5639, + 7, 12, 0, 0, 5639, 5640, 7, 6, 0, 0, 5640, 5641, 7, 7, 0, 0, 5641, 5642, + 7, 26, 0, 0, 5642, 5643, 7, 6, 0, 0, 5643, 760, 1, 0, 0, 0, 5644, 5645, + 7, 14, 0, 0, 5645, 5646, 7, 19, 0, 0, 5646, 5647, 7, 12, 0, 0, 5647, 5648, + 7, 6, 0, 0, 5648, 5649, 7, 8, 0, 0, 5649, 5650, 7, 15, 0, 0, 5650, 5651, + 7, 16, 0, 0, 5651, 5652, 7, 17, 0, 0, 5652, 5653, 7, 6, 0, 0, 5653, 5654, + 7, 19, 0, 0, 5654, 5655, 7, 8, 0, 0, 5655, 5656, 7, 11, 0, 0, 5656, 762, + 1, 0, 0, 0, 5657, 5658, 7, 14, 0, 0, 5658, 5659, 7, 19, 0, 0, 5659, 5660, + 7, 25, 0, 0, 5660, 5661, 7, 10, 0, 0, 5661, 764, 1, 0, 0, 0, 5662, 5663, + 7, 14, 0, 0, 5663, 5664, 7, 25, 0, 0, 5664, 5665, 7, 17, 0, 0, 5665, 766, + 1, 0, 0, 0, 5666, 5667, 7, 14, 0, 0, 5667, 5668, 7, 10, 0, 0, 5668, 5669, + 7, 14, 0, 0, 5669, 5670, 7, 5, 0, 0, 5670, 5671, 7, 7, 0, 0, 5671, 768, + 1, 0, 0, 0, 5672, 5673, 7, 14, 0, 0, 5673, 5674, 7, 17, 0, 0, 5674, 5675, + 7, 8, 0, 0, 5675, 5676, 7, 11, 0, 0, 5676, 5677, 7, 19, 0, 0, 5677, 5678, + 7, 8, 0, 0, 5678, 5679, 5, 95, 0, 0, 5679, 5680, 7, 12, 0, 0, 5680, 5681, + 7, 3, 0, 0, 5681, 5682, 7, 23, 0, 0, 5682, 5683, 7, 7, 0, 0, 5683, 770, + 1, 0, 0, 0, 5684, 5685, 7, 4, 0, 0, 5685, 5686, 7, 3, 0, 0, 5686, 5687, + 7, 6, 0, 0, 5687, 5688, 7, 3, 0, 0, 5688, 772, 1, 0, 0, 0, 5689, 5690, + 7, 4, 0, 0, 5690, 5691, 7, 3, 0, 0, 5691, 5692, 7, 6, 0, 0, 5692, 5693, + 7, 3, 0, 0, 5693, 5694, 7, 18, 0, 0, 5694, 5695, 7, 15, 0, 0, 5695, 5696, + 7, 5, 0, 0, 5696, 5697, 7, 7, 0, 0, 5697, 774, 1, 0, 0, 0, 5698, 5699, + 7, 4, 0, 0, 5699, 5700, 7, 7, 0, 0, 5700, 5701, 7, 3, 0, 0, 5701, 5702, + 7, 5, 0, 0, 5702, 5703, 7, 5, 0, 0, 5703, 5704, 7, 19, 0, 0, 5704, 5705, + 7, 14, 0, 0, 5705, 5706, 7, 3, 0, 0, 5706, 5707, 7, 6, 0, 0, 5707, 5708, + 7, 7, 0, 0, 5708, 776, 1, 0, 0, 0, 5709, 5710, 7, 4, 0, 0, 5710, 5711, + 7, 7, 0, 0, 5711, 5712, 7, 18, 0, 0, 5712, 5713, 7, 3, 0, 0, 5713, 5714, + 7, 17, 0, 0, 5714, 5715, 7, 5, 0, 0, 5715, 5716, 7, 6, 0, 0, 5716, 5717, + 5, 95, 0, 0, 5717, 5718, 7, 3, 0, 0, 5718, 5719, 7, 17, 0, 0, 5719, 5720, + 7, 6, 0, 0, 5720, 5721, 7, 20, 0, 0, 5721, 778, 1, 0, 0, 0, 5722, 5723, + 7, 4, 0, 0, 5723, 5724, 7, 7, 0, 0, 5724, 5725, 7, 18, 0, 0, 5725, 5726, + 7, 15, 0, 0, 5726, 5727, 7, 12, 0, 0, 5727, 5728, 7, 7, 0, 0, 5728, 5729, + 7, 8, 0, 0, 5729, 780, 1, 0, 0, 0, 5730, 5731, 7, 4, 0, 0, 5731, 5732, + 7, 7, 0, 0, 5732, 5733, 7, 5, 0, 0, 5733, 5734, 7, 3, 0, 0, 5734, 5735, + 7, 10, 0, 0, 5735, 5736, 5, 95, 0, 0, 5736, 5737, 7, 21, 0, 0, 5737, 5738, + 7, 7, 0, 0, 5738, 5739, 7, 10, 0, 0, 5739, 5740, 5, 95, 0, 0, 5740, 5741, + 7, 9, 0, 0, 5741, 5742, 7, 8, 0, 0, 5742, 5743, 7, 15, 0, 0, 5743, 5744, + 7, 6, 0, 0, 5744, 5745, 7, 7, 0, 0, 5745, 782, 1, 0, 0, 0, 5746, 5747, + 7, 4, 0, 0, 5747, 5748, 7, 7, 0, 0, 5748, 5749, 7, 11, 0, 0, 5749, 5750, + 5, 95, 0, 0, 5750, 5751, 7, 21, 0, 0, 5751, 5752, 7, 7, 0, 0, 5752, 5753, + 7, 10, 0, 0, 5753, 5754, 5, 95, 0, 0, 5754, 5755, 7, 18, 0, 0, 5755, 5756, + 7, 15, 0, 0, 5756, 5757, 7, 5, 0, 0, 5757, 5758, 7, 7, 0, 0, 5758, 784, + 1, 0, 0, 0, 5759, 5760, 7, 4, 0, 0, 5760, 5761, 7, 15, 0, 0, 5761, 5762, + 7, 8, 0, 0, 5762, 5763, 7, 7, 0, 0, 5763, 5764, 7, 14, 0, 0, 5764, 5765, + 7, 6, 0, 0, 5765, 5766, 7, 19, 0, 0, 5766, 5767, 7, 8, 0, 0, 5767, 5768, + 7, 10, 0, 0, 5768, 786, 1, 0, 0, 0, 5769, 5770, 7, 4, 0, 0, 5770, 5771, + 7, 15, 0, 0, 5771, 5772, 7, 11, 0, 0, 5772, 5773, 7, 3, 0, 0, 5773, 5774, + 7, 16, 0, 0, 5774, 5775, 7, 5, 0, 0, 5775, 5776, 7, 7, 0, 0, 5776, 788, + 1, 0, 0, 0, 5777, 5778, 7, 4, 0, 0, 5778, 5779, 7, 15, 0, 0, 5779, 5780, + 7, 11, 0, 0, 5780, 5781, 7, 14, 0, 0, 5781, 5782, 7, 3, 0, 0, 5782, 5783, + 7, 8, 0, 0, 5783, 5784, 7, 4, 0, 0, 5784, 790, 1, 0, 0, 0, 5785, 5786, + 7, 4, 0, 0, 5786, 5787, 7, 15, 0, 0, 5787, 5788, 7, 11, 0, 0, 5788, 5789, + 7, 21, 0, 0, 5789, 792, 1, 0, 0, 0, 5790, 5791, 7, 4, 0, 0, 5791, 5792, + 7, 19, 0, 0, 5792, 794, 1, 0, 0, 0, 5793, 5794, 7, 4, 0, 0, 5794, 5795, + 7, 17, 0, 0, 5795, 5796, 7, 23, 0, 0, 5796, 5797, 7, 25, 0, 0, 5797, 5798, + 7, 18, 0, 0, 5798, 5799, 7, 15, 0, 0, 5799, 5800, 7, 5, 0, 0, 5800, 5801, + 7, 7, 0, 0, 5801, 796, 1, 0, 0, 0, 5802, 5803, 7, 4, 0, 0, 5803, 5804, + 7, 17, 0, 0, 5804, 5805, 7, 25, 0, 0, 5805, 5806, 7, 5, 0, 0, 5806, 5807, + 7, 15, 0, 0, 5807, 5808, 7, 14, 0, 0, 5808, 5809, 7, 3, 0, 0, 5809, 5810, + 7, 6, 0, 0, 5810, 5811, 7, 7, 0, 0, 5811, 798, 1, 0, 0, 0, 5812, 5813, + 7, 4, 0, 0, 5813, 5814, 7, 10, 0, 0, 5814, 5815, 7, 12, 0, 0, 5815, 5816, + 7, 3, 0, 0, 5816, 5817, 7, 23, 0, 0, 5817, 5818, 7, 15, 0, 0, 5818, 5819, + 7, 14, 0, 0, 5819, 800, 1, 0, 0, 0, 5820, 5821, 7, 7, 0, 0, 5821, 5822, + 7, 12, 0, 0, 5822, 5823, 7, 3, 0, 0, 5823, 5824, 7, 16, 0, 0, 5824, 5825, + 7, 5, 0, 0, 5825, 5826, 7, 7, 0, 0, 5826, 802, 1, 0, 0, 0, 5827, 5828, + 7, 7, 0, 0, 5828, 5829, 7, 12, 0, 0, 5829, 5830, 7, 14, 0, 0, 5830, 5831, + 7, 8, 0, 0, 5831, 5832, 7, 10, 0, 0, 5832, 5833, 7, 25, 0, 0, 5833, 5834, + 7, 6, 0, 0, 5834, 5835, 7, 7, 0, 0, 5835, 5836, 7, 4, 0, 0, 5836, 804, + 1, 0, 0, 0, 5837, 5838, 7, 7, 0, 0, 5838, 5839, 7, 12, 0, 0, 5839, 5840, + 7, 14, 0, 0, 5840, 5841, 7, 8, 0, 0, 5841, 5842, 7, 10, 0, 0, 5842, 5843, + 7, 25, 0, 0, 5843, 5844, 7, 6, 0, 0, 5844, 5845, 7, 15, 0, 0, 5845, 5846, + 7, 19, 0, 0, 5846, 5847, 7, 12, 0, 0, 5847, 806, 1, 0, 0, 0, 5848, 5849, + 7, 7, 0, 0, 5849, 5850, 7, 12, 0, 0, 5850, 5851, 7, 14, 0, 0, 5851, 5852, + 7, 8, 0, 0, 5852, 5853, 7, 10, 0, 0, 5853, 5854, 7, 25, 0, 0, 5854, 5855, + 7, 6, 0, 0, 5855, 5856, 7, 15, 0, 0, 5856, 5857, 7, 19, 0, 0, 5857, 5858, + 7, 12, 0, 0, 5858, 5859, 5, 95, 0, 0, 5859, 5860, 7, 21, 0, 0, 5860, 5861, + 7, 7, 0, 0, 5861, 5862, 7, 10, 0, 0, 5862, 5863, 5, 95, 0, 0, 5863, 5864, + 7, 15, 0, 0, 5864, 5865, 7, 4, 0, 0, 5865, 808, 1, 0, 0, 0, 5866, 5867, + 7, 7, 0, 0, 5867, 5868, 7, 12, 0, 0, 5868, 5869, 7, 4, 0, 0, 5869, 810, + 1, 0, 0, 0, 5870, 5871, 7, 7, 0, 0, 5871, 5872, 7, 12, 0, 0, 5872, 5873, + 7, 4, 0, 0, 5873, 5874, 7, 11, 0, 0, 5874, 812, 1, 0, 0, 0, 5875, 5876, + 7, 7, 0, 0, 5876, 5877, 7, 12, 0, 0, 5877, 5878, 7, 22, 0, 0, 5878, 5879, + 7, 15, 0, 0, 5879, 5880, 7, 12, 0, 0, 5880, 5881, 7, 7, 0, 0, 5881, 814, + 1, 0, 0, 0, 5882, 5883, 7, 7, 0, 0, 5883, 5884, 7, 12, 0, 0, 5884, 5885, + 7, 22, 0, 0, 5885, 5886, 7, 15, 0, 0, 5886, 5887, 7, 12, 0, 0, 5887, 5888, + 7, 7, 0, 0, 5888, 5889, 7, 11, 0, 0, 5889, 816, 1, 0, 0, 0, 5890, 5891, + 7, 7, 0, 0, 5891, 5892, 7, 8, 0, 0, 5892, 5893, 7, 8, 0, 0, 5893, 5894, + 7, 19, 0, 0, 5894, 5895, 7, 8, 0, 0, 5895, 818, 1, 0, 0, 0, 5896, 5897, + 7, 7, 0, 0, 5897, 5898, 7, 8, 0, 0, 5898, 5899, 7, 8, 0, 0, 5899, 5900, + 7, 19, 0, 0, 5900, 5901, 7, 8, 0, 0, 5901, 5902, 7, 11, 0, 0, 5902, 820, + 1, 0, 0, 0, 5903, 5904, 7, 7, 0, 0, 5904, 5905, 7, 11, 0, 0, 5905, 5906, + 7, 14, 0, 0, 5906, 5907, 7, 3, 0, 0, 5907, 5908, 7, 25, 0, 0, 5908, 5909, + 7, 7, 0, 0, 5909, 822, 1, 0, 0, 0, 5910, 5911, 7, 7, 0, 0, 5911, 5912, + 7, 24, 0, 0, 5912, 5913, 7, 7, 0, 0, 5913, 5914, 7, 12, 0, 0, 5914, 824, + 1, 0, 0, 0, 5915, 5916, 7, 7, 0, 0, 5916, 5917, 7, 24, 0, 0, 5917, 5918, + 7, 7, 0, 0, 5918, 5919, 7, 12, 0, 0, 5919, 5920, 7, 6, 0, 0, 5920, 826, + 1, 0, 0, 0, 5921, 5922, 7, 7, 0, 0, 5922, 5923, 7, 24, 0, 0, 5923, 5924, + 7, 7, 0, 0, 5924, 5925, 7, 12, 0, 0, 5925, 5926, 7, 6, 0, 0, 5926, 5927, + 7, 11, 0, 0, 5927, 828, 1, 0, 0, 0, 5928, 5929, 7, 7, 0, 0, 5929, 5930, + 7, 24, 0, 0, 5930, 5931, 7, 7, 0, 0, 5931, 5932, 7, 8, 0, 0, 5932, 5933, + 7, 10, 0, 0, 5933, 830, 1, 0, 0, 0, 5934, 5935, 7, 7, 0, 0, 5935, 5936, + 7, 26, 0, 0, 5936, 5937, 7, 14, 0, 0, 5937, 5938, 7, 20, 0, 0, 5938, 5939, + 7, 3, 0, 0, 5939, 5940, 7, 12, 0, 0, 5940, 5941, 7, 22, 0, 0, 5941, 5942, + 7, 7, 0, 0, 5942, 832, 1, 0, 0, 0, 5943, 5944, 7, 7, 0, 0, 5944, 5945, + 7, 26, 0, 0, 5945, 5946, 7, 14, 0, 0, 5946, 5947, 7, 5, 0, 0, 5947, 5948, + 7, 17, 0, 0, 5948, 5949, 7, 11, 0, 0, 5949, 5950, 7, 15, 0, 0, 5950, 5951, + 7, 24, 0, 0, 5951, 5952, 7, 7, 0, 0, 5952, 834, 1, 0, 0, 0, 5953, 5954, + 7, 7, 0, 0, 5954, 5955, 7, 26, 0, 0, 5955, 5956, 7, 25, 0, 0, 5956, 5957, + 7, 15, 0, 0, 5957, 5958, 7, 8, 0, 0, 5958, 5959, 7, 7, 0, 0, 5959, 836, + 1, 0, 0, 0, 5960, 5961, 7, 7, 0, 0, 5961, 5962, 7, 26, 0, 0, 5962, 5963, + 7, 25, 0, 0, 5963, 5964, 7, 19, 0, 0, 5964, 5965, 7, 8, 0, 0, 5965, 5966, + 7, 6, 0, 0, 5966, 838, 1, 0, 0, 0, 5967, 5968, 7, 7, 0, 0, 5968, 5969, + 7, 26, 0, 0, 5969, 5970, 7, 6, 0, 0, 5970, 5971, 7, 7, 0, 0, 5971, 5972, + 7, 12, 0, 0, 5972, 5973, 7, 4, 0, 0, 5973, 5974, 7, 7, 0, 0, 5974, 5975, + 7, 4, 0, 0, 5975, 840, 1, 0, 0, 0, 5976, 5977, 7, 7, 0, 0, 5977, 5978, + 7, 26, 0, 0, 5978, 5979, 7, 6, 0, 0, 5979, 5980, 7, 7, 0, 0, 5980, 5981, + 7, 12, 0, 0, 5981, 5982, 7, 6, 0, 0, 5982, 5983, 5, 95, 0, 0, 5983, 5984, + 7, 11, 0, 0, 5984, 5985, 7, 15, 0, 0, 5985, 5986, 7, 13, 0, 0, 5986, 5987, + 7, 7, 0, 0, 5987, 842, 1, 0, 0, 0, 5988, 5989, 7, 18, 0, 0, 5989, 5990, + 7, 3, 0, 0, 5990, 5991, 7, 15, 0, 0, 5991, 5992, 7, 5, 0, 0, 5992, 5993, + 7, 7, 0, 0, 5993, 5994, 7, 4, 0, 0, 5994, 5995, 5, 95, 0, 0, 5995, 5996, + 7, 5, 0, 0, 5996, 5997, 7, 19, 0, 0, 5997, 5998, 7, 22, 0, 0, 5998, 5999, + 7, 15, 0, 0, 5999, 6000, 7, 12, 0, 0, 6000, 6001, 5, 95, 0, 0, 6001, 6002, + 7, 3, 0, 0, 6002, 6003, 7, 6, 0, 0, 6003, 6004, 7, 6, 0, 0, 6004, 6005, + 7, 7, 0, 0, 6005, 6006, 7, 23, 0, 0, 6006, 6007, 7, 25, 0, 0, 6007, 6008, + 7, 6, 0, 0, 6008, 6009, 7, 11, 0, 0, 6009, 844, 1, 0, 0, 0, 6010, 6011, + 7, 18, 0, 0, 6011, 6012, 7, 3, 0, 0, 6012, 6013, 7, 11, 0, 0, 6013, 6014, + 7, 6, 0, 0, 6014, 846, 1, 0, 0, 0, 6015, 6016, 7, 18, 0, 0, 6016, 6017, + 7, 3, 0, 0, 6017, 6018, 7, 17, 0, 0, 6018, 6019, 7, 5, 0, 0, 6019, 6020, + 7, 6, 0, 0, 6020, 6021, 7, 11, 0, 0, 6021, 848, 1, 0, 0, 0, 6022, 6023, + 7, 18, 0, 0, 6023, 6024, 7, 15, 0, 0, 6024, 6025, 7, 7, 0, 0, 6025, 6026, + 7, 5, 0, 0, 6026, 6027, 7, 4, 0, 0, 6027, 6028, 7, 11, 0, 0, 6028, 850, + 1, 0, 0, 0, 6029, 6030, 7, 18, 0, 0, 6030, 6031, 7, 15, 0, 0, 6031, 6032, + 7, 5, 0, 0, 6032, 6033, 7, 7, 0, 0, 6033, 6034, 5, 95, 0, 0, 6034, 6035, + 7, 16, 0, 0, 6035, 6036, 7, 5, 0, 0, 6036, 6037, 7, 19, 0, 0, 6037, 6038, + 7, 14, 0, 0, 6038, 6039, 7, 21, 0, 0, 6039, 6040, 5, 95, 0, 0, 6040, 6041, + 7, 11, 0, 0, 6041, 6042, 7, 15, 0, 0, 6042, 6043, 7, 13, 0, 0, 6043, 6044, + 7, 7, 0, 0, 6044, 852, 1, 0, 0, 0, 6045, 6046, 7, 18, 0, 0, 6046, 6047, + 7, 15, 0, 0, 6047, 6048, 7, 5, 0, 0, 6048, 6049, 7, 6, 0, 0, 6049, 6050, + 7, 7, 0, 0, 6050, 6051, 7, 8, 0, 0, 6051, 854, 1, 0, 0, 0, 6052, 6053, + 7, 18, 0, 0, 6053, 6054, 7, 15, 0, 0, 6054, 6055, 7, 8, 0, 0, 6055, 6056, + 7, 11, 0, 0, 6056, 6057, 7, 6, 0, 0, 6057, 856, 1, 0, 0, 0, 6058, 6059, + 7, 18, 0, 0, 6059, 6060, 7, 15, 0, 0, 6060, 6061, 7, 26, 0, 0, 6061, 6062, + 7, 7, 0, 0, 6062, 6063, 7, 4, 0, 0, 6063, 858, 1, 0, 0, 0, 6064, 6065, + 7, 18, 0, 0, 6065, 6066, 7, 5, 0, 0, 6066, 6067, 7, 17, 0, 0, 6067, 6068, + 7, 11, 0, 0, 6068, 6069, 7, 20, 0, 0, 6069, 860, 1, 0, 0, 0, 6070, 6071, + 7, 18, 0, 0, 6071, 6072, 7, 19, 0, 0, 6072, 6073, 7, 5, 0, 0, 6073, 6074, + 7, 5, 0, 0, 6074, 6075, 7, 19, 0, 0, 6075, 6076, 7, 9, 0, 0, 6076, 6077, + 7, 15, 0, 0, 6077, 6078, 7, 12, 0, 0, 6078, 6079, 7, 22, 0, 0, 6079, 862, + 1, 0, 0, 0, 6080, 6081, 7, 18, 0, 0, 6081, 6082, 7, 19, 0, 0, 6082, 6083, + 7, 5, 0, 0, 6083, 6084, 7, 5, 0, 0, 6084, 6085, 7, 19, 0, 0, 6085, 6086, + 7, 9, 0, 0, 6086, 6087, 7, 11, 0, 0, 6087, 864, 1, 0, 0, 0, 6088, 6089, + 7, 18, 0, 0, 6089, 6090, 7, 19, 0, 0, 6090, 6091, 7, 17, 0, 0, 6091, 6092, + 7, 12, 0, 0, 6092, 6093, 7, 4, 0, 0, 6093, 866, 1, 0, 0, 0, 6094, 6095, + 7, 18, 0, 0, 6095, 6096, 7, 17, 0, 0, 6096, 6097, 7, 5, 0, 0, 6097, 6098, + 7, 5, 0, 0, 6098, 868, 1, 0, 0, 0, 6099, 6100, 7, 18, 0, 0, 6100, 6101, + 7, 17, 0, 0, 6101, 6102, 7, 12, 0, 0, 6102, 6103, 7, 14, 0, 0, 6103, 6104, + 7, 6, 0, 0, 6104, 6105, 7, 15, 0, 0, 6105, 6106, 7, 19, 0, 0, 6106, 6107, + 7, 12, 0, 0, 6107, 870, 1, 0, 0, 0, 6108, 6109, 7, 22, 0, 0, 6109, 6110, + 7, 7, 0, 0, 6110, 6111, 7, 12, 0, 0, 6111, 6112, 7, 7, 0, 0, 6112, 6113, + 7, 8, 0, 0, 6113, 6114, 7, 3, 0, 0, 6114, 6115, 7, 5, 0, 0, 6115, 872, + 1, 0, 0, 0, 6116, 6117, 7, 22, 0, 0, 6117, 6118, 7, 5, 0, 0, 6118, 6119, + 7, 19, 0, 0, 6119, 6120, 7, 16, 0, 0, 6120, 6121, 7, 3, 0, 0, 6121, 6122, + 7, 5, 0, 0, 6122, 874, 1, 0, 0, 0, 6123, 6124, 7, 22, 0, 0, 6124, 6125, + 7, 8, 0, 0, 6125, 6126, 7, 3, 0, 0, 6126, 6127, 7, 12, 0, 0, 6127, 6128, + 7, 6, 0, 0, 6128, 6129, 7, 11, 0, 0, 6129, 876, 1, 0, 0, 0, 6130, 6131, + 7, 22, 0, 0, 6131, 6132, 7, 8, 0, 0, 6132, 6133, 7, 19, 0, 0, 6133, 6134, + 7, 17, 0, 0, 6134, 6135, 7, 25, 0, 0, 6135, 6136, 5, 95, 0, 0, 6136, 6137, + 7, 8, 0, 0, 6137, 6138, 7, 7, 0, 0, 6138, 6139, 7, 25, 0, 0, 6139, 6140, + 7, 5, 0, 0, 6140, 6141, 7, 15, 0, 0, 6141, 6142, 7, 14, 0, 0, 6142, 6143, + 7, 3, 0, 0, 6143, 6144, 7, 6, 0, 0, 6144, 6145, 7, 15, 0, 0, 6145, 6146, + 7, 19, 0, 0, 6146, 6147, 7, 12, 0, 0, 6147, 878, 1, 0, 0, 0, 6148, 6149, + 7, 20, 0, 0, 6149, 6150, 7, 3, 0, 0, 6150, 6151, 7, 12, 0, 0, 6151, 6152, + 7, 4, 0, 0, 6152, 6153, 7, 5, 0, 0, 6153, 6154, 7, 7, 0, 0, 6154, 6155, + 7, 8, 0, 0, 6155, 880, 1, 0, 0, 0, 6156, 6157, 7, 20, 0, 0, 6157, 6158, + 7, 3, 0, 0, 6158, 6159, 7, 11, 0, 0, 6159, 6160, 7, 20, 0, 0, 6160, 882, + 1, 0, 0, 0, 6161, 6162, 7, 20, 0, 0, 6162, 6163, 7, 7, 0, 0, 6163, 6164, + 7, 5, 0, 0, 6164, 6165, 7, 25, 0, 0, 6165, 884, 1, 0, 0, 0, 6166, 6167, + 7, 20, 0, 0, 6167, 6168, 7, 15, 0, 0, 6168, 6169, 7, 11, 0, 0, 6169, 6170, + 7, 6, 0, 0, 6170, 6171, 7, 19, 0, 0, 6171, 6172, 7, 8, 0, 0, 6172, 6173, + 7, 10, 0, 0, 6173, 886, 1, 0, 0, 0, 6174, 6175, 7, 20, 0, 0, 6175, 6176, + 7, 19, 0, 0, 6176, 6177, 7, 11, 0, 0, 6177, 6178, 7, 6, 0, 0, 6178, 888, + 1, 0, 0, 0, 6179, 6180, 7, 20, 0, 0, 6180, 6181, 7, 19, 0, 0, 6181, 6182, + 7, 11, 0, 0, 6182, 6183, 7, 6, 0, 0, 6183, 6184, 7, 11, 0, 0, 6184, 890, + 1, 0, 0, 0, 6185, 6186, 7, 15, 0, 0, 6186, 6187, 7, 4, 0, 0, 6187, 6188, + 7, 7, 0, 0, 6188, 6189, 7, 12, 0, 0, 6189, 6190, 7, 6, 0, 0, 6190, 6191, + 7, 15, 0, 0, 6191, 6192, 7, 18, 0, 0, 6192, 6193, 7, 15, 0, 0, 6193, 6194, + 7, 7, 0, 0, 6194, 6195, 7, 4, 0, 0, 6195, 892, 1, 0, 0, 0, 6196, 6197, + 7, 15, 0, 0, 6197, 6198, 7, 22, 0, 0, 6198, 6199, 7, 12, 0, 0, 6199, 6200, + 7, 19, 0, 0, 6200, 6201, 7, 8, 0, 0, 6201, 6202, 7, 7, 0, 0, 6202, 6203, + 5, 95, 0, 0, 6203, 6204, 7, 11, 0, 0, 6204, 6205, 7, 7, 0, 0, 6205, 6206, + 7, 8, 0, 0, 6206, 6207, 7, 24, 0, 0, 6207, 6208, 7, 7, 0, 0, 6208, 6209, + 7, 8, 0, 0, 6209, 6210, 5, 95, 0, 0, 6210, 6211, 7, 15, 0, 0, 6211, 6212, + 7, 4, 0, 0, 6212, 6213, 7, 11, 0, 0, 6213, 894, 1, 0, 0, 0, 6214, 6215, + 7, 15, 0, 0, 6215, 6216, 7, 23, 0, 0, 6216, 6217, 7, 25, 0, 0, 6217, 6218, + 7, 19, 0, 0, 6218, 6219, 7, 8, 0, 0, 6219, 6220, 7, 6, 0, 0, 6220, 896, + 1, 0, 0, 0, 6221, 6222, 7, 15, 0, 0, 6222, 6223, 7, 12, 0, 0, 6223, 6224, + 7, 14, 0, 0, 6224, 6225, 7, 8, 0, 0, 6225, 6226, 7, 7, 0, 0, 6226, 6227, + 7, 23, 0, 0, 6227, 6228, 7, 7, 0, 0, 6228, 6229, 7, 12, 0, 0, 6229, 6230, + 7, 6, 0, 0, 6230, 898, 1, 0, 0, 0, 6231, 6232, 7, 15, 0, 0, 6232, 6233, + 7, 12, 0, 0, 6233, 6234, 7, 4, 0, 0, 6234, 6235, 7, 7, 0, 0, 6235, 6236, + 7, 26, 0, 0, 6236, 6237, 7, 7, 0, 0, 6237, 6238, 7, 11, 0, 0, 6238, 900, + 1, 0, 0, 0, 6239, 6240, 7, 15, 0, 0, 6240, 6241, 7, 12, 0, 0, 6241, 6242, + 7, 15, 0, 0, 6242, 6243, 7, 6, 0, 0, 6243, 6244, 7, 15, 0, 0, 6244, 6245, + 7, 3, 0, 0, 6245, 6246, 7, 5, 0, 0, 6246, 6247, 5, 95, 0, 0, 6247, 6248, + 7, 11, 0, 0, 6248, 6249, 7, 15, 0, 0, 6249, 6250, 7, 13, 0, 0, 6250, 6251, + 7, 7, 0, 0, 6251, 902, 1, 0, 0, 0, 6252, 6253, 7, 15, 0, 0, 6253, 6254, + 7, 12, 0, 0, 6254, 6255, 7, 25, 0, 0, 6255, 6256, 7, 5, 0, 0, 6256, 6257, + 7, 3, 0, 0, 6257, 6258, 7, 14, 0, 0, 6258, 6259, 7, 7, 0, 0, 6259, 904, + 1, 0, 0, 0, 6260, 6261, 7, 15, 0, 0, 6261, 6262, 7, 12, 0, 0, 6262, 6263, + 7, 11, 0, 0, 6263, 6264, 7, 7, 0, 0, 6264, 6265, 7, 8, 0, 0, 6265, 6266, + 7, 6, 0, 0, 6266, 6267, 5, 95, 0, 0, 6267, 6268, 7, 23, 0, 0, 6268, 6269, + 7, 7, 0, 0, 6269, 6270, 7, 6, 0, 0, 6270, 6271, 7, 20, 0, 0, 6271, 6272, + 7, 19, 0, 0, 6272, 6273, 7, 4, 0, 0, 6273, 906, 1, 0, 0, 0, 6274, 6275, + 7, 15, 0, 0, 6275, 6276, 7, 12, 0, 0, 6276, 6277, 7, 11, 0, 0, 6277, 6278, + 7, 6, 0, 0, 6278, 6279, 7, 3, 0, 0, 6279, 6280, 7, 5, 0, 0, 6280, 6281, + 7, 5, 0, 0, 6281, 908, 1, 0, 0, 0, 6282, 6283, 7, 15, 0, 0, 6283, 6284, + 7, 12, 0, 0, 6284, 6285, 7, 11, 0, 0, 6285, 6286, 7, 6, 0, 0, 6286, 6287, + 7, 3, 0, 0, 6287, 6288, 7, 12, 0, 0, 6288, 6289, 7, 14, 0, 0, 6289, 6290, + 7, 7, 0, 0, 6290, 910, 1, 0, 0, 0, 6291, 6292, 7, 15, 0, 0, 6292, 6293, + 7, 12, 0, 0, 6293, 6294, 7, 11, 0, 0, 6294, 6295, 7, 6, 0, 0, 6295, 6296, + 7, 3, 0, 0, 6296, 6297, 7, 12, 0, 0, 6297, 6298, 7, 6, 0, 0, 6298, 912, + 1, 0, 0, 0, 6299, 6300, 7, 15, 0, 0, 6300, 6301, 7, 12, 0, 0, 6301, 6302, + 7, 24, 0, 0, 6302, 6303, 7, 15, 0, 0, 6303, 6304, 7, 11, 0, 0, 6304, 6305, + 7, 15, 0, 0, 6305, 6306, 7, 16, 0, 0, 6306, 6307, 7, 5, 0, 0, 6307, 6308, + 7, 7, 0, 0, 6308, 914, 1, 0, 0, 0, 6309, 6310, 7, 15, 0, 0, 6310, 6311, + 7, 12, 0, 0, 6311, 6312, 7, 24, 0, 0, 6312, 6313, 7, 19, 0, 0, 6313, 6314, + 7, 21, 0, 0, 6314, 6315, 7, 7, 0, 0, 6315, 6316, 7, 8, 0, 0, 6316, 916, + 1, 0, 0, 0, 6317, 6318, 7, 15, 0, 0, 6318, 6319, 7, 19, 0, 0, 6319, 918, + 1, 0, 0, 0, 6320, 6321, 7, 15, 0, 0, 6321, 6322, 7, 19, 0, 0, 6322, 6323, + 5, 95, 0, 0, 6323, 6324, 7, 6, 0, 0, 6324, 6325, 7, 20, 0, 0, 6325, 6326, + 7, 8, 0, 0, 6326, 6327, 7, 7, 0, 0, 6327, 6328, 7, 3, 0, 0, 6328, 6329, + 7, 4, 0, 0, 6329, 920, 1, 0, 0, 0, 6330, 6331, 7, 15, 0, 0, 6331, 6332, + 7, 25, 0, 0, 6332, 6333, 7, 14, 0, 0, 6333, 922, 1, 0, 0, 0, 6334, 6335, + 7, 15, 0, 0, 6335, 6336, 7, 11, 0, 0, 6336, 6337, 7, 19, 0, 0, 6337, 6338, + 7, 5, 0, 0, 6338, 6339, 7, 3, 0, 0, 6339, 6340, 7, 6, 0, 0, 6340, 6341, + 7, 15, 0, 0, 6341, 6342, 7, 19, 0, 0, 6342, 6343, 7, 12, 0, 0, 6343, 924, + 1, 0, 0, 0, 6344, 6345, 7, 15, 0, 0, 6345, 6346, 7, 11, 0, 0, 6346, 6347, + 7, 11, 0, 0, 6347, 6348, 7, 17, 0, 0, 6348, 6349, 7, 7, 0, 0, 6349, 6350, + 7, 8, 0, 0, 6350, 926, 1, 0, 0, 0, 6351, 6352, 7, 27, 0, 0, 6352, 6353, + 7, 11, 0, 0, 6353, 6354, 7, 19, 0, 0, 6354, 6355, 7, 12, 0, 0, 6355, 928, + 1, 0, 0, 0, 6356, 6357, 7, 21, 0, 0, 6357, 6358, 7, 7, 0, 0, 6358, 6359, + 7, 10, 0, 0, 6359, 6360, 5, 95, 0, 0, 6360, 6361, 7, 16, 0, 0, 6361, 6362, + 7, 5, 0, 0, 6362, 6363, 7, 19, 0, 0, 6363, 6364, 7, 14, 0, 0, 6364, 6365, + 7, 21, 0, 0, 6365, 6366, 5, 95, 0, 0, 6366, 6367, 7, 11, 0, 0, 6367, 6368, + 7, 15, 0, 0, 6368, 6369, 7, 13, 0, 0, 6369, 6370, 7, 7, 0, 0, 6370, 930, + 1, 0, 0, 0, 6371, 6372, 7, 5, 0, 0, 6372, 6373, 7, 3, 0, 0, 6373, 6374, + 7, 12, 0, 0, 6374, 6375, 7, 22, 0, 0, 6375, 6376, 7, 17, 0, 0, 6376, 6377, + 7, 3, 0, 0, 6377, 6378, 7, 22, 0, 0, 6378, 6379, 7, 7, 0, 0, 6379, 932, + 1, 0, 0, 0, 6380, 6381, 7, 5, 0, 0, 6381, 6382, 7, 3, 0, 0, 6382, 6383, + 7, 11, 0, 0, 6383, 6384, 7, 6, 0, 0, 6384, 934, 1, 0, 0, 0, 6385, 6386, + 7, 5, 0, 0, 6386, 6387, 7, 7, 0, 0, 6387, 6388, 7, 3, 0, 0, 6388, 6389, + 7, 24, 0, 0, 6389, 6390, 7, 7, 0, 0, 6390, 6391, 7, 11, 0, 0, 6391, 936, + 1, 0, 0, 0, 6392, 6393, 7, 5, 0, 0, 6393, 6394, 7, 7, 0, 0, 6394, 6395, + 7, 11, 0, 0, 6395, 6396, 7, 11, 0, 0, 6396, 938, 1, 0, 0, 0, 6397, 6398, + 7, 5, 0, 0, 6398, 6399, 7, 7, 0, 0, 6399, 6400, 7, 24, 0, 0, 6400, 6401, + 7, 7, 0, 0, 6401, 6402, 7, 5, 0, 0, 6402, 940, 1, 0, 0, 0, 6403, 6404, + 7, 5, 0, 0, 6404, 6405, 7, 15, 0, 0, 6405, 6406, 7, 11, 0, 0, 6406, 6407, + 7, 6, 0, 0, 6407, 942, 1, 0, 0, 0, 6408, 6409, 7, 5, 0, 0, 6409, 6410, + 7, 19, 0, 0, 6410, 6411, 7, 14, 0, 0, 6411, 6412, 7, 3, 0, 0, 6412, 6413, + 7, 5, 0, 0, 6413, 944, 1, 0, 0, 0, 6414, 6415, 7, 5, 0, 0, 6415, 6416, + 7, 19, 0, 0, 6416, 6417, 7, 22, 0, 0, 6417, 6418, 7, 18, 0, 0, 6418, 6419, + 7, 15, 0, 0, 6419, 6420, 7, 5, 0, 0, 6420, 6421, 7, 7, 0, 0, 6421, 946, + 1, 0, 0, 0, 6422, 6423, 7, 5, 0, 0, 6423, 6424, 7, 19, 0, 0, 6424, 6425, + 7, 22, 0, 0, 6425, 6426, 7, 11, 0, 0, 6426, 948, 1, 0, 0, 0, 6427, 6428, + 7, 23, 0, 0, 6428, 6429, 7, 3, 0, 0, 6429, 6430, 7, 11, 0, 0, 6430, 6431, + 7, 6, 0, 0, 6431, 6432, 7, 7, 0, 0, 6432, 6433, 7, 8, 0, 0, 6433, 950, + 1, 0, 0, 0, 6434, 6435, 7, 23, 0, 0, 6435, 6436, 7, 3, 0, 0, 6436, 6437, + 7, 11, 0, 0, 6437, 6438, 7, 6, 0, 0, 6438, 6439, 7, 7, 0, 0, 6439, 6440, + 7, 8, 0, 0, 6440, 6441, 5, 95, 0, 0, 6441, 6442, 7, 3, 0, 0, 6442, 6443, + 7, 17, 0, 0, 6443, 6444, 7, 6, 0, 0, 6444, 6445, 7, 19, 0, 0, 6445, 6446, + 5, 95, 0, 0, 6446, 6447, 7, 25, 0, 0, 6447, 6448, 7, 19, 0, 0, 6448, 6449, + 7, 11, 0, 0, 6449, 6450, 7, 15, 0, 0, 6450, 6451, 7, 6, 0, 0, 6451, 6452, + 7, 15, 0, 0, 6452, 6453, 7, 19, 0, 0, 6453, 6454, 7, 12, 0, 0, 6454, 952, + 1, 0, 0, 0, 6455, 6456, 7, 23, 0, 0, 6456, 6457, 7, 3, 0, 0, 6457, 6458, + 7, 11, 0, 0, 6458, 6459, 7, 6, 0, 0, 6459, 6460, 7, 7, 0, 0, 6460, 6461, + 7, 8, 0, 0, 6461, 6462, 5, 95, 0, 0, 6462, 6463, 7, 14, 0, 0, 6463, 6464, + 7, 19, 0, 0, 6464, 6465, 7, 12, 0, 0, 6465, 6466, 7, 12, 0, 0, 6466, 6467, + 7, 7, 0, 0, 6467, 6468, 7, 14, 0, 0, 6468, 6469, 7, 6, 0, 0, 6469, 6470, + 5, 95, 0, 0, 6470, 6471, 7, 8, 0, 0, 6471, 6472, 7, 7, 0, 0, 6472, 6473, + 7, 6, 0, 0, 6473, 6474, 7, 8, 0, 0, 6474, 6475, 7, 10, 0, 0, 6475, 954, + 1, 0, 0, 0, 6476, 6477, 7, 23, 0, 0, 6477, 6478, 7, 3, 0, 0, 6478, 6479, + 7, 11, 0, 0, 6479, 6480, 7, 6, 0, 0, 6480, 6481, 7, 7, 0, 0, 6481, 6482, + 7, 8, 0, 0, 6482, 6483, 5, 95, 0, 0, 6483, 6484, 7, 4, 0, 0, 6484, 6485, + 7, 7, 0, 0, 6485, 6486, 7, 5, 0, 0, 6486, 6487, 7, 3, 0, 0, 6487, 6488, + 7, 10, 0, 0, 6488, 956, 1, 0, 0, 0, 6489, 6490, 7, 23, 0, 0, 6490, 6491, + 7, 3, 0, 0, 6491, 6492, 7, 11, 0, 0, 6492, 6493, 7, 6, 0, 0, 6493, 6494, + 7, 7, 0, 0, 6494, 6495, 7, 8, 0, 0, 6495, 6496, 5, 95, 0, 0, 6496, 6497, + 7, 20, 0, 0, 6497, 6498, 7, 7, 0, 0, 6498, 6499, 7, 3, 0, 0, 6499, 6500, + 7, 8, 0, 0, 6500, 6501, 7, 6, 0, 0, 6501, 6502, 7, 16, 0, 0, 6502, 6503, + 7, 7, 0, 0, 6503, 6504, 7, 3, 0, 0, 6504, 6505, 7, 6, 0, 0, 6505, 6506, + 5, 95, 0, 0, 6506, 6507, 7, 25, 0, 0, 6507, 6508, 7, 7, 0, 0, 6508, 6509, + 7, 8, 0, 0, 6509, 6510, 7, 15, 0, 0, 6510, 6511, 7, 19, 0, 0, 6511, 6512, + 7, 4, 0, 0, 6512, 958, 1, 0, 0, 0, 6513, 6514, 7, 23, 0, 0, 6514, 6515, + 7, 3, 0, 0, 6515, 6516, 7, 11, 0, 0, 6516, 6517, 7, 6, 0, 0, 6517, 6518, + 7, 7, 0, 0, 6518, 6519, 7, 8, 0, 0, 6519, 6520, 5, 95, 0, 0, 6520, 6521, + 7, 20, 0, 0, 6521, 6522, 7, 19, 0, 0, 6522, 6523, 7, 11, 0, 0, 6523, 6524, + 7, 6, 0, 0, 6524, 960, 1, 0, 0, 0, 6525, 6526, 7, 23, 0, 0, 6526, 6527, + 7, 3, 0, 0, 6527, 6528, 7, 11, 0, 0, 6528, 6529, 7, 6, 0, 0, 6529, 6530, + 7, 7, 0, 0, 6530, 6531, 7, 8, 0, 0, 6531, 6532, 5, 95, 0, 0, 6532, 6533, + 7, 5, 0, 0, 6533, 6534, 7, 19, 0, 0, 6534, 6535, 7, 22, 0, 0, 6535, 6536, + 5, 95, 0, 0, 6536, 6537, 7, 18, 0, 0, 6537, 6538, 7, 15, 0, 0, 6538, 6539, + 7, 5, 0, 0, 6539, 6540, 7, 7, 0, 0, 6540, 962, 1, 0, 0, 0, 6541, 6542, + 7, 23, 0, 0, 6542, 6543, 7, 3, 0, 0, 6543, 6544, 7, 11, 0, 0, 6544, 6545, + 7, 6, 0, 0, 6545, 6546, 7, 7, 0, 0, 6546, 6547, 7, 8, 0, 0, 6547, 6548, + 5, 95, 0, 0, 6548, 6549, 7, 5, 0, 0, 6549, 6550, 7, 19, 0, 0, 6550, 6551, + 7, 22, 0, 0, 6551, 6552, 5, 95, 0, 0, 6552, 6553, 7, 25, 0, 0, 6553, 6554, + 7, 19, 0, 0, 6554, 6555, 7, 11, 0, 0, 6555, 964, 1, 0, 0, 0, 6556, 6557, + 7, 23, 0, 0, 6557, 6558, 7, 3, 0, 0, 6558, 6559, 7, 11, 0, 0, 6559, 6560, + 7, 6, 0, 0, 6560, 6561, 7, 7, 0, 0, 6561, 6562, 7, 8, 0, 0, 6562, 6563, + 5, 95, 0, 0, 6563, 6564, 7, 25, 0, 0, 6564, 6565, 7, 3, 0, 0, 6565, 6566, + 7, 11, 0, 0, 6566, 6567, 7, 11, 0, 0, 6567, 6568, 7, 9, 0, 0, 6568, 6569, + 7, 19, 0, 0, 6569, 6570, 7, 8, 0, 0, 6570, 6571, 7, 4, 0, 0, 6571, 966, + 1, 0, 0, 0, 6572, 6573, 7, 23, 0, 0, 6573, 6574, 7, 3, 0, 0, 6574, 6575, + 7, 11, 0, 0, 6575, 6576, 7, 6, 0, 0, 6576, 6577, 7, 7, 0, 0, 6577, 6578, + 7, 8, 0, 0, 6578, 6579, 5, 95, 0, 0, 6579, 6580, 7, 25, 0, 0, 6580, 6581, + 7, 19, 0, 0, 6581, 6582, 7, 8, 0, 0, 6582, 6583, 7, 6, 0, 0, 6583, 968, + 1, 0, 0, 0, 6584, 6585, 7, 23, 0, 0, 6585, 6586, 7, 3, 0, 0, 6586, 6587, + 7, 11, 0, 0, 6587, 6588, 7, 6, 0, 0, 6588, 6589, 7, 7, 0, 0, 6589, 6590, + 7, 8, 0, 0, 6590, 6591, 5, 95, 0, 0, 6591, 6592, 7, 8, 0, 0, 6592, 6593, + 7, 7, 0, 0, 6593, 6594, 7, 6, 0, 0, 6594, 6595, 7, 8, 0, 0, 6595, 6596, + 7, 10, 0, 0, 6596, 6597, 5, 95, 0, 0, 6597, 6598, 7, 14, 0, 0, 6598, 6599, + 7, 19, 0, 0, 6599, 6600, 7, 17, 0, 0, 6600, 6601, 7, 12, 0, 0, 6601, 6602, + 7, 6, 0, 0, 6602, 970, 1, 0, 0, 0, 6603, 6604, 7, 23, 0, 0, 6604, 6605, + 7, 3, 0, 0, 6605, 6606, 7, 11, 0, 0, 6606, 6607, 7, 6, 0, 0, 6607, 6608, + 7, 7, 0, 0, 6608, 6609, 7, 8, 0, 0, 6609, 6610, 5, 95, 0, 0, 6610, 6611, + 7, 11, 0, 0, 6611, 6612, 7, 11, 0, 0, 6612, 6613, 7, 5, 0, 0, 6613, 972, + 1, 0, 0, 0, 6614, 6615, 7, 23, 0, 0, 6615, 6616, 7, 3, 0, 0, 6616, 6617, + 7, 11, 0, 0, 6617, 6618, 7, 6, 0, 0, 6618, 6619, 7, 7, 0, 0, 6619, 6620, + 7, 8, 0, 0, 6620, 6621, 5, 95, 0, 0, 6621, 6622, 7, 11, 0, 0, 6622, 6623, + 7, 11, 0, 0, 6623, 6624, 7, 5, 0, 0, 6624, 6625, 5, 95, 0, 0, 6625, 6626, + 7, 14, 0, 0, 6626, 6627, 7, 3, 0, 0, 6627, 974, 1, 0, 0, 0, 6628, 6629, + 7, 23, 0, 0, 6629, 6630, 7, 3, 0, 0, 6630, 6631, 7, 11, 0, 0, 6631, 6632, + 7, 6, 0, 0, 6632, 6633, 7, 7, 0, 0, 6633, 6634, 7, 8, 0, 0, 6634, 6635, + 5, 95, 0, 0, 6635, 6636, 7, 11, 0, 0, 6636, 6637, 7, 11, 0, 0, 6637, 6638, + 7, 5, 0, 0, 6638, 6639, 5, 95, 0, 0, 6639, 6640, 7, 14, 0, 0, 6640, 6641, + 7, 3, 0, 0, 6641, 6642, 7, 25, 0, 0, 6642, 6643, 7, 3, 0, 0, 6643, 6644, + 7, 6, 0, 0, 6644, 6645, 7, 20, 0, 0, 6645, 976, 1, 0, 0, 0, 6646, 6647, + 7, 23, 0, 0, 6647, 6648, 7, 3, 0, 0, 6648, 6649, 7, 11, 0, 0, 6649, 6650, + 7, 6, 0, 0, 6650, 6651, 7, 7, 0, 0, 6651, 6652, 7, 8, 0, 0, 6652, 6653, + 5, 95, 0, 0, 6653, 6654, 7, 11, 0, 0, 6654, 6655, 7, 11, 0, 0, 6655, 6656, + 7, 5, 0, 0, 6656, 6657, 5, 95, 0, 0, 6657, 6658, 7, 14, 0, 0, 6658, 6659, + 7, 7, 0, 0, 6659, 6660, 7, 8, 0, 0, 6660, 6661, 7, 6, 0, 0, 6661, 978, + 1, 0, 0, 0, 6662, 6663, 7, 23, 0, 0, 6663, 6664, 7, 3, 0, 0, 6664, 6665, + 7, 11, 0, 0, 6665, 6666, 7, 6, 0, 0, 6666, 6667, 7, 7, 0, 0, 6667, 6668, + 7, 8, 0, 0, 6668, 6669, 5, 95, 0, 0, 6669, 6670, 7, 11, 0, 0, 6670, 6671, + 7, 11, 0, 0, 6671, 6672, 7, 5, 0, 0, 6672, 6673, 5, 95, 0, 0, 6673, 6674, + 7, 14, 0, 0, 6674, 6675, 7, 15, 0, 0, 6675, 6676, 7, 25, 0, 0, 6676, 6677, + 7, 20, 0, 0, 6677, 6678, 7, 7, 0, 0, 6678, 6679, 7, 8, 0, 0, 6679, 980, + 1, 0, 0, 0, 6680, 6681, 7, 23, 0, 0, 6681, 6682, 7, 3, 0, 0, 6682, 6683, + 7, 11, 0, 0, 6683, 6684, 7, 6, 0, 0, 6684, 6685, 7, 7, 0, 0, 6685, 6686, + 7, 8, 0, 0, 6686, 6687, 5, 95, 0, 0, 6687, 6688, 7, 11, 0, 0, 6688, 6689, + 7, 11, 0, 0, 6689, 6690, 7, 5, 0, 0, 6690, 6691, 5, 95, 0, 0, 6691, 6692, + 7, 14, 0, 0, 6692, 6693, 7, 8, 0, 0, 6693, 6694, 7, 5, 0, 0, 6694, 982, + 1, 0, 0, 0, 6695, 6696, 7, 23, 0, 0, 6696, 6697, 7, 3, 0, 0, 6697, 6698, + 7, 11, 0, 0, 6698, 6699, 7, 6, 0, 0, 6699, 6700, 7, 7, 0, 0, 6700, 6701, + 7, 8, 0, 0, 6701, 6702, 5, 95, 0, 0, 6702, 6703, 7, 11, 0, 0, 6703, 6704, + 7, 11, 0, 0, 6704, 6705, 7, 5, 0, 0, 6705, 6706, 5, 95, 0, 0, 6706, 6707, + 7, 14, 0, 0, 6707, 6708, 7, 8, 0, 0, 6708, 6709, 7, 5, 0, 0, 6709, 6710, + 7, 25, 0, 0, 6710, 6711, 7, 3, 0, 0, 6711, 6712, 7, 6, 0, 0, 6712, 6713, + 7, 20, 0, 0, 6713, 984, 1, 0, 0, 0, 6714, 6715, 7, 23, 0, 0, 6715, 6716, + 7, 3, 0, 0, 6716, 6717, 7, 11, 0, 0, 6717, 6718, 7, 6, 0, 0, 6718, 6719, + 7, 7, 0, 0, 6719, 6720, 7, 8, 0, 0, 6720, 6721, 5, 95, 0, 0, 6721, 6722, + 7, 11, 0, 0, 6722, 6723, 7, 11, 0, 0, 6723, 6724, 7, 5, 0, 0, 6724, 6725, + 5, 95, 0, 0, 6725, 6726, 7, 21, 0, 0, 6726, 6727, 7, 7, 0, 0, 6727, 6728, + 7, 10, 0, 0, 6728, 986, 1, 0, 0, 0, 6729, 6730, 7, 23, 0, 0, 6730, 6731, + 7, 3, 0, 0, 6731, 6732, 7, 11, 0, 0, 6732, 6733, 7, 6, 0, 0, 6733, 6734, + 7, 7, 0, 0, 6734, 6735, 7, 8, 0, 0, 6735, 6736, 5, 95, 0, 0, 6736, 6737, + 7, 6, 0, 0, 6737, 6738, 7, 5, 0, 0, 6738, 6739, 7, 11, 0, 0, 6739, 6740, + 5, 95, 0, 0, 6740, 6741, 7, 24, 0, 0, 6741, 6742, 7, 7, 0, 0, 6742, 6743, + 7, 8, 0, 0, 6743, 6744, 7, 11, 0, 0, 6744, 6745, 7, 15, 0, 0, 6745, 6746, + 7, 19, 0, 0, 6746, 6747, 7, 12, 0, 0, 6747, 988, 1, 0, 0, 0, 6748, 6749, + 7, 23, 0, 0, 6749, 6750, 7, 3, 0, 0, 6750, 6751, 7, 11, 0, 0, 6751, 6752, + 7, 6, 0, 0, 6752, 6753, 7, 7, 0, 0, 6753, 6754, 7, 8, 0, 0, 6754, 6755, + 5, 95, 0, 0, 6755, 6756, 7, 17, 0, 0, 6756, 6757, 7, 11, 0, 0, 6757, 6758, + 7, 7, 0, 0, 6758, 6759, 7, 8, 0, 0, 6759, 990, 1, 0, 0, 0, 6760, 6761, + 7, 23, 0, 0, 6761, 6762, 7, 3, 0, 0, 6762, 6763, 7, 26, 0, 0, 6763, 6764, + 5, 95, 0, 0, 6764, 6765, 7, 14, 0, 0, 6765, 6766, 7, 19, 0, 0, 6766, 6767, + 7, 12, 0, 0, 6767, 6768, 7, 12, 0, 0, 6768, 6769, 7, 7, 0, 0, 6769, 6770, + 7, 14, 0, 0, 6770, 6771, 7, 6, 0, 0, 6771, 6772, 7, 15, 0, 0, 6772, 6773, + 7, 19, 0, 0, 6773, 6774, 7, 12, 0, 0, 6774, 6775, 7, 11, 0, 0, 6775, 6776, + 5, 95, 0, 0, 6776, 6777, 7, 25, 0, 0, 6777, 6778, 7, 7, 0, 0, 6778, 6779, + 7, 8, 0, 0, 6779, 6780, 5, 95, 0, 0, 6780, 6781, 7, 20, 0, 0, 6781, 6782, + 7, 19, 0, 0, 6782, 6783, 7, 17, 0, 0, 6783, 6784, 7, 8, 0, 0, 6784, 992, + 1, 0, 0, 0, 6785, 6786, 7, 23, 0, 0, 6786, 6787, 7, 3, 0, 0, 6787, 6788, + 7, 26, 0, 0, 6788, 6789, 5, 95, 0, 0, 6789, 6790, 7, 28, 0, 0, 6790, 6791, + 7, 17, 0, 0, 6791, 6792, 7, 7, 0, 0, 6792, 6793, 7, 8, 0, 0, 6793, 6794, + 7, 15, 0, 0, 6794, 6795, 7, 7, 0, 0, 6795, 6796, 7, 11, 0, 0, 6796, 6797, + 5, 95, 0, 0, 6797, 6798, 7, 25, 0, 0, 6798, 6799, 7, 7, 0, 0, 6799, 6800, + 7, 8, 0, 0, 6800, 6801, 5, 95, 0, 0, 6801, 6802, 7, 20, 0, 0, 6802, 6803, + 7, 19, 0, 0, 6803, 6804, 7, 17, 0, 0, 6804, 6805, 7, 8, 0, 0, 6805, 994, + 1, 0, 0, 0, 6806, 6807, 7, 23, 0, 0, 6807, 6808, 7, 3, 0, 0, 6808, 6809, + 7, 26, 0, 0, 6809, 6810, 5, 95, 0, 0, 6810, 6811, 7, 8, 0, 0, 6811, 6812, + 7, 19, 0, 0, 6812, 6813, 7, 9, 0, 0, 6813, 6814, 7, 11, 0, 0, 6814, 996, + 1, 0, 0, 0, 6815, 6816, 7, 23, 0, 0, 6816, 6817, 7, 3, 0, 0, 6817, 6818, + 7, 26, 0, 0, 6818, 6819, 5, 95, 0, 0, 6819, 6820, 7, 11, 0, 0, 6820, 6821, + 7, 15, 0, 0, 6821, 6822, 7, 13, 0, 0, 6822, 6823, 7, 7, 0, 0, 6823, 998, + 1, 0, 0, 0, 6824, 6825, 7, 23, 0, 0, 6825, 6826, 7, 3, 0, 0, 6826, 6827, + 7, 26, 0, 0, 6827, 6828, 5, 95, 0, 0, 6828, 6829, 7, 17, 0, 0, 6829, 6830, + 7, 25, 0, 0, 6830, 6831, 7, 4, 0, 0, 6831, 6832, 7, 3, 0, 0, 6832, 6833, + 7, 6, 0, 0, 6833, 6834, 7, 7, 0, 0, 6834, 6835, 7, 11, 0, 0, 6835, 6836, + 5, 95, 0, 0, 6836, 6837, 7, 25, 0, 0, 6837, 6838, 7, 7, 0, 0, 6838, 6839, + 7, 8, 0, 0, 6839, 6840, 5, 95, 0, 0, 6840, 6841, 7, 20, 0, 0, 6841, 6842, + 7, 19, 0, 0, 6842, 6843, 7, 17, 0, 0, 6843, 6844, 7, 8, 0, 0, 6844, 1000, + 1, 0, 0, 0, 6845, 6846, 7, 23, 0, 0, 6846, 6847, 7, 3, 0, 0, 6847, 6848, + 7, 26, 0, 0, 6848, 6849, 5, 95, 0, 0, 6849, 6850, 7, 17, 0, 0, 6850, 6851, + 7, 11, 0, 0, 6851, 6852, 7, 7, 0, 0, 6852, 6853, 7, 8, 0, 0, 6853, 6854, + 5, 95, 0, 0, 6854, 6855, 7, 14, 0, 0, 6855, 6856, 7, 19, 0, 0, 6856, 6857, + 7, 12, 0, 0, 6857, 6858, 7, 12, 0, 0, 6858, 6859, 7, 7, 0, 0, 6859, 6860, + 7, 14, 0, 0, 6860, 6861, 7, 6, 0, 0, 6861, 6862, 7, 15, 0, 0, 6862, 6863, + 7, 19, 0, 0, 6863, 6864, 7, 12, 0, 0, 6864, 6865, 7, 11, 0, 0, 6865, 1002, + 1, 0, 0, 0, 6866, 6867, 7, 23, 0, 0, 6867, 6868, 7, 7, 0, 0, 6868, 6869, + 7, 4, 0, 0, 6869, 6870, 7, 15, 0, 0, 6870, 6871, 7, 17, 0, 0, 6871, 6872, + 7, 23, 0, 0, 6872, 1004, 1, 0, 0, 0, 6873, 6874, 7, 23, 0, 0, 6874, 6875, + 7, 7, 0, 0, 6875, 6876, 7, 23, 0, 0, 6876, 6877, 7, 16, 0, 0, 6877, 6878, + 7, 7, 0, 0, 6878, 6879, 7, 8, 0, 0, 6879, 1006, 1, 0, 0, 0, 6880, 6881, + 7, 23, 0, 0, 6881, 6882, 7, 7, 0, 0, 6882, 6883, 7, 8, 0, 0, 6883, 6884, + 7, 22, 0, 0, 6884, 6885, 7, 7, 0, 0, 6885, 1008, 1, 0, 0, 0, 6886, 6887, + 7, 23, 0, 0, 6887, 6888, 7, 7, 0, 0, 6888, 6889, 7, 11, 0, 0, 6889, 6890, + 7, 11, 0, 0, 6890, 6891, 7, 3, 0, 0, 6891, 6892, 7, 22, 0, 0, 6892, 6893, + 7, 7, 0, 0, 6893, 6894, 5, 95, 0, 0, 6894, 6895, 7, 6, 0, 0, 6895, 6896, + 7, 7, 0, 0, 6896, 6897, 7, 26, 0, 0, 6897, 6898, 7, 6, 0, 0, 6898, 1010, + 1, 0, 0, 0, 6899, 6900, 7, 23, 0, 0, 6900, 6901, 7, 15, 0, 0, 6901, 6902, + 7, 4, 0, 0, 6902, 1012, 1, 0, 0, 0, 6903, 6904, 7, 23, 0, 0, 6904, 6905, + 7, 15, 0, 0, 6905, 6906, 7, 22, 0, 0, 6906, 6907, 7, 8, 0, 0, 6907, 6908, + 7, 3, 0, 0, 6908, 6909, 7, 6, 0, 0, 6909, 6910, 7, 7, 0, 0, 6910, 1014, + 1, 0, 0, 0, 6911, 6912, 7, 23, 0, 0, 6912, 6913, 7, 15, 0, 0, 6913, 6914, + 7, 12, 0, 0, 6914, 6915, 5, 95, 0, 0, 6915, 6916, 7, 8, 0, 0, 6916, 6917, + 7, 19, 0, 0, 6917, 6918, 7, 9, 0, 0, 6918, 6919, 7, 11, 0, 0, 6919, 1016, + 1, 0, 0, 0, 6920, 6921, 7, 23, 0, 0, 6921, 6922, 7, 19, 0, 0, 6922, 6923, + 7, 4, 0, 0, 6923, 6924, 7, 7, 0, 0, 6924, 1018, 1, 0, 0, 0, 6925, 6926, + 7, 23, 0, 0, 6926, 6927, 7, 19, 0, 0, 6927, 6928, 7, 4, 0, 0, 6928, 6929, + 7, 15, 0, 0, 6929, 6930, 7, 18, 0, 0, 6930, 6931, 7, 10, 0, 0, 6931, 1020, + 1, 0, 0, 0, 6932, 6933, 7, 23, 0, 0, 6933, 6934, 7, 17, 0, 0, 6934, 6935, + 7, 6, 0, 0, 6935, 6936, 7, 7, 0, 0, 6936, 6937, 7, 26, 0, 0, 6937, 1022, + 1, 0, 0, 0, 6938, 6939, 7, 23, 0, 0, 6939, 6940, 7, 10, 0, 0, 6940, 6941, + 7, 11, 0, 0, 6941, 6942, 7, 28, 0, 0, 6942, 6943, 7, 5, 0, 0, 6943, 1024, + 1, 0, 0, 0, 6944, 6945, 7, 23, 0, 0, 6945, 6946, 7, 10, 0, 0, 6946, 6947, + 7, 11, 0, 0, 6947, 6948, 7, 28, 0, 0, 6948, 6949, 7, 5, 0, 0, 6949, 6950, + 5, 95, 0, 0, 6950, 6951, 7, 7, 0, 0, 6951, 6952, 7, 8, 0, 0, 6952, 6953, + 7, 8, 0, 0, 6953, 6954, 7, 12, 0, 0, 6954, 6955, 7, 19, 0, 0, 6955, 1026, + 1, 0, 0, 0, 6956, 6957, 7, 12, 0, 0, 6957, 6958, 7, 3, 0, 0, 6958, 6959, + 7, 23, 0, 0, 6959, 6960, 7, 7, 0, 0, 6960, 1028, 1, 0, 0, 0, 6961, 6962, + 7, 12, 0, 0, 6962, 6963, 7, 3, 0, 0, 6963, 6964, 7, 23, 0, 0, 6964, 6965, + 7, 7, 0, 0, 6965, 6966, 7, 11, 0, 0, 6966, 1030, 1, 0, 0, 0, 6967, 6968, + 7, 12, 0, 0, 6968, 6969, 7, 14, 0, 0, 6969, 6970, 7, 20, 0, 0, 6970, 6971, + 7, 3, 0, 0, 6971, 6972, 7, 8, 0, 0, 6972, 1032, 1, 0, 0, 0, 6973, 6974, + 7, 12, 0, 0, 6974, 6975, 7, 7, 0, 0, 6975, 6976, 7, 24, 0, 0, 6976, 6977, + 7, 7, 0, 0, 6977, 6978, 7, 8, 0, 0, 6978, 1034, 1, 0, 0, 0, 6979, 6980, + 7, 12, 0, 0, 6980, 6981, 7, 7, 0, 0, 6981, 6982, 7, 26, 0, 0, 6982, 6983, + 7, 6, 0, 0, 6983, 1036, 1, 0, 0, 0, 6984, 6985, 7, 12, 0, 0, 6985, 6986, + 7, 19, 0, 0, 6986, 1038, 1, 0, 0, 0, 6987, 6988, 7, 12, 0, 0, 6988, 6989, + 7, 19, 0, 0, 6989, 6990, 7, 14, 0, 0, 6990, 6991, 7, 3, 0, 0, 6991, 6992, + 7, 14, 0, 0, 6992, 6993, 7, 20, 0, 0, 6993, 6994, 7, 7, 0, 0, 6994, 1040, + 1, 0, 0, 0, 6995, 6996, 7, 12, 0, 0, 6996, 6997, 7, 19, 0, 0, 6997, 6998, + 7, 14, 0, 0, 6998, 6999, 7, 19, 0, 0, 6999, 7000, 7, 25, 0, 0, 7000, 7001, + 7, 10, 0, 0, 7001, 1042, 1, 0, 0, 0, 7002, 7003, 7, 12, 0, 0, 7003, 7004, + 7, 19, 0, 0, 7004, 7005, 7, 14, 0, 0, 7005, 7006, 7, 10, 0, 0, 7006, 7007, + 7, 14, 0, 0, 7007, 7008, 7, 5, 0, 0, 7008, 7009, 7, 7, 0, 0, 7009, 1044, + 1, 0, 0, 0, 7010, 7011, 7, 12, 0, 0, 7011, 7012, 7, 19, 0, 0, 7012, 7013, + 7, 23, 0, 0, 7013, 7014, 7, 3, 0, 0, 7014, 7015, 7, 26, 0, 0, 7015, 7016, + 7, 24, 0, 0, 7016, 7017, 7, 3, 0, 0, 7017, 7018, 7, 5, 0, 0, 7018, 7019, + 7, 17, 0, 0, 7019, 7020, 7, 7, 0, 0, 7020, 1046, 1, 0, 0, 0, 7021, 7022, + 7, 12, 0, 0, 7022, 7023, 7, 19, 0, 0, 7023, 7024, 7, 23, 0, 0, 7024, 7025, + 7, 15, 0, 0, 7025, 7026, 7, 12, 0, 0, 7026, 7027, 7, 24, 0, 0, 7027, 7028, + 7, 3, 0, 0, 7028, 7029, 7, 5, 0, 0, 7029, 7030, 7, 17, 0, 0, 7030, 7031, + 7, 7, 0, 0, 7031, 1048, 1, 0, 0, 0, 7032, 7033, 7, 12, 0, 0, 7033, 7034, + 7, 19, 0, 0, 7034, 7035, 7, 9, 0, 0, 7035, 7036, 7, 3, 0, 0, 7036, 7037, + 7, 15, 0, 0, 7037, 7038, 7, 6, 0, 0, 7038, 1050, 1, 0, 0, 0, 7039, 7040, + 7, 12, 0, 0, 7040, 7041, 7, 19, 0, 0, 7041, 7042, 7, 4, 0, 0, 7042, 7043, + 7, 7, 0, 0, 7043, 7044, 7, 22, 0, 0, 7044, 7045, 7, 8, 0, 0, 7045, 7046, + 7, 19, 0, 0, 7046, 7047, 7, 17, 0, 0, 7047, 7048, 7, 25, 0, 0, 7048, 1052, + 1, 0, 0, 0, 7049, 7050, 7, 12, 0, 0, 7050, 7051, 7, 19, 0, 0, 7051, 7052, + 7, 12, 0, 0, 7052, 7053, 7, 7, 0, 0, 7053, 1054, 1, 0, 0, 0, 7054, 7055, + 7, 19, 0, 0, 7055, 7056, 7, 4, 0, 0, 7056, 7057, 7, 16, 0, 0, 7057, 7058, + 7, 14, 0, 0, 7058, 1056, 1, 0, 0, 0, 7059, 7060, 7, 19, 0, 0, 7060, 7061, + 7, 18, 0, 0, 7061, 7062, 7, 18, 0, 0, 7062, 7063, 7, 5, 0, 0, 7063, 7064, + 7, 15, 0, 0, 7064, 7065, 7, 12, 0, 0, 7065, 7066, 7, 7, 0, 0, 7066, 1058, + 1, 0, 0, 0, 7067, 7068, 7, 19, 0, 0, 7068, 7069, 7, 18, 0, 0, 7069, 7070, + 7, 18, 0, 0, 7070, 7071, 7, 11, 0, 0, 7071, 7072, 7, 7, 0, 0, 7072, 7073, + 7, 6, 0, 0, 7073, 1060, 1, 0, 0, 0, 7074, 7075, 7, 19, 0, 0, 7075, 7076, + 7, 18, 0, 0, 7076, 1062, 1, 0, 0, 0, 7077, 7078, 7, 19, 0, 0, 7078, 7079, + 7, 27, 0, 0, 7079, 1064, 1, 0, 0, 0, 7080, 7081, 7, 19, 0, 0, 7081, 7082, + 7, 5, 0, 0, 7082, 7083, 7, 4, 0, 0, 7083, 7084, 5, 95, 0, 0, 7084, 7085, + 7, 25, 0, 0, 7085, 7086, 7, 3, 0, 0, 7086, 7087, 7, 11, 0, 0, 7087, 7088, + 7, 11, 0, 0, 7088, 7089, 7, 9, 0, 0, 7089, 7090, 7, 19, 0, 0, 7090, 7091, + 7, 8, 0, 0, 7091, 7092, 7, 4, 0, 0, 7092, 1066, 1, 0, 0, 0, 7093, 7094, + 7, 19, 0, 0, 7094, 7095, 7, 12, 0, 0, 7095, 7096, 7, 7, 0, 0, 7096, 1068, + 1, 0, 0, 0, 7097, 7098, 7, 19, 0, 0, 7098, 7099, 7, 12, 0, 0, 7099, 7100, + 7, 5, 0, 0, 7100, 7101, 7, 15, 0, 0, 7101, 7102, 7, 12, 0, 0, 7102, 7103, + 7, 7, 0, 0, 7103, 1070, 1, 0, 0, 0, 7104, 7105, 7, 19, 0, 0, 7105, 7106, + 7, 12, 0, 0, 7106, 7107, 7, 5, 0, 0, 7107, 7108, 7, 10, 0, 0, 7108, 1072, + 1, 0, 0, 0, 7109, 7110, 7, 19, 0, 0, 7110, 7111, 7, 25, 0, 0, 7111, 7112, + 7, 7, 0, 0, 7112, 7113, 7, 12, 0, 0, 7113, 1074, 1, 0, 0, 0, 7114, 7115, + 7, 19, 0, 0, 7115, 7116, 7, 25, 0, 0, 7116, 7117, 7, 6, 0, 0, 7117, 7118, + 7, 15, 0, 0, 7118, 7119, 7, 23, 0, 0, 7119, 7120, 7, 15, 0, 0, 7120, 7121, + 7, 13, 0, 0, 7121, 7122, 7, 7, 0, 0, 7122, 7123, 7, 8, 0, 0, 7123, 7124, + 5, 95, 0, 0, 7124, 7125, 7, 14, 0, 0, 7125, 7126, 7, 19, 0, 0, 7126, 7127, + 7, 11, 0, 0, 7127, 7128, 7, 6, 0, 0, 7128, 7129, 7, 11, 0, 0, 7129, 1076, + 1, 0, 0, 0, 7130, 7131, 7, 19, 0, 0, 7131, 7132, 7, 25, 0, 0, 7132, 7133, + 7, 6, 0, 0, 7133, 7134, 7, 15, 0, 0, 7134, 7135, 7, 19, 0, 0, 7135, 7136, + 7, 12, 0, 0, 7136, 7137, 7, 11, 0, 0, 7137, 1078, 1, 0, 0, 0, 7138, 7139, + 7, 19, 0, 0, 7139, 7140, 7, 9, 0, 0, 7140, 7141, 7, 12, 0, 0, 7141, 7142, + 7, 7, 0, 0, 7142, 7143, 7, 8, 0, 0, 7143, 1080, 1, 0, 0, 0, 7144, 7145, + 7, 25, 0, 0, 7145, 7146, 7, 3, 0, 0, 7146, 7147, 7, 14, 0, 0, 7147, 7148, + 7, 21, 0, 0, 7148, 7149, 5, 95, 0, 0, 7149, 7150, 7, 21, 0, 0, 7150, 7151, + 7, 7, 0, 0, 7151, 7152, 7, 10, 0, 0, 7152, 7153, 7, 11, 0, 0, 7153, 1082, + 1, 0, 0, 0, 7154, 7155, 7, 25, 0, 0, 7155, 7156, 7, 3, 0, 0, 7156, 7157, + 7, 22, 0, 0, 7157, 7158, 7, 7, 0, 0, 7158, 1084, 1, 0, 0, 0, 7159, 7160, + 7, 25, 0, 0, 7160, 7161, 7, 3, 0, 0, 7161, 7162, 7, 22, 0, 0, 7162, 7163, + 7, 7, 0, 0, 7163, 7164, 5, 95, 0, 0, 7164, 7165, 7, 14, 0, 0, 7165, 7166, + 7, 19, 0, 0, 7166, 7167, 7, 23, 0, 0, 7167, 7168, 7, 25, 0, 0, 7168, 7169, + 7, 8, 0, 0, 7169, 7170, 7, 7, 0, 0, 7170, 7171, 7, 11, 0, 0, 7171, 7172, + 7, 11, 0, 0, 7172, 7173, 7, 7, 0, 0, 7173, 7174, 7, 4, 0, 0, 7174, 1086, + 1, 0, 0, 0, 7175, 7176, 7, 25, 0, 0, 7176, 7177, 7, 3, 0, 0, 7177, 7178, + 7, 22, 0, 0, 7178, 7179, 7, 7, 0, 0, 7179, 7180, 5, 95, 0, 0, 7180, 7181, + 7, 14, 0, 0, 7181, 7182, 7, 19, 0, 0, 7182, 7183, 7, 23, 0, 0, 7183, 7184, + 7, 25, 0, 0, 7184, 7185, 7, 8, 0, 0, 7185, 7186, 7, 7, 0, 0, 7186, 7187, + 7, 11, 0, 0, 7187, 7188, 7, 11, 0, 0, 7188, 7189, 7, 15, 0, 0, 7189, 7190, + 7, 19, 0, 0, 7190, 7191, 7, 12, 0, 0, 7191, 7192, 5, 95, 0, 0, 7192, 7193, + 7, 5, 0, 0, 7193, 7194, 7, 7, 0, 0, 7194, 7195, 7, 24, 0, 0, 7195, 7196, + 7, 7, 0, 0, 7196, 7197, 7, 5, 0, 0, 7197, 1088, 1, 0, 0, 0, 7198, 7199, + 7, 25, 0, 0, 7199, 7200, 7, 3, 0, 0, 7200, 7201, 7, 8, 0, 0, 7201, 7202, + 7, 11, 0, 0, 7202, 7203, 7, 7, 0, 0, 7203, 7204, 7, 8, 0, 0, 7204, 1090, + 1, 0, 0, 0, 7205, 7206, 7, 25, 0, 0, 7206, 7207, 7, 3, 0, 0, 7207, 7208, + 7, 8, 0, 0, 7208, 7209, 7, 6, 0, 0, 7209, 7210, 7, 15, 0, 0, 7210, 7211, + 7, 3, 0, 0, 7211, 7212, 7, 5, 0, 0, 7212, 1092, 1, 0, 0, 0, 7213, 7214, + 7, 25, 0, 0, 7214, 7215, 7, 3, 0, 0, 7215, 7216, 7, 8, 0, 0, 7216, 7217, + 7, 6, 0, 0, 7217, 7218, 7, 15, 0, 0, 7218, 7219, 7, 6, 0, 0, 7219, 7220, + 7, 15, 0, 0, 7220, 7221, 7, 19, 0, 0, 7221, 7222, 7, 12, 0, 0, 7222, 7223, + 7, 15, 0, 0, 7223, 7224, 7, 12, 0, 0, 7224, 7225, 7, 22, 0, 0, 7225, 1094, + 1, 0, 0, 0, 7226, 7227, 7, 25, 0, 0, 7227, 7228, 7, 3, 0, 0, 7228, 7229, + 7, 8, 0, 0, 7229, 7230, 7, 6, 0, 0, 7230, 7231, 7, 15, 0, 0, 7231, 7232, + 7, 6, 0, 0, 7232, 7233, 7, 15, 0, 0, 7233, 7234, 7, 19, 0, 0, 7234, 7235, + 7, 12, 0, 0, 7235, 7236, 7, 11, 0, 0, 7236, 1096, 1, 0, 0, 0, 7237, 7238, + 7, 25, 0, 0, 7238, 7239, 7, 3, 0, 0, 7239, 7240, 7, 11, 0, 0, 7240, 7241, + 7, 11, 0, 0, 7241, 7242, 7, 9, 0, 0, 7242, 7243, 7, 19, 0, 0, 7243, 7244, + 7, 8, 0, 0, 7244, 7245, 7, 4, 0, 0, 7245, 1098, 1, 0, 0, 0, 7246, 7247, + 7, 25, 0, 0, 7247, 7248, 7, 3, 0, 0, 7248, 7249, 7, 11, 0, 0, 7249, 7250, + 7, 11, 0, 0, 7250, 7251, 7, 9, 0, 0, 7251, 7252, 7, 19, 0, 0, 7252, 7253, + 7, 8, 0, 0, 7253, 7254, 7, 4, 0, 0, 7254, 7255, 5, 95, 0, 0, 7255, 7256, + 7, 5, 0, 0, 7256, 7257, 7, 19, 0, 0, 7257, 7258, 7, 14, 0, 0, 7258, 7259, + 7, 21, 0, 0, 7259, 7260, 5, 95, 0, 0, 7260, 7261, 7, 6, 0, 0, 7261, 7262, + 7, 15, 0, 0, 7262, 7263, 7, 23, 0, 0, 7263, 7264, 7, 7, 0, 0, 7264, 1100, + 1, 0, 0, 0, 7265, 7266, 7, 25, 0, 0, 7266, 7267, 7, 20, 0, 0, 7267, 7268, + 7, 3, 0, 0, 7268, 7269, 7, 11, 0, 0, 7269, 7270, 7, 7, 0, 0, 7270, 1102, + 1, 0, 0, 0, 7271, 7272, 7, 25, 0, 0, 7272, 7273, 7, 5, 0, 0, 7273, 7274, + 7, 17, 0, 0, 7274, 7275, 7, 22, 0, 0, 7275, 7276, 7, 15, 0, 0, 7276, 7277, + 7, 12, 0, 0, 7277, 1104, 1, 0, 0, 0, 7278, 7279, 7, 25, 0, 0, 7279, 7280, + 7, 5, 0, 0, 7280, 7281, 7, 17, 0, 0, 7281, 7282, 7, 22, 0, 0, 7282, 7283, + 7, 15, 0, 0, 7283, 7284, 7, 12, 0, 0, 7284, 7285, 5, 95, 0, 0, 7285, 7286, + 7, 4, 0, 0, 7286, 7287, 7, 15, 0, 0, 7287, 7288, 7, 8, 0, 0, 7288, 1106, + 1, 0, 0, 0, 7289, 7290, 7, 25, 0, 0, 7290, 7291, 7, 5, 0, 0, 7291, 7292, + 7, 17, 0, 0, 7292, 7293, 7, 22, 0, 0, 7293, 7294, 7, 15, 0, 0, 7294, 7295, + 7, 12, 0, 0, 7295, 7296, 7, 11, 0, 0, 7296, 1108, 1, 0, 0, 0, 7297, 7298, + 7, 25, 0, 0, 7298, 7299, 7, 19, 0, 0, 7299, 7300, 7, 8, 0, 0, 7300, 7301, + 7, 6, 0, 0, 7301, 1110, 1, 0, 0, 0, 7302, 7303, 7, 25, 0, 0, 7303, 7304, + 7, 8, 0, 0, 7304, 7305, 7, 7, 0, 0, 7305, 7306, 7, 14, 0, 0, 7306, 7307, + 7, 7, 0, 0, 7307, 7308, 7, 4, 0, 0, 7308, 7309, 7, 7, 0, 0, 7309, 7310, + 7, 11, 0, 0, 7310, 1112, 1, 0, 0, 0, 7311, 7312, 7, 25, 0, 0, 7312, 7313, + 7, 8, 0, 0, 7313, 7314, 7, 7, 0, 0, 7314, 7315, 7, 14, 0, 0, 7315, 7316, + 7, 7, 0, 0, 7316, 7317, 7, 4, 0, 0, 7317, 7318, 7, 15, 0, 0, 7318, 7319, + 7, 12, 0, 0, 7319, 7320, 7, 22, 0, 0, 7320, 1114, 1, 0, 0, 0, 7321, 7322, + 7, 25, 0, 0, 7322, 7323, 7, 8, 0, 0, 7323, 7324, 7, 7, 0, 0, 7324, 7325, + 7, 25, 0, 0, 7325, 7326, 7, 3, 0, 0, 7326, 7327, 7, 8, 0, 0, 7327, 7328, + 7, 7, 0, 0, 7328, 1116, 1, 0, 0, 0, 7329, 7330, 7, 25, 0, 0, 7330, 7331, + 7, 8, 0, 0, 7331, 7332, 7, 7, 0, 0, 7332, 7333, 7, 11, 0, 0, 7333, 7334, + 7, 7, 0, 0, 7334, 7335, 7, 8, 0, 0, 7335, 7336, 7, 24, 0, 0, 7336, 7337, + 7, 7, 0, 0, 7337, 1118, 1, 0, 0, 0, 7338, 7339, 7, 25, 0, 0, 7339, 7340, + 7, 8, 0, 0, 7340, 7341, 7, 7, 0, 0, 7341, 7342, 7, 24, 0, 0, 7342, 1120, + 1, 0, 0, 0, 7343, 7344, 7, 25, 0, 0, 7344, 7345, 7, 8, 0, 0, 7345, 7346, + 7, 19, 0, 0, 7346, 7347, 7, 14, 0, 0, 7347, 7348, 7, 7, 0, 0, 7348, 7349, + 7, 11, 0, 0, 7349, 7350, 7, 11, 0, 0, 7350, 7351, 7, 5, 0, 0, 7351, 7352, + 7, 15, 0, 0, 7352, 7353, 7, 11, 0, 0, 7353, 7354, 7, 6, 0, 0, 7354, 1122, + 1, 0, 0, 0, 7355, 7356, 7, 25, 0, 0, 7356, 7357, 7, 8, 0, 0, 7357, 7358, + 7, 19, 0, 0, 7358, 7359, 7, 18, 0, 0, 7359, 7360, 7, 15, 0, 0, 7360, 7361, + 7, 5, 0, 0, 7361, 7362, 7, 7, 0, 0, 7362, 1124, 1, 0, 0, 0, 7363, 7364, + 7, 25, 0, 0, 7364, 7365, 7, 8, 0, 0, 7365, 7366, 7, 19, 0, 0, 7366, 7367, + 7, 18, 0, 0, 7367, 7368, 7, 15, 0, 0, 7368, 7369, 7, 5, 0, 0, 7369, 7370, + 7, 7, 0, 0, 7370, 7371, 7, 11, 0, 0, 7371, 1126, 1, 0, 0, 0, 7372, 7373, + 7, 25, 0, 0, 7373, 7374, 7, 8, 0, 0, 7374, 7375, 7, 19, 0, 0, 7375, 7376, + 7, 26, 0, 0, 7376, 7377, 7, 10, 0, 0, 7377, 1128, 1, 0, 0, 0, 7378, 7379, + 7, 28, 0, 0, 7379, 7380, 7, 17, 0, 0, 7380, 7381, 7, 7, 0, 0, 7381, 7382, + 7, 8, 0, 0, 7382, 7383, 7, 10, 0, 0, 7383, 1130, 1, 0, 0, 0, 7384, 7385, + 7, 28, 0, 0, 7385, 7386, 7, 17, 0, 0, 7386, 7387, 7, 15, 0, 0, 7387, 7388, + 7, 14, 0, 0, 7388, 7389, 7, 21, 0, 0, 7389, 1132, 1, 0, 0, 0, 7390, 7391, + 7, 8, 0, 0, 7391, 7392, 7, 7, 0, 0, 7392, 7393, 7, 16, 0, 0, 7393, 7394, + 7, 17, 0, 0, 7394, 7395, 7, 15, 0, 0, 7395, 7396, 7, 5, 0, 0, 7396, 7397, + 7, 4, 0, 0, 7397, 1134, 1, 0, 0, 0, 7398, 7399, 7, 8, 0, 0, 7399, 7400, + 7, 7, 0, 0, 7400, 7401, 7, 14, 0, 0, 7401, 7402, 7, 19, 0, 0, 7402, 7403, + 7, 24, 0, 0, 7403, 7404, 7, 7, 0, 0, 7404, 7405, 7, 8, 0, 0, 7405, 1136, + 1, 0, 0, 0, 7406, 7407, 7, 8, 0, 0, 7407, 7408, 7, 7, 0, 0, 7408, 7409, + 7, 14, 0, 0, 7409, 7410, 7, 17, 0, 0, 7410, 7411, 7, 8, 0, 0, 7411, 7412, + 7, 11, 0, 0, 7412, 7413, 7, 15, 0, 0, 7413, 7414, 7, 24, 0, 0, 7414, 7415, + 7, 7, 0, 0, 7415, 1138, 1, 0, 0, 0, 7416, 7417, 7, 8, 0, 0, 7417, 7418, + 7, 7, 0, 0, 7418, 7419, 7, 4, 0, 0, 7419, 7420, 7, 19, 0, 0, 7420, 7421, + 5, 95, 0, 0, 7421, 7422, 7, 16, 0, 0, 7422, 7423, 7, 17, 0, 0, 7423, 7424, + 7, 18, 0, 0, 7424, 7425, 7, 18, 0, 0, 7425, 7426, 7, 7, 0, 0, 7426, 7427, + 7, 8, 0, 0, 7427, 7428, 5, 95, 0, 0, 7428, 7429, 7, 11, 0, 0, 7429, 7430, + 7, 15, 0, 0, 7430, 7431, 7, 13, 0, 0, 7431, 7432, 7, 7, 0, 0, 7432, 1140, + 1, 0, 0, 0, 7433, 7434, 7, 8, 0, 0, 7434, 7435, 7, 7, 0, 0, 7435, 7436, + 7, 4, 0, 0, 7436, 7437, 7, 17, 0, 0, 7437, 7438, 7, 12, 0, 0, 7438, 7439, + 7, 4, 0, 0, 7439, 7440, 7, 3, 0, 0, 7440, 7441, 7, 12, 0, 0, 7441, 7442, + 7, 6, 0, 0, 7442, 1142, 1, 0, 0, 0, 7443, 7444, 7, 8, 0, 0, 7444, 7445, + 7, 7, 0, 0, 7445, 7446, 7, 5, 0, 0, 7446, 7447, 7, 3, 0, 0, 7447, 7448, + 7, 10, 0, 0, 7448, 1144, 1, 0, 0, 0, 7449, 7450, 7, 8, 0, 0, 7450, 7451, + 7, 7, 0, 0, 7451, 7452, 7, 5, 0, 0, 7452, 7453, 7, 3, 0, 0, 7453, 7454, + 7, 10, 0, 0, 7454, 7455, 5, 95, 0, 0, 7455, 7456, 7, 5, 0, 0, 7456, 7457, + 7, 19, 0, 0, 7457, 7458, 7, 22, 0, 0, 7458, 7459, 5, 95, 0, 0, 7459, 7460, + 7, 18, 0, 0, 7460, 7461, 7, 15, 0, 0, 7461, 7462, 7, 5, 0, 0, 7462, 7463, + 7, 7, 0, 0, 7463, 1146, 1, 0, 0, 0, 7464, 7465, 7, 8, 0, 0, 7465, 7466, + 7, 7, 0, 0, 7466, 7467, 7, 5, 0, 0, 7467, 7468, 7, 3, 0, 0, 7468, 7469, + 7, 10, 0, 0, 7469, 7470, 5, 95, 0, 0, 7470, 7471, 7, 5, 0, 0, 7471, 7472, + 7, 19, 0, 0, 7472, 7473, 7, 22, 0, 0, 7473, 7474, 5, 95, 0, 0, 7474, 7475, + 7, 25, 0, 0, 7475, 7476, 7, 19, 0, 0, 7476, 7477, 7, 11, 0, 0, 7477, 1148, + 1, 0, 0, 0, 7478, 7479, 7, 8, 0, 0, 7479, 7480, 7, 7, 0, 0, 7480, 7481, + 7, 5, 0, 0, 7481, 7482, 7, 3, 0, 0, 7482, 7483, 7, 10, 0, 0, 7483, 7484, + 7, 5, 0, 0, 7484, 7485, 7, 19, 0, 0, 7485, 7486, 7, 22, 0, 0, 7486, 1150, + 1, 0, 0, 0, 7487, 7488, 7, 8, 0, 0, 7488, 7489, 7, 7, 0, 0, 7489, 7490, + 7, 23, 0, 0, 7490, 7491, 7, 19, 0, 0, 7491, 7492, 7, 24, 0, 0, 7492, 7493, + 7, 7, 0, 0, 7493, 1152, 1, 0, 0, 0, 7494, 7495, 7, 8, 0, 0, 7495, 7496, + 7, 7, 0, 0, 7496, 7497, 7, 19, 0, 0, 7497, 7498, 7, 8, 0, 0, 7498, 7499, + 7, 22, 0, 0, 7499, 7500, 7, 3, 0, 0, 7500, 7501, 7, 12, 0, 0, 7501, 7502, + 7, 15, 0, 0, 7502, 7503, 7, 13, 0, 0, 7503, 7504, 7, 7, 0, 0, 7504, 1154, + 1, 0, 0, 0, 7505, 7506, 7, 8, 0, 0, 7506, 7507, 7, 7, 0, 0, 7507, 7508, + 7, 25, 0, 0, 7508, 7509, 7, 3, 0, 0, 7509, 7510, 7, 15, 0, 0, 7510, 7511, + 7, 8, 0, 0, 7511, 1156, 1, 0, 0, 0, 7512, 7513, 7, 8, 0, 0, 7513, 7514, + 7, 7, 0, 0, 7514, 7515, 7, 25, 0, 0, 7515, 7516, 7, 5, 0, 0, 7516, 7517, + 7, 15, 0, 0, 7517, 7518, 7, 14, 0, 0, 7518, 7519, 7, 3, 0, 0, 7519, 7520, + 7, 6, 0, 0, 7520, 7521, 7, 7, 0, 0, 7521, 7522, 5, 95, 0, 0, 7522, 7523, + 7, 4, 0, 0, 7523, 7524, 7, 19, 0, 0, 7524, 7525, 5, 95, 0, 0, 7525, 7526, + 7, 4, 0, 0, 7526, 7527, 7, 16, 0, 0, 7527, 1158, 1, 0, 0, 0, 7528, 7529, + 7, 8, 0, 0, 7529, 7530, 7, 7, 0, 0, 7530, 7531, 7, 25, 0, 0, 7531, 7532, + 7, 5, 0, 0, 7532, 7533, 7, 15, 0, 0, 7533, 7534, 7, 14, 0, 0, 7534, 7535, + 7, 3, 0, 0, 7535, 7536, 7, 6, 0, 0, 7536, 7537, 7, 7, 0, 0, 7537, 7538, + 5, 95, 0, 0, 7538, 7539, 7, 4, 0, 0, 7539, 7540, 7, 19, 0, 0, 7540, 7541, + 5, 95, 0, 0, 7541, 7542, 7, 6, 0, 0, 7542, 7543, 7, 3, 0, 0, 7543, 7544, + 7, 16, 0, 0, 7544, 7545, 7, 5, 0, 0, 7545, 7546, 7, 7, 0, 0, 7546, 1160, + 1, 0, 0, 0, 7547, 7548, 7, 8, 0, 0, 7548, 7549, 7, 7, 0, 0, 7549, 7550, + 7, 25, 0, 0, 7550, 7551, 7, 5, 0, 0, 7551, 7552, 7, 15, 0, 0, 7552, 7553, + 7, 14, 0, 0, 7553, 7554, 7, 3, 0, 0, 7554, 7555, 7, 6, 0, 0, 7555, 7556, + 7, 7, 0, 0, 7556, 7557, 5, 95, 0, 0, 7557, 7558, 7, 15, 0, 0, 7558, 7559, + 7, 22, 0, 0, 7559, 7560, 7, 12, 0, 0, 7560, 7561, 7, 19, 0, 0, 7561, 7562, + 7, 8, 0, 0, 7562, 7563, 7, 7, 0, 0, 7563, 7564, 5, 95, 0, 0, 7564, 7565, + 7, 4, 0, 0, 7565, 7566, 7, 16, 0, 0, 7566, 1162, 1, 0, 0, 0, 7567, 7568, + 7, 8, 0, 0, 7568, 7569, 7, 7, 0, 0, 7569, 7570, 7, 25, 0, 0, 7570, 7571, + 7, 5, 0, 0, 7571, 7572, 7, 15, 0, 0, 7572, 7573, 7, 14, 0, 0, 7573, 7574, + 7, 3, 0, 0, 7574, 7575, 7, 6, 0, 0, 7575, 7576, 7, 7, 0, 0, 7576, 7577, + 5, 95, 0, 0, 7577, 7578, 7, 15, 0, 0, 7578, 7579, 7, 22, 0, 0, 7579, 7580, + 7, 12, 0, 0, 7580, 7581, 7, 19, 0, 0, 7581, 7582, 7, 8, 0, 0, 7582, 7583, + 7, 7, 0, 0, 7583, 7584, 5, 95, 0, 0, 7584, 7585, 7, 6, 0, 0, 7585, 7586, + 7, 3, 0, 0, 7586, 7587, 7, 16, 0, 0, 7587, 7588, 7, 5, 0, 0, 7588, 7589, + 7, 7, 0, 0, 7589, 1164, 1, 0, 0, 0, 7590, 7591, 7, 8, 0, 0, 7591, 7592, + 7, 7, 0, 0, 7592, 7593, 7, 25, 0, 0, 7593, 7594, 7, 5, 0, 0, 7594, 7595, + 7, 15, 0, 0, 7595, 7596, 7, 14, 0, 0, 7596, 7597, 7, 3, 0, 0, 7597, 7598, + 7, 6, 0, 0, 7598, 7599, 7, 7, 0, 0, 7599, 7600, 5, 95, 0, 0, 7600, 7601, + 7, 8, 0, 0, 7601, 7602, 7, 7, 0, 0, 7602, 7603, 7, 9, 0, 0, 7603, 7604, + 7, 8, 0, 0, 7604, 7605, 7, 15, 0, 0, 7605, 7606, 7, 6, 0, 0, 7606, 7607, + 7, 7, 0, 0, 7607, 7608, 5, 95, 0, 0, 7608, 7609, 7, 4, 0, 0, 7609, 7610, + 7, 16, 0, 0, 7610, 1166, 1, 0, 0, 0, 7611, 7612, 7, 8, 0, 0, 7612, 7613, + 7, 7, 0, 0, 7613, 7614, 7, 25, 0, 0, 7614, 7615, 7, 5, 0, 0, 7615, 7616, + 7, 15, 0, 0, 7616, 7617, 7, 14, 0, 0, 7617, 7618, 7, 3, 0, 0, 7618, 7619, + 7, 6, 0, 0, 7619, 7620, 7, 7, 0, 0, 7620, 7621, 5, 95, 0, 0, 7621, 7622, + 7, 9, 0, 0, 7622, 7623, 7, 15, 0, 0, 7623, 7624, 7, 5, 0, 0, 7624, 7625, + 7, 4, 0, 0, 7625, 7626, 5, 95, 0, 0, 7626, 7627, 7, 4, 0, 0, 7627, 7628, + 7, 19, 0, 0, 7628, 7629, 5, 95, 0, 0, 7629, 7630, 7, 6, 0, 0, 7630, 7631, + 7, 3, 0, 0, 7631, 7632, 7, 16, 0, 0, 7632, 7633, 7, 5, 0, 0, 7633, 7634, + 7, 7, 0, 0, 7634, 1168, 1, 0, 0, 0, 7635, 7636, 7, 8, 0, 0, 7636, 7637, + 7, 7, 0, 0, 7637, 7638, 7, 25, 0, 0, 7638, 7639, 7, 5, 0, 0, 7639, 7640, + 7, 15, 0, 0, 7640, 7641, 7, 14, 0, 0, 7641, 7642, 7, 3, 0, 0, 7642, 7643, + 7, 6, 0, 0, 7643, 7644, 7, 7, 0, 0, 7644, 7645, 5, 95, 0, 0, 7645, 7646, + 7, 9, 0, 0, 7646, 7647, 7, 15, 0, 0, 7647, 7648, 7, 5, 0, 0, 7648, 7649, + 7, 4, 0, 0, 7649, 7650, 5, 95, 0, 0, 7650, 7651, 7, 15, 0, 0, 7651, 7652, + 7, 22, 0, 0, 7652, 7653, 7, 12, 0, 0, 7653, 7654, 7, 19, 0, 0, 7654, 7655, + 7, 8, 0, 0, 7655, 7656, 7, 7, 0, 0, 7656, 7657, 5, 95, 0, 0, 7657, 7658, + 7, 6, 0, 0, 7658, 7659, 7, 3, 0, 0, 7659, 7660, 7, 16, 0, 0, 7660, 7661, + 7, 5, 0, 0, 7661, 7662, 7, 7, 0, 0, 7662, 1170, 1, 0, 0, 0, 7663, 7664, + 7, 8, 0, 0, 7664, 7665, 7, 7, 0, 0, 7665, 7666, 7, 25, 0, 0, 7666, 7667, + 7, 5, 0, 0, 7667, 7668, 7, 15, 0, 0, 7668, 7669, 7, 14, 0, 0, 7669, 7670, + 7, 3, 0, 0, 7670, 7671, 7, 6, 0, 0, 7671, 7672, 7, 15, 0, 0, 7672, 7673, + 7, 19, 0, 0, 7673, 7674, 7, 12, 0, 0, 7674, 1172, 1, 0, 0, 0, 7675, 7676, + 7, 8, 0, 0, 7676, 7677, 7, 7, 0, 0, 7677, 7678, 7, 11, 0, 0, 7678, 7679, + 7, 7, 0, 0, 7679, 7680, 7, 6, 0, 0, 7680, 1174, 1, 0, 0, 0, 7681, 7682, + 7, 8, 0, 0, 7682, 7683, 7, 7, 0, 0, 7683, 7684, 7, 11, 0, 0, 7684, 7685, + 7, 6, 0, 0, 7685, 7686, 7, 3, 0, 0, 7686, 7687, 7, 8, 0, 0, 7687, 7688, + 7, 6, 0, 0, 7688, 1176, 1, 0, 0, 0, 7689, 7690, 7, 8, 0, 0, 7690, 7691, + 7, 7, 0, 0, 7691, 7692, 7, 11, 0, 0, 7692, 7693, 7, 17, 0, 0, 7693, 7694, + 7, 23, 0, 0, 7694, 7695, 7, 7, 0, 0, 7695, 1178, 1, 0, 0, 0, 7696, 7697, + 7, 8, 0, 0, 7697, 7698, 7, 7, 0, 0, 7698, 7699, 7, 6, 0, 0, 7699, 7700, + 7, 17, 0, 0, 7700, 7701, 7, 8, 0, 0, 7701, 7702, 7, 12, 0, 0, 7702, 7703, + 7, 7, 0, 0, 7703, 7704, 7, 4, 0, 0, 7704, 7705, 5, 95, 0, 0, 7705, 7706, + 7, 11, 0, 0, 7706, 7707, 7, 28, 0, 0, 7707, 7708, 7, 5, 0, 0, 7708, 7709, + 7, 11, 0, 0, 7709, 7710, 7, 6, 0, 0, 7710, 7711, 7, 3, 0, 0, 7711, 7712, + 7, 6, 0, 0, 7712, 7713, 7, 7, 0, 0, 7713, 1180, 1, 0, 0, 0, 7714, 7715, + 7, 8, 0, 0, 7715, 7716, 7, 7, 0, 0, 7716, 7717, 7, 6, 0, 0, 7717, 7718, + 7, 17, 0, 0, 7718, 7719, 7, 8, 0, 0, 7719, 7720, 7, 12, 0, 0, 7720, 7721, + 7, 15, 0, 0, 7721, 7722, 7, 12, 0, 0, 7722, 7723, 7, 22, 0, 0, 7723, 1182, + 1, 0, 0, 0, 7724, 7725, 7, 8, 0, 0, 7725, 7726, 7, 7, 0, 0, 7726, 7727, + 7, 6, 0, 0, 7727, 7728, 7, 17, 0, 0, 7728, 7729, 7, 8, 0, 0, 7729, 7730, + 7, 12, 0, 0, 7730, 7731, 7, 11, 0, 0, 7731, 1184, 1, 0, 0, 0, 7732, 7733, + 7, 8, 0, 0, 7733, 7734, 7, 7, 0, 0, 7734, 7735, 7, 17, 0, 0, 7735, 7736, + 7, 11, 0, 0, 7736, 7737, 7, 7, 0, 0, 7737, 1186, 1, 0, 0, 0, 7738, 7739, + 7, 8, 0, 0, 7739, 7740, 7, 19, 0, 0, 7740, 7741, 7, 5, 0, 0, 7741, 7742, + 7, 7, 0, 0, 7742, 1188, 1, 0, 0, 0, 7743, 7744, 7, 8, 0, 0, 7744, 7745, + 7, 19, 0, 0, 7745, 7746, 7, 5, 0, 0, 7746, 7747, 7, 5, 0, 0, 7747, 7748, + 7, 16, 0, 0, 7748, 7749, 7, 3, 0, 0, 7749, 7750, 7, 14, 0, 0, 7750, 7751, + 7, 21, 0, 0, 7751, 1190, 1, 0, 0, 0, 7752, 7753, 7, 8, 0, 0, 7753, 7754, + 7, 19, 0, 0, 7754, 7755, 7, 5, 0, 0, 7755, 7756, 7, 5, 0, 0, 7756, 7757, + 7, 17, 0, 0, 7757, 7758, 7, 25, 0, 0, 7758, 1192, 1, 0, 0, 0, 7759, 7760, + 7, 8, 0, 0, 7760, 7761, 7, 19, 0, 0, 7761, 7762, 7, 6, 0, 0, 7762, 7763, + 7, 3, 0, 0, 7763, 7764, 7, 6, 0, 0, 7764, 7765, 7, 7, 0, 0, 7765, 1194, + 1, 0, 0, 0, 7766, 7767, 7, 8, 0, 0, 7767, 7768, 7, 19, 0, 0, 7768, 7769, + 7, 9, 0, 0, 7769, 1196, 1, 0, 0, 0, 7770, 7771, 7, 8, 0, 0, 7771, 7772, + 7, 19, 0, 0, 7772, 7773, 7, 9, 0, 0, 7773, 7774, 7, 11, 0, 0, 7774, 1198, + 1, 0, 0, 0, 7775, 7776, 7, 8, 0, 0, 7776, 7777, 7, 19, 0, 0, 7777, 7778, + 7, 9, 0, 0, 7778, 7779, 5, 95, 0, 0, 7779, 7780, 7, 18, 0, 0, 7780, 7781, + 7, 19, 0, 0, 7781, 7782, 7, 8, 0, 0, 7782, 7783, 7, 23, 0, 0, 7783, 7784, + 7, 3, 0, 0, 7784, 7785, 7, 6, 0, 0, 7785, 1200, 1, 0, 0, 0, 7786, 7787, + 7, 8, 0, 0, 7787, 7788, 7, 6, 0, 0, 7788, 7789, 7, 8, 0, 0, 7789, 7790, + 7, 7, 0, 0, 7790, 7791, 7, 7, 0, 0, 7791, 1202, 1, 0, 0, 0, 7792, 7793, + 7, 11, 0, 0, 7793, 7794, 7, 3, 0, 0, 7794, 7795, 7, 24, 0, 0, 7795, 7796, + 7, 7, 0, 0, 7796, 7797, 7, 25, 0, 0, 7797, 7798, 7, 19, 0, 0, 7798, 7799, + 7, 15, 0, 0, 7799, 7800, 7, 12, 0, 0, 7800, 7801, 7, 6, 0, 0, 7801, 1204, + 1, 0, 0, 0, 7802, 7803, 7, 11, 0, 0, 7803, 7804, 7, 14, 0, 0, 7804, 7805, + 7, 20, 0, 0, 7805, 7806, 7, 7, 0, 0, 7806, 7807, 7, 4, 0, 0, 7807, 7808, + 7, 17, 0, 0, 7808, 7809, 7, 5, 0, 0, 7809, 7810, 7, 7, 0, 0, 7810, 1206, + 1, 0, 0, 0, 7811, 7812, 7, 11, 0, 0, 7812, 7813, 7, 7, 0, 0, 7813, 7814, + 7, 14, 0, 0, 7814, 7815, 7, 17, 0, 0, 7815, 7816, 7, 8, 0, 0, 7816, 7817, + 7, 15, 0, 0, 7817, 7818, 7, 6, 0, 0, 7818, 7819, 7, 10, 0, 0, 7819, 1208, + 1, 0, 0, 0, 7820, 7821, 7, 11, 0, 0, 7821, 7822, 7, 7, 0, 0, 7822, 7823, + 7, 28, 0, 0, 7823, 7824, 7, 17, 0, 0, 7824, 7825, 7, 7, 0, 0, 7825, 7826, + 7, 12, 0, 0, 7826, 7827, 7, 14, 0, 0, 7827, 7828, 7, 7, 0, 0, 7828, 1210, + 1, 0, 0, 0, 7829, 7830, 7, 11, 0, 0, 7830, 7831, 7, 7, 0, 0, 7831, 7832, + 7, 8, 0, 0, 7832, 7833, 7, 24, 0, 0, 7833, 7834, 7, 7, 0, 0, 7834, 7835, + 7, 8, 0, 0, 7835, 1212, 1, 0, 0, 0, 7836, 7837, 7, 11, 0, 0, 7837, 7838, + 7, 7, 0, 0, 7838, 7839, 7, 11, 0, 0, 7839, 7840, 7, 11, 0, 0, 7840, 7841, + 7, 15, 0, 0, 7841, 7842, 7, 19, 0, 0, 7842, 7843, 7, 12, 0, 0, 7843, 1214, + 1, 0, 0, 0, 7844, 7845, 7, 11, 0, 0, 7845, 7846, 7, 20, 0, 0, 7846, 7847, + 7, 3, 0, 0, 7847, 7848, 7, 8, 0, 0, 7848, 7849, 7, 7, 0, 0, 7849, 1216, + 1, 0, 0, 0, 7850, 7851, 7, 11, 0, 0, 7851, 7852, 7, 20, 0, 0, 7852, 7853, + 7, 3, 0, 0, 7853, 7854, 7, 8, 0, 0, 7854, 7855, 7, 7, 0, 0, 7855, 7856, + 7, 4, 0, 0, 7856, 1218, 1, 0, 0, 0, 7857, 7858, 7, 11, 0, 0, 7858, 7859, + 7, 15, 0, 0, 7859, 7860, 7, 22, 0, 0, 7860, 7861, 7, 12, 0, 0, 7861, 7862, + 7, 7, 0, 0, 7862, 7863, 7, 4, 0, 0, 7863, 1220, 1, 0, 0, 0, 7864, 7865, + 7, 11, 0, 0, 7865, 7866, 7, 15, 0, 0, 7866, 7867, 7, 23, 0, 0, 7867, 7868, + 7, 25, 0, 0, 7868, 7869, 7, 5, 0, 0, 7869, 7870, 7, 7, 0, 0, 7870, 1222, + 1, 0, 0, 0, 7871, 7872, 7, 11, 0, 0, 7872, 7873, 7, 5, 0, 0, 7873, 7874, + 7, 3, 0, 0, 7874, 7875, 7, 24, 0, 0, 7875, 7876, 7, 7, 0, 0, 7876, 1224, + 1, 0, 0, 0, 7877, 7878, 7, 11, 0, 0, 7878, 7879, 7, 5, 0, 0, 7879, 7880, + 7, 19, 0, 0, 7880, 7881, 7, 9, 0, 0, 7881, 1226, 1, 0, 0, 0, 7882, 7883, + 7, 11, 0, 0, 7883, 7884, 7, 12, 0, 0, 7884, 7885, 7, 3, 0, 0, 7885, 7886, + 7, 25, 0, 0, 7886, 7887, 7, 11, 0, 0, 7887, 7888, 7, 20, 0, 0, 7888, 7889, + 7, 19, 0, 0, 7889, 7890, 7, 6, 0, 0, 7890, 1228, 1, 0, 0, 0, 7891, 7892, + 7, 11, 0, 0, 7892, 7893, 7, 19, 0, 0, 7893, 7894, 7, 14, 0, 0, 7894, 7895, + 7, 21, 0, 0, 7895, 7896, 7, 7, 0, 0, 7896, 7897, 7, 6, 0, 0, 7897, 1230, + 1, 0, 0, 0, 7898, 7899, 7, 11, 0, 0, 7899, 7900, 7, 19, 0, 0, 7900, 7901, + 7, 23, 0, 0, 7901, 7902, 7, 7, 0, 0, 7902, 1232, 1, 0, 0, 0, 7903, 7904, + 7, 11, 0, 0, 7904, 7905, 7, 19, 0, 0, 7905, 7906, 7, 12, 0, 0, 7906, 7907, + 7, 3, 0, 0, 7907, 7908, 7, 23, 0, 0, 7908, 7909, 7, 7, 0, 0, 7909, 1234, + 1, 0, 0, 0, 7910, 7911, 7, 11, 0, 0, 7911, 7912, 7, 19, 0, 0, 7912, 7913, + 7, 17, 0, 0, 7913, 7914, 7, 12, 0, 0, 7914, 7915, 7, 4, 0, 0, 7915, 7916, + 7, 11, 0, 0, 7916, 1236, 1, 0, 0, 0, 7917, 7918, 7, 11, 0, 0, 7918, 7919, + 7, 19, 0, 0, 7919, 7920, 7, 17, 0, 0, 7920, 7921, 7, 8, 0, 0, 7921, 7922, + 7, 14, 0, 0, 7922, 7923, 7, 7, 0, 0, 7923, 1238, 1, 0, 0, 0, 7924, 7925, + 7, 11, 0, 0, 7925, 7926, 7, 28, 0, 0, 7926, 7927, 7, 5, 0, 0, 7927, 7928, + 5, 95, 0, 0, 7928, 7929, 7, 3, 0, 0, 7929, 7930, 7, 18, 0, 0, 7930, 7931, + 7, 6, 0, 0, 7931, 7932, 7, 7, 0, 0, 7932, 7933, 7, 8, 0, 0, 7933, 7934, + 5, 95, 0, 0, 7934, 7935, 7, 22, 0, 0, 7935, 7936, 7, 6, 0, 0, 7936, 7937, + 7, 15, 0, 0, 7937, 7938, 7, 4, 0, 0, 7938, 7939, 7, 11, 0, 0, 7939, 1240, + 1, 0, 0, 0, 7940, 7941, 7, 11, 0, 0, 7941, 7942, 7, 28, 0, 0, 7942, 7943, + 7, 5, 0, 0, 7943, 7944, 5, 95, 0, 0, 7944, 7945, 7, 3, 0, 0, 7945, 7946, + 7, 18, 0, 0, 7946, 7947, 7, 6, 0, 0, 7947, 7948, 7, 7, 0, 0, 7948, 7949, + 7, 8, 0, 0, 7949, 7950, 5, 95, 0, 0, 7950, 7951, 7, 23, 0, 0, 7951, 7952, + 7, 6, 0, 0, 7952, 7953, 7, 11, 0, 0, 7953, 7954, 5, 95, 0, 0, 7954, 7955, + 7, 22, 0, 0, 7955, 7956, 7, 3, 0, 0, 7956, 7957, 7, 25, 0, 0, 7957, 7958, + 7, 11, 0, 0, 7958, 1242, 1, 0, 0, 0, 7959, 7960, 7, 11, 0, 0, 7960, 7961, + 7, 28, 0, 0, 7961, 7962, 7, 5, 0, 0, 7962, 7963, 5, 95, 0, 0, 7963, 7964, + 7, 16, 0, 0, 7964, 7965, 7, 7, 0, 0, 7965, 7966, 7, 18, 0, 0, 7966, 7967, + 7, 19, 0, 0, 7967, 7968, 7, 8, 0, 0, 7968, 7969, 7, 7, 0, 0, 7969, 7970, + 5, 95, 0, 0, 7970, 7971, 7, 22, 0, 0, 7971, 7972, 7, 6, 0, 0, 7972, 7973, + 7, 15, 0, 0, 7973, 7974, 7, 4, 0, 0, 7974, 7975, 7, 11, 0, 0, 7975, 1244, + 1, 0, 0, 0, 7976, 7977, 7, 11, 0, 0, 7977, 7978, 7, 28, 0, 0, 7978, 7979, + 7, 5, 0, 0, 7979, 7980, 5, 95, 0, 0, 7980, 7981, 7, 16, 0, 0, 7981, 7982, + 7, 17, 0, 0, 7982, 7983, 7, 18, 0, 0, 7983, 7984, 7, 18, 0, 0, 7984, 7985, + 7, 7, 0, 0, 7985, 7986, 7, 8, 0, 0, 7986, 7987, 5, 95, 0, 0, 7987, 7988, + 7, 8, 0, 0, 7988, 7989, 7, 7, 0, 0, 7989, 7990, 7, 11, 0, 0, 7990, 7991, + 7, 17, 0, 0, 7991, 7992, 7, 5, 0, 0, 7992, 7993, 7, 6, 0, 0, 7993, 1246, + 1, 0, 0, 0, 7994, 7995, 7, 11, 0, 0, 7995, 7996, 7, 28, 0, 0, 7996, 7997, + 7, 5, 0, 0, 7997, 7998, 5, 95, 0, 0, 7998, 7999, 7, 14, 0, 0, 7999, 8000, + 7, 3, 0, 0, 8000, 8001, 7, 14, 0, 0, 8001, 8002, 7, 20, 0, 0, 8002, 8003, + 7, 7, 0, 0, 8003, 1248, 1, 0, 0, 0, 8004, 8005, 7, 11, 0, 0, 8005, 8006, + 7, 28, 0, 0, 8006, 8007, 7, 5, 0, 0, 8007, 8008, 5, 95, 0, 0, 8008, 8009, + 7, 12, 0, 0, 8009, 8010, 7, 19, 0, 0, 8010, 8011, 5, 95, 0, 0, 8011, 8012, + 7, 14, 0, 0, 8012, 8013, 7, 3, 0, 0, 8013, 8014, 7, 14, 0, 0, 8014, 8015, + 7, 20, 0, 0, 8015, 8016, 7, 7, 0, 0, 8016, 1250, 1, 0, 0, 0, 8017, 8018, + 7, 11, 0, 0, 8018, 8019, 7, 28, 0, 0, 8019, 8020, 7, 5, 0, 0, 8020, 8021, + 5, 95, 0, 0, 8021, 8022, 7, 6, 0, 0, 8022, 8023, 7, 20, 0, 0, 8023, 8024, + 7, 8, 0, 0, 8024, 8025, 7, 7, 0, 0, 8025, 8026, 7, 3, 0, 0, 8026, 8027, + 7, 4, 0, 0, 8027, 1252, 1, 0, 0, 0, 8028, 8029, 7, 11, 0, 0, 8029, 8030, + 7, 6, 0, 0, 8030, 8031, 7, 3, 0, 0, 8031, 8032, 7, 8, 0, 0, 8032, 8033, + 7, 6, 0, 0, 8033, 1254, 1, 0, 0, 0, 8034, 8035, 7, 11, 0, 0, 8035, 8036, + 7, 6, 0, 0, 8036, 8037, 7, 3, 0, 0, 8037, 8038, 7, 8, 0, 0, 8038, 8039, + 7, 6, 0, 0, 8039, 8040, 7, 11, 0, 0, 8040, 1256, 1, 0, 0, 0, 8041, 8042, + 7, 11, 0, 0, 8042, 8043, 7, 6, 0, 0, 8043, 8044, 7, 3, 0, 0, 8044, 8045, + 7, 6, 0, 0, 8045, 8046, 7, 11, 0, 0, 8046, 8047, 5, 95, 0, 0, 8047, 8048, + 7, 3, 0, 0, 8048, 8049, 7, 17, 0, 0, 8049, 8050, 7, 6, 0, 0, 8050, 8051, + 7, 19, 0, 0, 8051, 8052, 5, 95, 0, 0, 8052, 8053, 7, 8, 0, 0, 8053, 8054, + 7, 7, 0, 0, 8054, 8055, 7, 14, 0, 0, 8055, 8056, 7, 3, 0, 0, 8056, 8057, + 7, 5, 0, 0, 8057, 8058, 7, 14, 0, 0, 8058, 1258, 1, 0, 0, 0, 8059, 8060, + 7, 11, 0, 0, 8060, 8061, 7, 6, 0, 0, 8061, 8062, 7, 3, 0, 0, 8062, 8063, + 7, 6, 0, 0, 8063, 8064, 7, 11, 0, 0, 8064, 8065, 5, 95, 0, 0, 8065, 8066, + 7, 25, 0, 0, 8066, 8067, 7, 7, 0, 0, 8067, 8068, 7, 8, 0, 0, 8068, 8069, + 7, 11, 0, 0, 8069, 8070, 7, 15, 0, 0, 8070, 8071, 7, 11, 0, 0, 8071, 8072, + 7, 6, 0, 0, 8072, 8073, 7, 7, 0, 0, 8073, 8074, 7, 12, 0, 0, 8074, 8075, + 7, 6, 0, 0, 8075, 1260, 1, 0, 0, 0, 8076, 8077, 7, 11, 0, 0, 8077, 8078, + 7, 6, 0, 0, 8078, 8079, 7, 3, 0, 0, 8079, 8080, 7, 6, 0, 0, 8080, 8081, + 7, 11, 0, 0, 8081, 8082, 5, 95, 0, 0, 8082, 8083, 7, 11, 0, 0, 8083, 8084, + 7, 3, 0, 0, 8084, 8085, 7, 23, 0, 0, 8085, 8086, 7, 25, 0, 0, 8086, 8087, + 7, 5, 0, 0, 8087, 8088, 7, 7, 0, 0, 8088, 8089, 5, 95, 0, 0, 8089, 8090, + 7, 25, 0, 0, 8090, 8091, 7, 3, 0, 0, 8091, 8092, 7, 22, 0, 0, 8092, 8093, + 7, 7, 0, 0, 8093, 8094, 7, 11, 0, 0, 8094, 1262, 1, 0, 0, 0, 8095, 8096, + 7, 11, 0, 0, 8096, 8097, 7, 6, 0, 0, 8097, 8098, 7, 3, 0, 0, 8098, 8099, + 7, 6, 0, 0, 8099, 8100, 7, 17, 0, 0, 8100, 8101, 7, 11, 0, 0, 8101, 1264, + 1, 0, 0, 0, 8102, 8103, 7, 11, 0, 0, 8103, 8104, 7, 6, 0, 0, 8104, 8105, + 7, 19, 0, 0, 8105, 8106, 7, 25, 0, 0, 8106, 1266, 1, 0, 0, 0, 8107, 8108, + 7, 11, 0, 0, 8108, 8109, 7, 6, 0, 0, 8109, 8110, 7, 19, 0, 0, 8110, 8111, + 7, 8, 0, 0, 8111, 8112, 7, 3, 0, 0, 8112, 8113, 7, 22, 0, 0, 8113, 8114, + 7, 7, 0, 0, 8114, 1268, 1, 0, 0, 0, 8115, 8116, 7, 11, 0, 0, 8116, 8117, + 7, 6, 0, 0, 8117, 8118, 7, 19, 0, 0, 8118, 8119, 7, 8, 0, 0, 8119, 8120, + 7, 7, 0, 0, 8120, 8121, 7, 4, 0, 0, 8121, 1270, 1, 0, 0, 0, 8122, 8123, + 7, 11, 0, 0, 8123, 8124, 7, 6, 0, 0, 8124, 8125, 7, 8, 0, 0, 8125, 8126, + 7, 15, 0, 0, 8126, 8127, 7, 12, 0, 0, 8127, 8128, 7, 22, 0, 0, 8128, 1272, + 1, 0, 0, 0, 8129, 8130, 7, 11, 0, 0, 8130, 8131, 7, 17, 0, 0, 8131, 8132, + 7, 16, 0, 0, 8132, 8133, 7, 14, 0, 0, 8133, 8134, 7, 5, 0, 0, 8134, 8135, + 7, 3, 0, 0, 8135, 8136, 7, 11, 0, 0, 8136, 8137, 7, 11, 0, 0, 8137, 8138, + 5, 95, 0, 0, 8138, 8139, 7, 19, 0, 0, 8139, 8140, 7, 8, 0, 0, 8140, 8141, + 7, 15, 0, 0, 8141, 8142, 7, 22, 0, 0, 8142, 8143, 7, 15, 0, 0, 8143, 8144, + 7, 12, 0, 0, 8144, 1274, 1, 0, 0, 0, 8145, 8146, 7, 11, 0, 0, 8146, 8147, + 7, 17, 0, 0, 8147, 8148, 7, 16, 0, 0, 8148, 8149, 7, 27, 0, 0, 8149, 8150, + 7, 7, 0, 0, 8150, 8151, 7, 14, 0, 0, 8151, 8152, 7, 6, 0, 0, 8152, 1276, + 1, 0, 0, 0, 8153, 8154, 7, 11, 0, 0, 8154, 8155, 7, 17, 0, 0, 8155, 8156, + 7, 16, 0, 0, 8156, 8157, 7, 25, 0, 0, 8157, 8158, 7, 3, 0, 0, 8158, 8159, + 7, 8, 0, 0, 8159, 8160, 7, 6, 0, 0, 8160, 8161, 7, 15, 0, 0, 8161, 8162, + 7, 6, 0, 0, 8162, 8163, 7, 15, 0, 0, 8163, 8164, 7, 19, 0, 0, 8164, 8165, + 7, 12, 0, 0, 8165, 1278, 1, 0, 0, 0, 8166, 8167, 7, 11, 0, 0, 8167, 8168, + 7, 17, 0, 0, 8168, 8169, 7, 16, 0, 0, 8169, 8170, 7, 25, 0, 0, 8170, 8171, + 7, 3, 0, 0, 8171, 8172, 7, 8, 0, 0, 8172, 8173, 7, 6, 0, 0, 8173, 8174, + 7, 15, 0, 0, 8174, 8175, 7, 6, 0, 0, 8175, 8176, 7, 15, 0, 0, 8176, 8177, + 7, 19, 0, 0, 8177, 8178, 7, 12, 0, 0, 8178, 8179, 7, 11, 0, 0, 8179, 1280, + 1, 0, 0, 0, 8180, 8181, 7, 11, 0, 0, 8181, 8182, 7, 17, 0, 0, 8182, 8183, + 7, 11, 0, 0, 8183, 8184, 7, 25, 0, 0, 8184, 8185, 7, 7, 0, 0, 8185, 8186, + 7, 12, 0, 0, 8186, 8187, 7, 4, 0, 0, 8187, 1282, 1, 0, 0, 0, 8188, 8189, + 7, 11, 0, 0, 8189, 8190, 7, 9, 0, 0, 8190, 8191, 7, 3, 0, 0, 8191, 8192, + 7, 25, 0, 0, 8192, 8193, 7, 11, 0, 0, 8193, 1284, 1, 0, 0, 0, 8194, 8195, + 7, 11, 0, 0, 8195, 8196, 7, 9, 0, 0, 8196, 8197, 7, 15, 0, 0, 8197, 8198, + 7, 6, 0, 0, 8198, 8199, 7, 14, 0, 0, 8199, 8200, 7, 20, 0, 0, 8200, 8201, + 7, 7, 0, 0, 8201, 8202, 7, 11, 0, 0, 8202, 1286, 1, 0, 0, 0, 8203, 8204, + 7, 6, 0, 0, 8204, 8205, 7, 3, 0, 0, 8205, 8206, 7, 16, 0, 0, 8206, 8207, + 7, 5, 0, 0, 8207, 8208, 7, 7, 0, 0, 8208, 8209, 5, 95, 0, 0, 8209, 8210, + 7, 12, 0, 0, 8210, 8211, 7, 3, 0, 0, 8211, 8212, 7, 23, 0, 0, 8212, 8213, + 7, 7, 0, 0, 8213, 1288, 1, 0, 0, 0, 8214, 8215, 7, 6, 0, 0, 8215, 8216, + 7, 3, 0, 0, 8216, 8217, 7, 16, 0, 0, 8217, 8218, 7, 5, 0, 0, 8218, 8219, + 7, 7, 0, 0, 8219, 8220, 7, 11, 0, 0, 8220, 8221, 7, 25, 0, 0, 8221, 8222, + 7, 3, 0, 0, 8222, 8223, 7, 14, 0, 0, 8223, 8224, 7, 7, 0, 0, 8224, 1290, + 1, 0, 0, 0, 8225, 8226, 7, 6, 0, 0, 8226, 8227, 7, 3, 0, 0, 8227, 8228, + 7, 16, 0, 0, 8228, 8229, 7, 5, 0, 0, 8229, 8230, 7, 7, 0, 0, 8230, 8231, + 5, 95, 0, 0, 8231, 8232, 7, 6, 0, 0, 8232, 8233, 7, 10, 0, 0, 8233, 8234, + 7, 25, 0, 0, 8234, 8235, 7, 7, 0, 0, 8235, 1292, 1, 0, 0, 0, 8236, 8237, + 7, 6, 0, 0, 8237, 8238, 7, 7, 0, 0, 8238, 8239, 7, 23, 0, 0, 8239, 8240, + 7, 25, 0, 0, 8240, 8241, 7, 19, 0, 0, 8241, 8242, 7, 8, 0, 0, 8242, 8243, + 7, 3, 0, 0, 8243, 8244, 7, 8, 0, 0, 8244, 8245, 7, 10, 0, 0, 8245, 1294, + 1, 0, 0, 0, 8246, 8247, 7, 6, 0, 0, 8247, 8248, 7, 7, 0, 0, 8248, 8249, + 7, 23, 0, 0, 8249, 8250, 7, 25, 0, 0, 8250, 8251, 7, 6, 0, 0, 8251, 8252, + 7, 3, 0, 0, 8252, 8253, 7, 16, 0, 0, 8253, 8254, 7, 5, 0, 0, 8254, 8255, + 7, 7, 0, 0, 8255, 1296, 1, 0, 0, 0, 8256, 8257, 7, 6, 0, 0, 8257, 8258, + 7, 20, 0, 0, 8258, 8259, 7, 3, 0, 0, 8259, 8260, 7, 12, 0, 0, 8260, 1298, + 1, 0, 0, 0, 8261, 8262, 7, 6, 0, 0, 8262, 8263, 7, 8, 0, 0, 8263, 8264, + 7, 3, 0, 0, 8264, 8265, 7, 4, 0, 0, 8265, 8266, 7, 15, 0, 0, 8266, 8267, + 7, 6, 0, 0, 8267, 8268, 7, 15, 0, 0, 8268, 8269, 7, 19, 0, 0, 8269, 8270, + 7, 12, 0, 0, 8270, 8271, 7, 3, 0, 0, 8271, 8272, 7, 5, 0, 0, 8272, 1300, + 1, 0, 0, 0, 8273, 8274, 7, 6, 0, 0, 8274, 8275, 7, 8, 0, 0, 8275, 8276, + 7, 3, 0, 0, 8276, 8277, 7, 12, 0, 0, 8277, 8278, 7, 11, 0, 0, 8278, 8279, + 7, 3, 0, 0, 8279, 8280, 7, 14, 0, 0, 8280, 8281, 7, 6, 0, 0, 8281, 8282, + 7, 15, 0, 0, 8282, 8283, 7, 19, 0, 0, 8283, 8284, 7, 12, 0, 0, 8284, 1302, + 1, 0, 0, 0, 8285, 8286, 7, 6, 0, 0, 8286, 8287, 7, 8, 0, 0, 8287, 8288, + 7, 3, 0, 0, 8288, 8289, 7, 12, 0, 0, 8289, 8290, 7, 11, 0, 0, 8290, 8291, + 7, 3, 0, 0, 8291, 8292, 7, 14, 0, 0, 8292, 8293, 7, 6, 0, 0, 8293, 8294, + 7, 15, 0, 0, 8294, 8295, 7, 19, 0, 0, 8295, 8296, 7, 12, 0, 0, 8296, 8297, + 7, 3, 0, 0, 8297, 8298, 7, 5, 0, 0, 8298, 1304, 1, 0, 0, 0, 8299, 8300, + 7, 6, 0, 0, 8300, 8301, 7, 8, 0, 0, 8301, 8302, 7, 15, 0, 0, 8302, 8303, + 7, 22, 0, 0, 8303, 8304, 7, 22, 0, 0, 8304, 8305, 7, 7, 0, 0, 8305, 8306, + 7, 8, 0, 0, 8306, 8307, 7, 11, 0, 0, 8307, 1306, 1, 0, 0, 0, 8308, 8309, + 7, 6, 0, 0, 8309, 8310, 7, 8, 0, 0, 8310, 8311, 7, 17, 0, 0, 8311, 8312, + 7, 12, 0, 0, 8312, 8313, 7, 14, 0, 0, 8313, 8314, 7, 3, 0, 0, 8314, 8315, + 7, 6, 0, 0, 8315, 8316, 7, 7, 0, 0, 8316, 1308, 1, 0, 0, 0, 8317, 8318, + 7, 17, 0, 0, 8318, 8319, 7, 12, 0, 0, 8319, 8320, 7, 16, 0, 0, 8320, 8321, + 7, 19, 0, 0, 8321, 8322, 7, 17, 0, 0, 8322, 8323, 7, 12, 0, 0, 8323, 8324, + 7, 4, 0, 0, 8324, 8325, 7, 7, 0, 0, 8325, 8326, 7, 4, 0, 0, 8326, 1310, + 1, 0, 0, 0, 8327, 8328, 7, 17, 0, 0, 8328, 8329, 7, 12, 0, 0, 8329, 8330, + 7, 4, 0, 0, 8330, 8331, 7, 7, 0, 0, 8331, 8332, 7, 18, 0, 0, 8332, 8333, + 7, 15, 0, 0, 8333, 8334, 7, 12, 0, 0, 8334, 8335, 7, 7, 0, 0, 8335, 8336, + 7, 4, 0, 0, 8336, 1312, 1, 0, 0, 0, 8337, 8338, 7, 17, 0, 0, 8338, 8339, + 7, 12, 0, 0, 8339, 8340, 7, 4, 0, 0, 8340, 8341, 7, 19, 0, 0, 8341, 8342, + 7, 18, 0, 0, 8342, 8343, 7, 15, 0, 0, 8343, 8344, 7, 5, 0, 0, 8344, 8345, + 7, 7, 0, 0, 8345, 1314, 1, 0, 0, 0, 8346, 8347, 7, 17, 0, 0, 8347, 8348, + 7, 12, 0, 0, 8348, 8349, 7, 4, 0, 0, 8349, 8350, 7, 19, 0, 0, 8350, 8351, + 5, 95, 0, 0, 8351, 8352, 7, 16, 0, 0, 8352, 8353, 7, 17, 0, 0, 8353, 8354, + 7, 18, 0, 0, 8354, 8355, 7, 18, 0, 0, 8355, 8356, 7, 7, 0, 0, 8356, 8357, + 7, 8, 0, 0, 8357, 8358, 5, 95, 0, 0, 8358, 8359, 7, 11, 0, 0, 8359, 8360, + 7, 15, 0, 0, 8360, 8361, 7, 13, 0, 0, 8361, 8362, 7, 7, 0, 0, 8362, 1316, + 1, 0, 0, 0, 8363, 8364, 7, 17, 0, 0, 8364, 8365, 7, 12, 0, 0, 8365, 8366, + 7, 15, 0, 0, 8366, 8367, 7, 12, 0, 0, 8367, 8368, 7, 11, 0, 0, 8368, 8369, + 7, 6, 0, 0, 8369, 8370, 7, 3, 0, 0, 8370, 8371, 7, 5, 0, 0, 8371, 8372, + 7, 5, 0, 0, 8372, 1318, 1, 0, 0, 0, 8373, 8374, 7, 17, 0, 0, 8374, 8375, + 7, 12, 0, 0, 8375, 8376, 7, 21, 0, 0, 8376, 8377, 7, 12, 0, 0, 8377, 8378, + 7, 19, 0, 0, 8378, 8379, 7, 9, 0, 0, 8379, 8380, 7, 12, 0, 0, 8380, 1320, + 1, 0, 0, 0, 8381, 8382, 7, 17, 0, 0, 8382, 8383, 7, 12, 0, 0, 8383, 8384, + 7, 6, 0, 0, 8384, 8385, 7, 15, 0, 0, 8385, 8386, 7, 5, 0, 0, 8386, 1322, + 1, 0, 0, 0, 8387, 8388, 7, 17, 0, 0, 8388, 8389, 7, 25, 0, 0, 8389, 8390, + 7, 22, 0, 0, 8390, 8391, 7, 8, 0, 0, 8391, 8392, 7, 3, 0, 0, 8392, 8393, + 7, 4, 0, 0, 8393, 8394, 7, 7, 0, 0, 8394, 1324, 1, 0, 0, 0, 8395, 8396, + 7, 17, 0, 0, 8396, 8397, 7, 11, 0, 0, 8397, 8398, 7, 7, 0, 0, 8398, 8399, + 7, 8, 0, 0, 8399, 1326, 1, 0, 0, 0, 8400, 8401, 7, 17, 0, 0, 8401, 8402, + 7, 11, 0, 0, 8402, 8403, 7, 7, 0, 0, 8403, 8404, 5, 95, 0, 0, 8404, 8405, + 7, 18, 0, 0, 8405, 8406, 7, 8, 0, 0, 8406, 8407, 7, 23, 0, 0, 8407, 1328, + 1, 0, 0, 0, 8408, 8409, 7, 17, 0, 0, 8409, 8410, 7, 11, 0, 0, 8410, 8411, + 7, 7, 0, 0, 8411, 8412, 7, 8, 0, 0, 8412, 8413, 5, 95, 0, 0, 8413, 8414, + 7, 8, 0, 0, 8414, 8415, 7, 7, 0, 0, 8415, 8416, 7, 11, 0, 0, 8416, 8417, + 7, 19, 0, 0, 8417, 8418, 7, 17, 0, 0, 8418, 8419, 7, 8, 0, 0, 8419, 8420, + 7, 14, 0, 0, 8420, 8421, 7, 7, 0, 0, 8421, 8422, 7, 11, 0, 0, 8422, 1330, + 1, 0, 0, 0, 8423, 8424, 7, 24, 0, 0, 8424, 8425, 7, 3, 0, 0, 8425, 8426, + 7, 5, 0, 0, 8426, 8427, 7, 15, 0, 0, 8427, 8428, 7, 4, 0, 0, 8428, 8429, + 7, 3, 0, 0, 8429, 8430, 7, 6, 0, 0, 8430, 8431, 7, 15, 0, 0, 8431, 8432, + 7, 19, 0, 0, 8432, 8433, 7, 12, 0, 0, 8433, 1332, 1, 0, 0, 0, 8434, 8435, + 7, 24, 0, 0, 8435, 8436, 7, 3, 0, 0, 8436, 8437, 7, 5, 0, 0, 8437, 8438, + 7, 17, 0, 0, 8438, 8439, 7, 7, 0, 0, 8439, 1334, 1, 0, 0, 0, 8440, 8441, + 7, 24, 0, 0, 8441, 8442, 7, 3, 0, 0, 8442, 8443, 7, 8, 0, 0, 8443, 8444, + 7, 15, 0, 0, 8444, 8445, 7, 3, 0, 0, 8445, 8446, 7, 16, 0, 0, 8446, 8447, + 7, 5, 0, 0, 8447, 8448, 7, 7, 0, 0, 8448, 8449, 7, 11, 0, 0, 8449, 1336, + 1, 0, 0, 0, 8450, 8451, 7, 24, 0, 0, 8451, 8452, 7, 15, 0, 0, 8452, 8453, + 7, 7, 0, 0, 8453, 8454, 7, 9, 0, 0, 8454, 1338, 1, 0, 0, 0, 8455, 8456, + 7, 24, 0, 0, 8456, 8457, 7, 15, 0, 0, 8457, 8458, 7, 8, 0, 0, 8458, 8459, + 7, 6, 0, 0, 8459, 8460, 7, 17, 0, 0, 8460, 8461, 7, 3, 0, 0, 8461, 8462, + 7, 5, 0, 0, 8462, 1340, 1, 0, 0, 0, 8463, 8464, 7, 24, 0, 0, 8464, 8465, + 7, 15, 0, 0, 8465, 8466, 7, 11, 0, 0, 8466, 8467, 7, 15, 0, 0, 8467, 8468, + 7, 16, 0, 0, 8468, 8469, 7, 5, 0, 0, 8469, 8470, 7, 7, 0, 0, 8470, 1342, + 1, 0, 0, 0, 8471, 8472, 7, 9, 0, 0, 8472, 8473, 7, 3, 0, 0, 8473, 8474, + 7, 15, 0, 0, 8474, 8475, 7, 6, 0, 0, 8475, 1344, 1, 0, 0, 0, 8476, 8477, + 7, 9, 0, 0, 8477, 8478, 7, 3, 0, 0, 8478, 8479, 7, 8, 0, 0, 8479, 8480, + 7, 12, 0, 0, 8480, 8481, 7, 15, 0, 0, 8481, 8482, 7, 12, 0, 0, 8482, 8483, + 7, 22, 0, 0, 8483, 8484, 7, 11, 0, 0, 8484, 1346, 1, 0, 0, 0, 8485, 8486, + 7, 9, 0, 0, 8486, 8487, 7, 15, 0, 0, 8487, 8488, 7, 12, 0, 0, 8488, 8489, + 7, 4, 0, 0, 8489, 8490, 7, 19, 0, 0, 8490, 8491, 7, 9, 0, 0, 8491, 1348, + 1, 0, 0, 0, 8492, 8493, 7, 9, 0, 0, 8493, 8494, 7, 15, 0, 0, 8494, 8495, + 7, 6, 0, 0, 8495, 8496, 7, 20, 0, 0, 8496, 8497, 7, 19, 0, 0, 8497, 8498, + 7, 17, 0, 0, 8498, 8499, 7, 6, 0, 0, 8499, 1350, 1, 0, 0, 0, 8500, 8501, + 7, 9, 0, 0, 8501, 8502, 7, 19, 0, 0, 8502, 8503, 7, 8, 0, 0, 8503, 8504, + 7, 21, 0, 0, 8504, 1352, 1, 0, 0, 0, 8505, 8506, 7, 9, 0, 0, 8506, 8507, + 7, 8, 0, 0, 8507, 8508, 7, 3, 0, 0, 8508, 8509, 7, 25, 0, 0, 8509, 8510, + 7, 25, 0, 0, 8510, 8511, 7, 7, 0, 0, 8511, 8512, 7, 8, 0, 0, 8512, 1354, + 1, 0, 0, 0, 8513, 8514, 7, 26, 0, 0, 8514, 8515, 5, 53, 0, 0, 8515, 8516, + 5, 48, 0, 0, 8516, 8517, 5, 57, 0, 0, 8517, 1356, 1, 0, 0, 0, 8518, 8519, + 7, 26, 0, 0, 8519, 8520, 7, 3, 0, 0, 8520, 1358, 1, 0, 0, 0, 8521, 8522, + 7, 26, 0, 0, 8522, 8523, 7, 23, 0, 0, 8523, 8524, 7, 5, 0, 0, 8524, 1360, + 1, 0, 0, 0, 8525, 8526, 7, 10, 0, 0, 8526, 8527, 7, 7, 0, 0, 8527, 8528, + 7, 11, 0, 0, 8528, 1362, 1, 0, 0, 0, 8529, 8530, 7, 7, 0, 0, 8530, 8531, + 7, 17, 0, 0, 8531, 8532, 7, 8, 0, 0, 8532, 1364, 1, 0, 0, 0, 8533, 8534, + 7, 17, 0, 0, 8534, 8535, 7, 11, 0, 0, 8535, 8536, 7, 3, 0, 0, 8536, 1366, + 1, 0, 0, 0, 8537, 8538, 7, 27, 0, 0, 8538, 8539, 7, 15, 0, 0, 8539, 8540, + 7, 11, 0, 0, 8540, 1368, 1, 0, 0, 0, 8541, 8542, 7, 15, 0, 0, 8542, 8543, + 7, 11, 0, 0, 8543, 8544, 7, 19, 0, 0, 8544, 1370, 1, 0, 0, 0, 8545, 8546, + 7, 15, 0, 0, 8546, 8547, 7, 12, 0, 0, 8547, 8548, 7, 6, 0, 0, 8548, 8549, + 7, 7, 0, 0, 8549, 8550, 7, 8, 0, 0, 8550, 8551, 7, 12, 0, 0, 8551, 8552, + 7, 3, 0, 0, 8552, 8553, 7, 5, 0, 0, 8553, 1372, 1, 0, 0, 0, 8554, 8555, + 7, 28, 0, 0, 8555, 8556, 7, 17, 0, 0, 8556, 8557, 7, 3, 0, 0, 8557, 8558, + 7, 8, 0, 0, 8558, 8559, 7, 6, 0, 0, 8559, 8560, 7, 7, 0, 0, 8560, 8561, + 7, 8, 0, 0, 8561, 1374, 1, 0, 0, 0, 8562, 8563, 7, 23, 0, 0, 8563, 8564, + 7, 19, 0, 0, 8564, 8565, 7, 12, 0, 0, 8565, 8566, 7, 6, 0, 0, 8566, 8567, + 7, 20, 0, 0, 8567, 1376, 1, 0, 0, 0, 8568, 8569, 7, 4, 0, 0, 8569, 8570, + 7, 3, 0, 0, 8570, 8571, 7, 10, 0, 0, 8571, 1378, 1, 0, 0, 0, 8572, 8573, + 7, 20, 0, 0, 8573, 8574, 7, 19, 0, 0, 8574, 8575, 7, 17, 0, 0, 8575, 8576, + 7, 8, 0, 0, 8576, 1380, 1, 0, 0, 0, 8577, 8578, 7, 23, 0, 0, 8578, 8579, + 7, 15, 0, 0, 8579, 8580, 7, 12, 0, 0, 8580, 8581, 7, 17, 0, 0, 8581, 8582, + 7, 6, 0, 0, 8582, 8583, 7, 7, 0, 0, 8583, 1382, 1, 0, 0, 0, 8584, 8585, + 7, 9, 0, 0, 8585, 8586, 7, 7, 0, 0, 8586, 8587, 7, 7, 0, 0, 8587, 8588, + 7, 21, 0, 0, 8588, 1384, 1, 0, 0, 0, 8589, 8590, 7, 11, 0, 0, 8590, 8591, + 7, 7, 0, 0, 8591, 8592, 7, 14, 0, 0, 8592, 8593, 7, 19, 0, 0, 8593, 8594, + 7, 12, 0, 0, 8594, 8595, 7, 4, 0, 0, 8595, 1386, 1, 0, 0, 0, 8596, 8597, + 7, 23, 0, 0, 8597, 8598, 7, 15, 0, 0, 8598, 8599, 7, 14, 0, 0, 8599, 8600, + 7, 8, 0, 0, 8600, 8601, 7, 19, 0, 0, 8601, 8602, 7, 11, 0, 0, 8602, 8603, + 7, 7, 0, 0, 8603, 8604, 7, 14, 0, 0, 8604, 8605, 7, 19, 0, 0, 8605, 8606, + 7, 12, 0, 0, 8606, 8607, 7, 4, 0, 0, 8607, 1388, 1, 0, 0, 0, 8608, 8609, + 7, 3, 0, 0, 8609, 8610, 7, 4, 0, 0, 8610, 8611, 7, 23, 0, 0, 8611, 8612, + 7, 15, 0, 0, 8612, 8613, 7, 12, 0, 0, 8613, 1390, 1, 0, 0, 0, 8614, 8615, + 7, 3, 0, 0, 8615, 8616, 7, 25, 0, 0, 8616, 8617, 7, 25, 0, 0, 8617, 8618, + 7, 5, 0, 0, 8618, 8619, 7, 15, 0, 0, 8619, 8620, 7, 14, 0, 0, 8620, 8621, + 7, 3, 0, 0, 8621, 8622, 7, 6, 0, 0, 8622, 8623, 7, 15, 0, 0, 8623, 8624, + 7, 19, 0, 0, 8624, 8625, 7, 12, 0, 0, 8625, 8626, 5, 95, 0, 0, 8626, 8627, + 7, 25, 0, 0, 8627, 8628, 7, 3, 0, 0, 8628, 8629, 7, 11, 0, 0, 8629, 8630, + 7, 11, 0, 0, 8630, 8631, 7, 9, 0, 0, 8631, 8632, 7, 19, 0, 0, 8632, 8633, + 7, 8, 0, 0, 8633, 8634, 7, 4, 0, 0, 8634, 8635, 5, 95, 0, 0, 8635, 8636, + 7, 3, 0, 0, 8636, 8637, 7, 4, 0, 0, 8637, 8638, 7, 23, 0, 0, 8638, 8639, + 7, 15, 0, 0, 8639, 8640, 7, 12, 0, 0, 8640, 1392, 1, 0, 0, 0, 8641, 8642, + 7, 3, 0, 0, 8642, 8643, 7, 17, 0, 0, 8643, 8644, 7, 4, 0, 0, 8644, 8645, + 7, 15, 0, 0, 8645, 8646, 7, 6, 0, 0, 8646, 8647, 5, 95, 0, 0, 8647, 8648, + 7, 3, 0, 0, 8648, 8649, 7, 4, 0, 0, 8649, 8650, 7, 23, 0, 0, 8650, 8651, + 7, 15, 0, 0, 8651, 8652, 7, 12, 0, 0, 8652, 1394, 1, 0, 0, 0, 8653, 8654, + 7, 16, 0, 0, 8654, 8655, 7, 3, 0, 0, 8655, 8656, 7, 14, 0, 0, 8656, 8657, + 7, 21, 0, 0, 8657, 8658, 7, 17, 0, 0, 8658, 8659, 7, 25, 0, 0, 8659, 8660, + 5, 95, 0, 0, 8660, 8661, 7, 3, 0, 0, 8661, 8662, 7, 4, 0, 0, 8662, 8663, + 7, 23, 0, 0, 8663, 8664, 7, 15, 0, 0, 8664, 8665, 7, 12, 0, 0, 8665, 1396, + 1, 0, 0, 0, 8666, 8667, 7, 16, 0, 0, 8667, 8668, 7, 15, 0, 0, 8668, 8669, + 7, 12, 0, 0, 8669, 8670, 7, 5, 0, 0, 8670, 8671, 7, 19, 0, 0, 8671, 8672, + 7, 22, 0, 0, 8672, 8673, 5, 95, 0, 0, 8673, 8674, 7, 3, 0, 0, 8674, 8675, + 7, 4, 0, 0, 8675, 8676, 7, 23, 0, 0, 8676, 8677, 7, 15, 0, 0, 8677, 8678, + 7, 12, 0, 0, 8678, 1398, 1, 0, 0, 0, 8679, 8680, 7, 16, 0, 0, 8680, 8681, + 7, 15, 0, 0, 8681, 8682, 7, 12, 0, 0, 8682, 8683, 7, 5, 0, 0, 8683, 8684, + 7, 19, 0, 0, 8684, 8685, 7, 22, 0, 0, 8685, 8686, 5, 95, 0, 0, 8686, 8687, + 7, 7, 0, 0, 8687, 8688, 7, 12, 0, 0, 8688, 8689, 7, 14, 0, 0, 8689, 8690, + 7, 8, 0, 0, 8690, 8691, 7, 10, 0, 0, 8691, 8692, 7, 25, 0, 0, 8692, 8693, + 7, 6, 0, 0, 8693, 8694, 7, 15, 0, 0, 8694, 8695, 7, 19, 0, 0, 8695, 8696, + 7, 12, 0, 0, 8696, 8697, 5, 95, 0, 0, 8697, 8698, 7, 3, 0, 0, 8698, 8699, + 7, 4, 0, 0, 8699, 8700, 7, 23, 0, 0, 8700, 8701, 7, 15, 0, 0, 8701, 8702, + 7, 12, 0, 0, 8702, 1400, 1, 0, 0, 0, 8703, 8704, 7, 14, 0, 0, 8704, 8705, + 7, 5, 0, 0, 8705, 8706, 7, 19, 0, 0, 8706, 8707, 7, 12, 0, 0, 8707, 8708, + 7, 7, 0, 0, 8708, 8709, 5, 95, 0, 0, 8709, 8710, 7, 3, 0, 0, 8710, 8711, + 7, 4, 0, 0, 8711, 8712, 7, 23, 0, 0, 8712, 8713, 7, 15, 0, 0, 8713, 8714, + 7, 12, 0, 0, 8714, 1402, 1, 0, 0, 0, 8715, 8716, 7, 14, 0, 0, 8716, 8717, + 7, 19, 0, 0, 8717, 8718, 7, 12, 0, 0, 8718, 8719, 7, 12, 0, 0, 8719, 8720, + 7, 7, 0, 0, 8720, 8721, 7, 14, 0, 0, 8721, 8722, 7, 6, 0, 0, 8722, 8723, + 7, 15, 0, 0, 8723, 8724, 7, 19, 0, 0, 8724, 8725, 7, 12, 0, 0, 8725, 8726, + 5, 95, 0, 0, 8726, 8727, 7, 3, 0, 0, 8727, 8728, 7, 4, 0, 0, 8728, 8729, + 7, 23, 0, 0, 8729, 8730, 7, 15, 0, 0, 8730, 8731, 7, 12, 0, 0, 8731, 1404, + 1, 0, 0, 0, 8732, 8733, 7, 7, 0, 0, 8733, 8734, 7, 12, 0, 0, 8734, 8735, + 7, 14, 0, 0, 8735, 8736, 7, 8, 0, 0, 8736, 8737, 7, 10, 0, 0, 8737, 8738, + 7, 25, 0, 0, 8738, 8739, 7, 6, 0, 0, 8739, 8740, 7, 15, 0, 0, 8740, 8741, + 7, 19, 0, 0, 8741, 8742, 7, 12, 0, 0, 8742, 8743, 5, 95, 0, 0, 8743, 8744, + 7, 21, 0, 0, 8744, 8745, 7, 7, 0, 0, 8745, 8746, 7, 10, 0, 0, 8746, 8747, + 5, 95, 0, 0, 8747, 8748, 7, 3, 0, 0, 8748, 8749, 7, 4, 0, 0, 8749, 8750, + 7, 23, 0, 0, 8750, 8751, 7, 15, 0, 0, 8751, 8752, 7, 12, 0, 0, 8752, 1406, + 1, 0, 0, 0, 8753, 8754, 7, 7, 0, 0, 8754, 8755, 7, 26, 0, 0, 8755, 8756, + 7, 7, 0, 0, 8756, 8757, 7, 14, 0, 0, 8757, 8758, 7, 17, 0, 0, 8758, 8759, + 7, 6, 0, 0, 8759, 8760, 7, 7, 0, 0, 8760, 1408, 1, 0, 0, 0, 8761, 8762, + 7, 18, 0, 0, 8762, 8763, 7, 15, 0, 0, 8763, 8764, 7, 5, 0, 0, 8764, 8765, + 7, 7, 0, 0, 8765, 1410, 1, 0, 0, 0, 8766, 8767, 7, 18, 0, 0, 8767, 8768, + 7, 15, 0, 0, 8768, 8769, 7, 8, 0, 0, 8769, 8770, 7, 7, 0, 0, 8770, 8771, + 7, 9, 0, 0, 8771, 8772, 7, 3, 0, 0, 8772, 8773, 7, 5, 0, 0, 8773, 8774, + 7, 5, 0, 0, 8774, 8775, 5, 95, 0, 0, 8775, 8776, 7, 3, 0, 0, 8776, 8777, + 7, 4, 0, 0, 8777, 8778, 7, 23, 0, 0, 8778, 8779, 7, 15, 0, 0, 8779, 8780, + 7, 12, 0, 0, 8780, 1412, 1, 0, 0, 0, 8781, 8782, 7, 18, 0, 0, 8782, 8783, + 7, 15, 0, 0, 8783, 8784, 7, 8, 0, 0, 8784, 8785, 7, 7, 0, 0, 8785, 8786, + 7, 9, 0, 0, 8786, 8787, 7, 3, 0, 0, 8787, 8788, 7, 5, 0, 0, 8788, 8789, + 7, 5, 0, 0, 8789, 8790, 5, 95, 0, 0, 8790, 8791, 7, 17, 0, 0, 8791, 8792, + 7, 11, 0, 0, 8792, 8793, 7, 7, 0, 0, 8793, 8794, 7, 8, 0, 0, 8794, 1414, + 1, 0, 0, 0, 8795, 8796, 7, 18, 0, 0, 8796, 8797, 7, 5, 0, 0, 8797, 8798, + 7, 17, 0, 0, 8798, 8799, 7, 11, 0, 0, 8799, 8800, 7, 20, 0, 0, 8800, 8801, + 5, 95, 0, 0, 8801, 8802, 7, 19, 0, 0, 8802, 8803, 7, 25, 0, 0, 8803, 8804, + 7, 6, 0, 0, 8804, 8805, 7, 15, 0, 0, 8805, 8806, 7, 23, 0, 0, 8806, 8807, + 7, 15, 0, 0, 8807, 8808, 7, 13, 0, 0, 8808, 8809, 7, 7, 0, 0, 8809, 8810, + 7, 8, 0, 0, 8810, 8811, 5, 95, 0, 0, 8811, 8812, 7, 14, 0, 0, 8812, 8813, + 7, 19, 0, 0, 8813, 8814, 7, 11, 0, 0, 8814, 8815, 7, 6, 0, 0, 8815, 8816, + 7, 11, 0, 0, 8816, 1416, 1, 0, 0, 0, 8817, 8818, 7, 18, 0, 0, 8818, 8819, + 7, 5, 0, 0, 8819, 8820, 7, 17, 0, 0, 8820, 8821, 7, 11, 0, 0, 8821, 8822, + 7, 20, 0, 0, 8822, 8823, 5, 95, 0, 0, 8823, 8824, 7, 11, 0, 0, 8824, 8825, + 7, 6, 0, 0, 8825, 8826, 7, 3, 0, 0, 8826, 8827, 7, 6, 0, 0, 8827, 8828, + 7, 17, 0, 0, 8828, 8829, 7, 11, 0, 0, 8829, 1418, 1, 0, 0, 0, 8830, 8831, + 7, 18, 0, 0, 8831, 8832, 7, 5, 0, 0, 8832, 8833, 7, 17, 0, 0, 8833, 8834, + 7, 11, 0, 0, 8834, 8835, 7, 20, 0, 0, 8835, 8836, 5, 95, 0, 0, 8836, 8837, + 7, 6, 0, 0, 8837, 8838, 7, 3, 0, 0, 8838, 8839, 7, 16, 0, 0, 8839, 8840, + 7, 5, 0, 0, 8840, 8841, 7, 7, 0, 0, 8841, 8842, 7, 11, 0, 0, 8842, 1420, + 1, 0, 0, 0, 8843, 8844, 7, 18, 0, 0, 8844, 8845, 7, 5, 0, 0, 8845, 8846, + 7, 17, 0, 0, 8846, 8847, 7, 11, 0, 0, 8847, 8848, 7, 20, 0, 0, 8848, 8849, + 5, 95, 0, 0, 8849, 8850, 7, 17, 0, 0, 8850, 8851, 7, 11, 0, 0, 8851, 8852, + 7, 7, 0, 0, 8852, 8853, 7, 8, 0, 0, 8853, 8854, 5, 95, 0, 0, 8854, 8855, + 7, 8, 0, 0, 8855, 8856, 7, 7, 0, 0, 8856, 8857, 7, 11, 0, 0, 8857, 8858, + 7, 19, 0, 0, 8858, 8859, 7, 17, 0, 0, 8859, 8860, 7, 8, 0, 0, 8860, 8861, + 7, 14, 0, 0, 8861, 8862, 7, 7, 0, 0, 8862, 8863, 7, 11, 0, 0, 8863, 1422, + 1, 0, 0, 0, 8864, 8865, 7, 22, 0, 0, 8865, 8866, 7, 8, 0, 0, 8866, 8867, + 7, 19, 0, 0, 8867, 8868, 7, 17, 0, 0, 8868, 8869, 7, 25, 0, 0, 8869, 8870, + 5, 95, 0, 0, 8870, 8871, 7, 8, 0, 0, 8871, 8872, 7, 7, 0, 0, 8872, 8873, + 7, 25, 0, 0, 8873, 8874, 7, 5, 0, 0, 8874, 8875, 7, 15, 0, 0, 8875, 8876, + 7, 14, 0, 0, 8876, 8877, 7, 3, 0, 0, 8877, 8878, 7, 6, 0, 0, 8878, 8879, + 7, 15, 0, 0, 8879, 8880, 7, 19, 0, 0, 8880, 8881, 7, 12, 0, 0, 8881, 8882, + 5, 95, 0, 0, 8882, 8883, 7, 3, 0, 0, 8883, 8884, 7, 4, 0, 0, 8884, 8885, + 7, 23, 0, 0, 8885, 8886, 7, 15, 0, 0, 8886, 8887, 7, 12, 0, 0, 8887, 1424, + 1, 0, 0, 0, 8888, 8889, 7, 15, 0, 0, 8889, 8890, 7, 12, 0, 0, 8890, 8891, + 7, 12, 0, 0, 8891, 8892, 7, 19, 0, 0, 8892, 8893, 7, 4, 0, 0, 8893, 8894, + 7, 16, 0, 0, 8894, 8895, 5, 95, 0, 0, 8895, 8896, 7, 8, 0, 0, 8896, 8897, + 7, 7, 0, 0, 8897, 8898, 7, 4, 0, 0, 8898, 8899, 7, 19, 0, 0, 8899, 8900, + 5, 95, 0, 0, 8900, 8901, 7, 5, 0, 0, 8901, 8902, 7, 19, 0, 0, 8902, 8903, + 7, 22, 0, 0, 8903, 8904, 5, 95, 0, 0, 8904, 8905, 7, 3, 0, 0, 8905, 8906, + 7, 8, 0, 0, 8906, 8907, 7, 14, 0, 0, 8907, 8908, 7, 20, 0, 0, 8908, 8909, + 7, 15, 0, 0, 8909, 8910, 7, 24, 0, 0, 8910, 8911, 7, 7, 0, 0, 8911, 1426, + 1, 0, 0, 0, 8912, 8913, 7, 15, 0, 0, 8913, 8914, 7, 12, 0, 0, 8914, 8915, + 7, 12, 0, 0, 8915, 8916, 7, 19, 0, 0, 8916, 8917, 7, 4, 0, 0, 8917, 8918, + 7, 16, 0, 0, 8918, 8919, 5, 95, 0, 0, 8919, 8920, 7, 8, 0, 0, 8920, 8921, + 7, 7, 0, 0, 8921, 8922, 7, 4, 0, 0, 8922, 8923, 7, 19, 0, 0, 8923, 8924, + 5, 95, 0, 0, 8924, 8925, 7, 5, 0, 0, 8925, 8926, 7, 19, 0, 0, 8926, 8927, + 7, 22, 0, 0, 8927, 8928, 5, 95, 0, 0, 8928, 8929, 7, 7, 0, 0, 8929, 8930, + 7, 12, 0, 0, 8930, 8931, 7, 3, 0, 0, 8931, 8932, 7, 16, 0, 0, 8932, 8933, + 7, 5, 0, 0, 8933, 8934, 7, 7, 0, 0, 8934, 1428, 1, 0, 0, 0, 8935, 8936, + 7, 15, 0, 0, 8936, 8937, 7, 12, 0, 0, 8937, 8938, 7, 24, 0, 0, 8938, 8939, + 7, 19, 0, 0, 8939, 8940, 7, 21, 0, 0, 8940, 8941, 7, 7, 0, 0, 8941, 1430, + 1, 0, 0, 0, 8942, 8943, 7, 5, 0, 0, 8943, 8944, 7, 3, 0, 0, 8944, 8945, + 7, 23, 0, 0, 8945, 8946, 7, 16, 0, 0, 8946, 8947, 7, 4, 0, 0, 8947, 8948, + 7, 3, 0, 0, 8948, 1432, 1, 0, 0, 0, 8949, 8950, 7, 12, 0, 0, 8950, 8951, + 7, 4, 0, 0, 8951, 8952, 7, 16, 0, 0, 8952, 8953, 5, 95, 0, 0, 8953, 8954, + 7, 11, 0, 0, 8954, 8955, 7, 6, 0, 0, 8955, 8956, 7, 19, 0, 0, 8956, 8957, + 7, 8, 0, 0, 8957, 8958, 7, 7, 0, 0, 8958, 8959, 7, 4, 0, 0, 8959, 8960, + 5, 95, 0, 0, 8960, 8961, 7, 17, 0, 0, 8961, 8962, 7, 11, 0, 0, 8962, 8963, + 7, 7, 0, 0, 8963, 8964, 7, 8, 0, 0, 8964, 1434, 1, 0, 0, 0, 8965, 8966, + 7, 25, 0, 0, 8966, 8967, 7, 3, 0, 0, 8967, 8968, 7, 11, 0, 0, 8968, 8969, + 7, 11, 0, 0, 8969, 8970, 7, 9, 0, 0, 8970, 8971, 7, 19, 0, 0, 8971, 8972, + 7, 8, 0, 0, 8972, 8973, 7, 4, 0, 0, 8973, 8974, 7, 5, 0, 0, 8974, 8975, + 7, 7, 0, 0, 8975, 8976, 7, 11, 0, 0, 8976, 8977, 7, 11, 0, 0, 8977, 8978, + 5, 95, 0, 0, 8978, 8979, 7, 17, 0, 0, 8979, 8980, 7, 11, 0, 0, 8980, 8981, + 7, 7, 0, 0, 8981, 8982, 7, 8, 0, 0, 8982, 8983, 5, 95, 0, 0, 8983, 8984, + 7, 3, 0, 0, 8984, 8985, 7, 4, 0, 0, 8985, 8986, 7, 23, 0, 0, 8986, 8987, + 7, 15, 0, 0, 8987, 8988, 7, 12, 0, 0, 8988, 1436, 1, 0, 0, 0, 8989, 8990, + 7, 25, 0, 0, 8990, 8991, 7, 7, 0, 0, 8991, 8992, 7, 8, 0, 0, 8992, 8993, + 7, 11, 0, 0, 8993, 8994, 7, 15, 0, 0, 8994, 8995, 7, 11, 0, 0, 8995, 8996, + 7, 6, 0, 0, 8996, 8997, 5, 95, 0, 0, 8997, 8998, 7, 8, 0, 0, 8998, 8999, + 7, 19, 0, 0, 8999, 9000, 5, 95, 0, 0, 9000, 9001, 7, 24, 0, 0, 9001, 9002, + 7, 3, 0, 0, 9002, 9003, 7, 8, 0, 0, 9003, 9004, 7, 15, 0, 0, 9004, 9005, + 7, 3, 0, 0, 9005, 9006, 7, 16, 0, 0, 9006, 9007, 7, 5, 0, 0, 9007, 9008, + 7, 7, 0, 0, 9008, 9009, 7, 11, 0, 0, 9009, 9010, 5, 95, 0, 0, 9010, 9011, + 7, 3, 0, 0, 9011, 9012, 7, 4, 0, 0, 9012, 9013, 7, 23, 0, 0, 9013, 9014, + 7, 15, 0, 0, 9014, 9015, 7, 12, 0, 0, 9015, 1438, 1, 0, 0, 0, 9016, 9017, + 7, 25, 0, 0, 9017, 9018, 7, 8, 0, 0, 9018, 9019, 7, 15, 0, 0, 9019, 9020, + 7, 24, 0, 0, 9020, 9021, 7, 15, 0, 0, 9021, 9022, 7, 5, 0, 0, 9022, 9023, + 7, 7, 0, 0, 9023, 9024, 7, 22, 0, 0, 9024, 9025, 7, 7, 0, 0, 9025, 9026, + 7, 11, 0, 0, 9026, 1440, 1, 0, 0, 0, 9027, 9028, 7, 25, 0, 0, 9028, 9029, + 7, 8, 0, 0, 9029, 9030, 7, 19, 0, 0, 9030, 9031, 7, 14, 0, 0, 9031, 9032, + 7, 7, 0, 0, 9032, 9033, 7, 11, 0, 0, 9033, 9034, 7, 11, 0, 0, 9034, 1442, + 1, 0, 0, 0, 9035, 9036, 7, 8, 0, 0, 9036, 9037, 7, 7, 0, 0, 9037, 9038, + 7, 5, 0, 0, 9038, 9039, 7, 19, 0, 0, 9039, 9040, 7, 3, 0, 0, 9040, 9041, + 7, 4, 0, 0, 9041, 1444, 1, 0, 0, 0, 9042, 9043, 7, 8, 0, 0, 9043, 9044, + 7, 7, 0, 0, 9044, 9045, 7, 25, 0, 0, 9045, 9046, 7, 5, 0, 0, 9046, 9047, + 7, 15, 0, 0, 9047, 9048, 7, 14, 0, 0, 9048, 9049, 7, 3, 0, 0, 9049, 9050, + 7, 6, 0, 0, 9050, 9051, 7, 15, 0, 0, 9051, 9052, 7, 19, 0, 0, 9052, 9053, + 7, 12, 0, 0, 9053, 9054, 5, 95, 0, 0, 9054, 9055, 7, 3, 0, 0, 9055, 9056, + 7, 25, 0, 0, 9056, 9057, 7, 25, 0, 0, 9057, 9058, 7, 5, 0, 0, 9058, 9059, + 7, 15, 0, 0, 9059, 9060, 7, 7, 0, 0, 9060, 9061, 7, 8, 0, 0, 9061, 1446, + 1, 0, 0, 0, 9062, 9063, 7, 8, 0, 0, 9063, 9064, 7, 7, 0, 0, 9064, 9065, + 7, 25, 0, 0, 9065, 9066, 7, 5, 0, 0, 9066, 9067, 7, 15, 0, 0, 9067, 9068, + 7, 14, 0, 0, 9068, 9069, 7, 3, 0, 0, 9069, 9070, 7, 6, 0, 0, 9070, 9071, + 7, 15, 0, 0, 9071, 9072, 7, 19, 0, 0, 9072, 9073, 7, 12, 0, 0, 9073, 9074, + 5, 95, 0, 0, 9074, 9075, 7, 11, 0, 0, 9075, 9076, 7, 5, 0, 0, 9076, 9077, + 7, 3, 0, 0, 9077, 9078, 7, 24, 0, 0, 9078, 9079, 7, 7, 0, 0, 9079, 9080, + 5, 95, 0, 0, 9080, 9081, 7, 3, 0, 0, 9081, 9082, 7, 4, 0, 0, 9082, 9083, + 7, 23, 0, 0, 9083, 9084, 7, 15, 0, 0, 9084, 9085, 7, 12, 0, 0, 9085, 1448, + 1, 0, 0, 0, 9086, 9087, 7, 8, 0, 0, 9087, 9088, 7, 7, 0, 0, 9088, 9089, + 7, 11, 0, 0, 9089, 9090, 7, 19, 0, 0, 9090, 9091, 7, 17, 0, 0, 9091, 9092, + 7, 8, 0, 0, 9092, 9093, 7, 14, 0, 0, 9093, 9094, 7, 7, 0, 0, 9094, 9095, + 5, 95, 0, 0, 9095, 9096, 7, 22, 0, 0, 9096, 9097, 7, 8, 0, 0, 9097, 9098, + 7, 19, 0, 0, 9098, 9099, 7, 17, 0, 0, 9099, 9100, 7, 25, 0, 0, 9100, 9101, + 5, 95, 0, 0, 9101, 9102, 7, 3, 0, 0, 9102, 9103, 7, 4, 0, 0, 9103, 9104, + 7, 23, 0, 0, 9104, 9105, 7, 15, 0, 0, 9105, 9106, 7, 12, 0, 0, 9106, 1450, + 1, 0, 0, 0, 9107, 9108, 7, 8, 0, 0, 9108, 9109, 7, 7, 0, 0, 9109, 9110, + 7, 11, 0, 0, 9110, 9111, 7, 19, 0, 0, 9111, 9112, 7, 17, 0, 0, 9112, 9113, + 7, 8, 0, 0, 9113, 9114, 7, 14, 0, 0, 9114, 9115, 7, 7, 0, 0, 9115, 9116, + 5, 95, 0, 0, 9116, 9117, 7, 22, 0, 0, 9117, 9118, 7, 8, 0, 0, 9118, 9119, + 7, 19, 0, 0, 9119, 9120, 7, 17, 0, 0, 9120, 9121, 7, 25, 0, 0, 9121, 9122, + 5, 95, 0, 0, 9122, 9123, 7, 17, 0, 0, 9123, 9124, 7, 11, 0, 0, 9124, 9125, + 7, 7, 0, 0, 9125, 9126, 7, 8, 0, 0, 9126, 1452, 1, 0, 0, 0, 9127, 9128, + 7, 8, 0, 0, 9128, 9129, 7, 19, 0, 0, 9129, 9130, 7, 5, 0, 0, 9130, 9131, + 7, 7, 0, 0, 9131, 9132, 5, 95, 0, 0, 9132, 9133, 7, 3, 0, 0, 9133, 9134, + 7, 4, 0, 0, 9134, 9135, 7, 23, 0, 0, 9135, 9136, 7, 15, 0, 0, 9136, 9137, + 7, 12, 0, 0, 9137, 1454, 1, 0, 0, 0, 9138, 9139, 7, 8, 0, 0, 9139, 9140, + 7, 19, 0, 0, 9140, 9141, 7, 17, 0, 0, 9141, 9142, 7, 6, 0, 0, 9142, 9143, + 7, 15, 0, 0, 9143, 9144, 7, 12, 0, 0, 9144, 9145, 7, 7, 0, 0, 9145, 1456, + 1, 0, 0, 0, 9146, 9147, 7, 11, 0, 0, 9147, 9148, 5, 51, 0, 0, 9148, 1458, + 1, 0, 0, 0, 9149, 9150, 7, 11, 0, 0, 9150, 9151, 7, 7, 0, 0, 9151, 9152, + 7, 8, 0, 0, 9152, 9153, 7, 24, 0, 0, 9153, 9154, 7, 15, 0, 0, 9154, 9155, + 7, 14, 0, 0, 9155, 9156, 7, 7, 0, 0, 9156, 9157, 5, 95, 0, 0, 9157, 9158, + 7, 14, 0, 0, 9158, 9159, 7, 19, 0, 0, 9159, 9160, 7, 12, 0, 0, 9160, 9161, + 7, 12, 0, 0, 9161, 9162, 7, 7, 0, 0, 9162, 9163, 7, 14, 0, 0, 9163, 9164, + 7, 6, 0, 0, 9164, 9165, 7, 15, 0, 0, 9165, 9166, 7, 19, 0, 0, 9166, 9167, + 7, 12, 0, 0, 9167, 9168, 5, 95, 0, 0, 9168, 9169, 7, 3, 0, 0, 9169, 9170, + 7, 4, 0, 0, 9170, 9171, 7, 23, 0, 0, 9171, 9172, 7, 15, 0, 0, 9172, 9173, + 7, 12, 0, 0, 9173, 1460, 1, 0, 0, 0, 9174, 9176, 3, 2275, 1137, 0, 9175, + 9174, 1, 0, 0, 0, 9175, 9176, 1, 0, 0, 0, 9176, 9177, 1, 0, 0, 0, 9177, + 9178, 7, 11, 0, 0, 9178, 9179, 7, 7, 0, 0, 9179, 9180, 7, 11, 0, 0, 9180, + 9181, 7, 11, 0, 0, 9181, 9182, 7, 15, 0, 0, 9182, 9183, 7, 19, 0, 0, 9183, + 9184, 7, 12, 0, 0, 9184, 9185, 5, 95, 0, 0, 9185, 9186, 7, 24, 0, 0, 9186, + 9187, 7, 3, 0, 0, 9187, 9188, 7, 8, 0, 0, 9188, 9189, 7, 15, 0, 0, 9189, + 9190, 7, 3, 0, 0, 9190, 9191, 7, 16, 0, 0, 9191, 9192, 7, 5, 0, 0, 9192, + 9193, 7, 7, 0, 0, 9193, 9194, 7, 11, 0, 0, 9194, 9195, 5, 95, 0, 0, 9195, + 9196, 7, 3, 0, 0, 9196, 9197, 7, 4, 0, 0, 9197, 9198, 7, 23, 0, 0, 9198, + 9199, 7, 15, 0, 0, 9199, 9200, 7, 12, 0, 0, 9200, 9202, 1, 0, 0, 0, 9201, + 9203, 3, 2275, 1137, 0, 9202, 9201, 1, 0, 0, 0, 9202, 9203, 1, 0, 0, 0, + 9203, 1462, 1, 0, 0, 0, 9204, 9205, 7, 11, 0, 0, 9205, 9206, 7, 7, 0, 0, + 9206, 9207, 7, 6, 0, 0, 9207, 9208, 5, 95, 0, 0, 9208, 9209, 7, 17, 0, + 0, 9209, 9210, 7, 11, 0, 0, 9210, 9211, 7, 7, 0, 0, 9211, 9212, 7, 8, 0, + 0, 9212, 9213, 5, 95, 0, 0, 9213, 9214, 7, 15, 0, 0, 9214, 9215, 7, 4, + 0, 0, 9215, 1464, 1, 0, 0, 0, 9216, 9217, 7, 11, 0, 0, 9217, 9218, 7, 20, + 0, 0, 9218, 9219, 7, 19, 0, 0, 9219, 9220, 7, 9, 0, 0, 9220, 9221, 5, 95, + 0, 0, 9221, 9222, 7, 8, 0, 0, 9222, 9223, 7, 19, 0, 0, 9223, 9224, 7, 17, + 0, 0, 9224, 9225, 7, 6, 0, 0, 9225, 9226, 7, 15, 0, 0, 9226, 9227, 7, 12, + 0, 0, 9227, 9228, 7, 7, 0, 0, 9228, 1466, 1, 0, 0, 0, 9229, 9230, 7, 11, + 0, 0, 9230, 9231, 7, 20, 0, 0, 9231, 9232, 7, 17, 0, 0, 9232, 9233, 7, + 6, 0, 0, 9233, 9234, 7, 4, 0, 0, 9234, 9235, 7, 19, 0, 0, 9235, 9236, 7, + 9, 0, 0, 9236, 9237, 7, 12, 0, 0, 9237, 1468, 1, 0, 0, 0, 9238, 9239, 7, + 11, 0, 0, 9239, 9240, 7, 17, 0, 0, 9240, 9241, 7, 25, 0, 0, 9241, 9242, + 7, 7, 0, 0, 9242, 9243, 7, 8, 0, 0, 9243, 1470, 1, 0, 0, 0, 9244, 9245, + 7, 11, 0, 0, 9245, 9246, 7, 10, 0, 0, 9246, 9247, 7, 11, 0, 0, 9247, 9248, + 7, 6, 0, 0, 9248, 9249, 7, 7, 0, 0, 9249, 9250, 7, 23, 0, 0, 9250, 9251, + 5, 95, 0, 0, 9251, 9252, 7, 24, 0, 0, 9252, 9253, 7, 3, 0, 0, 9253, 9254, + 7, 8, 0, 0, 9254, 9255, 7, 15, 0, 0, 9255, 9256, 7, 3, 0, 0, 9256, 9257, + 7, 16, 0, 0, 9257, 9258, 7, 5, 0, 0, 9258, 9259, 7, 7, 0, 0, 9259, 9260, + 7, 11, 0, 0, 9260, 9261, 5, 95, 0, 0, 9261, 9262, 7, 3, 0, 0, 9262, 9263, + 7, 4, 0, 0, 9263, 9264, 7, 23, 0, 0, 9264, 9265, 7, 15, 0, 0, 9265, 9266, + 7, 12, 0, 0, 9266, 1472, 1, 0, 0, 0, 9267, 9268, 7, 6, 0, 0, 9268, 9269, + 7, 3, 0, 0, 9269, 9270, 7, 16, 0, 0, 9270, 9271, 7, 5, 0, 0, 9271, 9272, + 7, 7, 0, 0, 9272, 9273, 7, 11, 0, 0, 9273, 1474, 1, 0, 0, 0, 9274, 9275, + 7, 6, 0, 0, 9275, 9276, 7, 3, 0, 0, 9276, 9277, 7, 16, 0, 0, 9277, 9278, + 7, 5, 0, 0, 9278, 9279, 7, 7, 0, 0, 9279, 9280, 5, 95, 0, 0, 9280, 9281, + 7, 7, 0, 0, 9281, 9282, 7, 12, 0, 0, 9282, 9283, 7, 14, 0, 0, 9283, 9284, + 7, 8, 0, 0, 9284, 9285, 7, 10, 0, 0, 9285, 9286, 7, 25, 0, 0, 9286, 9287, + 7, 6, 0, 0, 9287, 9288, 7, 15, 0, 0, 9288, 9289, 7, 19, 0, 0, 9289, 9290, + 7, 12, 0, 0, 9290, 9291, 5, 95, 0, 0, 9291, 9292, 7, 3, 0, 0, 9292, 9293, + 7, 4, 0, 0, 9293, 9294, 7, 23, 0, 0, 9294, 9295, 7, 15, 0, 0, 9295, 9296, + 7, 12, 0, 0, 9296, 1476, 1, 0, 0, 0, 9297, 9298, 7, 24, 0, 0, 9298, 9299, + 7, 7, 0, 0, 9299, 9300, 7, 8, 0, 0, 9300, 9301, 7, 11, 0, 0, 9301, 9302, + 7, 15, 0, 0, 9302, 9303, 7, 19, 0, 0, 9303, 9304, 7, 12, 0, 0, 9304, 9305, + 5, 95, 0, 0, 9305, 9306, 7, 6, 0, 0, 9306, 9307, 7, 19, 0, 0, 9307, 9308, + 7, 21, 0, 0, 9308, 9309, 7, 7, 0, 0, 9309, 9310, 7, 12, 0, 0, 9310, 9311, + 5, 95, 0, 0, 9311, 9312, 7, 3, 0, 0, 9312, 9313, 7, 4, 0, 0, 9313, 9314, + 7, 23, 0, 0, 9314, 9315, 7, 15, 0, 0, 9315, 9316, 7, 12, 0, 0, 9316, 1478, + 1, 0, 0, 0, 9317, 9318, 7, 26, 0, 0, 9318, 9319, 7, 3, 0, 0, 9319, 9320, + 5, 95, 0, 0, 9320, 9321, 7, 8, 0, 0, 9321, 9322, 7, 7, 0, 0, 9322, 9323, + 7, 14, 0, 0, 9323, 9324, 7, 19, 0, 0, 9324, 9325, 7, 24, 0, 0, 9325, 9326, + 7, 7, 0, 0, 9326, 9327, 7, 8, 0, 0, 9327, 9328, 5, 95, 0, 0, 9328, 9329, + 7, 3, 0, 0, 9329, 9330, 7, 4, 0, 0, 9330, 9331, 7, 23, 0, 0, 9331, 9332, + 7, 15, 0, 0, 9332, 9333, 7, 12, 0, 0, 9333, 1480, 1, 0, 0, 0, 9334, 9335, + 7, 3, 0, 0, 9335, 9336, 7, 8, 0, 0, 9336, 9337, 7, 23, 0, 0, 9337, 9338, + 7, 11, 0, 0, 9338, 9339, 7, 14, 0, 0, 9339, 9340, 7, 15, 0, 0, 9340, 9341, + 7, 15, 0, 0, 9341, 9342, 5, 56, 0, 0, 9342, 1482, 1, 0, 0, 0, 9343, 9344, + 7, 3, 0, 0, 9344, 9345, 7, 11, 0, 0, 9345, 9346, 7, 14, 0, 0, 9346, 9347, + 7, 15, 0, 0, 9347, 9348, 7, 15, 0, 0, 9348, 1484, 1, 0, 0, 0, 9349, 9350, + 7, 16, 0, 0, 9350, 9351, 7, 15, 0, 0, 9351, 9352, 7, 22, 0, 0, 9352, 9353, + 5, 53, 0, 0, 9353, 1486, 1, 0, 0, 0, 9354, 9355, 7, 14, 0, 0, 9355, 9356, + 7, 25, 0, 0, 9356, 9357, 5, 49, 0, 0, 9357, 9358, 5, 50, 0, 0, 9358, 9359, + 5, 53, 0, 0, 9359, 9360, 5, 48, 0, 0, 9360, 1488, 1, 0, 0, 0, 9361, 9362, + 7, 14, 0, 0, 9362, 9363, 7, 25, 0, 0, 9363, 9364, 5, 49, 0, 0, 9364, 9365, + 5, 50, 0, 0, 9365, 9366, 5, 53, 0, 0, 9366, 9367, 5, 49, 0, 0, 9367, 1490, + 1, 0, 0, 0, 9368, 9369, 7, 14, 0, 0, 9369, 9370, 7, 25, 0, 0, 9370, 9371, + 5, 49, 0, 0, 9371, 9372, 5, 50, 0, 0, 9372, 9373, 5, 53, 0, 0, 9373, 9374, + 5, 54, 0, 0, 9374, 1492, 1, 0, 0, 0, 9375, 9376, 7, 14, 0, 0, 9376, 9377, + 7, 25, 0, 0, 9377, 9378, 5, 49, 0, 0, 9378, 9379, 5, 50, 0, 0, 9379, 9380, + 5, 53, 0, 0, 9380, 9381, 5, 55, 0, 0, 9381, 1494, 1, 0, 0, 0, 9382, 9383, + 7, 14, 0, 0, 9383, 9384, 7, 25, 0, 0, 9384, 9385, 5, 56, 0, 0, 9385, 9386, + 5, 53, 0, 0, 9386, 9387, 5, 48, 0, 0, 9387, 1496, 1, 0, 0, 0, 9388, 9389, + 7, 14, 0, 0, 9389, 9390, 7, 25, 0, 0, 9390, 9391, 5, 56, 0, 0, 9391, 9392, + 5, 53, 0, 0, 9392, 9393, 5, 50, 0, 0, 9393, 1498, 1, 0, 0, 0, 9394, 9395, + 7, 14, 0, 0, 9395, 9396, 7, 25, 0, 0, 9396, 9397, 5, 56, 0, 0, 9397, 9398, + 5, 54, 0, 0, 9398, 9399, 5, 54, 0, 0, 9399, 1500, 1, 0, 0, 0, 9400, 9401, + 7, 14, 0, 0, 9401, 9402, 7, 25, 0, 0, 9402, 9403, 5, 57, 0, 0, 9403, 9404, + 5, 51, 0, 0, 9404, 9405, 5, 50, 0, 0, 9405, 1502, 1, 0, 0, 0, 9406, 9407, + 7, 4, 0, 0, 9407, 9408, 7, 7, 0, 0, 9408, 9409, 7, 14, 0, 0, 9409, 9410, + 5, 56, 0, 0, 9410, 1504, 1, 0, 0, 0, 9411, 9412, 7, 7, 0, 0, 9412, 9413, + 7, 17, 0, 0, 9413, 9414, 7, 14, 0, 0, 9414, 9415, 7, 27, 0, 0, 9415, 9416, + 7, 25, 0, 0, 9416, 9417, 7, 23, 0, 0, 9417, 9418, 7, 11, 0, 0, 9418, 1506, + 1, 0, 0, 0, 9419, 9420, 7, 7, 0, 0, 9420, 9421, 7, 17, 0, 0, 9421, 9422, + 7, 14, 0, 0, 9422, 9423, 7, 21, 0, 0, 9423, 9424, 7, 8, 0, 0, 9424, 1508, + 1, 0, 0, 0, 9425, 9426, 7, 22, 0, 0, 9426, 9427, 7, 16, 0, 0, 9427, 9428, + 5, 49, 0, 0, 9428, 9429, 5, 56, 0, 0, 9429, 9430, 5, 48, 0, 0, 9430, 9431, + 5, 51, 0, 0, 9431, 9432, 5, 48, 0, 0, 9432, 1510, 1, 0, 0, 0, 9433, 9434, + 7, 22, 0, 0, 9434, 9435, 7, 16, 0, 0, 9435, 9436, 5, 50, 0, 0, 9436, 9437, + 5, 51, 0, 0, 9437, 9438, 5, 49, 0, 0, 9438, 9439, 5, 50, 0, 0, 9439, 1512, + 1, 0, 0, 0, 9440, 9441, 7, 22, 0, 0, 9441, 9442, 7, 16, 0, 0, 9442, 9443, + 7, 21, 0, 0, 9443, 1514, 1, 0, 0, 0, 9444, 9445, 7, 22, 0, 0, 9445, 9446, + 7, 7, 0, 0, 9446, 9447, 7, 19, 0, 0, 9447, 9448, 7, 11, 0, 0, 9448, 9449, + 7, 6, 0, 0, 9449, 9450, 7, 4, 0, 0, 9450, 9451, 5, 56, 0, 0, 9451, 1516, + 1, 0, 0, 0, 9452, 9453, 7, 22, 0, 0, 9453, 9454, 7, 8, 0, 0, 9454, 9455, + 7, 7, 0, 0, 9455, 9456, 7, 7, 0, 0, 9456, 9457, 7, 21, 0, 0, 9457, 1518, + 1, 0, 0, 0, 9458, 9459, 7, 20, 0, 0, 9459, 9460, 7, 7, 0, 0, 9460, 9461, + 7, 16, 0, 0, 9461, 9462, 7, 8, 0, 0, 9462, 9463, 7, 7, 0, 0, 9463, 9464, + 7, 9, 0, 0, 9464, 1520, 1, 0, 0, 0, 9465, 9466, 7, 20, 0, 0, 9466, 9467, + 7, 25, 0, 0, 9467, 9468, 5, 56, 0, 0, 9468, 1522, 1, 0, 0, 0, 9469, 9470, + 7, 21, 0, 0, 9470, 9471, 7, 7, 0, 0, 9471, 9472, 7, 10, 0, 0, 9472, 9473, + 7, 16, 0, 0, 9473, 9474, 7, 14, 0, 0, 9474, 9475, 7, 11, 0, 0, 9475, 9476, + 5, 50, 0, 0, 9476, 1524, 1, 0, 0, 0, 9477, 9478, 7, 21, 0, 0, 9478, 9479, + 7, 19, 0, 0, 9479, 9480, 7, 15, 0, 0, 9480, 9481, 5, 56, 0, 0, 9481, 9482, + 7, 8, 0, 0, 9482, 1526, 1, 0, 0, 0, 9483, 9484, 7, 21, 0, 0, 9484, 9485, + 7, 19, 0, 0, 9485, 9486, 7, 15, 0, 0, 9486, 9487, 5, 56, 0, 0, 9487, 9488, + 7, 17, 0, 0, 9488, 1528, 1, 0, 0, 0, 9489, 9490, 7, 5, 0, 0, 9490, 9491, + 7, 3, 0, 0, 9491, 9492, 7, 6, 0, 0, 9492, 9493, 7, 15, 0, 0, 9493, 9494, + 7, 12, 0, 0, 9494, 9495, 5, 49, 0, 0, 9495, 1530, 1, 0, 0, 0, 9496, 9497, + 7, 5, 0, 0, 9497, 9498, 7, 3, 0, 0, 9498, 9499, 7, 6, 0, 0, 9499, 9500, + 7, 15, 0, 0, 9500, 9501, 7, 12, 0, 0, 9501, 9502, 5, 50, 0, 0, 9502, 1532, + 1, 0, 0, 0, 9503, 9504, 7, 5, 0, 0, 9504, 9505, 7, 3, 0, 0, 9505, 9506, + 7, 6, 0, 0, 9506, 9507, 7, 15, 0, 0, 9507, 9508, 7, 12, 0, 0, 9508, 9509, + 5, 53, 0, 0, 9509, 1534, 1, 0, 0, 0, 9510, 9511, 7, 5, 0, 0, 9511, 9512, + 7, 3, 0, 0, 9512, 9513, 7, 6, 0, 0, 9513, 9514, 7, 15, 0, 0, 9514, 9515, + 7, 12, 0, 0, 9515, 9516, 5, 55, 0, 0, 9516, 1536, 1, 0, 0, 0, 9517, 9518, + 7, 23, 0, 0, 9518, 9519, 7, 3, 0, 0, 9519, 9520, 7, 14, 0, 0, 9520, 9521, + 7, 14, 0, 0, 9521, 9522, 7, 7, 0, 0, 9522, 1538, 1, 0, 0, 0, 9523, 9524, + 7, 23, 0, 0, 9524, 9525, 7, 3, 0, 0, 9525, 9526, 7, 14, 0, 0, 9526, 9527, + 7, 8, 0, 0, 9527, 9528, 7, 19, 0, 0, 9528, 9529, 7, 23, 0, 0, 9529, 9530, + 7, 3, 0, 0, 9530, 9531, 7, 12, 0, 0, 9531, 1540, 1, 0, 0, 0, 9532, 9533, + 7, 11, 0, 0, 9533, 9534, 7, 27, 0, 0, 9534, 9535, 7, 15, 0, 0, 9535, 9536, + 7, 11, 0, 0, 9536, 1542, 1, 0, 0, 0, 9537, 9538, 7, 11, 0, 0, 9538, 9539, + 7, 9, 0, 0, 9539, 9540, 7, 7, 0, 0, 9540, 9541, 5, 55, 0, 0, 9541, 1544, + 1, 0, 0, 0, 9542, 9543, 7, 6, 0, 0, 9543, 9544, 7, 15, 0, 0, 9544, 9545, + 7, 11, 0, 0, 9545, 9546, 5, 54, 0, 0, 9546, 9547, 5, 50, 0, 0, 9547, 9548, + 5, 48, 0, 0, 9548, 1546, 1, 0, 0, 0, 9549, 9550, 7, 17, 0, 0, 9550, 9551, + 7, 14, 0, 0, 9551, 9552, 7, 11, 0, 0, 9552, 9553, 5, 50, 0, 0, 9553, 1548, + 1, 0, 0, 0, 9554, 9555, 7, 17, 0, 0, 9555, 9556, 7, 27, 0, 0, 9556, 9557, + 7, 15, 0, 0, 9557, 9558, 7, 11, 0, 0, 9558, 1550, 1, 0, 0, 0, 9559, 9560, + 7, 17, 0, 0, 9560, 9561, 7, 6, 0, 0, 9561, 9562, 7, 18, 0, 0, 9562, 9563, + 5, 49, 0, 0, 9563, 9564, 5, 54, 0, 0, 9564, 1552, 1, 0, 0, 0, 9565, 9566, + 7, 17, 0, 0, 9566, 9567, 7, 6, 0, 0, 9567, 9568, 7, 18, 0, 0, 9568, 9569, + 5, 49, 0, 0, 9569, 9570, 5, 54, 0, 0, 9570, 9571, 7, 5, 0, 0, 9571, 9572, + 7, 7, 0, 0, 9572, 1554, 1, 0, 0, 0, 9573, 9574, 7, 17, 0, 0, 9574, 9575, + 7, 6, 0, 0, 9575, 9576, 7, 18, 0, 0, 9576, 9577, 5, 51, 0, 0, 9577, 9578, + 5, 50, 0, 0, 9578, 1556, 1, 0, 0, 0, 9579, 9580, 7, 17, 0, 0, 9580, 9581, + 7, 6, 0, 0, 9581, 9582, 7, 18, 0, 0, 9582, 9583, 5, 56, 0, 0, 9583, 1558, + 1, 0, 0, 0, 9584, 9585, 7, 17, 0, 0, 9585, 9586, 7, 6, 0, 0, 9586, 9587, + 7, 18, 0, 0, 9587, 9588, 5, 56, 0, 0, 9588, 9589, 7, 23, 0, 0, 9589, 9590, + 7, 16, 0, 0, 9590, 9591, 5, 51, 0, 0, 9591, 1560, 1, 0, 0, 0, 9592, 9593, + 7, 17, 0, 0, 9593, 9594, 7, 6, 0, 0, 9594, 9595, 7, 18, 0, 0, 9595, 9596, + 5, 56, 0, 0, 9596, 9597, 7, 23, 0, 0, 9597, 9598, 7, 16, 0, 0, 9598, 9599, + 5, 52, 0, 0, 9599, 1562, 1, 0, 0, 0, 9600, 9601, 7, 3, 0, 0, 9601, 9602, + 7, 8, 0, 0, 9602, 9603, 7, 14, 0, 0, 9603, 9604, 7, 20, 0, 0, 9604, 9605, + 7, 15, 0, 0, 9605, 9606, 7, 24, 0, 0, 9606, 9607, 7, 7, 0, 0, 9607, 1564, + 1, 0, 0, 0, 9608, 9609, 7, 16, 0, 0, 9609, 9610, 7, 5, 0, 0, 9610, 9611, + 7, 3, 0, 0, 9611, 9612, 7, 14, 0, 0, 9612, 9613, 7, 21, 0, 0, 9613, 9614, + 7, 20, 0, 0, 9614, 9615, 7, 19, 0, 0, 9615, 9616, 7, 5, 0, 0, 9616, 9617, + 7, 7, 0, 0, 9617, 1566, 1, 0, 0, 0, 9618, 9619, 7, 14, 0, 0, 9619, 9620, + 7, 11, 0, 0, 9620, 9621, 7, 24, 0, 0, 9621, 1568, 1, 0, 0, 0, 9622, 9623, + 7, 18, 0, 0, 9623, 9624, 7, 7, 0, 0, 9624, 9625, 7, 4, 0, 0, 9625, 9626, + 7, 7, 0, 0, 9626, 9627, 7, 8, 0, 0, 9627, 9628, 7, 3, 0, 0, 9628, 9629, + 7, 6, 0, 0, 9629, 9630, 7, 7, 0, 0, 9630, 9631, 7, 4, 0, 0, 9631, 1570, + 1, 0, 0, 0, 9632, 9633, 7, 15, 0, 0, 9633, 9634, 7, 12, 0, 0, 9634, 9635, + 7, 12, 0, 0, 9635, 9636, 7, 19, 0, 0, 9636, 9637, 7, 4, 0, 0, 9637, 9638, + 7, 16, 0, 0, 9638, 1572, 1, 0, 0, 0, 9639, 9640, 7, 23, 0, 0, 9640, 9641, + 7, 7, 0, 0, 9641, 9642, 7, 23, 0, 0, 9642, 9643, 7, 19, 0, 0, 9643, 9644, + 7, 8, 0, 0, 9644, 9645, 7, 10, 0, 0, 9645, 1574, 1, 0, 0, 0, 9646, 9647, + 7, 23, 0, 0, 9647, 9648, 7, 8, 0, 0, 9648, 9649, 7, 22, 0, 0, 9649, 9650, + 5, 95, 0, 0, 9650, 9651, 7, 23, 0, 0, 9651, 9652, 7, 10, 0, 0, 9652, 9653, + 7, 15, 0, 0, 9653, 9654, 7, 11, 0, 0, 9654, 9655, 7, 3, 0, 0, 9655, 9656, + 7, 23, 0, 0, 9656, 1576, 1, 0, 0, 0, 9657, 9658, 7, 23, 0, 0, 9658, 9659, + 7, 10, 0, 0, 9659, 9660, 7, 15, 0, 0, 9660, 9661, 7, 11, 0, 0, 9661, 9662, + 7, 3, 0, 0, 9662, 9663, 7, 23, 0, 0, 9663, 1578, 1, 0, 0, 0, 9664, 9665, + 7, 12, 0, 0, 9665, 9666, 7, 4, 0, 0, 9666, 9667, 7, 16, 0, 0, 9667, 1580, + 1, 0, 0, 0, 9668, 9669, 7, 12, 0, 0, 9669, 9670, 7, 4, 0, 0, 9670, 9671, + 7, 16, 0, 0, 9671, 9672, 7, 14, 0, 0, 9672, 9673, 7, 5, 0, 0, 9673, 9674, + 7, 17, 0, 0, 9674, 9675, 7, 11, 0, 0, 9675, 9676, 7, 6, 0, 0, 9676, 9677, + 7, 7, 0, 0, 9677, 9678, 7, 8, 0, 0, 9678, 1582, 1, 0, 0, 0, 9679, 9680, + 7, 25, 0, 0, 9680, 9681, 7, 7, 0, 0, 9681, 9682, 7, 8, 0, 0, 9682, 9683, + 7, 18, 0, 0, 9683, 9684, 7, 19, 0, 0, 9684, 9685, 7, 8, 0, 0, 9685, 9686, + 7, 23, 0, 0, 9686, 9687, 7, 3, 0, 0, 9687, 9688, 7, 12, 0, 0, 9688, 9689, + 7, 14, 0, 0, 9689, 9690, 7, 7, 0, 0, 9690, 9691, 5, 95, 0, 0, 9691, 9692, + 7, 11, 0, 0, 9692, 9693, 7, 14, 0, 0, 9693, 9694, 7, 20, 0, 0, 9694, 9695, + 7, 7, 0, 0, 9695, 9696, 7, 23, 0, 0, 9696, 9697, 7, 3, 0, 0, 9697, 1584, + 1, 0, 0, 0, 9698, 9699, 7, 6, 0, 0, 9699, 9700, 7, 19, 0, 0, 9700, 9701, + 7, 21, 0, 0, 9701, 9702, 7, 17, 0, 0, 9702, 9703, 7, 4, 0, 0, 9703, 9704, + 7, 16, 0, 0, 9704, 1586, 1, 0, 0, 0, 9705, 9706, 7, 8, 0, 0, 9706, 9707, + 7, 7, 0, 0, 9707, 9708, 7, 25, 0, 0, 9708, 9709, 7, 7, 0, 0, 9709, 9710, + 7, 3, 0, 0, 9710, 9711, 7, 6, 0, 0, 9711, 9712, 7, 3, 0, 0, 9712, 9713, + 7, 16, 0, 0, 9713, 9714, 7, 5, 0, 0, 9714, 9715, 7, 7, 0, 0, 9715, 1588, + 1, 0, 0, 0, 9716, 9717, 7, 14, 0, 0, 9717, 9718, 7, 19, 0, 0, 9718, 9719, + 7, 23, 0, 0, 9719, 9720, 7, 23, 0, 0, 9720, 9721, 7, 15, 0, 0, 9721, 9722, + 7, 6, 0, 0, 9722, 9723, 7, 6, 0, 0, 9723, 9724, 7, 7, 0, 0, 9724, 9725, + 7, 4, 0, 0, 9725, 1590, 1, 0, 0, 0, 9726, 9727, 7, 17, 0, 0, 9727, 9728, + 7, 12, 0, 0, 9728, 9729, 7, 14, 0, 0, 9729, 9730, 7, 19, 0, 0, 9730, 9731, + 7, 23, 0, 0, 9731, 9732, 7, 23, 0, 0, 9732, 9733, 7, 15, 0, 0, 9733, 9734, + 7, 6, 0, 0, 9734, 9735, 7, 6, 0, 0, 9735, 9736, 7, 7, 0, 0, 9736, 9737, + 7, 4, 0, 0, 9737, 1592, 1, 0, 0, 0, 9738, 9739, 7, 11, 0, 0, 9739, 9740, + 7, 7, 0, 0, 9740, 9741, 7, 8, 0, 0, 9741, 9742, 7, 15, 0, 0, 9742, 9743, + 7, 3, 0, 0, 9743, 9744, 7, 5, 0, 0, 9744, 9745, 7, 15, 0, 0, 9745, 9746, + 7, 13, 0, 0, 9746, 9747, 7, 3, 0, 0, 9747, 9748, 7, 16, 0, 0, 9748, 9749, + 7, 5, 0, 0, 9749, 9750, 7, 7, 0, 0, 9750, 1594, 1, 0, 0, 0, 9751, 9752, + 7, 22, 0, 0, 9752, 9753, 7, 7, 0, 0, 9753, 9754, 7, 19, 0, 0, 9754, 9755, + 7, 23, 0, 0, 9755, 9756, 7, 7, 0, 0, 9756, 9757, 7, 6, 0, 0, 9757, 9758, + 7, 8, 0, 0, 9758, 9759, 7, 10, 0, 0, 9759, 9760, 7, 14, 0, 0, 9760, 9761, + 7, 19, 0, 0, 9761, 9762, 7, 5, 0, 0, 9762, 9763, 7, 5, 0, 0, 9763, 9764, + 7, 7, 0, 0, 9764, 9765, 7, 14, 0, 0, 9765, 9766, 7, 6, 0, 0, 9766, 9767, + 7, 15, 0, 0, 9767, 9768, 7, 19, 0, 0, 9768, 9769, 7, 12, 0, 0, 9769, 1596, + 1, 0, 0, 0, 9770, 9771, 7, 22, 0, 0, 9771, 9772, 7, 7, 0, 0, 9772, 9773, + 7, 19, 0, 0, 9773, 9774, 7, 23, 0, 0, 9774, 9775, 7, 14, 0, 0, 9775, 9776, + 7, 19, 0, 0, 9776, 9777, 7, 5, 0, 0, 9777, 9778, 7, 5, 0, 0, 9778, 9779, + 7, 7, 0, 0, 9779, 9780, 7, 14, 0, 0, 9780, 9781, 7, 6, 0, 0, 9781, 9782, + 7, 15, 0, 0, 9782, 9783, 7, 19, 0, 0, 9783, 9784, 7, 12, 0, 0, 9784, 1598, + 1, 0, 0, 0, 9785, 9786, 7, 22, 0, 0, 9786, 9787, 7, 7, 0, 0, 9787, 9788, + 7, 19, 0, 0, 9788, 9789, 7, 23, 0, 0, 9789, 9790, 7, 7, 0, 0, 9790, 9791, + 7, 6, 0, 0, 9791, 9792, 7, 8, 0, 0, 9792, 9793, 7, 10, 0, 0, 9793, 1600, + 1, 0, 0, 0, 9794, 9795, 7, 5, 0, 0, 9795, 9796, 7, 15, 0, 0, 9796, 9797, + 7, 12, 0, 0, 9797, 9798, 7, 7, 0, 0, 9798, 9799, 7, 11, 0, 0, 9799, 9800, + 7, 6, 0, 0, 9800, 9801, 7, 8, 0, 0, 9801, 9802, 7, 15, 0, 0, 9802, 9803, + 7, 12, 0, 0, 9803, 9804, 7, 22, 0, 0, 9804, 1602, 1, 0, 0, 0, 9805, 9806, + 7, 23, 0, 0, 9806, 9807, 7, 17, 0, 0, 9807, 9808, 7, 5, 0, 0, 9808, 9809, + 7, 6, 0, 0, 9809, 9810, 7, 15, 0, 0, 9810, 9811, 7, 5, 0, 0, 9811, 9812, + 7, 15, 0, 0, 9812, 9813, 7, 12, 0, 0, 9813, 9814, 7, 7, 0, 0, 9814, 9815, + 7, 11, 0, 0, 9815, 9816, 7, 6, 0, 0, 9816, 9817, 7, 8, 0, 0, 9817, 9818, + 7, 15, 0, 0, 9818, 9819, 7, 12, 0, 0, 9819, 9820, 7, 22, 0, 0, 9820, 1604, + 1, 0, 0, 0, 9821, 9822, 7, 23, 0, 0, 9822, 9823, 7, 17, 0, 0, 9823, 9824, + 7, 5, 0, 0, 9824, 9825, 7, 6, 0, 0, 9825, 9826, 7, 15, 0, 0, 9826, 9827, + 7, 25, 0, 0, 9827, 9828, 7, 19, 0, 0, 9828, 9829, 7, 15, 0, 0, 9829, 9830, + 7, 12, 0, 0, 9830, 9831, 7, 6, 0, 0, 9831, 1606, 1, 0, 0, 0, 9832, 9833, + 7, 23, 0, 0, 9833, 9834, 7, 17, 0, 0, 9834, 9835, 7, 5, 0, 0, 9835, 9836, + 7, 6, 0, 0, 9836, 9837, 7, 15, 0, 0, 9837, 9838, 7, 25, 0, 0, 9838, 9839, + 7, 19, 0, 0, 9839, 9840, 7, 5, 0, 0, 9840, 9841, 7, 10, 0, 0, 9841, 9842, + 7, 22, 0, 0, 9842, 9843, 7, 19, 0, 0, 9843, 9844, 7, 12, 0, 0, 9844, 1608, + 1, 0, 0, 0, 9845, 9846, 7, 25, 0, 0, 9846, 9847, 7, 19, 0, 0, 9847, 9848, + 7, 15, 0, 0, 9848, 9849, 7, 12, 0, 0, 9849, 9850, 7, 6, 0, 0, 9850, 1610, + 1, 0, 0, 0, 9851, 9852, 7, 25, 0, 0, 9852, 9853, 7, 19, 0, 0, 9853, 9854, + 7, 5, 0, 0, 9854, 9855, 7, 10, 0, 0, 9855, 9856, 7, 22, 0, 0, 9856, 9857, + 7, 19, 0, 0, 9857, 9858, 7, 12, 0, 0, 9858, 1612, 1, 0, 0, 0, 9859, 9860, + 7, 3, 0, 0, 9860, 9861, 7, 16, 0, 0, 9861, 9862, 7, 11, 0, 0, 9862, 1614, + 1, 0, 0, 0, 9863, 9864, 7, 3, 0, 0, 9864, 9865, 7, 14, 0, 0, 9865, 9866, + 7, 19, 0, 0, 9866, 9867, 7, 11, 0, 0, 9867, 1616, 1, 0, 0, 0, 9868, 9869, + 7, 3, 0, 0, 9869, 9870, 7, 4, 0, 0, 9870, 9871, 7, 4, 0, 0, 9871, 9872, + 7, 4, 0, 0, 9872, 9873, 7, 3, 0, 0, 9873, 9874, 7, 6, 0, 0, 9874, 9875, + 7, 7, 0, 0, 9875, 1618, 1, 0, 0, 0, 9876, 9877, 7, 3, 0, 0, 9877, 9878, + 7, 4, 0, 0, 9878, 9879, 7, 4, 0, 0, 9879, 9880, 7, 6, 0, 0, 9880, 9881, + 7, 15, 0, 0, 9881, 9882, 7, 23, 0, 0, 9882, 9883, 7, 7, 0, 0, 9883, 1620, + 1, 0, 0, 0, 9884, 9885, 7, 3, 0, 0, 9885, 9886, 7, 7, 0, 0, 9886, 9887, + 7, 11, 0, 0, 9887, 9888, 5, 95, 0, 0, 9888, 9889, 7, 4, 0, 0, 9889, 9890, + 7, 7, 0, 0, 9890, 9891, 7, 14, 0, 0, 9891, 9892, 7, 8, 0, 0, 9892, 9893, + 7, 10, 0, 0, 9893, 9894, 7, 25, 0, 0, 9894, 9895, 7, 6, 0, 0, 9895, 1622, + 1, 0, 0, 0, 9896, 9897, 7, 3, 0, 0, 9897, 9898, 7, 7, 0, 0, 9898, 9899, + 7, 11, 0, 0, 9899, 9900, 5, 95, 0, 0, 9900, 9901, 7, 7, 0, 0, 9901, 9902, + 7, 12, 0, 0, 9902, 9903, 7, 14, 0, 0, 9903, 9904, 7, 8, 0, 0, 9904, 9905, + 7, 10, 0, 0, 9905, 9906, 7, 25, 0, 0, 9906, 9907, 7, 6, 0, 0, 9907, 1624, + 1, 0, 0, 0, 9908, 9909, 7, 3, 0, 0, 9909, 9910, 7, 8, 0, 0, 9910, 9911, + 7, 7, 0, 0, 9911, 9912, 7, 3, 0, 0, 9912, 1626, 1, 0, 0, 0, 9913, 9914, + 7, 3, 0, 0, 9914, 9915, 7, 11, 0, 0, 9915, 9916, 7, 16, 0, 0, 9916, 9917, + 7, 15, 0, 0, 9917, 9918, 7, 12, 0, 0, 9918, 9919, 7, 3, 0, 0, 9919, 9920, + 7, 8, 0, 0, 9920, 9921, 7, 10, 0, 0, 9921, 1628, 1, 0, 0, 0, 9922, 9923, + 7, 3, 0, 0, 9923, 9924, 7, 11, 0, 0, 9924, 9925, 7, 15, 0, 0, 9925, 9926, + 7, 12, 0, 0, 9926, 1630, 1, 0, 0, 0, 9927, 9928, 7, 3, 0, 0, 9928, 9929, + 7, 11, 0, 0, 9929, 9930, 7, 6, 0, 0, 9930, 9931, 7, 7, 0, 0, 9931, 9932, + 7, 26, 0, 0, 9932, 9933, 7, 6, 0, 0, 9933, 1632, 1, 0, 0, 0, 9934, 9935, + 7, 3, 0, 0, 9935, 9936, 7, 11, 0, 0, 9936, 9937, 7, 9, 0, 0, 9937, 9938, + 7, 21, 0, 0, 9938, 9939, 7, 16, 0, 0, 9939, 1634, 1, 0, 0, 0, 9940, 9941, + 7, 3, 0, 0, 9941, 9942, 7, 11, 0, 0, 9942, 9943, 7, 9, 0, 0, 9943, 9944, + 7, 21, 0, 0, 9944, 9945, 7, 6, 0, 0, 9945, 1636, 1, 0, 0, 0, 9946, 9947, + 7, 3, 0, 0, 9947, 9948, 7, 11, 0, 0, 9948, 9949, 7, 10, 0, 0, 9949, 9950, + 7, 23, 0, 0, 9950, 9951, 7, 23, 0, 0, 9951, 9952, 7, 7, 0, 0, 9952, 9953, + 7, 6, 0, 0, 9953, 9954, 7, 8, 0, 0, 9954, 9955, 7, 15, 0, 0, 9955, 9956, + 7, 14, 0, 0, 9956, 9957, 5, 95, 0, 0, 9957, 9958, 7, 4, 0, 0, 9958, 9959, + 7, 7, 0, 0, 9959, 9960, 7, 14, 0, 0, 9960, 9961, 7, 8, 0, 0, 9961, 9962, + 7, 10, 0, 0, 9962, 9963, 7, 25, 0, 0, 9963, 9964, 7, 6, 0, 0, 9964, 1638, + 1, 0, 0, 0, 9965, 9966, 7, 3, 0, 0, 9966, 9967, 7, 11, 0, 0, 9967, 9968, + 7, 10, 0, 0, 9968, 9969, 7, 23, 0, 0, 9969, 9970, 7, 23, 0, 0, 9970, 9971, + 7, 7, 0, 0, 9971, 9972, 7, 6, 0, 0, 9972, 9973, 7, 8, 0, 0, 9973, 9974, + 7, 15, 0, 0, 9974, 9975, 7, 14, 0, 0, 9975, 9976, 5, 95, 0, 0, 9976, 9977, + 7, 4, 0, 0, 9977, 9978, 7, 7, 0, 0, 9978, 9979, 7, 8, 0, 0, 9979, 9980, + 7, 15, 0, 0, 9980, 9981, 7, 24, 0, 0, 9981, 9982, 7, 7, 0, 0, 9982, 1640, + 1, 0, 0, 0, 9983, 9984, 7, 3, 0, 0, 9984, 9985, 7, 11, 0, 0, 9985, 9986, + 7, 10, 0, 0, 9986, 9987, 7, 23, 0, 0, 9987, 9988, 7, 23, 0, 0, 9988, 9989, + 7, 7, 0, 0, 9989, 9990, 7, 6, 0, 0, 9990, 9991, 7, 8, 0, 0, 9991, 9992, + 7, 15, 0, 0, 9992, 9993, 7, 14, 0, 0, 9993, 9994, 5, 95, 0, 0, 9994, 9995, + 7, 7, 0, 0, 9995, 9996, 7, 12, 0, 0, 9996, 9997, 7, 14, 0, 0, 9997, 9998, + 7, 8, 0, 0, 9998, 9999, 7, 10, 0, 0, 9999, 10000, 7, 25, 0, 0, 10000, 10001, + 7, 6, 0, 0, 10001, 1642, 1, 0, 0, 0, 10002, 10003, 7, 3, 0, 0, 10003, 10004, + 7, 11, 0, 0, 10004, 10005, 7, 10, 0, 0, 10005, 10006, 7, 23, 0, 0, 10006, + 10007, 7, 23, 0, 0, 10007, 10008, 7, 7, 0, 0, 10008, 10009, 7, 6, 0, 0, + 10009, 10010, 7, 8, 0, 0, 10010, 10011, 7, 15, 0, 0, 10011, 10012, 7, 14, + 0, 0, 10012, 10013, 5, 95, 0, 0, 10013, 10014, 7, 11, 0, 0, 10014, 10015, + 7, 15, 0, 0, 10015, 10016, 7, 22, 0, 0, 10016, 10017, 7, 12, 0, 0, 10017, + 1644, 1, 0, 0, 0, 10018, 10019, 7, 3, 0, 0, 10019, 10020, 7, 11, 0, 0, + 10020, 10021, 7, 10, 0, 0, 10021, 10022, 7, 23, 0, 0, 10022, 10023, 7, + 23, 0, 0, 10023, 10024, 7, 7, 0, 0, 10024, 10025, 7, 6, 0, 0, 10025, 10026, + 7, 8, 0, 0, 10026, 10027, 7, 15, 0, 0, 10027, 10028, 7, 14, 0, 0, 10028, + 10029, 5, 95, 0, 0, 10029, 10030, 7, 24, 0, 0, 10030, 10031, 7, 7, 0, 0, + 10031, 10032, 7, 8, 0, 0, 10032, 10033, 7, 15, 0, 0, 10033, 10034, 7, 18, + 0, 0, 10034, 10035, 7, 10, 0, 0, 10035, 1646, 1, 0, 0, 0, 10036, 10037, + 7, 3, 0, 0, 10037, 10038, 7, 6, 0, 0, 10038, 10039, 7, 3, 0, 0, 10039, + 10040, 7, 12, 0, 0, 10040, 1648, 1, 0, 0, 0, 10041, 10042, 7, 3, 0, 0, + 10042, 10043, 7, 6, 0, 0, 10043, 10044, 7, 3, 0, 0, 10044, 10045, 7, 12, + 0, 0, 10045, 10046, 5, 50, 0, 0, 10046, 1650, 1, 0, 0, 0, 10047, 10048, + 7, 16, 0, 0, 10048, 10049, 7, 7, 0, 0, 10049, 10050, 7, 12, 0, 0, 10050, + 10051, 7, 14, 0, 0, 10051, 10052, 7, 20, 0, 0, 10052, 10053, 7, 23, 0, + 0, 10053, 10054, 7, 3, 0, 0, 10054, 10055, 7, 8, 0, 0, 10055, 10056, 7, + 21, 0, 0, 10056, 1652, 1, 0, 0, 0, 10057, 10058, 7, 16, 0, 0, 10058, 10059, + 7, 15, 0, 0, 10059, 10060, 7, 12, 0, 0, 10060, 1654, 1, 0, 0, 0, 10061, + 10062, 7, 16, 0, 0, 10062, 10063, 7, 15, 0, 0, 10063, 10064, 7, 6, 0, 0, + 10064, 10065, 5, 95, 0, 0, 10065, 10066, 7, 14, 0, 0, 10066, 10067, 7, + 19, 0, 0, 10067, 10068, 7, 17, 0, 0, 10068, 10069, 7, 12, 0, 0, 10069, + 10070, 7, 6, 0, 0, 10070, 1656, 1, 0, 0, 0, 10071, 10072, 7, 16, 0, 0, + 10072, 10073, 7, 15, 0, 0, 10073, 10074, 7, 6, 0, 0, 10074, 10075, 5, 95, + 0, 0, 10075, 10076, 7, 5, 0, 0, 10076, 10077, 7, 7, 0, 0, 10077, 10078, + 7, 12, 0, 0, 10078, 10079, 7, 22, 0, 0, 10079, 10080, 7, 6, 0, 0, 10080, + 10081, 7, 20, 0, 0, 10081, 1658, 1, 0, 0, 0, 10082, 10083, 7, 16, 0, 0, + 10083, 10084, 7, 17, 0, 0, 10084, 10085, 7, 18, 0, 0, 10085, 10086, 7, + 18, 0, 0, 10086, 10087, 7, 7, 0, 0, 10087, 10088, 7, 8, 0, 0, 10088, 1660, + 1, 0, 0, 0, 10089, 10090, 7, 14, 0, 0, 10090, 10091, 7, 3, 0, 0, 10091, + 10092, 7, 6, 0, 0, 10092, 10093, 7, 3, 0, 0, 10093, 10094, 7, 5, 0, 0, + 10094, 10095, 7, 19, 0, 0, 10095, 10096, 7, 22, 0, 0, 10096, 10097, 5, + 95, 0, 0, 10097, 10098, 7, 12, 0, 0, 10098, 10099, 7, 3, 0, 0, 10099, 10100, + 7, 23, 0, 0, 10100, 10101, 7, 7, 0, 0, 10101, 1662, 1, 0, 0, 0, 10102, + 10103, 7, 14, 0, 0, 10103, 10104, 7, 7, 0, 0, 10104, 10105, 7, 15, 0, 0, + 10105, 10106, 7, 5, 0, 0, 10106, 1664, 1, 0, 0, 0, 10107, 10108, 7, 14, + 0, 0, 10108, 10109, 7, 7, 0, 0, 10109, 10110, 7, 15, 0, 0, 10110, 10111, + 7, 5, 0, 0, 10111, 10112, 7, 15, 0, 0, 10112, 10113, 7, 12, 0, 0, 10113, + 10114, 7, 22, 0, 0, 10114, 1666, 1, 0, 0, 0, 10115, 10116, 7, 14, 0, 0, + 10116, 10117, 7, 7, 0, 0, 10117, 10118, 7, 12, 0, 0, 10118, 10119, 7, 6, + 0, 0, 10119, 10120, 7, 8, 0, 0, 10120, 10121, 7, 19, 0, 0, 10121, 10122, + 7, 15, 0, 0, 10122, 10123, 7, 4, 0, 0, 10123, 1668, 1, 0, 0, 0, 10124, + 10125, 7, 14, 0, 0, 10125, 10126, 7, 20, 0, 0, 10126, 10127, 7, 3, 0, 0, + 10127, 10128, 7, 8, 0, 0, 10128, 10129, 7, 3, 0, 0, 10129, 10130, 7, 14, + 0, 0, 10130, 10131, 7, 6, 0, 0, 10131, 10132, 7, 7, 0, 0, 10132, 10133, + 7, 8, 0, 0, 10133, 10134, 5, 95, 0, 0, 10134, 10135, 7, 5, 0, 0, 10135, + 10136, 7, 7, 0, 0, 10136, 10137, 7, 12, 0, 0, 10137, 10138, 7, 22, 0, 0, + 10138, 10139, 7, 6, 0, 0, 10139, 10140, 7, 20, 0, 0, 10140, 1670, 1, 0, + 0, 0, 10141, 10142, 7, 14, 0, 0, 10142, 10143, 7, 20, 0, 0, 10143, 10144, + 7, 3, 0, 0, 10144, 10145, 7, 8, 0, 0, 10145, 10146, 7, 11, 0, 0, 10146, + 10147, 7, 7, 0, 0, 10147, 10148, 7, 6, 0, 0, 10148, 1672, 1, 0, 0, 0, 10149, + 10150, 7, 14, 0, 0, 10150, 10151, 7, 20, 0, 0, 10151, 10152, 7, 3, 0, 0, + 10152, 10153, 7, 8, 0, 0, 10153, 10154, 5, 95, 0, 0, 10154, 10155, 7, 5, + 0, 0, 10155, 10156, 7, 7, 0, 0, 10156, 10157, 7, 12, 0, 0, 10157, 10158, + 7, 22, 0, 0, 10158, 10159, 7, 6, 0, 0, 10159, 10160, 7, 20, 0, 0, 10160, + 1674, 1, 0, 0, 0, 10161, 10162, 7, 14, 0, 0, 10162, 10163, 7, 19, 0, 0, + 10163, 10164, 7, 7, 0, 0, 10164, 10165, 7, 8, 0, 0, 10165, 10166, 7, 14, + 0, 0, 10166, 10167, 7, 15, 0, 0, 10167, 10168, 7, 16, 0, 0, 10168, 10169, + 7, 15, 0, 0, 10169, 10170, 7, 5, 0, 0, 10170, 10171, 7, 15, 0, 0, 10171, + 10172, 7, 6, 0, 0, 10172, 10173, 7, 10, 0, 0, 10173, 1676, 1, 0, 0, 0, + 10174, 10175, 7, 14, 0, 0, 10175, 10176, 7, 19, 0, 0, 10176, 10177, 7, + 5, 0, 0, 10177, 10178, 7, 5, 0, 0, 10178, 10179, 7, 3, 0, 0, 10179, 10180, + 7, 6, 0, 0, 10180, 10181, 7, 15, 0, 0, 10181, 10182, 7, 19, 0, 0, 10182, + 10183, 7, 12, 0, 0, 10183, 1678, 1, 0, 0, 0, 10184, 10185, 7, 14, 0, 0, + 10185, 10186, 7, 19, 0, 0, 10186, 10187, 7, 23, 0, 0, 10187, 10188, 7, + 25, 0, 0, 10188, 10189, 7, 8, 0, 0, 10189, 10190, 7, 7, 0, 0, 10190, 10191, + 7, 11, 0, 0, 10191, 10192, 7, 11, 0, 0, 10192, 1680, 1, 0, 0, 0, 10193, + 10194, 7, 14, 0, 0, 10194, 10195, 7, 19, 0, 0, 10195, 10196, 7, 12, 0, + 0, 10196, 10197, 7, 14, 0, 0, 10197, 10198, 7, 3, 0, 0, 10198, 10199, 7, + 6, 0, 0, 10199, 1682, 1, 0, 0, 0, 10200, 10201, 7, 14, 0, 0, 10201, 10202, + 7, 19, 0, 0, 10202, 10203, 7, 12, 0, 0, 10203, 10204, 7, 14, 0, 0, 10204, + 10205, 7, 3, 0, 0, 10205, 10206, 7, 6, 0, 0, 10206, 10207, 5, 95, 0, 0, + 10207, 10208, 7, 9, 0, 0, 10208, 10209, 7, 11, 0, 0, 10209, 1684, 1, 0, + 0, 0, 10210, 10211, 7, 14, 0, 0, 10211, 10212, 7, 19, 0, 0, 10212, 10213, + 7, 12, 0, 0, 10213, 10214, 7, 12, 0, 0, 10214, 10215, 7, 7, 0, 0, 10215, + 10216, 7, 14, 0, 0, 10216, 10217, 7, 6, 0, 0, 10217, 10218, 7, 15, 0, 0, + 10218, 10219, 7, 19, 0, 0, 10219, 10220, 7, 12, 0, 0, 10220, 10221, 5, + 95, 0, 0, 10221, 10222, 7, 15, 0, 0, 10222, 10223, 7, 4, 0, 0, 10223, 1686, + 1, 0, 0, 0, 10224, 10225, 7, 14, 0, 0, 10225, 10226, 7, 19, 0, 0, 10226, + 10227, 7, 12, 0, 0, 10227, 10228, 7, 24, 0, 0, 10228, 1688, 1, 0, 0, 0, + 10229, 10230, 7, 14, 0, 0, 10230, 10231, 7, 19, 0, 0, 10231, 10232, 7, + 12, 0, 0, 10232, 10233, 7, 24, 0, 0, 10233, 10234, 7, 7, 0, 0, 10234, 10235, + 7, 8, 0, 0, 10235, 10236, 7, 6, 0, 0, 10236, 10237, 5, 95, 0, 0, 10237, + 10238, 7, 6, 0, 0, 10238, 10239, 7, 13, 0, 0, 10239, 1690, 1, 0, 0, 0, + 10240, 10241, 7, 14, 0, 0, 10241, 10242, 7, 19, 0, 0, 10242, 10243, 7, + 11, 0, 0, 10243, 1692, 1, 0, 0, 0, 10244, 10245, 7, 14, 0, 0, 10245, 10246, + 7, 19, 0, 0, 10246, 10247, 7, 6, 0, 0, 10247, 1694, 1, 0, 0, 0, 10248, + 10249, 7, 14, 0, 0, 10249, 10250, 7, 8, 0, 0, 10250, 10251, 7, 14, 0, 0, + 10251, 10252, 5, 51, 0, 0, 10252, 10253, 5, 50, 0, 0, 10253, 1696, 1, 0, + 0, 0, 10254, 10255, 7, 14, 0, 0, 10255, 10256, 7, 8, 0, 0, 10256, 10257, + 7, 7, 0, 0, 10257, 10258, 7, 3, 0, 0, 10258, 10259, 7, 6, 0, 0, 10259, + 10260, 7, 7, 0, 0, 10260, 10261, 5, 95, 0, 0, 10261, 10262, 7, 3, 0, 0, + 10262, 10263, 7, 11, 0, 0, 10263, 10264, 7, 10, 0, 0, 10264, 10265, 7, + 23, 0, 0, 10265, 10266, 7, 23, 0, 0, 10266, 10267, 7, 7, 0, 0, 10267, 10268, + 7, 6, 0, 0, 10268, 10269, 7, 8, 0, 0, 10269, 10270, 7, 15, 0, 0, 10270, + 10271, 7, 14, 0, 0, 10271, 10272, 5, 95, 0, 0, 10272, 10273, 7, 25, 0, + 0, 10273, 10274, 7, 8, 0, 0, 10274, 10275, 7, 15, 0, 0, 10275, 10276, 7, + 24, 0, 0, 10276, 10277, 5, 95, 0, 0, 10277, 10278, 7, 21, 0, 0, 10278, + 10279, 7, 7, 0, 0, 10279, 10280, 7, 10, 0, 0, 10280, 1698, 1, 0, 0, 0, + 10281, 10282, 7, 14, 0, 0, 10282, 10283, 7, 8, 0, 0, 10283, 10284, 7, 7, + 0, 0, 10284, 10285, 7, 3, 0, 0, 10285, 10286, 7, 6, 0, 0, 10286, 10287, + 7, 7, 0, 0, 10287, 10288, 5, 95, 0, 0, 10288, 10289, 7, 3, 0, 0, 10289, + 10290, 7, 11, 0, 0, 10290, 10291, 7, 10, 0, 0, 10291, 10292, 7, 23, 0, + 0, 10292, 10293, 7, 23, 0, 0, 10293, 10294, 7, 7, 0, 0, 10294, 10295, 7, + 6, 0, 0, 10295, 10296, 7, 8, 0, 0, 10296, 10297, 7, 15, 0, 0, 10297, 10298, + 7, 14, 0, 0, 10298, 10299, 5, 95, 0, 0, 10299, 10300, 7, 25, 0, 0, 10300, + 10301, 7, 17, 0, 0, 10301, 10302, 7, 16, 0, 0, 10302, 10303, 5, 95, 0, + 0, 10303, 10304, 7, 21, 0, 0, 10304, 10305, 7, 7, 0, 0, 10305, 10306, 7, + 10, 0, 0, 10306, 1700, 1, 0, 0, 0, 10307, 10308, 7, 14, 0, 0, 10308, 10309, + 7, 8, 0, 0, 10309, 10310, 7, 7, 0, 0, 10310, 10311, 7, 3, 0, 0, 10311, + 10312, 7, 6, 0, 0, 10312, 10313, 7, 7, 0, 0, 10313, 10314, 5, 95, 0, 0, + 10314, 10315, 7, 4, 0, 0, 10315, 10316, 7, 20, 0, 0, 10316, 10317, 5, 95, + 0, 0, 10317, 10318, 7, 25, 0, 0, 10318, 10319, 7, 3, 0, 0, 10319, 10320, + 7, 8, 0, 0, 10320, 10321, 7, 3, 0, 0, 10321, 10322, 7, 23, 0, 0, 10322, + 10323, 7, 7, 0, 0, 10323, 10324, 7, 6, 0, 0, 10324, 10325, 7, 7, 0, 0, + 10325, 10326, 7, 8, 0, 0, 10326, 10327, 7, 11, 0, 0, 10327, 1702, 1, 0, + 0, 0, 10328, 10329, 7, 14, 0, 0, 10329, 10330, 7, 8, 0, 0, 10330, 10331, + 7, 7, 0, 0, 10331, 10332, 7, 3, 0, 0, 10332, 10333, 7, 6, 0, 0, 10333, + 10334, 7, 7, 0, 0, 10334, 10335, 5, 95, 0, 0, 10335, 10336, 7, 4, 0, 0, + 10336, 10337, 7, 15, 0, 0, 10337, 10338, 7, 22, 0, 0, 10338, 10339, 7, + 7, 0, 0, 10339, 10340, 7, 11, 0, 0, 10340, 10341, 7, 6, 0, 0, 10341, 1704, + 1, 0, 0, 0, 10342, 10343, 7, 14, 0, 0, 10343, 10344, 7, 8, 0, 0, 10344, + 10345, 7, 19, 0, 0, 10345, 10346, 7, 11, 0, 0, 10346, 10347, 7, 11, 0, + 0, 10347, 10348, 7, 7, 0, 0, 10348, 10349, 7, 11, 0, 0, 10349, 1706, 1, + 0, 0, 0, 10350, 10351, 7, 4, 0, 0, 10351, 10352, 7, 3, 0, 0, 10352, 10353, + 7, 6, 0, 0, 10353, 10354, 7, 7, 0, 0, 10354, 10355, 7, 4, 0, 0, 10355, + 10356, 7, 15, 0, 0, 10356, 10357, 7, 18, 0, 0, 10357, 10358, 7, 18, 0, + 0, 10358, 1708, 1, 0, 0, 0, 10359, 10360, 7, 4, 0, 0, 10360, 10361, 7, + 3, 0, 0, 10361, 10362, 7, 6, 0, 0, 10362, 10363, 7, 7, 0, 0, 10363, 10364, + 5, 95, 0, 0, 10364, 10365, 7, 18, 0, 0, 10365, 10366, 7, 19, 0, 0, 10366, + 10367, 7, 8, 0, 0, 10367, 10368, 7, 23, 0, 0, 10368, 10369, 7, 3, 0, 0, + 10369, 10370, 7, 6, 0, 0, 10370, 1710, 1, 0, 0, 0, 10371, 10372, 7, 4, + 0, 0, 10372, 10373, 7, 3, 0, 0, 10373, 10374, 7, 10, 0, 0, 10374, 10375, + 7, 12, 0, 0, 10375, 10376, 7, 3, 0, 0, 10376, 10377, 7, 23, 0, 0, 10377, + 10378, 7, 7, 0, 0, 10378, 1712, 1, 0, 0, 0, 10379, 10380, 7, 4, 0, 0, 10380, + 10381, 7, 3, 0, 0, 10381, 10382, 7, 10, 0, 0, 10382, 10383, 7, 19, 0, 0, + 10383, 10384, 7, 18, 0, 0, 10384, 10385, 7, 23, 0, 0, 10385, 10386, 7, + 19, 0, 0, 10386, 10387, 7, 12, 0, 0, 10387, 10388, 7, 6, 0, 0, 10388, 10389, + 7, 20, 0, 0, 10389, 1714, 1, 0, 0, 0, 10390, 10391, 7, 4, 0, 0, 10391, + 10392, 7, 3, 0, 0, 10392, 10393, 7, 10, 0, 0, 10393, 10394, 7, 19, 0, 0, + 10394, 10395, 7, 18, 0, 0, 10395, 10396, 7, 9, 0, 0, 10396, 10397, 7, 7, + 0, 0, 10397, 10398, 7, 7, 0, 0, 10398, 10399, 7, 21, 0, 0, 10399, 1716, + 1, 0, 0, 0, 10400, 10401, 7, 4, 0, 0, 10401, 10402, 7, 3, 0, 0, 10402, + 10403, 7, 10, 0, 0, 10403, 10404, 7, 19, 0, 0, 10404, 10405, 7, 18, 0, + 0, 10405, 10406, 7, 10, 0, 0, 10406, 10407, 7, 7, 0, 0, 10407, 10408, 7, + 3, 0, 0, 10408, 10409, 7, 8, 0, 0, 10409, 1718, 1, 0, 0, 0, 10410, 10411, + 7, 4, 0, 0, 10411, 10412, 7, 7, 0, 0, 10412, 10413, 7, 14, 0, 0, 10413, + 10414, 7, 19, 0, 0, 10414, 10415, 7, 4, 0, 0, 10415, 10416, 7, 7, 0, 0, + 10416, 1720, 1, 0, 0, 0, 10417, 10418, 7, 4, 0, 0, 10418, 10419, 7, 7, + 0, 0, 10419, 10420, 7, 22, 0, 0, 10420, 10421, 7, 8, 0, 0, 10421, 10422, + 7, 7, 0, 0, 10422, 10423, 7, 7, 0, 0, 10423, 10424, 7, 11, 0, 0, 10424, + 1722, 1, 0, 0, 0, 10425, 10426, 7, 4, 0, 0, 10426, 10427, 7, 7, 0, 0, 10427, + 10428, 7, 11, 0, 0, 10428, 10429, 5, 95, 0, 0, 10429, 10430, 7, 4, 0, 0, + 10430, 10431, 7, 7, 0, 0, 10431, 10432, 7, 14, 0, 0, 10432, 10433, 7, 8, + 0, 0, 10433, 10434, 7, 10, 0, 0, 10434, 10435, 7, 25, 0, 0, 10435, 10436, + 7, 6, 0, 0, 10436, 1724, 1, 0, 0, 0, 10437, 10438, 7, 4, 0, 0, 10438, 10439, + 7, 7, 0, 0, 10439, 10440, 7, 11, 0, 0, 10440, 10441, 5, 95, 0, 0, 10441, + 10442, 7, 7, 0, 0, 10442, 10443, 7, 12, 0, 0, 10443, 10444, 7, 14, 0, 0, + 10444, 10445, 7, 8, 0, 0, 10445, 10446, 7, 10, 0, 0, 10446, 10447, 7, 25, + 0, 0, 10447, 10448, 7, 6, 0, 0, 10448, 1726, 1, 0, 0, 0, 10449, 10450, + 7, 4, 0, 0, 10450, 10451, 7, 15, 0, 0, 10451, 10452, 7, 23, 0, 0, 10452, + 10453, 7, 7, 0, 0, 10453, 10454, 7, 12, 0, 0, 10454, 10455, 7, 11, 0, 0, + 10455, 10456, 7, 15, 0, 0, 10456, 10457, 7, 19, 0, 0, 10457, 10458, 7, + 12, 0, 0, 10458, 1728, 1, 0, 0, 0, 10459, 10460, 7, 4, 0, 0, 10460, 10461, + 7, 15, 0, 0, 10461, 10462, 7, 11, 0, 0, 10462, 10463, 7, 27, 0, 0, 10463, + 10464, 7, 19, 0, 0, 10464, 10465, 7, 15, 0, 0, 10465, 10466, 7, 12, 0, + 0, 10466, 10467, 7, 6, 0, 0, 10467, 1730, 1, 0, 0, 0, 10468, 10469, 7, + 7, 0, 0, 10469, 10470, 7, 5, 0, 0, 10470, 10471, 7, 6, 0, 0, 10471, 1732, + 1, 0, 0, 0, 10472, 10473, 7, 7, 0, 0, 10473, 10474, 7, 12, 0, 0, 10474, + 10475, 7, 14, 0, 0, 10475, 10476, 7, 19, 0, 0, 10476, 10477, 7, 4, 0, 0, + 10477, 10478, 7, 7, 0, 0, 10478, 1734, 1, 0, 0, 0, 10479, 10480, 7, 7, + 0, 0, 10480, 10481, 7, 12, 0, 0, 10481, 10482, 7, 14, 0, 0, 10482, 10483, + 7, 8, 0, 0, 10483, 10484, 7, 10, 0, 0, 10484, 10485, 7, 25, 0, 0, 10485, + 10486, 7, 6, 0, 0, 10486, 1736, 1, 0, 0, 0, 10487, 10488, 7, 7, 0, 0, 10488, + 10489, 7, 12, 0, 0, 10489, 10490, 7, 4, 0, 0, 10490, 10491, 7, 25, 0, 0, + 10491, 10492, 7, 19, 0, 0, 10492, 10493, 7, 15, 0, 0, 10493, 10494, 7, + 12, 0, 0, 10494, 10495, 7, 6, 0, 0, 10495, 1738, 1, 0, 0, 0, 10496, 10497, + 7, 7, 0, 0, 10497, 10498, 7, 12, 0, 0, 10498, 10499, 7, 22, 0, 0, 10499, + 10500, 7, 15, 0, 0, 10500, 10501, 7, 12, 0, 0, 10501, 10502, 7, 7, 0, 0, + 10502, 10503, 5, 95, 0, 0, 10503, 10504, 7, 3, 0, 0, 10504, 10505, 7, 6, + 0, 0, 10505, 10506, 7, 6, 0, 0, 10506, 10507, 7, 8, 0, 0, 10507, 10508, + 7, 15, 0, 0, 10508, 10509, 7, 16, 0, 0, 10509, 10510, 7, 17, 0, 0, 10510, + 10511, 7, 6, 0, 0, 10511, 10512, 7, 7, 0, 0, 10512, 1740, 1, 0, 0, 0, 10513, + 10514, 7, 7, 0, 0, 10514, 10515, 7, 12, 0, 0, 10515, 10516, 7, 24, 0, 0, + 10516, 10517, 7, 7, 0, 0, 10517, 10518, 7, 5, 0, 0, 10518, 10519, 7, 19, + 0, 0, 10519, 10520, 7, 25, 0, 0, 10520, 10521, 7, 7, 0, 0, 10521, 1742, + 1, 0, 0, 0, 10522, 10523, 7, 7, 0, 0, 10523, 10524, 7, 28, 0, 0, 10524, + 10525, 7, 17, 0, 0, 10525, 10526, 7, 3, 0, 0, 10526, 10527, 7, 5, 0, 0, + 10527, 10528, 7, 11, 0, 0, 10528, 1744, 1, 0, 0, 0, 10529, 10530, 7, 7, + 0, 0, 10530, 10531, 7, 26, 0, 0, 10531, 10532, 7, 25, 0, 0, 10532, 1746, + 1, 0, 0, 0, 10533, 10534, 7, 7, 0, 0, 10534, 10535, 7, 26, 0, 0, 10535, + 10536, 7, 25, 0, 0, 10536, 10537, 7, 19, 0, 0, 10537, 10538, 7, 8, 0, 0, + 10538, 10539, 7, 6, 0, 0, 10539, 10540, 5, 95, 0, 0, 10540, 10541, 7, 11, + 0, 0, 10541, 10542, 7, 7, 0, 0, 10542, 10543, 7, 6, 0, 0, 10543, 1748, + 1, 0, 0, 0, 10544, 10545, 7, 7, 0, 0, 10545, 10546, 7, 26, 0, 0, 10546, + 10547, 7, 6, 0, 0, 10547, 10548, 7, 7, 0, 0, 10548, 10549, 7, 8, 0, 0, + 10549, 10550, 7, 15, 0, 0, 10550, 10551, 7, 19, 0, 0, 10551, 10552, 7, + 8, 0, 0, 10552, 10553, 7, 8, 0, 0, 10553, 10554, 7, 15, 0, 0, 10554, 10555, + 7, 12, 0, 0, 10555, 10556, 7, 22, 0, 0, 10556, 1750, 1, 0, 0, 0, 10557, + 10558, 7, 7, 0, 0, 10558, 10559, 7, 26, 0, 0, 10559, 10560, 7, 6, 0, 0, + 10560, 10561, 7, 8, 0, 0, 10561, 10562, 7, 3, 0, 0, 10562, 10563, 7, 14, + 0, 0, 10563, 10564, 7, 6, 0, 0, 10564, 10565, 7, 24, 0, 0, 10565, 10566, + 7, 3, 0, 0, 10566, 10567, 7, 5, 0, 0, 10567, 10568, 7, 17, 0, 0, 10568, + 10569, 7, 7, 0, 0, 10569, 1752, 1, 0, 0, 0, 10570, 10571, 7, 18, 0, 0, + 10571, 10572, 7, 15, 0, 0, 10572, 10573, 7, 7, 0, 0, 10573, 10574, 7, 5, + 0, 0, 10574, 10575, 7, 4, 0, 0, 10575, 1754, 1, 0, 0, 0, 10576, 10577, + 7, 18, 0, 0, 10577, 10578, 7, 15, 0, 0, 10578, 10579, 7, 12, 0, 0, 10579, + 10580, 7, 4, 0, 0, 10580, 10581, 5, 95, 0, 0, 10581, 10582, 7, 15, 0, 0, + 10582, 10583, 7, 12, 0, 0, 10583, 10584, 5, 95, 0, 0, 10584, 10585, 7, + 11, 0, 0, 10585, 10586, 7, 7, 0, 0, 10586, 10587, 7, 6, 0, 0, 10587, 1756, + 1, 0, 0, 0, 10588, 10589, 7, 18, 0, 0, 10589, 10590, 7, 5, 0, 0, 10590, + 10591, 7, 19, 0, 0, 10591, 10592, 7, 19, 0, 0, 10592, 10593, 7, 8, 0, 0, + 10593, 1758, 1, 0, 0, 0, 10594, 10595, 7, 18, 0, 0, 10595, 10596, 7, 19, + 0, 0, 10596, 10597, 7, 8, 0, 0, 10597, 10598, 7, 23, 0, 0, 10598, 10599, + 7, 3, 0, 0, 10599, 10600, 7, 6, 0, 0, 10600, 1760, 1, 0, 0, 0, 10601, 10602, + 7, 18, 0, 0, 10602, 10603, 7, 19, 0, 0, 10603, 10604, 7, 17, 0, 0, 10604, + 10605, 7, 12, 0, 0, 10605, 10606, 7, 4, 0, 0, 10606, 10607, 5, 95, 0, 0, + 10607, 10608, 7, 8, 0, 0, 10608, 10609, 7, 19, 0, 0, 10609, 10610, 7, 9, + 0, 0, 10610, 10611, 7, 11, 0, 0, 10611, 1762, 1, 0, 0, 0, 10612, 10613, + 7, 18, 0, 0, 10613, 10614, 7, 8, 0, 0, 10614, 10615, 7, 19, 0, 0, 10615, + 10616, 7, 23, 0, 0, 10616, 10617, 5, 95, 0, 0, 10617, 10618, 7, 16, 0, + 0, 10618, 10619, 7, 3, 0, 0, 10619, 10620, 7, 11, 0, 0, 10620, 10621, 7, + 7, 0, 0, 10621, 10622, 5, 54, 0, 0, 10622, 10623, 5, 52, 0, 0, 10623, 1764, + 1, 0, 0, 0, 10624, 10625, 7, 18, 0, 0, 10625, 10626, 7, 8, 0, 0, 10626, + 10627, 7, 19, 0, 0, 10627, 10628, 7, 23, 0, 0, 10628, 10629, 5, 95, 0, + 0, 10629, 10630, 7, 4, 0, 0, 10630, 10631, 7, 3, 0, 0, 10631, 10632, 7, + 10, 0, 0, 10632, 10633, 7, 11, 0, 0, 10633, 1766, 1, 0, 0, 0, 10634, 10635, + 7, 18, 0, 0, 10635, 10636, 7, 8, 0, 0, 10636, 10637, 7, 19, 0, 0, 10637, + 10638, 7, 23, 0, 0, 10638, 10639, 5, 95, 0, 0, 10639, 10640, 7, 17, 0, + 0, 10640, 10641, 7, 12, 0, 0, 10641, 10642, 7, 15, 0, 0, 10642, 10643, + 7, 26, 0, 0, 10643, 10644, 7, 6, 0, 0, 10644, 10645, 7, 15, 0, 0, 10645, + 10646, 7, 23, 0, 0, 10646, 10647, 7, 7, 0, 0, 10647, 1768, 1, 0, 0, 0, + 10648, 10649, 7, 22, 0, 0, 10649, 10650, 7, 7, 0, 0, 10650, 10651, 7, 19, + 0, 0, 10651, 10652, 7, 23, 0, 0, 10652, 10653, 7, 14, 0, 0, 10653, 10654, + 7, 19, 0, 0, 10654, 10655, 7, 5, 0, 0, 10655, 10656, 7, 5, 0, 0, 10656, + 10657, 7, 18, 0, 0, 10657, 10658, 7, 8, 0, 0, 10658, 10659, 7, 19, 0, 0, + 10659, 10660, 7, 23, 0, 0, 10660, 10661, 7, 6, 0, 0, 10661, 10662, 7, 7, + 0, 0, 10662, 10663, 7, 26, 0, 0, 10663, 10664, 7, 6, 0, 0, 10664, 1770, + 1, 0, 0, 0, 10665, 10666, 7, 22, 0, 0, 10666, 10667, 7, 7, 0, 0, 10667, + 10668, 7, 19, 0, 0, 10668, 10669, 7, 23, 0, 0, 10669, 10670, 7, 14, 0, + 0, 10670, 10671, 7, 19, 0, 0, 10671, 10672, 7, 5, 0, 0, 10672, 10673, 7, + 5, 0, 0, 10673, 10674, 7, 18, 0, 0, 10674, 10675, 7, 8, 0, 0, 10675, 10676, + 7, 19, 0, 0, 10676, 10677, 7, 23, 0, 0, 10677, 10678, 7, 9, 0, 0, 10678, + 10679, 7, 21, 0, 0, 10679, 10680, 7, 16, 0, 0, 10680, 1772, 1, 0, 0, 0, + 10681, 10682, 7, 22, 0, 0, 10682, 10683, 7, 7, 0, 0, 10683, 10684, 7, 19, + 0, 0, 10684, 10685, 7, 23, 0, 0, 10685, 10686, 7, 7, 0, 0, 10686, 10687, + 7, 6, 0, 0, 10687, 10688, 7, 8, 0, 0, 10688, 10689, 7, 10, 0, 0, 10689, + 10690, 7, 14, 0, 0, 10690, 10691, 7, 19, 0, 0, 10691, 10692, 7, 5, 0, 0, + 10692, 10693, 7, 5, 0, 0, 10693, 10694, 7, 7, 0, 0, 10694, 10695, 7, 14, + 0, 0, 10695, 10696, 7, 6, 0, 0, 10696, 10697, 7, 15, 0, 0, 10697, 10698, + 7, 19, 0, 0, 10698, 10699, 7, 12, 0, 0, 10699, 10700, 7, 18, 0, 0, 10700, + 10701, 7, 8, 0, 0, 10701, 10702, 7, 19, 0, 0, 10702, 10703, 7, 23, 0, 0, + 10703, 10704, 7, 6, 0, 0, 10704, 10705, 7, 7, 0, 0, 10705, 10706, 7, 26, + 0, 0, 10706, 10707, 7, 6, 0, 0, 10707, 1774, 1, 0, 0, 0, 10708, 10709, + 7, 22, 0, 0, 10709, 10710, 7, 7, 0, 0, 10710, 10711, 7, 19, 0, 0, 10711, + 10712, 7, 23, 0, 0, 10712, 10713, 7, 7, 0, 0, 10713, 10714, 7, 6, 0, 0, + 10714, 10715, 7, 8, 0, 0, 10715, 10716, 7, 10, 0, 0, 10716, 10717, 7, 14, + 0, 0, 10717, 10718, 7, 19, 0, 0, 10718, 10719, 7, 5, 0, 0, 10719, 10720, + 7, 5, 0, 0, 10720, 10721, 7, 7, 0, 0, 10721, 10722, 7, 14, 0, 0, 10722, + 10723, 7, 6, 0, 0, 10723, 10724, 7, 15, 0, 0, 10724, 10725, 7, 19, 0, 0, + 10725, 10726, 7, 12, 0, 0, 10726, 10727, 7, 18, 0, 0, 10727, 10728, 7, + 8, 0, 0, 10728, 10729, 7, 19, 0, 0, 10729, 10730, 7, 23, 0, 0, 10730, 10731, + 7, 9, 0, 0, 10731, 10732, 7, 21, 0, 0, 10732, 10733, 7, 16, 0, 0, 10733, + 1776, 1, 0, 0, 0, 10734, 10735, 7, 22, 0, 0, 10735, 10736, 7, 7, 0, 0, + 10736, 10737, 7, 19, 0, 0, 10737, 10738, 7, 23, 0, 0, 10738, 10739, 7, + 7, 0, 0, 10739, 10740, 7, 6, 0, 0, 10740, 10741, 7, 8, 0, 0, 10741, 10742, + 7, 10, 0, 0, 10742, 10743, 7, 18, 0, 0, 10743, 10744, 7, 8, 0, 0, 10744, + 10745, 7, 19, 0, 0, 10745, 10746, 7, 23, 0, 0, 10746, 10747, 7, 6, 0, 0, + 10747, 10748, 7, 7, 0, 0, 10748, 10749, 7, 26, 0, 0, 10749, 10750, 7, 6, + 0, 0, 10750, 1778, 1, 0, 0, 0, 10751, 10752, 7, 22, 0, 0, 10752, 10753, + 7, 7, 0, 0, 10753, 10754, 7, 19, 0, 0, 10754, 10755, 7, 23, 0, 0, 10755, + 10756, 7, 7, 0, 0, 10756, 10757, 7, 6, 0, 0, 10757, 10758, 7, 8, 0, 0, + 10758, 10759, 7, 10, 0, 0, 10759, 10760, 7, 18, 0, 0, 10760, 10761, 7, + 8, 0, 0, 10761, 10762, 7, 19, 0, 0, 10762, 10763, 7, 23, 0, 0, 10763, 10764, + 7, 9, 0, 0, 10764, 10765, 7, 21, 0, 0, 10765, 10766, 7, 16, 0, 0, 10766, + 1780, 1, 0, 0, 0, 10767, 10768, 7, 22, 0, 0, 10768, 10769, 7, 7, 0, 0, + 10769, 10770, 7, 19, 0, 0, 10770, 10771, 7, 23, 0, 0, 10771, 10772, 7, + 7, 0, 0, 10772, 10773, 7, 6, 0, 0, 10773, 10774, 7, 8, 0, 0, 10774, 10775, + 7, 10, 0, 0, 10775, 10776, 7, 12, 0, 0, 10776, 1782, 1, 0, 0, 0, 10777, + 10778, 7, 22, 0, 0, 10778, 10779, 7, 7, 0, 0, 10779, 10780, 7, 19, 0, 0, + 10780, 10781, 7, 23, 0, 0, 10781, 10782, 7, 7, 0, 0, 10782, 10783, 7, 6, + 0, 0, 10783, 10784, 7, 8, 0, 0, 10784, 10785, 7, 10, 0, 0, 10785, 10786, + 7, 6, 0, 0, 10786, 10787, 7, 10, 0, 0, 10787, 10788, 7, 25, 0, 0, 10788, + 10789, 7, 7, 0, 0, 10789, 1784, 1, 0, 0, 0, 10790, 10791, 7, 22, 0, 0, + 10791, 10792, 7, 7, 0, 0, 10792, 10793, 7, 19, 0, 0, 10793, 10794, 7, 23, + 0, 0, 10794, 10795, 7, 18, 0, 0, 10795, 10796, 7, 8, 0, 0, 10796, 10797, + 7, 19, 0, 0, 10797, 10798, 7, 23, 0, 0, 10798, 10799, 7, 6, 0, 0, 10799, + 10800, 7, 7, 0, 0, 10800, 10801, 7, 26, 0, 0, 10801, 10802, 7, 6, 0, 0, + 10802, 1786, 1, 0, 0, 0, 10803, 10804, 7, 22, 0, 0, 10804, 10805, 7, 7, + 0, 0, 10805, 10806, 7, 19, 0, 0, 10806, 10807, 7, 23, 0, 0, 10807, 10808, + 7, 18, 0, 0, 10808, 10809, 7, 8, 0, 0, 10809, 10810, 7, 19, 0, 0, 10810, + 10811, 7, 23, 0, 0, 10811, 10812, 7, 9, 0, 0, 10812, 10813, 7, 21, 0, 0, + 10813, 10814, 7, 16, 0, 0, 10814, 1788, 1, 0, 0, 0, 10815, 10816, 7, 22, + 0, 0, 10816, 10817, 7, 7, 0, 0, 10817, 10818, 7, 6, 0, 0, 10818, 10819, + 5, 95, 0, 0, 10819, 10820, 7, 18, 0, 0, 10820, 10821, 7, 19, 0, 0, 10821, + 10822, 7, 8, 0, 0, 10822, 10823, 7, 23, 0, 0, 10823, 10824, 7, 3, 0, 0, + 10824, 10825, 7, 6, 0, 0, 10825, 1790, 1, 0, 0, 0, 10826, 10827, 7, 22, + 0, 0, 10827, 10828, 7, 7, 0, 0, 10828, 10829, 7, 6, 0, 0, 10829, 10830, + 5, 95, 0, 0, 10830, 10831, 7, 5, 0, 0, 10831, 10832, 7, 19, 0, 0, 10832, + 10833, 7, 14, 0, 0, 10833, 10834, 7, 21, 0, 0, 10834, 1792, 1, 0, 0, 0, + 10835, 10836, 7, 22, 0, 0, 10836, 10837, 7, 5, 0, 0, 10837, 10838, 7, 7, + 0, 0, 10838, 10839, 7, 12, 0, 0, 10839, 10840, 7, 22, 0, 0, 10840, 10841, + 7, 6, 0, 0, 10841, 10842, 7, 20, 0, 0, 10842, 1794, 1, 0, 0, 0, 10843, + 10844, 7, 22, 0, 0, 10844, 10845, 7, 8, 0, 0, 10845, 10846, 7, 7, 0, 0, + 10846, 10847, 7, 3, 0, 0, 10847, 10848, 7, 6, 0, 0, 10848, 10849, 7, 7, + 0, 0, 10849, 10850, 7, 11, 0, 0, 10850, 10851, 7, 6, 0, 0, 10851, 1796, + 1, 0, 0, 0, 10852, 10853, 7, 22, 0, 0, 10853, 10854, 7, 6, 0, 0, 10854, + 10855, 7, 15, 0, 0, 10855, 10856, 7, 4, 0, 0, 10856, 10857, 5, 95, 0, 0, + 10857, 10858, 7, 11, 0, 0, 10858, 10859, 7, 17, 0, 0, 10859, 10860, 7, + 16, 0, 0, 10860, 10861, 7, 11, 0, 0, 10861, 10862, 7, 7, 0, 0, 10862, 10863, + 7, 6, 0, 0, 10863, 1798, 1, 0, 0, 0, 10864, 10865, 7, 22, 0, 0, 10865, + 10866, 7, 6, 0, 0, 10866, 10867, 7, 15, 0, 0, 10867, 10868, 7, 4, 0, 0, + 10868, 10869, 5, 95, 0, 0, 10869, 10870, 7, 11, 0, 0, 10870, 10871, 7, + 17, 0, 0, 10871, 10872, 7, 16, 0, 0, 10872, 10873, 7, 6, 0, 0, 10873, 10874, + 7, 8, 0, 0, 10874, 10875, 7, 3, 0, 0, 10875, 10876, 7, 14, 0, 0, 10876, + 10877, 7, 6, 0, 0, 10877, 1800, 1, 0, 0, 0, 10878, 10879, 7, 20, 0, 0, + 10879, 10880, 7, 7, 0, 0, 10880, 10881, 7, 26, 0, 0, 10881, 1802, 1, 0, + 0, 0, 10882, 10883, 7, 15, 0, 0, 10883, 10884, 7, 18, 0, 0, 10884, 10885, + 7, 12, 0, 0, 10885, 10886, 7, 17, 0, 0, 10886, 10887, 7, 5, 0, 0, 10887, + 10888, 7, 5, 0, 0, 10888, 1804, 1, 0, 0, 0, 10889, 10890, 7, 15, 0, 0, + 10890, 10891, 7, 12, 0, 0, 10891, 10892, 7, 7, 0, 0, 10892, 10893, 7, 6, + 0, 0, 10893, 10894, 5, 54, 0, 0, 10894, 10895, 5, 95, 0, 0, 10895, 10896, + 7, 3, 0, 0, 10896, 10897, 7, 6, 0, 0, 10897, 10898, 7, 19, 0, 0, 10898, + 10899, 7, 12, 0, 0, 10899, 1806, 1, 0, 0, 0, 10900, 10901, 7, 15, 0, 0, + 10901, 10902, 7, 12, 0, 0, 10902, 10903, 7, 7, 0, 0, 10903, 10904, 7, 6, + 0, 0, 10904, 10905, 5, 54, 0, 0, 10905, 10906, 5, 95, 0, 0, 10906, 10907, + 7, 12, 0, 0, 10907, 10908, 7, 6, 0, 0, 10908, 10909, 7, 19, 0, 0, 10909, + 10910, 7, 3, 0, 0, 10910, 1808, 1, 0, 0, 0, 10911, 10912, 7, 15, 0, 0, + 10912, 10913, 7, 12, 0, 0, 10913, 10914, 7, 7, 0, 0, 10914, 10915, 7, 6, + 0, 0, 10915, 10916, 5, 95, 0, 0, 10916, 10917, 7, 3, 0, 0, 10917, 10918, + 7, 6, 0, 0, 10918, 10919, 7, 19, 0, 0, 10919, 10920, 7, 12, 0, 0, 10920, + 1810, 1, 0, 0, 0, 10921, 10922, 7, 15, 0, 0, 10922, 10923, 7, 12, 0, 0, + 10923, 10924, 7, 7, 0, 0, 10924, 10925, 7, 6, 0, 0, 10925, 10926, 5, 95, + 0, 0, 10926, 10927, 7, 12, 0, 0, 10927, 10928, 7, 6, 0, 0, 10928, 10929, + 7, 19, 0, 0, 10929, 10930, 7, 3, 0, 0, 10930, 1812, 1, 0, 0, 0, 10931, + 10932, 7, 15, 0, 0, 10932, 10933, 7, 12, 0, 0, 10933, 10934, 7, 11, 0, + 0, 10934, 10935, 7, 6, 0, 0, 10935, 10936, 7, 8, 0, 0, 10936, 1814, 1, + 0, 0, 0, 10937, 10938, 7, 15, 0, 0, 10938, 10939, 7, 12, 0, 0, 10939, 10940, + 7, 6, 0, 0, 10940, 10941, 7, 7, 0, 0, 10941, 10942, 7, 8, 0, 0, 10942, + 10943, 7, 15, 0, 0, 10943, 10944, 7, 19, 0, 0, 10944, 10945, 7, 8, 0, 0, + 10945, 10946, 7, 8, 0, 0, 10946, 10947, 7, 15, 0, 0, 10947, 10948, 7, 12, + 0, 0, 10948, 10949, 7, 22, 0, 0, 10949, 10950, 7, 12, 0, 0, 10950, 1816, + 1, 0, 0, 0, 10951, 10952, 7, 15, 0, 0, 10952, 10953, 7, 12, 0, 0, 10953, + 10954, 7, 6, 0, 0, 10954, 10955, 7, 7, 0, 0, 10955, 10956, 7, 8, 0, 0, + 10956, 10957, 7, 11, 0, 0, 10957, 10958, 7, 7, 0, 0, 10958, 10959, 7, 14, + 0, 0, 10959, 10960, 7, 6, 0, 0, 10960, 10961, 7, 11, 0, 0, 10961, 1818, + 1, 0, 0, 0, 10962, 10963, 7, 15, 0, 0, 10963, 10964, 7, 11, 0, 0, 10964, + 10965, 7, 14, 0, 0, 10965, 10966, 7, 5, 0, 0, 10966, 10967, 7, 19, 0, 0, + 10967, 10968, 7, 11, 0, 0, 10968, 10969, 7, 7, 0, 0, 10969, 10970, 7, 4, + 0, 0, 10970, 1820, 1, 0, 0, 0, 10971, 10972, 7, 15, 0, 0, 10972, 10973, + 7, 11, 0, 0, 10973, 10974, 7, 7, 0, 0, 10974, 10975, 7, 23, 0, 0, 10975, + 10976, 7, 25, 0, 0, 10976, 10977, 7, 6, 0, 0, 10977, 10978, 7, 10, 0, 0, + 10978, 1822, 1, 0, 0, 0, 10979, 10980, 7, 15, 0, 0, 10980, 10981, 7, 11, + 0, 0, 10981, 10982, 7, 12, 0, 0, 10982, 10983, 7, 17, 0, 0, 10983, 10984, + 7, 5, 0, 0, 10984, 10985, 7, 5, 0, 0, 10985, 1824, 1, 0, 0, 0, 10986, 10987, + 7, 15, 0, 0, 10987, 10988, 7, 11, 0, 0, 10988, 10989, 7, 11, 0, 0, 10989, + 10990, 7, 15, 0, 0, 10990, 10991, 7, 23, 0, 0, 10991, 10992, 7, 25, 0, + 0, 10992, 10993, 7, 5, 0, 0, 10993, 10994, 7, 7, 0, 0, 10994, 1826, 1, + 0, 0, 0, 10995, 10996, 7, 15, 0, 0, 10996, 10997, 7, 11, 0, 0, 10997, 10998, + 5, 95, 0, 0, 10998, 10999, 7, 18, 0, 0, 10999, 11000, 7, 8, 0, 0, 11000, + 11001, 7, 7, 0, 0, 11001, 11002, 7, 7, 0, 0, 11002, 11003, 5, 95, 0, 0, + 11003, 11004, 7, 5, 0, 0, 11004, 11005, 7, 19, 0, 0, 11005, 11006, 7, 14, + 0, 0, 11006, 11007, 7, 21, 0, 0, 11007, 1828, 1, 0, 0, 0, 11008, 11009, + 7, 15, 0, 0, 11009, 11010, 7, 11, 0, 0, 11010, 11011, 5, 95, 0, 0, 11011, + 11012, 7, 15, 0, 0, 11012, 11013, 7, 25, 0, 0, 11013, 11014, 7, 24, 0, + 0, 11014, 11015, 5, 52, 0, 0, 11015, 1830, 1, 0, 0, 0, 11016, 11017, 7, + 15, 0, 0, 11017, 11018, 7, 11, 0, 0, 11018, 11019, 5, 95, 0, 0, 11019, + 11020, 7, 15, 0, 0, 11020, 11021, 7, 25, 0, 0, 11021, 11022, 7, 24, 0, + 0, 11022, 11023, 5, 52, 0, 0, 11023, 11024, 5, 95, 0, 0, 11024, 11025, + 7, 14, 0, 0, 11025, 11026, 7, 19, 0, 0, 11026, 11027, 7, 23, 0, 0, 11027, + 11028, 7, 25, 0, 0, 11028, 11029, 7, 3, 0, 0, 11029, 11030, 7, 6, 0, 0, + 11030, 1832, 1, 0, 0, 0, 11031, 11032, 7, 15, 0, 0, 11032, 11033, 7, 11, + 0, 0, 11033, 11034, 5, 95, 0, 0, 11034, 11035, 7, 15, 0, 0, 11035, 11036, + 7, 25, 0, 0, 11036, 11037, 7, 24, 0, 0, 11037, 11038, 5, 52, 0, 0, 11038, + 11039, 5, 95, 0, 0, 11039, 11040, 7, 23, 0, 0, 11040, 11041, 7, 3, 0, 0, + 11041, 11042, 7, 25, 0, 0, 11042, 11043, 7, 25, 0, 0, 11043, 11044, 7, + 7, 0, 0, 11044, 11045, 7, 4, 0, 0, 11045, 1834, 1, 0, 0, 0, 11046, 11047, + 7, 15, 0, 0, 11047, 11048, 7, 11, 0, 0, 11048, 11049, 5, 95, 0, 0, 11049, + 11050, 7, 15, 0, 0, 11050, 11051, 7, 25, 0, 0, 11051, 11052, 7, 24, 0, + 0, 11052, 11053, 5, 54, 0, 0, 11053, 1836, 1, 0, 0, 0, 11054, 11055, 7, + 15, 0, 0, 11055, 11056, 7, 11, 0, 0, 11056, 11057, 5, 95, 0, 0, 11057, + 11058, 7, 17, 0, 0, 11058, 11059, 7, 11, 0, 0, 11059, 11060, 7, 7, 0, 0, + 11060, 11061, 7, 4, 0, 0, 11061, 11062, 5, 95, 0, 0, 11062, 11063, 7, 5, + 0, 0, 11063, 11064, 7, 19, 0, 0, 11064, 11065, 7, 14, 0, 0, 11065, 11066, + 7, 21, 0, 0, 11066, 1838, 1, 0, 0, 0, 11067, 11068, 7, 5, 0, 0, 11068, + 11069, 7, 3, 0, 0, 11069, 11070, 7, 11, 0, 0, 11070, 11071, 7, 6, 0, 0, + 11071, 11072, 5, 95, 0, 0, 11072, 11073, 7, 15, 0, 0, 11073, 11074, 7, + 12, 0, 0, 11074, 11075, 7, 11, 0, 0, 11075, 11076, 7, 7, 0, 0, 11076, 11077, + 7, 8, 0, 0, 11077, 11078, 7, 6, 0, 0, 11078, 11079, 5, 95, 0, 0, 11079, + 11080, 7, 15, 0, 0, 11080, 11081, 7, 4, 0, 0, 11081, 1840, 1, 0, 0, 0, + 11082, 11083, 7, 5, 0, 0, 11083, 11084, 7, 14, 0, 0, 11084, 11085, 7, 3, + 0, 0, 11085, 11086, 7, 11, 0, 0, 11086, 11087, 7, 7, 0, 0, 11087, 1842, + 1, 0, 0, 0, 11088, 11089, 7, 5, 0, 0, 11089, 11090, 7, 7, 0, 0, 11090, + 11091, 7, 3, 0, 0, 11091, 11092, 7, 11, 0, 0, 11092, 11093, 7, 6, 0, 0, + 11093, 1844, 1, 0, 0, 0, 11094, 11095, 7, 5, 0, 0, 11095, 11096, 7, 7, + 0, 0, 11096, 11097, 7, 12, 0, 0, 11097, 11098, 7, 22, 0, 0, 11098, 11099, + 7, 6, 0, 0, 11099, 11100, 7, 20, 0, 0, 11100, 1846, 1, 0, 0, 0, 11101, + 11102, 7, 5, 0, 0, 11102, 11103, 7, 15, 0, 0, 11103, 11104, 7, 12, 0, 0, + 11104, 11105, 7, 7, 0, 0, 11105, 11106, 7, 18, 0, 0, 11106, 11107, 7, 8, + 0, 0, 11107, 11108, 7, 19, 0, 0, 11108, 11109, 7, 23, 0, 0, 11109, 11110, + 7, 6, 0, 0, 11110, 11111, 7, 7, 0, 0, 11111, 11112, 7, 26, 0, 0, 11112, + 11113, 7, 6, 0, 0, 11113, 1848, 1, 0, 0, 0, 11114, 11115, 7, 5, 0, 0, 11115, + 11116, 7, 15, 0, 0, 11116, 11117, 7, 12, 0, 0, 11117, 11118, 7, 7, 0, 0, + 11118, 11119, 7, 18, 0, 0, 11119, 11120, 7, 8, 0, 0, 11120, 11121, 7, 19, + 0, 0, 11121, 11122, 7, 23, 0, 0, 11122, 11123, 7, 9, 0, 0, 11123, 11124, + 7, 21, 0, 0, 11124, 11125, 7, 16, 0, 0, 11125, 1850, 1, 0, 0, 0, 11126, + 11127, 7, 5, 0, 0, 11127, 11128, 7, 15, 0, 0, 11128, 11129, 7, 12, 0, 0, + 11129, 11130, 7, 7, 0, 0, 11130, 11131, 7, 11, 0, 0, 11131, 11132, 7, 6, + 0, 0, 11132, 11133, 7, 8, 0, 0, 11133, 11134, 7, 15, 0, 0, 11134, 11135, + 7, 12, 0, 0, 11135, 11136, 7, 22, 0, 0, 11136, 11137, 7, 18, 0, 0, 11137, + 11138, 7, 8, 0, 0, 11138, 11139, 7, 19, 0, 0, 11139, 11140, 7, 23, 0, 0, + 11140, 11141, 7, 6, 0, 0, 11141, 11142, 7, 7, 0, 0, 11142, 11143, 7, 26, + 0, 0, 11143, 11144, 7, 6, 0, 0, 11144, 1852, 1, 0, 0, 0, 11145, 11146, + 7, 5, 0, 0, 11146, 11147, 7, 15, 0, 0, 11147, 11148, 7, 12, 0, 0, 11148, + 11149, 7, 7, 0, 0, 11149, 11150, 7, 11, 0, 0, 11150, 11151, 7, 6, 0, 0, + 11151, 11152, 7, 8, 0, 0, 11152, 11153, 7, 15, 0, 0, 11153, 11154, 7, 12, + 0, 0, 11154, 11155, 7, 22, 0, 0, 11155, 11156, 7, 18, 0, 0, 11156, 11157, + 7, 8, 0, 0, 11157, 11158, 7, 19, 0, 0, 11158, 11159, 7, 23, 0, 0, 11159, + 11160, 7, 9, 0, 0, 11160, 11161, 7, 21, 0, 0, 11161, 11162, 7, 16, 0, 0, + 11162, 1854, 1, 0, 0, 0, 11163, 11164, 7, 5, 0, 0, 11164, 11165, 7, 12, + 0, 0, 11165, 1856, 1, 0, 0, 0, 11166, 11167, 7, 5, 0, 0, 11167, 11168, + 7, 19, 0, 0, 11168, 11169, 7, 3, 0, 0, 11169, 11170, 7, 4, 0, 0, 11170, + 11171, 5, 95, 0, 0, 11171, 11172, 7, 18, 0, 0, 11172, 11173, 7, 15, 0, + 0, 11173, 11174, 7, 5, 0, 0, 11174, 11175, 7, 7, 0, 0, 11175, 1858, 1, + 0, 0, 0, 11176, 11177, 7, 5, 0, 0, 11177, 11178, 7, 19, 0, 0, 11178, 11179, + 7, 14, 0, 0, 11179, 11180, 7, 3, 0, 0, 11180, 11181, 7, 6, 0, 0, 11181, + 11182, 7, 7, 0, 0, 11182, 1860, 1, 0, 0, 0, 11183, 11184, 7, 5, 0, 0, 11184, + 11185, 7, 19, 0, 0, 11185, 11186, 7, 22, 0, 0, 11186, 1862, 1, 0, 0, 0, + 11187, 11188, 7, 5, 0, 0, 11188, 11189, 7, 19, 0, 0, 11189, 11190, 7, 22, + 0, 0, 11190, 11191, 5, 49, 0, 0, 11191, 11192, 5, 48, 0, 0, 11192, 1864, + 1, 0, 0, 0, 11193, 11194, 7, 5, 0, 0, 11194, 11195, 7, 19, 0, 0, 11195, + 11196, 7, 22, 0, 0, 11196, 11197, 5, 50, 0, 0, 11197, 1866, 1, 0, 0, 0, + 11198, 11199, 7, 5, 0, 0, 11199, 11200, 7, 19, 0, 0, 11200, 11201, 7, 9, + 0, 0, 11201, 11202, 7, 7, 0, 0, 11202, 11203, 7, 8, 0, 0, 11203, 1868, + 1, 0, 0, 0, 11204, 11205, 7, 5, 0, 0, 11205, 11206, 7, 25, 0, 0, 11206, + 11207, 7, 3, 0, 0, 11207, 11208, 7, 4, 0, 0, 11208, 1870, 1, 0, 0, 0, 11209, + 11210, 7, 5, 0, 0, 11210, 11211, 7, 6, 0, 0, 11211, 11212, 7, 8, 0, 0, + 11212, 11213, 7, 15, 0, 0, 11213, 11214, 7, 23, 0, 0, 11214, 1872, 1, 0, + 0, 0, 11215, 11216, 7, 23, 0, 0, 11216, 11217, 7, 3, 0, 0, 11217, 11218, + 7, 21, 0, 0, 11218, 11219, 7, 7, 0, 0, 11219, 11220, 7, 4, 0, 0, 11220, + 11221, 7, 3, 0, 0, 11221, 11222, 7, 6, 0, 0, 11222, 11223, 7, 7, 0, 0, + 11223, 1874, 1, 0, 0, 0, 11224, 11225, 7, 23, 0, 0, 11225, 11226, 7, 3, + 0, 0, 11226, 11227, 7, 21, 0, 0, 11227, 11228, 7, 7, 0, 0, 11228, 11229, + 7, 6, 0, 0, 11229, 11230, 7, 15, 0, 0, 11230, 11231, 7, 23, 0, 0, 11231, + 11232, 7, 7, 0, 0, 11232, 1876, 1, 0, 0, 0, 11233, 11234, 7, 23, 0, 0, + 11234, 11235, 7, 3, 0, 0, 11235, 11236, 7, 21, 0, 0, 11236, 11237, 7, 7, + 0, 0, 11237, 11238, 5, 95, 0, 0, 11238, 11239, 7, 11, 0, 0, 11239, 11240, + 7, 7, 0, 0, 11240, 11241, 7, 6, 0, 0, 11241, 1878, 1, 0, 0, 0, 11242, 11243, + 7, 23, 0, 0, 11243, 11244, 7, 3, 0, 0, 11244, 11245, 7, 11, 0, 0, 11245, + 11246, 7, 6, 0, 0, 11246, 11247, 7, 7, 0, 0, 11247, 11248, 7, 8, 0, 0, + 11248, 11249, 5, 95, 0, 0, 11249, 11250, 7, 25, 0, 0, 11250, 11251, 7, + 19, 0, 0, 11251, 11252, 7, 11, 0, 0, 11252, 11253, 5, 95, 0, 0, 11253, + 11254, 7, 9, 0, 0, 11254, 11255, 7, 3, 0, 0, 11255, 11256, 7, 15, 0, 0, + 11256, 11257, 7, 6, 0, 0, 11257, 1880, 1, 0, 0, 0, 11258, 11259, 7, 23, + 0, 0, 11259, 11260, 7, 16, 0, 0, 11260, 11261, 7, 8, 0, 0, 11261, 11262, + 7, 14, 0, 0, 11262, 11263, 7, 19, 0, 0, 11263, 11264, 7, 12, 0, 0, 11264, + 11265, 7, 6, 0, 0, 11265, 11266, 7, 3, 0, 0, 11266, 11267, 7, 15, 0, 0, + 11267, 11268, 7, 12, 0, 0, 11268, 11269, 7, 11, 0, 0, 11269, 1882, 1, 0, + 0, 0, 11270, 11271, 7, 23, 0, 0, 11271, 11272, 7, 16, 0, 0, 11272, 11273, + 7, 8, 0, 0, 11273, 11274, 7, 4, 0, 0, 11274, 11275, 7, 15, 0, 0, 11275, + 11276, 7, 11, 0, 0, 11276, 11277, 7, 27, 0, 0, 11277, 11278, 7, 19, 0, + 0, 11278, 11279, 7, 15, 0, 0, 11279, 11280, 7, 12, 0, 0, 11280, 11281, + 7, 6, 0, 0, 11281, 1884, 1, 0, 0, 0, 11282, 11283, 7, 23, 0, 0, 11283, + 11284, 7, 16, 0, 0, 11284, 11285, 7, 8, 0, 0, 11285, 11286, 7, 7, 0, 0, + 11286, 11287, 7, 28, 0, 0, 11287, 11288, 7, 17, 0, 0, 11288, 11289, 7, + 3, 0, 0, 11289, 11290, 7, 5, 0, 0, 11290, 1886, 1, 0, 0, 0, 11291, 11292, + 7, 23, 0, 0, 11292, 11293, 7, 16, 0, 0, 11293, 11294, 7, 8, 0, 0, 11294, + 11295, 7, 15, 0, 0, 11295, 11296, 7, 12, 0, 0, 11296, 11297, 7, 6, 0, 0, + 11297, 11298, 7, 7, 0, 0, 11298, 11299, 7, 8, 0, 0, 11299, 11300, 7, 11, + 0, 0, 11300, 11301, 7, 7, 0, 0, 11301, 11302, 7, 14, 0, 0, 11302, 11303, + 7, 6, 0, 0, 11303, 11304, 7, 11, 0, 0, 11304, 1888, 1, 0, 0, 0, 11305, + 11306, 7, 23, 0, 0, 11306, 11307, 7, 16, 0, 0, 11307, 11308, 7, 8, 0, 0, + 11308, 11309, 7, 19, 0, 0, 11309, 11310, 7, 24, 0, 0, 11310, 11311, 7, + 7, 0, 0, 11311, 11312, 7, 8, 0, 0, 11312, 11313, 7, 5, 0, 0, 11313, 11314, + 7, 3, 0, 0, 11314, 11315, 7, 25, 0, 0, 11315, 11316, 7, 11, 0, 0, 11316, + 1890, 1, 0, 0, 0, 11317, 11318, 7, 23, 0, 0, 11318, 11319, 7, 16, 0, 0, + 11319, 11320, 7, 8, 0, 0, 11320, 11321, 7, 6, 0, 0, 11321, 11322, 7, 19, + 0, 0, 11322, 11323, 7, 17, 0, 0, 11323, 11324, 7, 14, 0, 0, 11324, 11325, + 7, 20, 0, 0, 11325, 11326, 7, 7, 0, 0, 11326, 11327, 7, 11, 0, 0, 11327, + 1892, 1, 0, 0, 0, 11328, 11329, 7, 23, 0, 0, 11329, 11330, 7, 16, 0, 0, + 11330, 11331, 7, 8, 0, 0, 11331, 11332, 7, 9, 0, 0, 11332, 11333, 7, 15, + 0, 0, 11333, 11334, 7, 6, 0, 0, 11334, 11335, 7, 20, 0, 0, 11335, 11336, + 7, 15, 0, 0, 11336, 11337, 7, 12, 0, 0, 11337, 1894, 1, 0, 0, 0, 11338, + 11339, 7, 23, 0, 0, 11339, 11340, 7, 4, 0, 0, 11340, 11341, 5, 53, 0, 0, + 11341, 1896, 1, 0, 0, 0, 11342, 11343, 7, 23, 0, 0, 11343, 11344, 7, 5, + 0, 0, 11344, 11345, 7, 15, 0, 0, 11345, 11346, 7, 12, 0, 0, 11346, 11347, + 7, 7, 0, 0, 11347, 11348, 7, 18, 0, 0, 11348, 11349, 7, 8, 0, 0, 11349, + 11350, 7, 19, 0, 0, 11350, 11351, 7, 23, 0, 0, 11351, 11352, 7, 6, 0, 0, + 11352, 11353, 7, 7, 0, 0, 11353, 11354, 7, 26, 0, 0, 11354, 11355, 7, 6, + 0, 0, 11355, 1898, 1, 0, 0, 0, 11356, 11357, 7, 23, 0, 0, 11357, 11358, + 7, 5, 0, 0, 11358, 11359, 7, 15, 0, 0, 11359, 11360, 7, 12, 0, 0, 11360, + 11361, 7, 7, 0, 0, 11361, 11362, 7, 18, 0, 0, 11362, 11363, 7, 8, 0, 0, + 11363, 11364, 7, 19, 0, 0, 11364, 11365, 7, 23, 0, 0, 11365, 11366, 7, + 9, 0, 0, 11366, 11367, 7, 21, 0, 0, 11367, 11368, 7, 16, 0, 0, 11368, 1900, + 1, 0, 0, 0, 11369, 11370, 7, 23, 0, 0, 11370, 11371, 7, 19, 0, 0, 11371, + 11372, 7, 12, 0, 0, 11372, 11373, 7, 6, 0, 0, 11373, 11374, 7, 20, 0, 0, + 11374, 11375, 7, 12, 0, 0, 11375, 11376, 7, 3, 0, 0, 11376, 11377, 7, 23, + 0, 0, 11377, 11378, 7, 7, 0, 0, 11378, 1902, 1, 0, 0, 0, 11379, 11380, + 7, 23, 0, 0, 11380, 11381, 7, 25, 0, 0, 11381, 11382, 7, 19, 0, 0, 11382, + 11383, 7, 15, 0, 0, 11383, 11384, 7, 12, 0, 0, 11384, 11385, 7, 6, 0, 0, + 11385, 11386, 7, 18, 0, 0, 11386, 11387, 7, 8, 0, 0, 11387, 11388, 7, 19, + 0, 0, 11388, 11389, 7, 23, 0, 0, 11389, 11390, 7, 6, 0, 0, 11390, 11391, + 7, 7, 0, 0, 11391, 11392, 7, 26, 0, 0, 11392, 11393, 7, 6, 0, 0, 11393, + 1904, 1, 0, 0, 0, 11394, 11395, 7, 23, 0, 0, 11395, 11396, 7, 25, 0, 0, + 11396, 11397, 7, 19, 0, 0, 11397, 11398, 7, 15, 0, 0, 11398, 11399, 7, + 12, 0, 0, 11399, 11400, 7, 6, 0, 0, 11400, 11401, 7, 18, 0, 0, 11401, 11402, + 7, 8, 0, 0, 11402, 11403, 7, 19, 0, 0, 11403, 11404, 7, 23, 0, 0, 11404, + 11405, 7, 9, 0, 0, 11405, 11406, 7, 21, 0, 0, 11406, 11407, 7, 16, 0, 0, + 11407, 1906, 1, 0, 0, 0, 11408, 11409, 7, 23, 0, 0, 11409, 11410, 7, 25, + 0, 0, 11410, 11411, 7, 19, 0, 0, 11411, 11412, 7, 5, 0, 0, 11412, 11413, + 7, 10, 0, 0, 11413, 11414, 7, 18, 0, 0, 11414, 11415, 7, 8, 0, 0, 11415, + 11416, 7, 19, 0, 0, 11416, 11417, 7, 23, 0, 0, 11417, 11418, 7, 6, 0, 0, + 11418, 11419, 7, 7, 0, 0, 11419, 11420, 7, 26, 0, 0, 11420, 11421, 7, 6, + 0, 0, 11421, 1908, 1, 0, 0, 0, 11422, 11423, 7, 23, 0, 0, 11423, 11424, + 7, 25, 0, 0, 11424, 11425, 7, 19, 0, 0, 11425, 11426, 7, 5, 0, 0, 11426, + 11427, 7, 10, 0, 0, 11427, 11428, 7, 18, 0, 0, 11428, 11429, 7, 8, 0, 0, + 11429, 11430, 7, 19, 0, 0, 11430, 11431, 7, 23, 0, 0, 11431, 11432, 7, + 9, 0, 0, 11432, 11433, 7, 21, 0, 0, 11433, 11434, 7, 16, 0, 0, 11434, 1910, + 1, 0, 0, 0, 11435, 11436, 7, 23, 0, 0, 11436, 11437, 7, 17, 0, 0, 11437, + 11438, 7, 5, 0, 0, 11438, 11439, 7, 6, 0, 0, 11439, 11440, 7, 15, 0, 0, + 11440, 11441, 7, 5, 0, 0, 11441, 11442, 7, 15, 0, 0, 11442, 11443, 7, 12, + 0, 0, 11443, 11444, 7, 7, 0, 0, 11444, 11445, 7, 11, 0, 0, 11445, 11446, + 7, 6, 0, 0, 11446, 11447, 7, 8, 0, 0, 11447, 11448, 7, 15, 0, 0, 11448, + 11449, 7, 12, 0, 0, 11449, 11450, 7, 22, 0, 0, 11450, 11451, 7, 18, 0, + 0, 11451, 11452, 7, 8, 0, 0, 11452, 11453, 7, 19, 0, 0, 11453, 11454, 7, + 23, 0, 0, 11454, 11455, 7, 6, 0, 0, 11455, 11456, 7, 7, 0, 0, 11456, 11457, + 7, 26, 0, 0, 11457, 11458, 7, 6, 0, 0, 11458, 1912, 1, 0, 0, 0, 11459, + 11460, 7, 23, 0, 0, 11460, 11461, 7, 17, 0, 0, 11461, 11462, 7, 5, 0, 0, + 11462, 11463, 7, 6, 0, 0, 11463, 11464, 7, 15, 0, 0, 11464, 11465, 7, 5, + 0, 0, 11465, 11466, 7, 15, 0, 0, 11466, 11467, 7, 12, 0, 0, 11467, 11468, + 7, 7, 0, 0, 11468, 11469, 7, 11, 0, 0, 11469, 11470, 7, 6, 0, 0, 11470, + 11471, 7, 8, 0, 0, 11471, 11472, 7, 15, 0, 0, 11472, 11473, 7, 12, 0, 0, + 11473, 11474, 7, 22, 0, 0, 11474, 11475, 7, 18, 0, 0, 11475, 11476, 7, + 8, 0, 0, 11476, 11477, 7, 19, 0, 0, 11477, 11478, 7, 23, 0, 0, 11478, 11479, + 7, 9, 0, 0, 11479, 11480, 7, 21, 0, 0, 11480, 11481, 7, 16, 0, 0, 11481, + 1914, 1, 0, 0, 0, 11482, 11483, 7, 23, 0, 0, 11483, 11484, 7, 17, 0, 0, + 11484, 11485, 7, 5, 0, 0, 11485, 11486, 7, 6, 0, 0, 11486, 11487, 7, 15, + 0, 0, 11487, 11488, 7, 25, 0, 0, 11488, 11489, 7, 19, 0, 0, 11489, 11490, + 7, 15, 0, 0, 11490, 11491, 7, 12, 0, 0, 11491, 11492, 7, 6, 0, 0, 11492, + 11493, 7, 18, 0, 0, 11493, 11494, 7, 8, 0, 0, 11494, 11495, 7, 19, 0, 0, + 11495, 11496, 7, 23, 0, 0, 11496, 11497, 7, 6, 0, 0, 11497, 11498, 7, 7, + 0, 0, 11498, 11499, 7, 26, 0, 0, 11499, 11500, 7, 6, 0, 0, 11500, 1916, + 1, 0, 0, 0, 11501, 11502, 7, 23, 0, 0, 11502, 11503, 7, 17, 0, 0, 11503, + 11504, 7, 5, 0, 0, 11504, 11505, 7, 6, 0, 0, 11505, 11506, 7, 15, 0, 0, + 11506, 11507, 7, 25, 0, 0, 11507, 11508, 7, 19, 0, 0, 11508, 11509, 7, + 15, 0, 0, 11509, 11510, 7, 12, 0, 0, 11510, 11511, 7, 6, 0, 0, 11511, 11512, + 7, 18, 0, 0, 11512, 11513, 7, 8, 0, 0, 11513, 11514, 7, 19, 0, 0, 11514, + 11515, 7, 23, 0, 0, 11515, 11516, 7, 9, 0, 0, 11516, 11517, 7, 21, 0, 0, + 11517, 11518, 7, 16, 0, 0, 11518, 1918, 1, 0, 0, 0, 11519, 11520, 7, 23, + 0, 0, 11520, 11521, 7, 17, 0, 0, 11521, 11522, 7, 5, 0, 0, 11522, 11523, + 7, 6, 0, 0, 11523, 11524, 7, 15, 0, 0, 11524, 11525, 7, 25, 0, 0, 11525, + 11526, 7, 19, 0, 0, 11526, 11527, 7, 5, 0, 0, 11527, 11528, 7, 10, 0, 0, + 11528, 11529, 7, 22, 0, 0, 11529, 11530, 7, 19, 0, 0, 11530, 11531, 7, + 12, 0, 0, 11531, 11532, 7, 18, 0, 0, 11532, 11533, 7, 8, 0, 0, 11533, 11534, + 7, 19, 0, 0, 11534, 11535, 7, 23, 0, 0, 11535, 11536, 7, 6, 0, 0, 11536, + 11537, 7, 7, 0, 0, 11537, 11538, 7, 26, 0, 0, 11538, 11539, 7, 6, 0, 0, + 11539, 1920, 1, 0, 0, 0, 11540, 11541, 7, 23, 0, 0, 11541, 11542, 7, 17, + 0, 0, 11542, 11543, 7, 5, 0, 0, 11543, 11544, 7, 6, 0, 0, 11544, 11545, + 7, 15, 0, 0, 11545, 11546, 7, 25, 0, 0, 11546, 11547, 7, 19, 0, 0, 11547, + 11548, 7, 5, 0, 0, 11548, 11549, 7, 10, 0, 0, 11549, 11550, 7, 22, 0, 0, + 11550, 11551, 7, 19, 0, 0, 11551, 11552, 7, 12, 0, 0, 11552, 11553, 7, + 18, 0, 0, 11553, 11554, 7, 8, 0, 0, 11554, 11555, 7, 19, 0, 0, 11555, 11556, + 7, 23, 0, 0, 11556, 11557, 7, 9, 0, 0, 11557, 11558, 7, 21, 0, 0, 11558, + 11559, 7, 16, 0, 0, 11559, 1922, 1, 0, 0, 0, 11560, 11561, 7, 12, 0, 0, + 11561, 11562, 7, 3, 0, 0, 11562, 11563, 7, 23, 0, 0, 11563, 11564, 7, 7, + 0, 0, 11564, 11565, 5, 95, 0, 0, 11565, 11566, 7, 14, 0, 0, 11566, 11567, + 7, 19, 0, 0, 11567, 11568, 7, 12, 0, 0, 11568, 11569, 7, 11, 0, 0, 11569, + 11570, 7, 6, 0, 0, 11570, 1924, 1, 0, 0, 0, 11571, 11572, 7, 12, 0, 0, + 11572, 11573, 7, 17, 0, 0, 11573, 11574, 7, 5, 0, 0, 11574, 11575, 7, 5, + 0, 0, 11575, 11576, 7, 15, 0, 0, 11576, 11577, 7, 18, 0, 0, 11577, 1926, + 1, 0, 0, 0, 11578, 11579, 7, 12, 0, 0, 11579, 11580, 7, 17, 0, 0, 11580, + 11581, 7, 23, 0, 0, 11581, 11582, 7, 22, 0, 0, 11582, 11583, 7, 7, 0, 0, + 11583, 11584, 7, 19, 0, 0, 11584, 11585, 7, 23, 0, 0, 11585, 11586, 7, + 7, 0, 0, 11586, 11587, 7, 6, 0, 0, 11587, 11588, 7, 8, 0, 0, 11588, 11589, + 7, 15, 0, 0, 11589, 11590, 7, 7, 0, 0, 11590, 11591, 7, 11, 0, 0, 11591, + 1928, 1, 0, 0, 0, 11592, 11593, 7, 12, 0, 0, 11593, 11594, 7, 17, 0, 0, + 11594, 11595, 7, 23, 0, 0, 11595, 11596, 7, 15, 0, 0, 11596, 11597, 7, + 12, 0, 0, 11597, 11598, 7, 6, 0, 0, 11598, 11599, 7, 7, 0, 0, 11599, 11600, + 7, 8, 0, 0, 11600, 11601, 7, 15, 0, 0, 11601, 11602, 7, 19, 0, 0, 11602, + 11603, 7, 8, 0, 0, 11603, 11604, 7, 8, 0, 0, 11604, 11605, 7, 15, 0, 0, + 11605, 11606, 7, 12, 0, 0, 11606, 11607, 7, 22, 0, 0, 11607, 11608, 7, + 11, 0, 0, 11608, 1930, 1, 0, 0, 0, 11609, 11610, 7, 12, 0, 0, 11610, 11611, + 7, 17, 0, 0, 11611, 11612, 7, 23, 0, 0, 11612, 11613, 7, 25, 0, 0, 11613, + 11614, 7, 19, 0, 0, 11614, 11615, 7, 15, 0, 0, 11615, 11616, 7, 12, 0, + 0, 11616, 11617, 7, 6, 0, 0, 11617, 11618, 7, 11, 0, 0, 11618, 1932, 1, + 0, 0, 0, 11619, 11620, 7, 19, 0, 0, 11620, 11621, 7, 14, 0, 0, 11621, 11622, + 7, 6, 0, 0, 11622, 1934, 1, 0, 0, 0, 11623, 11624, 7, 19, 0, 0, 11624, + 11625, 7, 14, 0, 0, 11625, 11626, 7, 6, 0, 0, 11626, 11627, 7, 7, 0, 0, + 11627, 11628, 7, 6, 0, 0, 11628, 11629, 5, 95, 0, 0, 11629, 11630, 7, 5, + 0, 0, 11630, 11631, 7, 7, 0, 0, 11631, 11632, 7, 12, 0, 0, 11632, 11633, + 7, 22, 0, 0, 11633, 11634, 7, 6, 0, 0, 11634, 11635, 7, 20, 0, 0, 11635, + 1936, 1, 0, 0, 0, 11636, 11637, 7, 19, 0, 0, 11637, 11638, 7, 8, 0, 0, + 11638, 11639, 7, 4, 0, 0, 11639, 1938, 1, 0, 0, 0, 11640, 11641, 7, 19, + 0, 0, 11641, 11642, 7, 24, 0, 0, 11642, 11643, 7, 7, 0, 0, 11643, 11644, + 7, 8, 0, 0, 11644, 11645, 7, 5, 0, 0, 11645, 11646, 7, 3, 0, 0, 11646, + 11647, 7, 25, 0, 0, 11647, 11648, 7, 11, 0, 0, 11648, 1940, 1, 0, 0, 0, + 11649, 11650, 7, 25, 0, 0, 11650, 11651, 7, 7, 0, 0, 11651, 11652, 7, 8, + 0, 0, 11652, 11653, 7, 15, 0, 0, 11653, 11654, 7, 19, 0, 0, 11654, 11655, + 7, 4, 0, 0, 11655, 11656, 5, 95, 0, 0, 11656, 11657, 7, 3, 0, 0, 11657, + 11658, 7, 4, 0, 0, 11658, 11659, 7, 4, 0, 0, 11659, 1942, 1, 0, 0, 0, 11660, + 11661, 7, 25, 0, 0, 11661, 11662, 7, 7, 0, 0, 11662, 11663, 7, 8, 0, 0, + 11663, 11664, 7, 15, 0, 0, 11664, 11665, 7, 19, 0, 0, 11665, 11666, 7, + 4, 0, 0, 11666, 11667, 5, 95, 0, 0, 11667, 11668, 7, 4, 0, 0, 11668, 11669, + 7, 15, 0, 0, 11669, 11670, 7, 18, 0, 0, 11670, 11671, 7, 18, 0, 0, 11671, + 1944, 1, 0, 0, 0, 11672, 11673, 7, 25, 0, 0, 11673, 11674, 7, 15, 0, 0, + 11674, 1946, 1, 0, 0, 0, 11675, 11676, 7, 25, 0, 0, 11676, 11677, 7, 19, + 0, 0, 11677, 11678, 7, 15, 0, 0, 11678, 11679, 7, 12, 0, 0, 11679, 11680, + 7, 6, 0, 0, 11680, 11681, 7, 18, 0, 0, 11681, 11682, 7, 8, 0, 0, 11682, + 11683, 7, 19, 0, 0, 11683, 11684, 7, 23, 0, 0, 11684, 11685, 7, 6, 0, 0, + 11685, 11686, 7, 7, 0, 0, 11686, 11687, 7, 26, 0, 0, 11687, 11688, 7, 6, + 0, 0, 11688, 1948, 1, 0, 0, 0, 11689, 11690, 7, 25, 0, 0, 11690, 11691, + 7, 19, 0, 0, 11691, 11692, 7, 15, 0, 0, 11692, 11693, 7, 12, 0, 0, 11693, + 11694, 7, 6, 0, 0, 11694, 11695, 7, 18, 0, 0, 11695, 11696, 7, 8, 0, 0, + 11696, 11697, 7, 19, 0, 0, 11697, 11698, 7, 23, 0, 0, 11698, 11699, 7, + 9, 0, 0, 11699, 11700, 7, 21, 0, 0, 11700, 11701, 7, 16, 0, 0, 11701, 1950, + 1, 0, 0, 0, 11702, 11703, 7, 25, 0, 0, 11703, 11704, 7, 19, 0, 0, 11704, + 11705, 7, 15, 0, 0, 11705, 11706, 7, 12, 0, 0, 11706, 11707, 7, 6, 0, 0, + 11707, 11708, 7, 12, 0, 0, 11708, 1952, 1, 0, 0, 0, 11709, 11710, 7, 25, + 0, 0, 11710, 11711, 7, 19, 0, 0, 11711, 11712, 7, 5, 0, 0, 11712, 11713, + 7, 10, 0, 0, 11713, 11714, 7, 18, 0, 0, 11714, 11715, 7, 8, 0, 0, 11715, + 11716, 7, 19, 0, 0, 11716, 11717, 7, 23, 0, 0, 11717, 11718, 7, 6, 0, 0, + 11718, 11719, 7, 7, 0, 0, 11719, 11720, 7, 26, 0, 0, 11720, 11721, 7, 6, + 0, 0, 11721, 1954, 1, 0, 0, 0, 11722, 11723, 7, 25, 0, 0, 11723, 11724, + 7, 19, 0, 0, 11724, 11725, 7, 5, 0, 0, 11725, 11726, 7, 10, 0, 0, 11726, + 11727, 7, 18, 0, 0, 11727, 11728, 7, 8, 0, 0, 11728, 11729, 7, 19, 0, 0, + 11729, 11730, 7, 23, 0, 0, 11730, 11731, 7, 9, 0, 0, 11731, 11732, 7, 21, + 0, 0, 11732, 11733, 7, 16, 0, 0, 11733, 1956, 1, 0, 0, 0, 11734, 11735, + 7, 25, 0, 0, 11735, 11736, 7, 19, 0, 0, 11736, 11737, 7, 5, 0, 0, 11737, + 11738, 7, 10, 0, 0, 11738, 11739, 7, 22, 0, 0, 11739, 11740, 7, 19, 0, + 0, 11740, 11741, 7, 12, 0, 0, 11741, 11742, 7, 18, 0, 0, 11742, 11743, + 7, 8, 0, 0, 11743, 11744, 7, 19, 0, 0, 11744, 11745, 7, 23, 0, 0, 11745, + 11746, 7, 6, 0, 0, 11746, 11747, 7, 7, 0, 0, 11747, 11748, 7, 26, 0, 0, + 11748, 11749, 7, 6, 0, 0, 11749, 1958, 1, 0, 0, 0, 11750, 11751, 7, 25, + 0, 0, 11751, 11752, 7, 19, 0, 0, 11752, 11753, 7, 5, 0, 0, 11753, 11754, + 7, 10, 0, 0, 11754, 11755, 7, 22, 0, 0, 11755, 11756, 7, 19, 0, 0, 11756, + 11757, 7, 12, 0, 0, 11757, 11758, 7, 18, 0, 0, 11758, 11759, 7, 8, 0, 0, + 11759, 11760, 7, 19, 0, 0, 11760, 11761, 7, 23, 0, 0, 11761, 11762, 7, + 9, 0, 0, 11762, 11763, 7, 21, 0, 0, 11763, 11764, 7, 16, 0, 0, 11764, 1960, + 1, 0, 0, 0, 11765, 11766, 7, 25, 0, 0, 11766, 11767, 7, 19, 0, 0, 11767, + 11768, 7, 9, 0, 0, 11768, 1962, 1, 0, 0, 0, 11769, 11770, 7, 25, 0, 0, + 11770, 11771, 7, 19, 0, 0, 11771, 11772, 7, 9, 0, 0, 11772, 11773, 7, 7, + 0, 0, 11773, 11774, 7, 8, 0, 0, 11774, 1964, 1, 0, 0, 0, 11775, 11776, + 7, 28, 0, 0, 11776, 11777, 7, 17, 0, 0, 11777, 11778, 7, 19, 0, 0, 11778, + 11779, 7, 6, 0, 0, 11779, 11780, 7, 7, 0, 0, 11780, 1966, 1, 0, 0, 0, 11781, + 11782, 7, 8, 0, 0, 11782, 11783, 7, 3, 0, 0, 11783, 11784, 7, 4, 0, 0, + 11784, 11785, 7, 15, 0, 0, 11785, 11786, 7, 3, 0, 0, 11786, 11787, 7, 12, + 0, 0, 11787, 11788, 7, 11, 0, 0, 11788, 1968, 1, 0, 0, 0, 11789, 11790, + 7, 8, 0, 0, 11790, 11791, 7, 3, 0, 0, 11791, 11792, 7, 12, 0, 0, 11792, + 11793, 7, 4, 0, 0, 11793, 1970, 1, 0, 0, 0, 11794, 11795, 7, 8, 0, 0, 11795, + 11796, 7, 3, 0, 0, 11796, 11797, 7, 12, 0, 0, 11797, 11798, 7, 4, 0, 0, + 11798, 11799, 7, 19, 0, 0, 11799, 11800, 7, 23, 0, 0, 11800, 11801, 5, + 95, 0, 0, 11801, 11802, 7, 16, 0, 0, 11802, 11803, 7, 10, 0, 0, 11803, + 11804, 7, 6, 0, 0, 11804, 11805, 7, 7, 0, 0, 11805, 11806, 7, 11, 0, 0, + 11806, 1972, 1, 0, 0, 0, 11807, 11808, 7, 8, 0, 0, 11808, 11809, 7, 7, + 0, 0, 11809, 11810, 7, 5, 0, 0, 11810, 11811, 7, 7, 0, 0, 11811, 11812, + 7, 3, 0, 0, 11812, 11813, 7, 11, 0, 0, 11813, 11814, 7, 7, 0, 0, 11814, + 11815, 5, 95, 0, 0, 11815, 11816, 7, 5, 0, 0, 11816, 11817, 7, 19, 0, 0, + 11817, 11818, 7, 14, 0, 0, 11818, 11819, 7, 21, 0, 0, 11819, 1974, 1, 0, + 0, 0, 11820, 11821, 7, 8, 0, 0, 11821, 11822, 7, 7, 0, 0, 11822, 11823, + 7, 24, 0, 0, 11823, 11824, 7, 7, 0, 0, 11824, 11825, 7, 8, 0, 0, 11825, + 11826, 7, 11, 0, 0, 11826, 11827, 7, 7, 0, 0, 11827, 1976, 1, 0, 0, 0, + 11828, 11829, 7, 8, 0, 0, 11829, 11830, 7, 19, 0, 0, 11830, 11831, 7, 17, + 0, 0, 11831, 11832, 7, 12, 0, 0, 11832, 11833, 7, 4, 0, 0, 11833, 1978, + 1, 0, 0, 0, 11834, 11835, 7, 8, 0, 0, 11835, 11836, 7, 19, 0, 0, 11836, + 11837, 7, 9, 0, 0, 11837, 11838, 5, 95, 0, 0, 11838, 11839, 7, 14, 0, 0, + 11839, 11840, 7, 19, 0, 0, 11840, 11841, 7, 17, 0, 0, 11841, 11842, 7, + 12, 0, 0, 11842, 11843, 7, 6, 0, 0, 11843, 1980, 1, 0, 0, 0, 11844, 11845, + 7, 8, 0, 0, 11845, 11846, 7, 25, 0, 0, 11846, 11847, 7, 3, 0, 0, 11847, + 11848, 7, 4, 0, 0, 11848, 1982, 1, 0, 0, 0, 11849, 11850, 7, 8, 0, 0, 11850, + 11851, 7, 6, 0, 0, 11851, 11852, 7, 8, 0, 0, 11852, 11853, 7, 15, 0, 0, + 11853, 11854, 7, 23, 0, 0, 11854, 1984, 1, 0, 0, 0, 11855, 11856, 7, 11, + 0, 0, 11856, 11857, 7, 7, 0, 0, 11857, 11858, 7, 14, 0, 0, 11858, 11859, + 5, 95, 0, 0, 11859, 11860, 7, 6, 0, 0, 11860, 11861, 7, 19, 0, 0, 11861, + 11862, 5, 95, 0, 0, 11862, 11863, 7, 6, 0, 0, 11863, 11864, 7, 15, 0, 0, + 11864, 11865, 7, 23, 0, 0, 11865, 11866, 7, 7, 0, 0, 11866, 1986, 1, 0, + 0, 0, 11867, 11868, 7, 11, 0, 0, 11868, 11869, 7, 7, 0, 0, 11869, 11870, + 7, 14, 0, 0, 11870, 11871, 7, 19, 0, 0, 11871, 11872, 7, 12, 0, 0, 11872, + 11873, 7, 4, 0, 0, 11873, 11874, 7, 3, 0, 0, 11874, 11875, 7, 8, 0, 0, + 11875, 11876, 7, 10, 0, 0, 11876, 11877, 5, 95, 0, 0, 11877, 11878, 7, + 7, 0, 0, 11878, 11879, 7, 12, 0, 0, 11879, 11880, 7, 22, 0, 0, 11880, 11881, + 7, 15, 0, 0, 11881, 11882, 7, 12, 0, 0, 11882, 11883, 7, 7, 0, 0, 11883, + 11884, 5, 95, 0, 0, 11884, 11885, 7, 3, 0, 0, 11885, 11886, 7, 6, 0, 0, + 11886, 11887, 7, 6, 0, 0, 11887, 11888, 7, 8, 0, 0, 11888, 11889, 7, 15, + 0, 0, 11889, 11890, 7, 16, 0, 0, 11890, 11891, 7, 17, 0, 0, 11891, 11892, + 7, 6, 0, 0, 11892, 11893, 7, 7, 0, 0, 11893, 1988, 1, 0, 0, 0, 11894, 11895, + 7, 11, 0, 0, 11895, 11896, 7, 7, 0, 0, 11896, 11897, 7, 11, 0, 0, 11897, + 11898, 7, 11, 0, 0, 11898, 11899, 7, 15, 0, 0, 11899, 11900, 7, 19, 0, + 0, 11900, 11901, 7, 12, 0, 0, 11901, 11902, 5, 95, 0, 0, 11902, 11903, + 7, 17, 0, 0, 11903, 11904, 7, 11, 0, 0, 11904, 11905, 7, 7, 0, 0, 11905, + 11906, 7, 8, 0, 0, 11906, 1990, 1, 0, 0, 0, 11907, 11908, 7, 11, 0, 0, + 11908, 11909, 7, 20, 0, 0, 11909, 11910, 7, 3, 0, 0, 11910, 1992, 1, 0, + 0, 0, 11911, 11912, 7, 11, 0, 0, 11912, 11913, 7, 20, 0, 0, 11913, 11914, + 7, 3, 0, 0, 11914, 11915, 5, 49, 0, 0, 11915, 1994, 1, 0, 0, 0, 11916, + 11917, 7, 11, 0, 0, 11917, 11918, 7, 20, 0, 0, 11918, 11919, 7, 3, 0, 0, + 11919, 11920, 5, 50, 0, 0, 11920, 1996, 1, 0, 0, 0, 11921, 11922, 7, 11, + 0, 0, 11922, 11923, 7, 14, 0, 0, 11923, 11924, 7, 20, 0, 0, 11924, 11925, + 7, 7, 0, 0, 11925, 11926, 7, 23, 0, 0, 11926, 11927, 7, 3, 0, 0, 11927, + 11928, 5, 95, 0, 0, 11928, 11929, 7, 12, 0, 0, 11929, 11930, 7, 3, 0, 0, + 11930, 11931, 7, 23, 0, 0, 11931, 11932, 7, 7, 0, 0, 11932, 1998, 1, 0, + 0, 0, 11933, 11934, 7, 11, 0, 0, 11934, 11935, 7, 15, 0, 0, 11935, 11936, + 7, 22, 0, 0, 11936, 11937, 7, 12, 0, 0, 11937, 2000, 1, 0, 0, 0, 11938, + 11939, 7, 11, 0, 0, 11939, 11940, 7, 15, 0, 0, 11940, 11941, 7, 12, 0, + 0, 11941, 2002, 1, 0, 0, 0, 11942, 11943, 7, 11, 0, 0, 11943, 11944, 7, + 5, 0, 0, 11944, 11945, 7, 7, 0, 0, 11945, 11946, 7, 7, 0, 0, 11946, 11947, + 7, 25, 0, 0, 11947, 2004, 1, 0, 0, 0, 11948, 11949, 7, 11, 0, 0, 11949, + 11950, 7, 19, 0, 0, 11950, 11951, 7, 17, 0, 0, 11951, 11952, 7, 12, 0, + 0, 11952, 11953, 7, 4, 0, 0, 11953, 11954, 7, 7, 0, 0, 11954, 11955, 7, + 26, 0, 0, 11955, 2006, 1, 0, 0, 0, 11956, 11957, 7, 11, 0, 0, 11957, 11958, + 7, 28, 0, 0, 11958, 11959, 7, 5, 0, 0, 11959, 11960, 5, 95, 0, 0, 11960, + 11961, 7, 6, 0, 0, 11961, 11962, 7, 20, 0, 0, 11962, 11963, 7, 8, 0, 0, + 11963, 11964, 7, 7, 0, 0, 11964, 11965, 7, 3, 0, 0, 11965, 11966, 7, 4, + 0, 0, 11966, 11967, 5, 95, 0, 0, 11967, 11968, 7, 9, 0, 0, 11968, 11969, + 7, 3, 0, 0, 11969, 11970, 7, 15, 0, 0, 11970, 11971, 7, 6, 0, 0, 11971, + 11972, 5, 95, 0, 0, 11972, 11973, 7, 3, 0, 0, 11973, 11974, 7, 18, 0, 0, + 11974, 11975, 7, 6, 0, 0, 11975, 11976, 7, 7, 0, 0, 11976, 11977, 7, 8, + 0, 0, 11977, 11978, 5, 95, 0, 0, 11978, 11979, 7, 22, 0, 0, 11979, 11980, + 7, 6, 0, 0, 11980, 11981, 7, 15, 0, 0, 11981, 11982, 7, 4, 0, 0, 11982, + 11983, 7, 11, 0, 0, 11983, 2008, 1, 0, 0, 0, 11984, 11985, 7, 11, 0, 0, + 11985, 11986, 7, 28, 0, 0, 11986, 11987, 7, 8, 0, 0, 11987, 11988, 7, 6, + 0, 0, 11988, 2010, 1, 0, 0, 0, 11989, 11990, 7, 11, 0, 0, 11990, 11991, + 7, 8, 0, 0, 11991, 11992, 7, 15, 0, 0, 11992, 11993, 7, 4, 0, 0, 11993, + 2012, 1, 0, 0, 0, 11994, 11995, 7, 11, 0, 0, 11995, 11996, 7, 6, 0, 0, + 11996, 11997, 7, 3, 0, 0, 11997, 11998, 7, 8, 0, 0, 11998, 11999, 7, 6, + 0, 0, 11999, 12000, 7, 25, 0, 0, 12000, 12001, 7, 19, 0, 0, 12001, 12002, + 7, 15, 0, 0, 12002, 12003, 7, 12, 0, 0, 12003, 12004, 7, 6, 0, 0, 12004, + 2014, 1, 0, 0, 0, 12005, 12006, 7, 11, 0, 0, 12006, 12007, 7, 6, 0, 0, + 12007, 12008, 7, 8, 0, 0, 12008, 12009, 7, 14, 0, 0, 12009, 12010, 7, 23, + 0, 0, 12010, 12011, 7, 25, 0, 0, 12011, 2016, 1, 0, 0, 0, 12012, 12013, + 7, 11, 0, 0, 12013, 12014, 7, 6, 0, 0, 12014, 12015, 7, 8, 0, 0, 12015, + 12016, 5, 95, 0, 0, 12016, 12017, 7, 6, 0, 0, 12017, 12018, 7, 19, 0, 0, + 12018, 12019, 5, 95, 0, 0, 12019, 12020, 7, 4, 0, 0, 12020, 12021, 7, 3, + 0, 0, 12021, 12022, 7, 6, 0, 0, 12022, 12023, 7, 7, 0, 0, 12023, 2018, + 1, 0, 0, 0, 12024, 12025, 7, 11, 0, 0, 12025, 12026, 7, 6, 0, 0, 12026, + 12027, 5, 95, 0, 0, 12027, 12028, 7, 3, 0, 0, 12028, 12029, 7, 8, 0, 0, + 12029, 12030, 7, 7, 0, 0, 12030, 12031, 7, 3, 0, 0, 12031, 2020, 1, 0, + 0, 0, 12032, 12033, 7, 11, 0, 0, 12033, 12034, 7, 6, 0, 0, 12034, 12035, + 5, 95, 0, 0, 12035, 12036, 7, 3, 0, 0, 12036, 12037, 7, 11, 0, 0, 12037, + 12038, 7, 16, 0, 0, 12038, 12039, 7, 15, 0, 0, 12039, 12040, 7, 12, 0, + 0, 12040, 12041, 7, 3, 0, 0, 12041, 12042, 7, 8, 0, 0, 12042, 12043, 7, + 10, 0, 0, 12043, 2022, 1, 0, 0, 0, 12044, 12045, 7, 11, 0, 0, 12045, 12046, + 7, 6, 0, 0, 12046, 12047, 5, 95, 0, 0, 12047, 12048, 7, 3, 0, 0, 12048, + 12049, 7, 11, 0, 0, 12049, 12050, 7, 6, 0, 0, 12050, 12051, 7, 7, 0, 0, + 12051, 12052, 7, 26, 0, 0, 12052, 12053, 7, 6, 0, 0, 12053, 2024, 1, 0, + 0, 0, 12054, 12055, 7, 11, 0, 0, 12055, 12056, 7, 6, 0, 0, 12056, 12057, + 5, 95, 0, 0, 12057, 12058, 7, 3, 0, 0, 12058, 12059, 7, 11, 0, 0, 12059, + 12060, 7, 9, 0, 0, 12060, 12061, 7, 21, 0, 0, 12061, 12062, 7, 16, 0, 0, + 12062, 2026, 1, 0, 0, 0, 12063, 12064, 7, 11, 0, 0, 12064, 12065, 7, 6, + 0, 0, 12065, 12066, 5, 95, 0, 0, 12066, 12067, 7, 3, 0, 0, 12067, 12068, + 7, 11, 0, 0, 12068, 12069, 7, 9, 0, 0, 12069, 12070, 7, 21, 0, 0, 12070, + 12071, 7, 6, 0, 0, 12071, 2028, 1, 0, 0, 0, 12072, 12073, 7, 11, 0, 0, + 12073, 12074, 7, 6, 0, 0, 12074, 12075, 5, 95, 0, 0, 12075, 12076, 7, 16, + 0, 0, 12076, 12077, 7, 17, 0, 0, 12077, 12078, 7, 18, 0, 0, 12078, 12079, + 7, 18, 0, 0, 12079, 12080, 7, 7, 0, 0, 12080, 12081, 7, 8, 0, 0, 12081, + 2030, 1, 0, 0, 0, 12082, 12083, 7, 11, 0, 0, 12083, 12084, 7, 6, 0, 0, + 12084, 12085, 5, 95, 0, 0, 12085, 12086, 7, 14, 0, 0, 12086, 12087, 7, + 7, 0, 0, 12087, 12088, 7, 12, 0, 0, 12088, 12089, 7, 6, 0, 0, 12089, 12090, + 7, 8, 0, 0, 12090, 12091, 7, 19, 0, 0, 12091, 12092, 7, 15, 0, 0, 12092, + 12093, 7, 4, 0, 0, 12093, 2032, 1, 0, 0, 0, 12094, 12095, 7, 11, 0, 0, + 12095, 12096, 7, 6, 0, 0, 12096, 12097, 5, 95, 0, 0, 12097, 12098, 7, 14, + 0, 0, 12098, 12099, 7, 19, 0, 0, 12099, 12100, 7, 12, 0, 0, 12100, 12101, + 7, 6, 0, 0, 12101, 12102, 7, 3, 0, 0, 12102, 12103, 7, 15, 0, 0, 12103, + 12104, 7, 12, 0, 0, 12104, 12105, 7, 11, 0, 0, 12105, 2034, 1, 0, 0, 0, + 12106, 12107, 7, 11, 0, 0, 12107, 12108, 7, 6, 0, 0, 12108, 12109, 5, 95, + 0, 0, 12109, 12110, 7, 14, 0, 0, 12110, 12111, 7, 8, 0, 0, 12111, 12112, + 7, 19, 0, 0, 12112, 12113, 7, 11, 0, 0, 12113, 12114, 7, 11, 0, 0, 12114, + 12115, 7, 7, 0, 0, 12115, 12116, 7, 11, 0, 0, 12116, 2036, 1, 0, 0, 0, + 12117, 12118, 7, 11, 0, 0, 12118, 12119, 7, 6, 0, 0, 12119, 12120, 5, 95, + 0, 0, 12120, 12121, 7, 4, 0, 0, 12121, 12122, 7, 15, 0, 0, 12122, 12123, + 7, 18, 0, 0, 12123, 12124, 7, 18, 0, 0, 12124, 12125, 7, 7, 0, 0, 12125, + 12126, 7, 8, 0, 0, 12126, 12127, 7, 7, 0, 0, 12127, 12128, 7, 12, 0, 0, + 12128, 12129, 7, 14, 0, 0, 12129, 12130, 7, 7, 0, 0, 12130, 2038, 1, 0, + 0, 0, 12131, 12132, 7, 11, 0, 0, 12132, 12133, 7, 6, 0, 0, 12133, 12134, + 5, 95, 0, 0, 12134, 12135, 7, 4, 0, 0, 12135, 12136, 7, 15, 0, 0, 12136, + 12137, 7, 23, 0, 0, 12137, 12138, 7, 7, 0, 0, 12138, 12139, 7, 12, 0, 0, + 12139, 12140, 7, 11, 0, 0, 12140, 12141, 7, 15, 0, 0, 12141, 12142, 7, + 19, 0, 0, 12142, 12143, 7, 12, 0, 0, 12143, 2040, 1, 0, 0, 0, 12144, 12145, + 7, 11, 0, 0, 12145, 12146, 7, 6, 0, 0, 12146, 12147, 5, 95, 0, 0, 12147, + 12148, 7, 4, 0, 0, 12148, 12149, 7, 15, 0, 0, 12149, 12150, 7, 11, 0, 0, + 12150, 12151, 7, 27, 0, 0, 12151, 12152, 7, 19, 0, 0, 12152, 12153, 7, + 15, 0, 0, 12153, 12154, 7, 12, 0, 0, 12154, 12155, 7, 6, 0, 0, 12155, 2042, + 1, 0, 0, 0, 12156, 12157, 7, 11, 0, 0, 12157, 12158, 7, 6, 0, 0, 12158, + 12159, 5, 95, 0, 0, 12159, 12160, 7, 4, 0, 0, 12160, 12161, 7, 15, 0, 0, + 12161, 12162, 7, 11, 0, 0, 12162, 12163, 7, 6, 0, 0, 12163, 12164, 7, 3, + 0, 0, 12164, 12165, 7, 12, 0, 0, 12165, 12166, 7, 14, 0, 0, 12166, 12167, + 7, 7, 0, 0, 12167, 2044, 1, 0, 0, 0, 12168, 12169, 7, 11, 0, 0, 12169, + 12170, 7, 6, 0, 0, 12170, 12171, 5, 95, 0, 0, 12171, 12172, 7, 7, 0, 0, + 12172, 12173, 7, 12, 0, 0, 12173, 12174, 7, 4, 0, 0, 12174, 12175, 7, 25, + 0, 0, 12175, 12176, 7, 19, 0, 0, 12176, 12177, 7, 15, 0, 0, 12177, 12178, + 7, 12, 0, 0, 12178, 12179, 7, 6, 0, 0, 12179, 2046, 1, 0, 0, 0, 12180, + 12181, 7, 11, 0, 0, 12181, 12182, 7, 6, 0, 0, 12182, 12183, 5, 95, 0, 0, + 12183, 12184, 7, 7, 0, 0, 12184, 12185, 7, 12, 0, 0, 12185, 12186, 7, 24, + 0, 0, 12186, 12187, 7, 7, 0, 0, 12187, 12188, 7, 5, 0, 0, 12188, 12189, + 7, 19, 0, 0, 12189, 12190, 7, 25, 0, 0, 12190, 12191, 7, 7, 0, 0, 12191, + 2048, 1, 0, 0, 0, 12192, 12193, 7, 11, 0, 0, 12193, 12194, 7, 6, 0, 0, + 12194, 12195, 5, 95, 0, 0, 12195, 12196, 7, 7, 0, 0, 12196, 12197, 7, 28, + 0, 0, 12197, 12198, 7, 17, 0, 0, 12198, 12199, 7, 3, 0, 0, 12199, 12200, + 7, 5, 0, 0, 12200, 12201, 7, 11, 0, 0, 12201, 2050, 1, 0, 0, 0, 12202, + 12203, 7, 11, 0, 0, 12203, 12204, 7, 6, 0, 0, 12204, 12205, 5, 95, 0, 0, + 12205, 12206, 7, 7, 0, 0, 12206, 12207, 7, 26, 0, 0, 12207, 12208, 7, 6, + 0, 0, 12208, 12209, 7, 7, 0, 0, 12209, 12210, 7, 8, 0, 0, 12210, 12211, + 7, 15, 0, 0, 12211, 12212, 7, 19, 0, 0, 12212, 12213, 7, 8, 0, 0, 12213, + 12214, 7, 8, 0, 0, 12214, 12215, 7, 15, 0, 0, 12215, 12216, 7, 12, 0, 0, + 12216, 12217, 7, 22, 0, 0, 12217, 2052, 1, 0, 0, 0, 12218, 12219, 7, 11, + 0, 0, 12219, 12220, 7, 6, 0, 0, 12220, 12221, 5, 95, 0, 0, 12221, 12222, + 7, 22, 0, 0, 12222, 12223, 7, 7, 0, 0, 12223, 12224, 7, 19, 0, 0, 12224, + 12225, 7, 23, 0, 0, 12225, 12226, 7, 14, 0, 0, 12226, 12227, 7, 19, 0, + 0, 12227, 12228, 7, 5, 0, 0, 12228, 12229, 7, 5, 0, 0, 12229, 12230, 7, + 18, 0, 0, 12230, 12231, 7, 8, 0, 0, 12231, 12232, 7, 19, 0, 0, 12232, 12233, + 7, 23, 0, 0, 12233, 12234, 7, 6, 0, 0, 12234, 12235, 7, 7, 0, 0, 12235, + 12236, 7, 26, 0, 0, 12236, 12237, 7, 6, 0, 0, 12237, 2054, 1, 0, 0, 0, + 12238, 12239, 7, 11, 0, 0, 12239, 12240, 7, 6, 0, 0, 12240, 12241, 5, 95, + 0, 0, 12241, 12242, 7, 22, 0, 0, 12242, 12243, 7, 7, 0, 0, 12243, 12244, + 7, 19, 0, 0, 12244, 12245, 7, 23, 0, 0, 12245, 12246, 7, 14, 0, 0, 12246, + 12247, 7, 19, 0, 0, 12247, 12248, 7, 5, 0, 0, 12248, 12249, 7, 5, 0, 0, + 12249, 12250, 7, 18, 0, 0, 12250, 12251, 7, 8, 0, 0, 12251, 12252, 7, 19, + 0, 0, 12252, 12253, 7, 23, 0, 0, 12253, 12254, 7, 6, 0, 0, 12254, 12255, + 7, 26, 0, 0, 12255, 12256, 7, 6, 0, 0, 12256, 2056, 1, 0, 0, 0, 12257, + 12258, 7, 11, 0, 0, 12258, 12259, 7, 6, 0, 0, 12259, 12260, 5, 95, 0, 0, + 12260, 12261, 7, 22, 0, 0, 12261, 12262, 7, 7, 0, 0, 12262, 12263, 7, 19, + 0, 0, 12263, 12264, 7, 23, 0, 0, 12264, 12265, 7, 14, 0, 0, 12265, 12266, + 7, 19, 0, 0, 12266, 12267, 7, 5, 0, 0, 12267, 12268, 7, 5, 0, 0, 12268, + 12269, 7, 18, 0, 0, 12269, 12270, 7, 8, 0, 0, 12270, 12271, 7, 19, 0, 0, + 12271, 12272, 7, 23, 0, 0, 12272, 12273, 7, 9, 0, 0, 12273, 12274, 7, 21, + 0, 0, 12274, 12275, 7, 16, 0, 0, 12275, 2058, 1, 0, 0, 0, 12276, 12277, + 7, 11, 0, 0, 12277, 12278, 7, 6, 0, 0, 12278, 12279, 5, 95, 0, 0, 12279, + 12280, 7, 22, 0, 0, 12280, 12281, 7, 7, 0, 0, 12281, 12282, 7, 19, 0, 0, + 12282, 12283, 7, 23, 0, 0, 12283, 12284, 7, 7, 0, 0, 12284, 12285, 7, 6, + 0, 0, 12285, 12286, 7, 8, 0, 0, 12286, 12287, 7, 10, 0, 0, 12287, 12288, + 7, 14, 0, 0, 12288, 12289, 7, 19, 0, 0, 12289, 12290, 7, 5, 0, 0, 12290, + 12291, 7, 5, 0, 0, 12291, 12292, 7, 7, 0, 0, 12292, 12293, 7, 14, 0, 0, + 12293, 12294, 7, 6, 0, 0, 12294, 12295, 7, 15, 0, 0, 12295, 12296, 7, 19, + 0, 0, 12296, 12297, 7, 12, 0, 0, 12297, 12298, 7, 18, 0, 0, 12298, 12299, + 7, 8, 0, 0, 12299, 12300, 7, 19, 0, 0, 12300, 12301, 7, 23, 0, 0, 12301, + 12302, 7, 6, 0, 0, 12302, 12303, 7, 7, 0, 0, 12303, 12304, 7, 26, 0, 0, + 12304, 12305, 7, 6, 0, 0, 12305, 2060, 1, 0, 0, 0, 12306, 12307, 7, 11, + 0, 0, 12307, 12308, 7, 6, 0, 0, 12308, 12309, 5, 95, 0, 0, 12309, 12310, + 7, 22, 0, 0, 12310, 12311, 7, 7, 0, 0, 12311, 12312, 7, 19, 0, 0, 12312, + 12313, 7, 23, 0, 0, 12313, 12314, 7, 7, 0, 0, 12314, 12315, 7, 6, 0, 0, + 12315, 12316, 7, 8, 0, 0, 12316, 12317, 7, 10, 0, 0, 12317, 12318, 7, 14, + 0, 0, 12318, 12319, 7, 19, 0, 0, 12319, 12320, 7, 5, 0, 0, 12320, 12321, + 7, 5, 0, 0, 12321, 12322, 7, 7, 0, 0, 12322, 12323, 7, 14, 0, 0, 12323, + 12324, 7, 6, 0, 0, 12324, 12325, 7, 15, 0, 0, 12325, 12326, 7, 19, 0, 0, + 12326, 12327, 7, 12, 0, 0, 12327, 12328, 7, 18, 0, 0, 12328, 12329, 7, + 8, 0, 0, 12329, 12330, 7, 19, 0, 0, 12330, 12331, 7, 23, 0, 0, 12331, 12332, + 7, 9, 0, 0, 12332, 12333, 7, 21, 0, 0, 12333, 12334, 7, 16, 0, 0, 12334, + 2062, 1, 0, 0, 0, 12335, 12336, 7, 11, 0, 0, 12336, 12337, 7, 6, 0, 0, + 12337, 12338, 5, 95, 0, 0, 12338, 12339, 7, 22, 0, 0, 12339, 12340, 7, + 7, 0, 0, 12340, 12341, 7, 19, 0, 0, 12341, 12342, 7, 23, 0, 0, 12342, 12343, + 7, 7, 0, 0, 12343, 12344, 7, 6, 0, 0, 12344, 12345, 7, 8, 0, 0, 12345, + 12346, 7, 10, 0, 0, 12346, 12347, 7, 18, 0, 0, 12347, 12348, 7, 8, 0, 0, + 12348, 12349, 7, 19, 0, 0, 12349, 12350, 7, 23, 0, 0, 12350, 12351, 7, + 6, 0, 0, 12351, 12352, 7, 7, 0, 0, 12352, 12353, 7, 26, 0, 0, 12353, 12354, + 7, 6, 0, 0, 12354, 2064, 1, 0, 0, 0, 12355, 12356, 7, 11, 0, 0, 12356, + 12357, 7, 6, 0, 0, 12357, 12358, 5, 95, 0, 0, 12358, 12359, 7, 22, 0, 0, + 12359, 12360, 7, 7, 0, 0, 12360, 12361, 7, 19, 0, 0, 12361, 12362, 7, 23, + 0, 0, 12362, 12363, 7, 7, 0, 0, 12363, 12364, 7, 6, 0, 0, 12364, 12365, + 7, 8, 0, 0, 12365, 12366, 7, 10, 0, 0, 12366, 12367, 7, 18, 0, 0, 12367, + 12368, 7, 8, 0, 0, 12368, 12369, 7, 19, 0, 0, 12369, 12370, 7, 23, 0, 0, + 12370, 12371, 7, 9, 0, 0, 12371, 12372, 7, 21, 0, 0, 12372, 12373, 7, 16, + 0, 0, 12373, 2066, 1, 0, 0, 0, 12374, 12375, 7, 11, 0, 0, 12375, 12376, + 7, 6, 0, 0, 12376, 12377, 5, 95, 0, 0, 12377, 12378, 7, 22, 0, 0, 12378, + 12379, 7, 7, 0, 0, 12379, 12380, 7, 19, 0, 0, 12380, 12381, 7, 23, 0, 0, + 12381, 12382, 7, 7, 0, 0, 12382, 12383, 7, 6, 0, 0, 12383, 12384, 7, 8, + 0, 0, 12384, 12385, 7, 10, 0, 0, 12385, 12386, 7, 12, 0, 0, 12386, 2068, + 1, 0, 0, 0, 12387, 12388, 7, 11, 0, 0, 12388, 12389, 7, 6, 0, 0, 12389, + 12390, 5, 95, 0, 0, 12390, 12391, 7, 22, 0, 0, 12391, 12392, 7, 7, 0, 0, + 12392, 12393, 7, 19, 0, 0, 12393, 12394, 7, 23, 0, 0, 12394, 12395, 7, + 7, 0, 0, 12395, 12396, 7, 6, 0, 0, 12396, 12397, 7, 8, 0, 0, 12397, 12398, + 7, 10, 0, 0, 12398, 12399, 7, 6, 0, 0, 12399, 12400, 7, 10, 0, 0, 12400, + 12401, 7, 25, 0, 0, 12401, 12402, 7, 7, 0, 0, 12402, 2070, 1, 0, 0, 0, + 12403, 12404, 7, 11, 0, 0, 12404, 12405, 7, 6, 0, 0, 12405, 12406, 5, 95, + 0, 0, 12406, 12407, 7, 22, 0, 0, 12407, 12408, 7, 7, 0, 0, 12408, 12409, + 7, 19, 0, 0, 12409, 12410, 7, 23, 0, 0, 12410, 12411, 7, 18, 0, 0, 12411, + 12412, 7, 8, 0, 0, 12412, 12413, 7, 19, 0, 0, 12413, 12414, 7, 23, 0, 0, + 12414, 12415, 7, 6, 0, 0, 12415, 12416, 7, 7, 0, 0, 12416, 12417, 7, 26, + 0, 0, 12417, 12418, 7, 6, 0, 0, 12418, 2072, 1, 0, 0, 0, 12419, 12420, + 7, 11, 0, 0, 12420, 12421, 7, 6, 0, 0, 12421, 12422, 5, 95, 0, 0, 12422, + 12423, 7, 22, 0, 0, 12423, 12424, 7, 7, 0, 0, 12424, 12425, 7, 19, 0, 0, + 12425, 12426, 7, 23, 0, 0, 12426, 12427, 7, 18, 0, 0, 12427, 12428, 7, + 8, 0, 0, 12428, 12429, 7, 19, 0, 0, 12429, 12430, 7, 23, 0, 0, 12430, 12431, + 7, 9, 0, 0, 12431, 12432, 7, 21, 0, 0, 12432, 12433, 7, 16, 0, 0, 12433, + 2074, 1, 0, 0, 0, 12434, 12435, 7, 11, 0, 0, 12435, 12436, 7, 6, 0, 0, + 12436, 12437, 5, 95, 0, 0, 12437, 12438, 7, 15, 0, 0, 12438, 12439, 7, + 12, 0, 0, 12439, 12440, 7, 6, 0, 0, 12440, 12441, 7, 7, 0, 0, 12441, 12442, + 7, 8, 0, 0, 12442, 12443, 7, 15, 0, 0, 12443, 12444, 7, 19, 0, 0, 12444, + 12445, 7, 8, 0, 0, 12445, 12446, 7, 8, 0, 0, 12446, 12447, 7, 15, 0, 0, + 12447, 12448, 7, 12, 0, 0, 12448, 12449, 7, 22, 0, 0, 12449, 12450, 7, + 12, 0, 0, 12450, 2076, 1, 0, 0, 0, 12451, 12452, 7, 11, 0, 0, 12452, 12453, + 7, 6, 0, 0, 12453, 12454, 5, 95, 0, 0, 12454, 12455, 7, 15, 0, 0, 12455, + 12456, 7, 12, 0, 0, 12456, 12457, 7, 6, 0, 0, 12457, 12458, 7, 7, 0, 0, + 12458, 12459, 7, 8, 0, 0, 12459, 12460, 7, 11, 0, 0, 12460, 12461, 7, 7, + 0, 0, 12461, 12462, 7, 14, 0, 0, 12462, 12463, 7, 6, 0, 0, 12463, 12464, + 7, 15, 0, 0, 12464, 12465, 7, 19, 0, 0, 12465, 12466, 7, 12, 0, 0, 12466, + 2078, 1, 0, 0, 0, 12467, 12468, 7, 11, 0, 0, 12468, 12469, 7, 6, 0, 0, + 12469, 12470, 5, 95, 0, 0, 12470, 12471, 7, 15, 0, 0, 12471, 12472, 7, + 12, 0, 0, 12472, 12473, 7, 6, 0, 0, 12473, 12474, 7, 7, 0, 0, 12474, 12475, + 7, 8, 0, 0, 12475, 12476, 7, 11, 0, 0, 12476, 12477, 7, 7, 0, 0, 12477, + 12478, 7, 14, 0, 0, 12478, 12479, 7, 6, 0, 0, 12479, 12480, 7, 11, 0, 0, + 12480, 2080, 1, 0, 0, 0, 12481, 12482, 7, 11, 0, 0, 12482, 12483, 7, 6, + 0, 0, 12483, 12484, 5, 95, 0, 0, 12484, 12485, 7, 15, 0, 0, 12485, 12486, + 7, 11, 0, 0, 12486, 12487, 7, 14, 0, 0, 12487, 12488, 7, 5, 0, 0, 12488, + 12489, 7, 19, 0, 0, 12489, 12490, 7, 11, 0, 0, 12490, 12491, 7, 7, 0, 0, + 12491, 12492, 7, 4, 0, 0, 12492, 2082, 1, 0, 0, 0, 12493, 12494, 7, 11, + 0, 0, 12494, 12495, 7, 6, 0, 0, 12495, 12496, 5, 95, 0, 0, 12496, 12497, + 7, 15, 0, 0, 12497, 12498, 7, 11, 0, 0, 12498, 12499, 7, 7, 0, 0, 12499, + 12500, 7, 23, 0, 0, 12500, 12501, 7, 25, 0, 0, 12501, 12502, 7, 6, 0, 0, + 12502, 12503, 7, 10, 0, 0, 12503, 2084, 1, 0, 0, 0, 12504, 12505, 7, 11, + 0, 0, 12505, 12506, 7, 6, 0, 0, 12506, 12507, 5, 95, 0, 0, 12507, 12508, + 7, 15, 0, 0, 12508, 12509, 7, 11, 0, 0, 12509, 12510, 7, 11, 0, 0, 12510, + 12511, 7, 15, 0, 0, 12511, 12512, 7, 23, 0, 0, 12512, 12513, 7, 25, 0, + 0, 12513, 12514, 7, 5, 0, 0, 12514, 12515, 7, 7, 0, 0, 12515, 2086, 1, + 0, 0, 0, 12516, 12517, 7, 11, 0, 0, 12517, 12518, 7, 6, 0, 0, 12518, 12519, + 5, 95, 0, 0, 12519, 12520, 7, 5, 0, 0, 12520, 12521, 7, 15, 0, 0, 12521, + 12522, 7, 12, 0, 0, 12522, 12523, 7, 7, 0, 0, 12523, 12524, 7, 18, 0, 0, + 12524, 12525, 7, 8, 0, 0, 12525, 12526, 7, 19, 0, 0, 12526, 12527, 7, 23, + 0, 0, 12527, 12528, 7, 6, 0, 0, 12528, 12529, 7, 7, 0, 0, 12529, 12530, + 7, 26, 0, 0, 12530, 12531, 7, 6, 0, 0, 12531, 2088, 1, 0, 0, 0, 12532, + 12533, 7, 11, 0, 0, 12533, 12534, 7, 6, 0, 0, 12534, 12535, 5, 95, 0, 0, + 12535, 12536, 7, 5, 0, 0, 12536, 12537, 7, 15, 0, 0, 12537, 12538, 7, 12, + 0, 0, 12538, 12539, 7, 7, 0, 0, 12539, 12540, 7, 18, 0, 0, 12540, 12541, + 7, 8, 0, 0, 12541, 12542, 7, 19, 0, 0, 12542, 12543, 7, 23, 0, 0, 12543, + 12544, 7, 9, 0, 0, 12544, 12545, 7, 21, 0, 0, 12545, 12546, 7, 16, 0, 0, + 12546, 2090, 1, 0, 0, 0, 12547, 12548, 7, 11, 0, 0, 12548, 12549, 7, 6, + 0, 0, 12549, 12550, 5, 95, 0, 0, 12550, 12551, 7, 5, 0, 0, 12551, 12552, + 7, 15, 0, 0, 12552, 12553, 7, 12, 0, 0, 12553, 12554, 7, 7, 0, 0, 12554, + 12555, 7, 11, 0, 0, 12555, 12556, 7, 6, 0, 0, 12556, 12557, 7, 8, 0, 0, + 12557, 12558, 7, 15, 0, 0, 12558, 12559, 7, 12, 0, 0, 12559, 12560, 7, + 22, 0, 0, 12560, 12561, 7, 18, 0, 0, 12561, 12562, 7, 8, 0, 0, 12562, 12563, + 7, 19, 0, 0, 12563, 12564, 7, 23, 0, 0, 12564, 12565, 7, 6, 0, 0, 12565, + 12566, 7, 7, 0, 0, 12566, 12567, 7, 26, 0, 0, 12567, 12568, 7, 6, 0, 0, + 12568, 2092, 1, 0, 0, 0, 12569, 12570, 7, 11, 0, 0, 12570, 12571, 7, 6, + 0, 0, 12571, 12572, 5, 95, 0, 0, 12572, 12573, 7, 5, 0, 0, 12573, 12574, + 7, 15, 0, 0, 12574, 12575, 7, 12, 0, 0, 12575, 12576, 7, 7, 0, 0, 12576, + 12577, 7, 11, 0, 0, 12577, 12578, 7, 6, 0, 0, 12578, 12579, 7, 8, 0, 0, + 12579, 12580, 7, 15, 0, 0, 12580, 12581, 7, 12, 0, 0, 12581, 12582, 7, + 22, 0, 0, 12582, 12583, 7, 18, 0, 0, 12583, 12584, 7, 8, 0, 0, 12584, 12585, + 7, 19, 0, 0, 12585, 12586, 7, 23, 0, 0, 12586, 12587, 7, 9, 0, 0, 12587, + 12588, 7, 21, 0, 0, 12588, 12589, 7, 16, 0, 0, 12589, 2094, 1, 0, 0, 0, + 12590, 12591, 7, 11, 0, 0, 12591, 12592, 7, 6, 0, 0, 12592, 12593, 5, 95, + 0, 0, 12593, 12594, 7, 12, 0, 0, 12594, 12595, 7, 17, 0, 0, 12595, 12596, + 7, 23, 0, 0, 12596, 12597, 7, 22, 0, 0, 12597, 12598, 7, 7, 0, 0, 12598, + 12599, 7, 19, 0, 0, 12599, 12600, 7, 23, 0, 0, 12600, 12601, 7, 7, 0, 0, + 12601, 12602, 7, 6, 0, 0, 12602, 12603, 7, 8, 0, 0, 12603, 12604, 7, 15, + 0, 0, 12604, 12605, 7, 7, 0, 0, 12605, 12606, 7, 11, 0, 0, 12606, 2096, + 1, 0, 0, 0, 12607, 12608, 7, 11, 0, 0, 12608, 12609, 7, 6, 0, 0, 12609, + 12610, 5, 95, 0, 0, 12610, 12611, 7, 12, 0, 0, 12611, 12612, 7, 17, 0, + 0, 12612, 12613, 7, 23, 0, 0, 12613, 12614, 7, 15, 0, 0, 12614, 12615, + 7, 12, 0, 0, 12615, 12616, 7, 6, 0, 0, 12616, 12617, 7, 7, 0, 0, 12617, + 12618, 7, 8, 0, 0, 12618, 12619, 7, 15, 0, 0, 12619, 12620, 7, 19, 0, 0, + 12620, 12621, 7, 8, 0, 0, 12621, 12622, 7, 8, 0, 0, 12622, 12623, 7, 15, + 0, 0, 12623, 12624, 7, 12, 0, 0, 12624, 12625, 7, 22, 0, 0, 12625, 2098, + 1, 0, 0, 0, 12626, 12627, 7, 11, 0, 0, 12627, 12628, 7, 6, 0, 0, 12628, + 12629, 5, 95, 0, 0, 12629, 12630, 7, 12, 0, 0, 12630, 12631, 7, 17, 0, + 0, 12631, 12632, 7, 23, 0, 0, 12632, 12633, 7, 15, 0, 0, 12633, 12634, + 7, 12, 0, 0, 12634, 12635, 7, 6, 0, 0, 12635, 12636, 7, 7, 0, 0, 12636, + 12637, 7, 8, 0, 0, 12637, 12638, 7, 15, 0, 0, 12638, 12639, 7, 19, 0, 0, + 12639, 12640, 7, 8, 0, 0, 12640, 12641, 7, 8, 0, 0, 12641, 12642, 7, 15, + 0, 0, 12642, 12643, 7, 12, 0, 0, 12643, 12644, 7, 22, 0, 0, 12644, 12645, + 7, 11, 0, 0, 12645, 2100, 1, 0, 0, 0, 12646, 12647, 7, 11, 0, 0, 12647, + 12648, 7, 6, 0, 0, 12648, 12649, 5, 95, 0, 0, 12649, 12650, 7, 12, 0, 0, + 12650, 12651, 7, 17, 0, 0, 12651, 12652, 7, 23, 0, 0, 12652, 12653, 7, + 25, 0, 0, 12653, 12654, 7, 19, 0, 0, 12654, 12655, 7, 15, 0, 0, 12655, + 12656, 7, 12, 0, 0, 12656, 12657, 7, 6, 0, 0, 12657, 12658, 7, 11, 0, 0, + 12658, 2102, 1, 0, 0, 0, 12659, 12660, 7, 11, 0, 0, 12660, 12661, 7, 6, + 0, 0, 12661, 12662, 5, 95, 0, 0, 12662, 12663, 7, 19, 0, 0, 12663, 12664, + 7, 24, 0, 0, 12664, 12665, 7, 7, 0, 0, 12665, 12666, 7, 8, 0, 0, 12666, + 12667, 7, 5, 0, 0, 12667, 12668, 7, 3, 0, 0, 12668, 12669, 7, 25, 0, 0, + 12669, 12670, 7, 11, 0, 0, 12670, 2104, 1, 0, 0, 0, 12671, 12672, 7, 11, + 0, 0, 12672, 12673, 7, 6, 0, 0, 12673, 12674, 5, 95, 0, 0, 12674, 12675, + 7, 25, 0, 0, 12675, 12676, 7, 19, 0, 0, 12676, 12677, 7, 15, 0, 0, 12677, + 12678, 7, 12, 0, 0, 12678, 12679, 7, 6, 0, 0, 12679, 12680, 7, 18, 0, 0, + 12680, 12681, 7, 8, 0, 0, 12681, 12682, 7, 19, 0, 0, 12682, 12683, 7, 23, + 0, 0, 12683, 12684, 7, 6, 0, 0, 12684, 12685, 7, 7, 0, 0, 12685, 12686, + 7, 26, 0, 0, 12686, 12687, 7, 6, 0, 0, 12687, 2106, 1, 0, 0, 0, 12688, + 12689, 7, 11, 0, 0, 12689, 12690, 7, 6, 0, 0, 12690, 12691, 5, 95, 0, 0, + 12691, 12692, 7, 25, 0, 0, 12692, 12693, 7, 19, 0, 0, 12693, 12694, 7, + 15, 0, 0, 12694, 12695, 7, 12, 0, 0, 12695, 12696, 7, 6, 0, 0, 12696, 12697, + 7, 18, 0, 0, 12697, 12698, 7, 8, 0, 0, 12698, 12699, 7, 19, 0, 0, 12699, + 12700, 7, 23, 0, 0, 12700, 12701, 7, 9, 0, 0, 12701, 12702, 7, 21, 0, 0, + 12702, 12703, 7, 16, 0, 0, 12703, 2108, 1, 0, 0, 0, 12704, 12705, 7, 11, + 0, 0, 12705, 12706, 7, 6, 0, 0, 12706, 12707, 5, 95, 0, 0, 12707, 12708, + 7, 25, 0, 0, 12708, 12709, 7, 19, 0, 0, 12709, 12710, 7, 15, 0, 0, 12710, + 12711, 7, 12, 0, 0, 12711, 12712, 7, 6, 0, 0, 12712, 12713, 7, 12, 0, 0, + 12713, 2110, 1, 0, 0, 0, 12714, 12715, 7, 11, 0, 0, 12715, 12716, 7, 6, + 0, 0, 12716, 12717, 5, 95, 0, 0, 12717, 12718, 7, 25, 0, 0, 12718, 12719, + 7, 19, 0, 0, 12719, 12720, 7, 5, 0, 0, 12720, 12721, 7, 10, 0, 0, 12721, + 12722, 7, 18, 0, 0, 12722, 12723, 7, 8, 0, 0, 12723, 12724, 7, 19, 0, 0, + 12724, 12725, 7, 23, 0, 0, 12725, 12726, 7, 6, 0, 0, 12726, 12727, 7, 7, + 0, 0, 12727, 12728, 7, 26, 0, 0, 12728, 12729, 7, 6, 0, 0, 12729, 2112, + 1, 0, 0, 0, 12730, 12731, 7, 11, 0, 0, 12731, 12732, 7, 6, 0, 0, 12732, + 12733, 5, 95, 0, 0, 12733, 12734, 7, 25, 0, 0, 12734, 12735, 7, 19, 0, + 0, 12735, 12736, 7, 5, 0, 0, 12736, 12737, 7, 10, 0, 0, 12737, 12738, 7, + 18, 0, 0, 12738, 12739, 7, 8, 0, 0, 12739, 12740, 7, 19, 0, 0, 12740, 12741, + 7, 23, 0, 0, 12741, 12742, 7, 9, 0, 0, 12742, 12743, 7, 21, 0, 0, 12743, + 12744, 7, 16, 0, 0, 12744, 2114, 1, 0, 0, 0, 12745, 12746, 7, 11, 0, 0, + 12746, 12747, 7, 6, 0, 0, 12747, 12748, 5, 95, 0, 0, 12748, 12749, 7, 25, + 0, 0, 12749, 12750, 7, 19, 0, 0, 12750, 12751, 7, 5, 0, 0, 12751, 12752, + 7, 10, 0, 0, 12752, 12753, 7, 22, 0, 0, 12753, 12754, 7, 19, 0, 0, 12754, + 12755, 7, 12, 0, 0, 12755, 12756, 7, 18, 0, 0, 12756, 12757, 7, 8, 0, 0, + 12757, 12758, 7, 19, 0, 0, 12758, 12759, 7, 23, 0, 0, 12759, 12760, 7, + 6, 0, 0, 12760, 12761, 7, 7, 0, 0, 12761, 12762, 7, 26, 0, 0, 12762, 12763, + 7, 6, 0, 0, 12763, 2116, 1, 0, 0, 0, 12764, 12765, 7, 11, 0, 0, 12765, + 12766, 7, 6, 0, 0, 12766, 12767, 5, 95, 0, 0, 12767, 12768, 7, 25, 0, 0, + 12768, 12769, 7, 19, 0, 0, 12769, 12770, 7, 5, 0, 0, 12770, 12771, 7, 10, + 0, 0, 12771, 12772, 7, 22, 0, 0, 12772, 12773, 7, 19, 0, 0, 12773, 12774, + 7, 12, 0, 0, 12774, 12775, 7, 18, 0, 0, 12775, 12776, 7, 8, 0, 0, 12776, + 12777, 7, 19, 0, 0, 12777, 12778, 7, 23, 0, 0, 12778, 12779, 7, 9, 0, 0, + 12779, 12780, 7, 21, 0, 0, 12780, 12781, 7, 16, 0, 0, 12781, 2118, 1, 0, + 0, 0, 12782, 12783, 7, 11, 0, 0, 12783, 12784, 7, 6, 0, 0, 12784, 12785, + 5, 95, 0, 0, 12785, 12786, 7, 11, 0, 0, 12786, 12787, 7, 8, 0, 0, 12787, + 12788, 7, 15, 0, 0, 12788, 12789, 7, 4, 0, 0, 12789, 2120, 1, 0, 0, 0, + 12790, 12791, 7, 11, 0, 0, 12791, 12792, 7, 6, 0, 0, 12792, 12793, 5, 95, + 0, 0, 12793, 12794, 7, 11, 0, 0, 12794, 12795, 7, 6, 0, 0, 12795, 12796, + 7, 3, 0, 0, 12796, 12797, 7, 8, 0, 0, 12797, 12798, 7, 6, 0, 0, 12798, + 12799, 7, 25, 0, 0, 12799, 12800, 7, 19, 0, 0, 12800, 12801, 7, 15, 0, + 0, 12801, 12802, 7, 12, 0, 0, 12802, 12803, 7, 6, 0, 0, 12803, 2122, 1, + 0, 0, 0, 12804, 12805, 7, 11, 0, 0, 12805, 12806, 7, 6, 0, 0, 12806, 12807, + 5, 95, 0, 0, 12807, 12808, 7, 11, 0, 0, 12808, 12809, 7, 10, 0, 0, 12809, + 12810, 7, 23, 0, 0, 12810, 12811, 7, 4, 0, 0, 12811, 12812, 7, 15, 0, 0, + 12812, 12813, 7, 18, 0, 0, 12813, 12814, 7, 18, 0, 0, 12814, 12815, 7, + 7, 0, 0, 12815, 12816, 7, 8, 0, 0, 12816, 12817, 7, 7, 0, 0, 12817, 12818, + 7, 12, 0, 0, 12818, 12819, 7, 14, 0, 0, 12819, 12820, 7, 7, 0, 0, 12820, + 2124, 1, 0, 0, 0, 12821, 12822, 7, 11, 0, 0, 12822, 12823, 7, 6, 0, 0, + 12823, 12824, 5, 95, 0, 0, 12824, 12825, 7, 6, 0, 0, 12825, 12826, 7, 19, + 0, 0, 12826, 12827, 7, 17, 0, 0, 12827, 12828, 7, 14, 0, 0, 12828, 12829, + 7, 20, 0, 0, 12829, 12830, 7, 7, 0, 0, 12830, 12831, 7, 11, 0, 0, 12831, + 2126, 1, 0, 0, 0, 12832, 12833, 7, 11, 0, 0, 12833, 12834, 7, 6, 0, 0, + 12834, 12835, 5, 95, 0, 0, 12835, 12836, 7, 17, 0, 0, 12836, 12837, 7, + 12, 0, 0, 12837, 12838, 7, 15, 0, 0, 12838, 12839, 7, 19, 0, 0, 12839, + 12840, 7, 12, 0, 0, 12840, 2128, 1, 0, 0, 0, 12841, 12842, 7, 11, 0, 0, + 12842, 12843, 7, 6, 0, 0, 12843, 12844, 5, 95, 0, 0, 12844, 12845, 7, 9, + 0, 0, 12845, 12846, 7, 15, 0, 0, 12846, 12847, 7, 6, 0, 0, 12847, 12848, + 7, 20, 0, 0, 12848, 12849, 7, 15, 0, 0, 12849, 12850, 7, 12, 0, 0, 12850, + 2130, 1, 0, 0, 0, 12851, 12852, 7, 11, 0, 0, 12852, 12853, 7, 6, 0, 0, + 12853, 12854, 5, 95, 0, 0, 12854, 12855, 7, 26, 0, 0, 12855, 2132, 1, 0, + 0, 0, 12856, 12857, 7, 11, 0, 0, 12857, 12858, 7, 6, 0, 0, 12858, 12859, + 5, 95, 0, 0, 12859, 12860, 7, 10, 0, 0, 12860, 2134, 1, 0, 0, 0, 12861, + 12862, 7, 11, 0, 0, 12862, 12863, 7, 17, 0, 0, 12863, 12864, 7, 16, 0, + 0, 12864, 12865, 7, 4, 0, 0, 12865, 12866, 7, 3, 0, 0, 12866, 12867, 7, + 6, 0, 0, 12867, 12868, 7, 7, 0, 0, 12868, 2136, 1, 0, 0, 0, 12869, 12870, + 7, 11, 0, 0, 12870, 12871, 7, 17, 0, 0, 12871, 12872, 7, 16, 0, 0, 12872, + 12873, 7, 11, 0, 0, 12873, 12874, 7, 6, 0, 0, 12874, 12875, 7, 8, 0, 0, + 12875, 12876, 7, 15, 0, 0, 12876, 12877, 7, 12, 0, 0, 12877, 12878, 7, + 22, 0, 0, 12878, 12879, 5, 95, 0, 0, 12879, 12880, 7, 15, 0, 0, 12880, + 12881, 7, 12, 0, 0, 12881, 12882, 7, 4, 0, 0, 12882, 12883, 7, 7, 0, 0, + 12883, 12884, 7, 26, 0, 0, 12884, 2138, 1, 0, 0, 0, 12885, 12886, 7, 11, + 0, 0, 12886, 12887, 7, 17, 0, 0, 12887, 12888, 7, 16, 0, 0, 12888, 12889, + 7, 6, 0, 0, 12889, 12890, 7, 15, 0, 0, 12890, 12891, 7, 23, 0, 0, 12891, + 12892, 7, 7, 0, 0, 12892, 2140, 1, 0, 0, 0, 12893, 12894, 7, 11, 0, 0, + 12894, 12895, 7, 10, 0, 0, 12895, 12896, 7, 11, 0, 0, 12896, 12897, 7, + 6, 0, 0, 12897, 12898, 7, 7, 0, 0, 12898, 12899, 7, 23, 0, 0, 12899, 12900, + 5, 95, 0, 0, 12900, 12901, 7, 17, 0, 0, 12901, 12902, 7, 11, 0, 0, 12902, + 12903, 7, 7, 0, 0, 12903, 12904, 7, 8, 0, 0, 12904, 2142, 1, 0, 0, 0, 12905, + 12906, 7, 6, 0, 0, 12906, 12907, 7, 3, 0, 0, 12907, 12908, 7, 12, 0, 0, + 12908, 2144, 1, 0, 0, 0, 12909, 12910, 7, 6, 0, 0, 12910, 12911, 7, 15, + 0, 0, 12911, 12912, 7, 23, 0, 0, 12912, 12913, 7, 7, 0, 0, 12913, 12914, + 7, 4, 0, 0, 12914, 12915, 7, 15, 0, 0, 12915, 12916, 7, 18, 0, 0, 12916, + 12917, 7, 18, 0, 0, 12917, 2146, 1, 0, 0, 0, 12918, 12919, 7, 6, 0, 0, + 12919, 12920, 7, 15, 0, 0, 12920, 12921, 7, 23, 0, 0, 12921, 12922, 7, + 7, 0, 0, 12922, 12923, 7, 11, 0, 0, 12923, 12924, 7, 6, 0, 0, 12924, 12925, + 7, 3, 0, 0, 12925, 12926, 7, 23, 0, 0, 12926, 12927, 7, 25, 0, 0, 12927, + 12928, 7, 3, 0, 0, 12928, 12929, 7, 4, 0, 0, 12929, 12930, 7, 4, 0, 0, + 12930, 2148, 1, 0, 0, 0, 12931, 12932, 7, 6, 0, 0, 12932, 12933, 7, 15, + 0, 0, 12933, 12934, 7, 23, 0, 0, 12934, 12935, 7, 7, 0, 0, 12935, 12936, + 7, 11, 0, 0, 12936, 12937, 7, 6, 0, 0, 12937, 12938, 7, 3, 0, 0, 12938, + 12939, 7, 23, 0, 0, 12939, 12940, 7, 25, 0, 0, 12940, 12941, 7, 4, 0, 0, + 12941, 12942, 7, 15, 0, 0, 12942, 12943, 7, 18, 0, 0, 12943, 12944, 7, + 18, 0, 0, 12944, 2150, 1, 0, 0, 0, 12945, 12946, 7, 6, 0, 0, 12946, 12947, + 7, 15, 0, 0, 12947, 12948, 7, 23, 0, 0, 12948, 12949, 7, 7, 0, 0, 12949, + 12950, 5, 95, 0, 0, 12950, 12951, 7, 18, 0, 0, 12951, 12952, 7, 19, 0, + 0, 12952, 12953, 7, 8, 0, 0, 12953, 12954, 7, 23, 0, 0, 12954, 12955, 7, + 3, 0, 0, 12955, 12956, 7, 6, 0, 0, 12956, 2152, 1, 0, 0, 0, 12957, 12958, + 7, 6, 0, 0, 12958, 12959, 7, 15, 0, 0, 12959, 12960, 7, 23, 0, 0, 12960, + 12961, 7, 7, 0, 0, 12961, 12962, 5, 95, 0, 0, 12962, 12963, 7, 6, 0, 0, + 12963, 12964, 7, 19, 0, 0, 12964, 12965, 5, 95, 0, 0, 12965, 12966, 7, + 11, 0, 0, 12966, 12967, 7, 7, 0, 0, 12967, 12968, 7, 14, 0, 0, 12968, 2154, + 1, 0, 0, 0, 12969, 12970, 7, 6, 0, 0, 12970, 12971, 7, 19, 0, 0, 12971, + 12972, 7, 17, 0, 0, 12972, 12973, 7, 14, 0, 0, 12973, 12974, 7, 20, 0, + 0, 12974, 12975, 7, 7, 0, 0, 12975, 12976, 7, 11, 0, 0, 12976, 2156, 1, + 0, 0, 0, 12977, 12978, 7, 6, 0, 0, 12978, 12979, 7, 19, 0, 0, 12979, 12980, + 5, 95, 0, 0, 12980, 12981, 7, 16, 0, 0, 12981, 12982, 7, 3, 0, 0, 12982, + 12983, 7, 11, 0, 0, 12983, 12984, 7, 7, 0, 0, 12984, 12985, 5, 54, 0, 0, + 12985, 12986, 5, 52, 0, 0, 12986, 2158, 1, 0, 0, 0, 12987, 12988, 7, 6, + 0, 0, 12988, 12989, 7, 19, 0, 0, 12989, 12990, 5, 95, 0, 0, 12990, 12991, + 7, 4, 0, 0, 12991, 12992, 7, 3, 0, 0, 12992, 12993, 7, 10, 0, 0, 12993, + 12994, 7, 11, 0, 0, 12994, 2160, 1, 0, 0, 0, 12995, 12996, 7, 6, 0, 0, + 12996, 12997, 7, 19, 0, 0, 12997, 12998, 5, 95, 0, 0, 12998, 12999, 7, + 11, 0, 0, 12999, 13000, 7, 7, 0, 0, 13000, 13001, 7, 14, 0, 0, 13001, 13002, + 7, 19, 0, 0, 13002, 13003, 7, 12, 0, 0, 13003, 13004, 7, 4, 0, 0, 13004, + 13005, 7, 11, 0, 0, 13005, 2162, 1, 0, 0, 0, 13006, 13007, 7, 17, 0, 0, + 13007, 13008, 7, 14, 0, 0, 13008, 13009, 7, 3, 0, 0, 13009, 13010, 7, 11, + 0, 0, 13010, 13011, 7, 7, 0, 0, 13011, 2164, 1, 0, 0, 0, 13012, 13013, + 7, 17, 0, 0, 13013, 13014, 7, 12, 0, 0, 13014, 13015, 7, 14, 0, 0, 13015, + 13016, 7, 19, 0, 0, 13016, 13017, 7, 23, 0, 0, 13017, 13018, 7, 25, 0, + 0, 13018, 13019, 7, 8, 0, 0, 13019, 13020, 7, 7, 0, 0, 13020, 13021, 7, + 11, 0, 0, 13021, 13022, 7, 11, 0, 0, 13022, 2166, 1, 0, 0, 0, 13023, 13024, + 7, 17, 0, 0, 13024, 13025, 7, 12, 0, 0, 13025, 13026, 7, 14, 0, 0, 13026, + 13027, 7, 19, 0, 0, 13027, 13028, 7, 23, 0, 0, 13028, 13029, 7, 25, 0, + 0, 13029, 13030, 7, 8, 0, 0, 13030, 13031, 7, 7, 0, 0, 13031, 13032, 7, + 11, 0, 0, 13032, 13033, 7, 11, 0, 0, 13033, 13034, 7, 7, 0, 0, 13034, 13035, + 7, 4, 0, 0, 13035, 13036, 5, 95, 0, 0, 13036, 13037, 7, 5, 0, 0, 13037, + 13038, 7, 7, 0, 0, 13038, 13039, 7, 12, 0, 0, 13039, 13040, 7, 22, 0, 0, + 13040, 13041, 7, 6, 0, 0, 13041, 13042, 7, 20, 0, 0, 13042, 2168, 1, 0, + 0, 0, 13043, 13044, 7, 17, 0, 0, 13044, 13045, 7, 12, 0, 0, 13045, 13046, + 7, 20, 0, 0, 13046, 13047, 7, 7, 0, 0, 13047, 13048, 7, 26, 0, 0, 13048, + 2170, 1, 0, 0, 0, 13049, 13050, 7, 17, 0, 0, 13050, 13051, 7, 12, 0, 0, + 13051, 13052, 7, 15, 0, 0, 13052, 13053, 7, 26, 0, 0, 13053, 13054, 5, + 95, 0, 0, 13054, 13055, 7, 6, 0, 0, 13055, 13056, 7, 15, 0, 0, 13056, 13057, + 7, 23, 0, 0, 13057, 13058, 7, 7, 0, 0, 13058, 13059, 7, 11, 0, 0, 13059, + 13060, 7, 6, 0, 0, 13060, 13061, 7, 3, 0, 0, 13061, 13062, 7, 23, 0, 0, + 13062, 13063, 7, 25, 0, 0, 13063, 2172, 1, 0, 0, 0, 13064, 13065, 7, 17, + 0, 0, 13065, 13066, 7, 25, 0, 0, 13066, 13067, 7, 4, 0, 0, 13067, 13068, + 7, 3, 0, 0, 13068, 13069, 7, 6, 0, 0, 13069, 13070, 7, 7, 0, 0, 13070, + 13071, 7, 26, 0, 0, 13071, 13072, 7, 23, 0, 0, 13072, 13073, 7, 5, 0, 0, + 13073, 2174, 1, 0, 0, 0, 13074, 13075, 7, 17, 0, 0, 13075, 13076, 7, 25, + 0, 0, 13076, 13077, 7, 25, 0, 0, 13077, 13078, 7, 7, 0, 0, 13078, 13079, + 7, 8, 0, 0, 13079, 2176, 1, 0, 0, 0, 13080, 13081, 7, 17, 0, 0, 13081, + 13082, 7, 17, 0, 0, 13082, 13083, 7, 15, 0, 0, 13083, 13084, 7, 4, 0, 0, + 13084, 2178, 1, 0, 0, 0, 13085, 13086, 7, 17, 0, 0, 13086, 13087, 7, 17, + 0, 0, 13087, 13088, 7, 15, 0, 0, 13088, 13089, 7, 4, 0, 0, 13089, 13090, + 5, 95, 0, 0, 13090, 13091, 7, 11, 0, 0, 13091, 13092, 7, 20, 0, 0, 13092, + 13093, 7, 19, 0, 0, 13093, 13094, 7, 8, 0, 0, 13094, 13095, 7, 6, 0, 0, + 13095, 2180, 1, 0, 0, 0, 13096, 13097, 7, 24, 0, 0, 13097, 13098, 7, 3, + 0, 0, 13098, 13099, 7, 5, 0, 0, 13099, 13100, 7, 15, 0, 0, 13100, 13101, + 7, 4, 0, 0, 13101, 13102, 7, 3, 0, 0, 13102, 13103, 7, 6, 0, 0, 13103, + 13104, 7, 7, 0, 0, 13104, 13105, 5, 95, 0, 0, 13105, 13106, 7, 25, 0, 0, + 13106, 13107, 7, 3, 0, 0, 13107, 13108, 7, 11, 0, 0, 13108, 13109, 7, 11, + 0, 0, 13109, 13110, 7, 9, 0, 0, 13110, 13111, 7, 19, 0, 0, 13111, 13112, + 7, 8, 0, 0, 13112, 13113, 7, 4, 0, 0, 13113, 13114, 5, 95, 0, 0, 13114, + 13115, 7, 11, 0, 0, 13115, 13116, 7, 6, 0, 0, 13116, 13117, 7, 8, 0, 0, + 13117, 13118, 7, 7, 0, 0, 13118, 13119, 7, 12, 0, 0, 13119, 13120, 7, 22, + 0, 0, 13120, 13121, 7, 6, 0, 0, 13121, 13122, 7, 20, 0, 0, 13122, 2182, + 1, 0, 0, 0, 13123, 13124, 7, 24, 0, 0, 13124, 13125, 7, 7, 0, 0, 13125, + 13126, 7, 8, 0, 0, 13126, 13127, 7, 11, 0, 0, 13127, 13128, 7, 15, 0, 0, + 13128, 13129, 7, 19, 0, 0, 13129, 13130, 7, 12, 0, 0, 13130, 2184, 1, 0, + 0, 0, 13131, 13132, 7, 9, 0, 0, 13132, 13133, 7, 3, 0, 0, 13133, 13134, + 7, 15, 0, 0, 13134, 13135, 7, 6, 0, 0, 13135, 13136, 5, 95, 0, 0, 13136, + 13137, 7, 17, 0, 0, 13137, 13138, 7, 12, 0, 0, 13138, 13139, 7, 6, 0, 0, + 13139, 13140, 7, 15, 0, 0, 13140, 13141, 7, 5, 0, 0, 13141, 13142, 5, 95, + 0, 0, 13142, 13143, 7, 11, 0, 0, 13143, 13144, 7, 28, 0, 0, 13144, 13145, + 7, 5, 0, 0, 13145, 13146, 5, 95, 0, 0, 13146, 13147, 7, 6, 0, 0, 13147, + 13148, 7, 20, 0, 0, 13148, 13149, 7, 8, 0, 0, 13149, 13150, 7, 7, 0, 0, + 13150, 13151, 7, 3, 0, 0, 13151, 13152, 7, 4, 0, 0, 13152, 13153, 5, 95, + 0, 0, 13153, 13154, 7, 3, 0, 0, 13154, 13155, 7, 18, 0, 0, 13155, 13156, + 7, 6, 0, 0, 13156, 13157, 7, 7, 0, 0, 13157, 13158, 7, 8, 0, 0, 13158, + 13159, 5, 95, 0, 0, 13159, 13160, 7, 22, 0, 0, 13160, 13161, 7, 6, 0, 0, + 13161, 13162, 7, 15, 0, 0, 13162, 13163, 7, 4, 0, 0, 13163, 13164, 7, 11, + 0, 0, 13164, 2186, 1, 0, 0, 0, 13165, 13166, 7, 9, 0, 0, 13166, 13167, + 7, 7, 0, 0, 13167, 13168, 7, 7, 0, 0, 13168, 13169, 7, 21, 0, 0, 13169, + 13170, 7, 4, 0, 0, 13170, 13171, 7, 3, 0, 0, 13171, 13172, 7, 10, 0, 0, + 13172, 2188, 1, 0, 0, 0, 13173, 13174, 7, 9, 0, 0, 13174, 13175, 7, 7, + 0, 0, 13175, 13176, 7, 7, 0, 0, 13176, 13177, 7, 21, 0, 0, 13177, 13178, + 7, 19, 0, 0, 13178, 13179, 7, 18, 0, 0, 13179, 13180, 7, 10, 0, 0, 13180, + 13181, 7, 7, 0, 0, 13181, 13182, 7, 3, 0, 0, 13182, 13183, 7, 8, 0, 0, + 13183, 2190, 1, 0, 0, 0, 13184, 13185, 7, 9, 0, 0, 13185, 13186, 7, 7, + 0, 0, 13186, 13187, 7, 15, 0, 0, 13187, 13188, 7, 22, 0, 0, 13188, 13189, + 7, 20, 0, 0, 13189, 13190, 7, 6, 0, 0, 13190, 13191, 5, 95, 0, 0, 13191, + 13192, 7, 11, 0, 0, 13192, 13193, 7, 6, 0, 0, 13193, 13194, 7, 8, 0, 0, + 13194, 13195, 7, 15, 0, 0, 13195, 13196, 7, 12, 0, 0, 13196, 13197, 7, + 22, 0, 0, 13197, 2192, 1, 0, 0, 0, 13198, 13199, 7, 9, 0, 0, 13199, 13200, + 7, 15, 0, 0, 13200, 13201, 7, 6, 0, 0, 13201, 13202, 7, 20, 0, 0, 13202, + 13203, 7, 15, 0, 0, 13203, 13204, 7, 12, 0, 0, 13204, 2194, 1, 0, 0, 0, + 13205, 13206, 7, 10, 0, 0, 13206, 13207, 7, 7, 0, 0, 13207, 13208, 7, 3, + 0, 0, 13208, 13209, 7, 8, 0, 0, 13209, 13210, 7, 9, 0, 0, 13210, 13211, + 7, 7, 0, 0, 13211, 13212, 7, 7, 0, 0, 13212, 13213, 7, 21, 0, 0, 13213, + 2196, 1, 0, 0, 0, 13214, 13215, 7, 10, 0, 0, 13215, 2198, 1, 0, 0, 0, 13216, + 13217, 7, 26, 0, 0, 13217, 2200, 1, 0, 0, 0, 13218, 13219, 5, 58, 0, 0, + 13219, 13220, 5, 61, 0, 0, 13220, 2202, 1, 0, 0, 0, 13221, 13222, 5, 43, + 0, 0, 13222, 13223, 5, 61, 0, 0, 13223, 2204, 1, 0, 0, 0, 13224, 13225, + 5, 45, 0, 0, 13225, 13226, 5, 61, 0, 0, 13226, 2206, 1, 0, 0, 0, 13227, + 13228, 5, 42, 0, 0, 13228, 13229, 5, 61, 0, 0, 13229, 2208, 1, 0, 0, 0, + 13230, 13231, 5, 47, 0, 0, 13231, 13232, 5, 61, 0, 0, 13232, 2210, 1, 0, + 0, 0, 13233, 13234, 5, 37, 0, 0, 13234, 13235, 5, 61, 0, 0, 13235, 2212, + 1, 0, 0, 0, 13236, 13237, 5, 38, 0, 0, 13237, 13238, 5, 61, 0, 0, 13238, + 2214, 1, 0, 0, 0, 13239, 13240, 5, 94, 0, 0, 13240, 13241, 5, 61, 0, 0, + 13241, 2216, 1, 0, 0, 0, 13242, 13243, 5, 124, 0, 0, 13243, 13244, 5, 61, + 0, 0, 13244, 2218, 1, 0, 0, 0, 13245, 13246, 5, 42, 0, 0, 13246, 2220, + 1, 0, 0, 0, 13247, 13248, 5, 47, 0, 0, 13248, 2222, 1, 0, 0, 0, 13249, + 13250, 5, 37, 0, 0, 13250, 2224, 1, 0, 0, 0, 13251, 13252, 5, 43, 0, 0, + 13252, 2226, 1, 0, 0, 0, 13253, 13254, 5, 45, 0, 0, 13254, 2228, 1, 0, + 0, 0, 13255, 13256, 7, 4, 0, 0, 13256, 13257, 7, 15, 0, 0, 13257, 13258, + 7, 24, 0, 0, 13258, 2230, 1, 0, 0, 0, 13259, 13260, 7, 23, 0, 0, 13260, + 13261, 7, 19, 0, 0, 13261, 13262, 7, 4, 0, 0, 13262, 2232, 1, 0, 0, 0, + 13263, 13264, 5, 61, 0, 0, 13264, 2234, 1, 0, 0, 0, 13265, 13266, 5, 62, + 0, 0, 13266, 2236, 1, 0, 0, 0, 13267, 13268, 5, 60, 0, 0, 13268, 2238, + 1, 0, 0, 0, 13269, 13270, 5, 33, 0, 0, 13270, 2240, 1, 0, 0, 0, 13271, + 13272, 5, 126, 0, 0, 13272, 2242, 1, 0, 0, 0, 13273, 13274, 5, 124, 0, + 0, 13274, 2244, 1, 0, 0, 0, 13275, 13276, 5, 38, 0, 0, 13276, 2246, 1, + 0, 0, 0, 13277, 13278, 5, 94, 0, 0, 13278, 2248, 1, 0, 0, 0, 13279, 13280, + 5, 46, 0, 0, 13280, 2250, 1, 0, 0, 0, 13281, 13282, 5, 40, 0, 0, 13282, + 2252, 1, 0, 0, 0, 13283, 13284, 5, 41, 0, 0, 13284, 2254, 1, 0, 0, 0, 13285, + 13286, 5, 44, 0, 0, 13286, 2256, 1, 0, 0, 0, 13287, 13288, 5, 59, 0, 0, + 13288, 2258, 1, 0, 0, 0, 13289, 13290, 5, 64, 0, 0, 13290, 2260, 1, 0, + 0, 0, 13291, 13292, 5, 48, 0, 0, 13292, 2262, 1, 0, 0, 0, 13293, 13294, + 5, 49, 0, 0, 13294, 2264, 1, 0, 0, 0, 13295, 13296, 5, 50, 0, 0, 13296, + 2266, 1, 0, 0, 0, 13297, 13298, 5, 39, 0, 0, 13298, 2268, 1, 0, 0, 0, 13299, + 13300, 5, 34, 0, 0, 13300, 2270, 1, 0, 0, 0, 13301, 13302, 5, 96, 0, 0, + 13302, 2272, 1, 0, 0, 0, 13303, 13304, 5, 58, 0, 0, 13304, 2274, 1, 0, + 0, 0, 13305, 13309, 3, 2267, 1133, 0, 13306, 13309, 3, 2269, 1134, 0, 13307, + 13309, 3, 2271, 1135, 0, 13308, 13305, 1, 0, 0, 0, 13308, 13306, 1, 0, + 0, 0, 13308, 13307, 1, 0, 0, 0, 13309, 2276, 1, 0, 0, 0, 13310, 13311, + 5, 96, 0, 0, 13311, 13312, 3, 2311, 1155, 0, 13312, 13313, 5, 96, 0, 0, + 13313, 2278, 1, 0, 0, 0, 13314, 13316, 3, 2325, 1162, 0, 13315, 13314, + 1, 0, 0, 0, 13316, 13317, 1, 0, 0, 0, 13317, 13315, 1, 0, 0, 0, 13317, + 13318, 1, 0, 0, 0, 13318, 13319, 1, 0, 0, 0, 13319, 13320, 7, 29, 0, 0, + 13320, 2280, 1, 0, 0, 0, 13321, 13322, 7, 12, 0, 0, 13322, 13323, 3, 2319, + 1159, 0, 13323, 2282, 1, 0, 0, 0, 13324, 13328, 3, 2317, 1158, 0, 13325, + 13328, 3, 2319, 1159, 0, 13326, 13328, 3, 2321, 1160, 0, 13327, 13324, + 1, 0, 0, 0, 13327, 13325, 1, 0, 0, 0, 13327, 13326, 1, 0, 0, 0, 13328, + 2284, 1, 0, 0, 0, 13329, 13331, 3, 2325, 1162, 0, 13330, 13329, 1, 0, 0, + 0, 13331, 13332, 1, 0, 0, 0, 13332, 13330, 1, 0, 0, 0, 13332, 13333, 1, + 0, 0, 0, 13333, 2286, 1, 0, 0, 0, 13334, 13335, 7, 26, 0, 0, 13335, 13339, + 5, 39, 0, 0, 13336, 13337, 3, 2323, 1161, 0, 13337, 13338, 3, 2323, 1161, + 0, 13338, 13340, 1, 0, 0, 0, 13339, 13336, 1, 0, 0, 0, 13340, 13341, 1, + 0, 0, 0, 13341, 13339, 1, 0, 0, 0, 13341, 13342, 1, 0, 0, 0, 13342, 13343, + 1, 0, 0, 0, 13343, 13344, 5, 39, 0, 0, 13344, 13354, 1, 0, 0, 0, 13345, + 13346, 5, 48, 0, 0, 13346, 13347, 7, 26, 0, 0, 13347, 13349, 1, 0, 0, 0, + 13348, 13350, 3, 2323, 1161, 0, 13349, 13348, 1, 0, 0, 0, 13350, 13351, + 1, 0, 0, 0, 13351, 13349, 1, 0, 0, 0, 13351, 13352, 1, 0, 0, 0, 13352, + 13354, 1, 0, 0, 0, 13353, 13334, 1, 0, 0, 0, 13353, 13345, 1, 0, 0, 0, + 13354, 2288, 1, 0, 0, 0, 13355, 13357, 3, 2325, 1162, 0, 13356, 13355, + 1, 0, 0, 0, 13357, 13358, 1, 0, 0, 0, 13358, 13356, 1, 0, 0, 0, 13358, + 13359, 1, 0, 0, 0, 13359, 13361, 1, 0, 0, 0, 13360, 13356, 1, 0, 0, 0, + 13360, 13361, 1, 0, 0, 0, 13361, 13362, 1, 0, 0, 0, 13362, 13364, 5, 46, + 0, 0, 13363, 13365, 3, 2325, 1162, 0, 13364, 13363, 1, 0, 0, 0, 13365, + 13366, 1, 0, 0, 0, 13366, 13364, 1, 0, 0, 0, 13366, 13367, 1, 0, 0, 0, + 13367, 13399, 1, 0, 0, 0, 13368, 13370, 3, 2325, 1162, 0, 13369, 13368, + 1, 0, 0, 0, 13370, 13371, 1, 0, 0, 0, 13371, 13369, 1, 0, 0, 0, 13371, + 13372, 1, 0, 0, 0, 13372, 13373, 1, 0, 0, 0, 13373, 13374, 5, 46, 0, 0, + 13374, 13375, 3, 2313, 1156, 0, 13375, 13399, 1, 0, 0, 0, 13376, 13378, + 3, 2325, 1162, 0, 13377, 13376, 1, 0, 0, 0, 13378, 13379, 1, 0, 0, 0, 13379, + 13377, 1, 0, 0, 0, 13379, 13380, 1, 0, 0, 0, 13380, 13382, 1, 0, 0, 0, + 13381, 13377, 1, 0, 0, 0, 13381, 13382, 1, 0, 0, 0, 13382, 13383, 1, 0, + 0, 0, 13383, 13385, 5, 46, 0, 0, 13384, 13386, 3, 2325, 1162, 0, 13385, + 13384, 1, 0, 0, 0, 13386, 13387, 1, 0, 0, 0, 13387, 13385, 1, 0, 0, 0, + 13387, 13388, 1, 0, 0, 0, 13388, 13389, 1, 0, 0, 0, 13389, 13390, 3, 2313, + 1156, 0, 13390, 13399, 1, 0, 0, 0, 13391, 13393, 3, 2325, 1162, 0, 13392, + 13391, 1, 0, 0, 0, 13393, 13394, 1, 0, 0, 0, 13394, 13392, 1, 0, 0, 0, + 13394, 13395, 1, 0, 0, 0, 13395, 13396, 1, 0, 0, 0, 13396, 13397, 3, 2313, + 1156, 0, 13397, 13399, 1, 0, 0, 0, 13398, 13360, 1, 0, 0, 0, 13398, 13369, + 1, 0, 0, 0, 13398, 13381, 1, 0, 0, 0, 13398, 13392, 1, 0, 0, 0, 13399, + 2290, 1, 0, 0, 0, 13400, 13401, 5, 92, 0, 0, 13401, 13402, 7, 12, 0, 0, + 13402, 2292, 1, 0, 0, 0, 13403, 13404, 3, 2327, 1163, 0, 13404, 2294, 1, + 0, 0, 0, 13405, 13406, 5, 95, 0, 0, 13406, 13407, 3, 2311, 1155, 0, 13407, + 2296, 1, 0, 0, 0, 13408, 13409, 5, 46, 0, 0, 13409, 13410, 3, 2315, 1157, + 0, 13410, 2298, 1, 0, 0, 0, 13411, 13412, 3, 2315, 1157, 0, 13412, 2300, + 1, 0, 0, 0, 13413, 13415, 5, 96, 0, 0, 13414, 13416, 8, 30, 0, 0, 13415, + 13414, 1, 0, 0, 0, 13416, 13417, 1, 0, 0, 0, 13417, 13415, 1, 0, 0, 0, + 13417, 13418, 1, 0, 0, 0, 13418, 13419, 1, 0, 0, 0, 13419, 13420, 5, 96, + 0, 0, 13420, 2302, 1, 0, 0, 0, 13421, 13426, 3, 2319, 1159, 0, 13422, 13426, + 3, 2317, 1158, 0, 13423, 13426, 3, 2321, 1160, 0, 13424, 13426, 3, 2315, + 1157, 0, 13425, 13421, 1, 0, 0, 0, 13425, 13422, 1, 0, 0, 0, 13425, 13423, + 1, 0, 0, 0, 13425, 13424, 1, 0, 0, 0, 13426, 13427, 1, 0, 0, 0, 13427, + 13433, 5, 64, 0, 0, 13428, 13434, 3, 2319, 1159, 0, 13429, 13434, 3, 2317, + 1158, 0, 13430, 13434, 3, 2321, 1160, 0, 13431, 13434, 3, 2315, 1157, 0, + 13432, 13434, 3, 2305, 1152, 0, 13433, 13428, 1, 0, 0, 0, 13433, 13429, + 1, 0, 0, 0, 13433, 13430, 1, 0, 0, 0, 13433, 13431, 1, 0, 0, 0, 13433, + 13432, 1, 0, 0, 0, 13434, 2304, 1, 0, 0, 0, 13435, 13437, 7, 31, 0, 0, + 13436, 13435, 1, 0, 0, 0, 13437, 13438, 1, 0, 0, 0, 13438, 13436, 1, 0, + 0, 0, 13438, 13439, 1, 0, 0, 0, 13439, 13440, 1, 0, 0, 0, 13440, 13442, + 5, 46, 0, 0, 13441, 13443, 7, 32, 0, 0, 13442, 13441, 1, 0, 0, 0, 13443, + 13444, 1, 0, 0, 0, 13444, 13442, 1, 0, 0, 0, 13444, 13445, 1, 0, 0, 0, + 13445, 13458, 1, 0, 0, 0, 13446, 13448, 7, 33, 0, 0, 13447, 13446, 1, 0, + 0, 0, 13448, 13449, 1, 0, 0, 0, 13449, 13447, 1, 0, 0, 0, 13449, 13450, + 1, 0, 0, 0, 13450, 13451, 1, 0, 0, 0, 13451, 13453, 5, 58, 0, 0, 13452, + 13454, 7, 33, 0, 0, 13453, 13452, 1, 0, 0, 0, 13454, 13455, 1, 0, 0, 0, + 13455, 13453, 1, 0, 0, 0, 13455, 13456, 1, 0, 0, 0, 13456, 13458, 1, 0, + 0, 0, 13457, 13436, 1, 0, 0, 0, 13457, 13447, 1, 0, 0, 0, 13458, 2306, + 1, 0, 0, 0, 13459, 13468, 5, 64, 0, 0, 13460, 13462, 7, 34, 0, 0, 13461, + 13460, 1, 0, 0, 0, 13462, 13463, 1, 0, 0, 0, 13463, 13461, 1, 0, 0, 0, + 13463, 13464, 1, 0, 0, 0, 13464, 13469, 1, 0, 0, 0, 13465, 13469, 3, 2319, + 1159, 0, 13466, 13469, 3, 2317, 1158, 0, 13467, 13469, 3, 2321, 1160, 0, + 13468, 13461, 1, 0, 0, 0, 13468, 13465, 1, 0, 0, 0, 13468, 13466, 1, 0, + 0, 0, 13468, 13467, 1, 0, 0, 0, 13469, 2308, 1, 0, 0, 0, 13470, 13471, + 5, 64, 0, 0, 13471, 13478, 5, 64, 0, 0, 13472, 13474, 7, 34, 0, 0, 13473, + 13472, 1, 0, 0, 0, 13474, 13475, 1, 0, 0, 0, 13475, 13473, 1, 0, 0, 0, + 13475, 13476, 1, 0, 0, 0, 13476, 13479, 1, 0, 0, 0, 13477, 13479, 3, 2321, + 1160, 0, 13478, 13473, 1, 0, 0, 0, 13478, 13477, 1, 0, 0, 0, 13479, 2310, + 1, 0, 0, 0, 13480, 13522, 3, 1481, 740, 0, 13481, 13522, 3, 1483, 741, + 0, 13482, 13522, 3, 1485, 742, 0, 13483, 13522, 3, 447, 223, 0, 13484, + 13522, 3, 1487, 743, 0, 13485, 13522, 3, 1489, 744, 0, 13486, 13522, 3, + 1491, 745, 0, 13487, 13522, 3, 1493, 746, 0, 13488, 13522, 3, 1495, 747, + 0, 13489, 13522, 3, 1497, 748, 0, 13490, 13522, 3, 1499, 749, 0, 13491, + 13522, 3, 1501, 750, 0, 13492, 13522, 3, 1503, 751, 0, 13493, 13522, 3, + 1505, 752, 0, 13494, 13522, 3, 1507, 753, 0, 13495, 13522, 3, 1511, 755, + 0, 13496, 13522, 3, 1513, 756, 0, 13497, 13522, 3, 1515, 757, 0, 13498, + 13522, 3, 1517, 758, 0, 13499, 13522, 3, 1519, 759, 0, 13500, 13522, 3, + 1521, 760, 0, 13501, 13522, 3, 1523, 761, 0, 13502, 13522, 3, 1525, 762, + 0, 13503, 13522, 3, 1527, 763, 0, 13504, 13522, 3, 1529, 764, 0, 13505, + 13522, 3, 1531, 765, 0, 13506, 13522, 3, 1533, 766, 0, 13507, 13522, 3, + 1535, 767, 0, 13508, 13522, 3, 1537, 768, 0, 13509, 13522, 3, 1539, 769, + 0, 13510, 13522, 3, 1541, 770, 0, 13511, 13522, 3, 1543, 771, 0, 13512, + 13522, 3, 1545, 772, 0, 13513, 13522, 3, 1547, 773, 0, 13514, 13522, 3, + 1549, 774, 0, 13515, 13522, 3, 1551, 775, 0, 13516, 13522, 3, 1553, 776, + 0, 13517, 13522, 3, 1555, 777, 0, 13518, 13522, 3, 1557, 778, 0, 13519, + 13522, 3, 1559, 779, 0, 13520, 13522, 3, 1561, 780, 0, 13521, 13480, 1, + 0, 0, 0, 13521, 13481, 1, 0, 0, 0, 13521, 13482, 1, 0, 0, 0, 13521, 13483, + 1, 0, 0, 0, 13521, 13484, 1, 0, 0, 0, 13521, 13485, 1, 0, 0, 0, 13521, + 13486, 1, 0, 0, 0, 13521, 13487, 1, 0, 0, 0, 13521, 13488, 1, 0, 0, 0, + 13521, 13489, 1, 0, 0, 0, 13521, 13490, 1, 0, 0, 0, 13521, 13491, 1, 0, + 0, 0, 13521, 13492, 1, 0, 0, 0, 13521, 13493, 1, 0, 0, 0, 13521, 13494, + 1, 0, 0, 0, 13521, 13495, 1, 0, 0, 0, 13521, 13496, 1, 0, 0, 0, 13521, + 13497, 1, 0, 0, 0, 13521, 13498, 1, 0, 0, 0, 13521, 13499, 1, 0, 0, 0, + 13521, 13500, 1, 0, 0, 0, 13521, 13501, 1, 0, 0, 0, 13521, 13502, 1, 0, + 0, 0, 13521, 13503, 1, 0, 0, 0, 13521, 13504, 1, 0, 0, 0, 13521, 13505, + 1, 0, 0, 0, 13521, 13506, 1, 0, 0, 0, 13521, 13507, 1, 0, 0, 0, 13521, + 13508, 1, 0, 0, 0, 13521, 13509, 1, 0, 0, 0, 13521, 13510, 1, 0, 0, 0, + 13521, 13511, 1, 0, 0, 0, 13521, 13512, 1, 0, 0, 0, 13521, 13513, 1, 0, + 0, 0, 13521, 13514, 1, 0, 0, 0, 13521, 13515, 1, 0, 0, 0, 13521, 13516, + 1, 0, 0, 0, 13521, 13517, 1, 0, 0, 0, 13521, 13518, 1, 0, 0, 0, 13521, + 13519, 1, 0, 0, 0, 13521, 13520, 1, 0, 0, 0, 13522, 2312, 1, 0, 0, 0, 13523, + 13525, 7, 7, 0, 0, 13524, 13526, 7, 35, 0, 0, 13525, 13524, 1, 0, 0, 0, + 13525, 13526, 1, 0, 0, 0, 13526, 13528, 1, 0, 0, 0, 13527, 13529, 3, 2325, + 1162, 0, 13528, 13527, 1, 0, 0, 0, 13529, 13530, 1, 0, 0, 0, 13530, 13528, + 1, 0, 0, 0, 13530, 13531, 1, 0, 0, 0, 13531, 2314, 1, 0, 0, 0, 13532, 13534, + 7, 36, 0, 0, 13533, 13532, 1, 0, 0, 0, 13534, 13537, 1, 0, 0, 0, 13535, + 13536, 1, 0, 0, 0, 13535, 13533, 1, 0, 0, 0, 13536, 13539, 1, 0, 0, 0, + 13537, 13535, 1, 0, 0, 0, 13538, 13540, 7, 37, 0, 0, 13539, 13538, 1, 0, + 0, 0, 13540, 13541, 1, 0, 0, 0, 13541, 13542, 1, 0, 0, 0, 13541, 13539, + 1, 0, 0, 0, 13542, 13546, 1, 0, 0, 0, 13543, 13545, 7, 36, 0, 0, 13544, + 13543, 1, 0, 0, 0, 13545, 13548, 1, 0, 0, 0, 13546, 13544, 1, 0, 0, 0, + 13546, 13547, 1, 0, 0, 0, 13547, 2316, 1, 0, 0, 0, 13548, 13546, 1, 0, + 0, 0, 13549, 13557, 5, 34, 0, 0, 13550, 13551, 5, 92, 0, 0, 13551, 13556, + 9, 0, 0, 0, 13552, 13553, 5, 34, 0, 0, 13553, 13556, 5, 34, 0, 0, 13554, + 13556, 8, 38, 0, 0, 13555, 13550, 1, 0, 0, 0, 13555, 13552, 1, 0, 0, 0, + 13555, 13554, 1, 0, 0, 0, 13556, 13559, 1, 0, 0, 0, 13557, 13555, 1, 0, + 0, 0, 13557, 13558, 1, 0, 0, 0, 13558, 13560, 1, 0, 0, 0, 13559, 13557, + 1, 0, 0, 0, 13560, 13561, 5, 34, 0, 0, 13561, 2318, 1, 0, 0, 0, 13562, + 13570, 5, 39, 0, 0, 13563, 13564, 5, 92, 0, 0, 13564, 13569, 9, 0, 0, 0, + 13565, 13566, 5, 39, 0, 0, 13566, 13569, 5, 39, 0, 0, 13567, 13569, 8, + 39, 0, 0, 13568, 13563, 1, 0, 0, 0, 13568, 13565, 1, 0, 0, 0, 13568, 13567, + 1, 0, 0, 0, 13569, 13572, 1, 0, 0, 0, 13570, 13568, 1, 0, 0, 0, 13570, + 13571, 1, 0, 0, 0, 13571, 13573, 1, 0, 0, 0, 13572, 13570, 1, 0, 0, 0, + 13573, 13574, 5, 39, 0, 0, 13574, 2320, 1, 0, 0, 0, 13575, 13583, 5, 96, + 0, 0, 13576, 13577, 5, 92, 0, 0, 13577, 13582, 9, 0, 0, 0, 13578, 13579, + 5, 96, 0, 0, 13579, 13582, 5, 96, 0, 0, 13580, 13582, 8, 40, 0, 0, 13581, + 13576, 1, 0, 0, 0, 13581, 13578, 1, 0, 0, 0, 13581, 13580, 1, 0, 0, 0, + 13582, 13585, 1, 0, 0, 0, 13583, 13581, 1, 0, 0, 0, 13583, 13584, 1, 0, + 0, 0, 13584, 13586, 1, 0, 0, 0, 13585, 13583, 1, 0, 0, 0, 13586, 13587, + 5, 96, 0, 0, 13587, 2322, 1, 0, 0, 0, 13588, 13589, 7, 41, 0, 0, 13589, + 2324, 1, 0, 0, 0, 13590, 13591, 7, 31, 0, 0, 13591, 2326, 1, 0, 0, 0, 13592, + 13593, 7, 16, 0, 0, 13593, 13595, 5, 39, 0, 0, 13594, 13596, 7, 42, 0, + 0, 13595, 13594, 1, 0, 0, 0, 13596, 13597, 1, 0, 0, 0, 13597, 13595, 1, + 0, 0, 0, 13597, 13598, 1, 0, 0, 0, 13598, 13599, 1, 0, 0, 0, 13599, 13600, + 5, 39, 0, 0, 13600, 2328, 1, 0, 0, 0, 13601, 13602, 9, 0, 0, 0, 13602, + 13603, 1, 0, 0, 0, 13603, 13604, 6, 1164, 2, 0, 13604, 2330, 1, 0, 0, 0, + 58, 0, 2334, 2345, 2358, 2372, 2376, 2381, 2385, 2389, 2395, 2399, 2401, + 5514, 5529, 5531, 9175, 9202, 13308, 13317, 13327, 13332, 13341, 13351, + 13353, 13358, 13360, 13366, 13371, 13379, 13381, 13387, 13394, 13398, 13417, + 13425, 13433, 13438, 13444, 13449, 13455, 13457, 13463, 13468, 13475, 13478, + 13521, 13525, 13530, 13535, 13541, 13546, 13555, 13557, 13568, 13570, 13581, + 13583, 13597, 3, 0, 1, 0, 0, 2, 0, 0, 3, 0, + } + deserializer := antlr.NewATNDeserializer(nil) + staticData.atn = deserializer.Deserialize(staticData.serializedATN) + atn := staticData.atn + staticData.decisionToDFA = make([]*antlr.DFA, len(atn.DecisionToState)) + decisionToDFA := staticData.decisionToDFA + for index, state := range atn.DecisionToState { + decisionToDFA[index] = antlr.NewDFA(state, index) + } +} + +// MySqlLexerInit initializes any static state used to implement MySqlLexer. By default the +// static state used to implement the lexer is lazily initialized during the first call to +// NewMySqlLexer(). You can call this function if you wish to initialize the static state ahead +// of time. +func MySqlLexerInit() { + staticData := &mysqllexerLexerStaticData + staticData.once.Do(mysqllexerLexerInit) +} + +// NewMySqlLexer produces a new lexer instance for the optional input antlr.CharStream. +func NewMySqlLexer(input antlr.CharStream) *MySqlLexer { + MySqlLexerInit() + l := new(MySqlLexer) + l.BaseLexer = antlr.NewBaseLexer(input) + staticData := &mysqllexerLexerStaticData + l.Interpreter = antlr.NewLexerATNSimulator(l, staticData.atn, staticData.decisionToDFA, staticData.predictionContextCache) + l.channelNames = staticData.channelNames + l.modeNames = staticData.modeNames + l.RuleNames = staticData.ruleNames + l.LiteralNames = staticData.literalNames + l.SymbolicNames = staticData.symbolicNames + l.GrammarFileName = "MySqlLexer.g4" + // TODO: l.EOF = antlr.TokenEOF + + return l +} + +// MySqlLexer tokens. +const ( + MySqlLexerSPACE = 1 + MySqlLexerSPEC_MYSQL_COMMENT = 2 + MySqlLexerCOMMENT_INPUT = 3 + MySqlLexerLINE_COMMENT = 4 + MySqlLexerADD = 5 + MySqlLexerALL = 6 + MySqlLexerALTER = 7 + MySqlLexerALWAYS = 8 + MySqlLexerANALYZE = 9 + MySqlLexerAND = 10 + MySqlLexerARRAY = 11 + MySqlLexerAS = 12 + MySqlLexerASC = 13 + MySqlLexerATTRIBUTE = 14 + MySqlLexerBEFORE = 15 + MySqlLexerBETWEEN = 16 + MySqlLexerBOTH = 17 + MySqlLexerBUCKETS = 18 + MySqlLexerBY = 19 + MySqlLexerCALL = 20 + MySqlLexerCASCADE = 21 + MySqlLexerCASE = 22 + MySqlLexerCAST = 23 + MySqlLexerCHANGE = 24 + MySqlLexerCHARACTER = 25 + MySqlLexerCHECK = 26 + MySqlLexerCOLLATE = 27 + MySqlLexerCOLUMN = 28 + MySqlLexerCONDITION = 29 + MySqlLexerCONSTRAINT = 30 + MySqlLexerCONTINUE = 31 + MySqlLexerCONVERT = 32 + MySqlLexerCREATE = 33 + MySqlLexerCROSS = 34 + MySqlLexerCURRENT = 35 + MySqlLexerCURRENT_ROLE = 36 + MySqlLexerCURRENT_USER = 37 + MySqlLexerCURSOR = 38 + MySqlLexerDATABASE = 39 + MySqlLexerDATABASES = 40 + MySqlLexerDECLARE = 41 + MySqlLexerDEFAULT = 42 + MySqlLexerDELAYED = 43 + MySqlLexerDELETE = 44 + MySqlLexerDESC = 45 + MySqlLexerDESCRIBE = 46 + MySqlLexerDETERMINISTIC = 47 + MySqlLexerDIAGNOSTICS = 48 + MySqlLexerDISTINCT = 49 + MySqlLexerDISTINCTROW = 50 + MySqlLexerDROP = 51 + MySqlLexerEACH = 52 + MySqlLexerELSE = 53 + MySqlLexerELSEIF = 54 + MySqlLexerEMPTY = 55 + MySqlLexerENCLOSED = 56 + MySqlLexerESCAPED = 57 + MySqlLexerEXCEPT = 58 + MySqlLexerEXISTS = 59 + MySqlLexerEXIT = 60 + MySqlLexerEXPLAIN = 61 + MySqlLexerFALSE = 62 + MySqlLexerFETCH = 63 + MySqlLexerFOR = 64 + MySqlLexerFORCE = 65 + MySqlLexerFOREIGN = 66 + MySqlLexerFROM = 67 + MySqlLexerFULLTEXT = 68 + MySqlLexerGENERATED = 69 + MySqlLexerGET = 70 + MySqlLexerGRANT = 71 + MySqlLexerGROUP = 72 + MySqlLexerHAVING = 73 + MySqlLexerHIGH_PRIORITY = 74 + MySqlLexerHISTOGRAM = 75 + MySqlLexerIF = 76 + MySqlLexerIGNORE = 77 + MySqlLexerIGNORED = 78 + MySqlLexerIN = 79 + MySqlLexerINDEX = 80 + MySqlLexerINFILE = 81 + MySqlLexerINNER = 82 + MySqlLexerINOUT = 83 + MySqlLexerINSERT = 84 + MySqlLexerINTERVAL = 85 + MySqlLexerINTO = 86 + MySqlLexerIS = 87 + MySqlLexerITERATE = 88 + MySqlLexerJOIN = 89 + MySqlLexerKEY = 90 + MySqlLexerKEYS = 91 + MySqlLexerKILL = 92 + MySqlLexerLATERAL = 93 + MySqlLexerLEADING = 94 + MySqlLexerLEAVE = 95 + MySqlLexerLEFT = 96 + MySqlLexerLIKE = 97 + MySqlLexerLIMIT = 98 + MySqlLexerLINEAR = 99 + MySqlLexerLINES = 100 + MySqlLexerLOAD = 101 + MySqlLexerLOCK = 102 + MySqlLexerLOCKED = 103 + MySqlLexerLOOP = 104 + MySqlLexerLOW_PRIORITY = 105 + MySqlLexerMASTER_BIND = 106 + MySqlLexerMASTER_SSL_VERIFY_SERVER_CERT = 107 + MySqlLexerMATCH = 108 + MySqlLexerMAXVALUE = 109 + MySqlLexerMINVALUE = 110 + MySqlLexerMODIFIES = 111 + MySqlLexerNATURAL = 112 + MySqlLexerNOT = 113 + MySqlLexerNO_WRITE_TO_BINLOG = 114 + MySqlLexerNULL_LITERAL = 115 + MySqlLexerNUMBER = 116 + MySqlLexerON = 117 + MySqlLexerOPTIMIZE = 118 + MySqlLexerOPTION = 119 + MySqlLexerOPTIONAL = 120 + MySqlLexerOPTIONALLY = 121 + MySqlLexerOR = 122 + MySqlLexerORDER = 123 + MySqlLexerOUT = 124 + MySqlLexerOUTER = 125 + MySqlLexerOUTFILE = 126 + MySqlLexerOVER = 127 + MySqlLexerPARTITION = 128 + MySqlLexerPRIMARY = 129 + MySqlLexerPROCEDURE = 130 + MySqlLexerPURGE = 131 + MySqlLexerRANGE = 132 + MySqlLexerREAD = 133 + MySqlLexerREADS = 134 + MySqlLexerREFERENCES = 135 + MySqlLexerREGEXP = 136 + MySqlLexerRELEASE = 137 + MySqlLexerRENAME = 138 + MySqlLexerREPEAT = 139 + MySqlLexerREPLACE = 140 + MySqlLexerREQUIRE = 141 + MySqlLexerRESIGNAL = 142 + MySqlLexerRESTRICT = 143 + MySqlLexerRETAIN = 144 + MySqlLexerRETURN = 145 + MySqlLexerREVOKE = 146 + MySqlLexerRIGHT = 147 + MySqlLexerRLIKE = 148 + MySqlLexerSCHEMA = 149 + MySqlLexerSCHEMAS = 150 + MySqlLexerSELECT = 151 + MySqlLexerSET = 152 + MySqlLexerSEPARATOR = 153 + MySqlLexerSHOW = 154 + MySqlLexerSIGNAL = 155 + MySqlLexerSKIP_ = 156 + MySqlLexerSPATIAL = 157 + MySqlLexerSQL = 158 + MySqlLexerSQLEXCEPTION = 159 + MySqlLexerSQLSTATE = 160 + MySqlLexerSQLWARNING = 161 + MySqlLexerSQL_BIG_RESULT = 162 + MySqlLexerSQL_CALC_FOUND_ROWS = 163 + MySqlLexerSQL_SMALL_RESULT = 164 + MySqlLexerSSL = 165 + MySqlLexerSTACKED = 166 + MySqlLexerSTARTING = 167 + MySqlLexerSTATEMENT = 168 + MySqlLexerSTRAIGHT_JOIN = 169 + MySqlLexerTABLE = 170 + MySqlLexerTERMINATED = 171 + MySqlLexerTHEN = 172 + MySqlLexerTO = 173 + MySqlLexerTRAILING = 174 + MySqlLexerTRIGGER = 175 + MySqlLexerTRUE = 176 + MySqlLexerUNDO = 177 + MySqlLexerUNION = 178 + MySqlLexerUNIQUE = 179 + MySqlLexerUNLOCK = 180 + MySqlLexerUNSIGNED = 181 + MySqlLexerUPDATE = 182 + MySqlLexerUSAGE = 183 + MySqlLexerUSE = 184 + MySqlLexerUSING = 185 + MySqlLexerVALUES = 186 + MySqlLexerWHEN = 187 + MySqlLexerWHERE = 188 + MySqlLexerWHILE = 189 + MySqlLexerWITH = 190 + MySqlLexerWRITE = 191 + MySqlLexerXOR = 192 + MySqlLexerZEROFILL = 193 + MySqlLexerTINYINT = 194 + MySqlLexerSMALLINT = 195 + MySqlLexerMEDIUMINT = 196 + MySqlLexerMIDDLEINT = 197 + MySqlLexerINT = 198 + MySqlLexerINT1 = 199 + MySqlLexerINT2 = 200 + MySqlLexerINT3 = 201 + MySqlLexerINT4 = 202 + MySqlLexerINT8 = 203 + MySqlLexerINTEGER = 204 + MySqlLexerBIGINT = 205 + MySqlLexerREAL = 206 + MySqlLexerDOUBLE = 207 + MySqlLexerPRECISION = 208 + MySqlLexerFLOAT = 209 + MySqlLexerFLOAT4 = 210 + MySqlLexerFLOAT8 = 211 + MySqlLexerDECIMAL = 212 + MySqlLexerDEC = 213 + MySqlLexerNUMERIC = 214 + MySqlLexerDATE = 215 + MySqlLexerTIME = 216 + MySqlLexerTIMESTAMP = 217 + MySqlLexerDATETIME = 218 + MySqlLexerYEAR = 219 + MySqlLexerCHAR = 220 + MySqlLexerVARCHAR = 221 + MySqlLexerNVARCHAR = 222 + MySqlLexerNATIONAL = 223 + MySqlLexerBINARY = 224 + MySqlLexerVARBINARY = 225 + MySqlLexerTINYBLOB = 226 + MySqlLexerBLOB = 227 + MySqlLexerMEDIUMBLOB = 228 + MySqlLexerLONG = 229 + MySqlLexerLONGBLOB = 230 + MySqlLexerTINYTEXT = 231 + MySqlLexerTEXT = 232 + MySqlLexerMEDIUMTEXT = 233 + MySqlLexerLONGTEXT = 234 + MySqlLexerENUM = 235 + MySqlLexerVARYING = 236 + MySqlLexerSERIAL = 237 + MySqlLexerYEAR_MONTH = 238 + MySqlLexerDAY_HOUR = 239 + MySqlLexerDAY_MINUTE = 240 + MySqlLexerDAY_SECOND = 241 + MySqlLexerHOUR_MINUTE = 242 + MySqlLexerHOUR_SECOND = 243 + MySqlLexerMINUTE_SECOND = 244 + MySqlLexerSECOND_MICROSECOND = 245 + MySqlLexerMINUTE_MICROSECOND = 246 + MySqlLexerHOUR_MICROSECOND = 247 + MySqlLexerDAY_MICROSECOND = 248 + MySqlLexerJSON_ARRAY = 249 + MySqlLexerJSON_ARRAYAGG = 250 + MySqlLexerJSON_ARRAY_APPEND = 251 + MySqlLexerJSON_ARRAY_INSERT = 252 + MySqlLexerJSON_CONTAINS = 253 + MySqlLexerJSON_CONTAINS_PATH = 254 + MySqlLexerJSON_DEPTH = 255 + MySqlLexerJSON_EXTRACT = 256 + MySqlLexerJSON_INSERT = 257 + MySqlLexerJSON_KEYS = 258 + MySqlLexerJSON_LENGTH = 259 + MySqlLexerJSON_MERGE = 260 + MySqlLexerJSON_MERGE_PATCH = 261 + MySqlLexerJSON_MERGE_PRESERVE = 262 + MySqlLexerJSON_OBJECT = 263 + MySqlLexerJSON_OBJECTAGG = 264 + MySqlLexerJSON_OVERLAPS = 265 + MySqlLexerJSON_PRETTY = 266 + MySqlLexerJSON_QUOTE = 267 + MySqlLexerJSON_REMOVE = 268 + MySqlLexerJSON_REPLACE = 269 + MySqlLexerJSON_SCHEMA_VALID = 270 + MySqlLexerJSON_SCHEMA_VALIDATION_REPORT = 271 + MySqlLexerJSON_SEARCH = 272 + MySqlLexerJSON_SET = 273 + MySqlLexerJSON_STORAGE_FREE = 274 + MySqlLexerJSON_STORAGE_SIZE = 275 + MySqlLexerJSON_TABLE = 276 + MySqlLexerJSON_TYPE = 277 + MySqlLexerJSON_UNQUOTE = 278 + MySqlLexerJSON_VALID = 279 + MySqlLexerJSON_VALUE = 280 + MySqlLexerNESTED = 281 + MySqlLexerORDINALITY = 282 + MySqlLexerPATH = 283 + MySqlLexerAVG = 284 + MySqlLexerBIT_AND = 285 + MySqlLexerBIT_OR = 286 + MySqlLexerBIT_XOR = 287 + MySqlLexerCOUNT = 288 + MySqlLexerCUME_DIST = 289 + MySqlLexerDENSE_RANK = 290 + MySqlLexerFIRST_VALUE = 291 + MySqlLexerGROUP_CONCAT = 292 + MySqlLexerLAG = 293 + MySqlLexerLAST_VALUE = 294 + MySqlLexerLEAD = 295 + MySqlLexerMAX = 296 + MySqlLexerMIN = 297 + MySqlLexerNTILE = 298 + MySqlLexerNTH_VALUE = 299 + MySqlLexerPERCENT_RANK = 300 + MySqlLexerRANK = 301 + MySqlLexerROW_NUMBER = 302 + MySqlLexerSTD = 303 + MySqlLexerSTDDEV = 304 + MySqlLexerSTDDEV_POP = 305 + MySqlLexerSTDDEV_SAMP = 306 + MySqlLexerSUM = 307 + MySqlLexerVAR_POP = 308 + MySqlLexerVAR_SAMP = 309 + MySqlLexerVARIANCE = 310 + MySqlLexerCURRENT_DATE = 311 + MySqlLexerCURRENT_TIME = 312 + MySqlLexerCURRENT_TIMESTAMP = 313 + MySqlLexerLOCALTIME = 314 + MySqlLexerCURDATE = 315 + MySqlLexerCURTIME = 316 + MySqlLexerDATE_ADD = 317 + MySqlLexerDATE_SUB = 318 + MySqlLexerEXTRACT = 319 + MySqlLexerLOCALTIMESTAMP = 320 + MySqlLexerNOW = 321 + MySqlLexerPOSITION = 322 + MySqlLexerSUBSTR = 323 + MySqlLexerSUBSTRING = 324 + MySqlLexerSYSDATE = 325 + MySqlLexerTRIM = 326 + MySqlLexerUTC_DATE = 327 + MySqlLexerUTC_TIME = 328 + MySqlLexerUTC_TIMESTAMP = 329 + MySqlLexerACCOUNT = 330 + MySqlLexerACTION = 331 + MySqlLexerAFTER = 332 + MySqlLexerAGGREGATE = 333 + MySqlLexerALGORITHM = 334 + MySqlLexerANY = 335 + MySqlLexerAT = 336 + MySqlLexerAUTHORS = 337 + MySqlLexerAUTOCOMMIT = 338 + MySqlLexerAUTOEXTEND_SIZE = 339 + MySqlLexerAUTO_INCREMENT = 340 + MySqlLexerAVG_ROW_LENGTH = 341 + MySqlLexerBEGIN = 342 + MySqlLexerBINLOG = 343 + MySqlLexerBIT = 344 + MySqlLexerBLOCK = 345 + MySqlLexerBOOL = 346 + MySqlLexerBOOLEAN = 347 + MySqlLexerBTREE = 348 + MySqlLexerCACHE = 349 + MySqlLexerCASCADED = 350 + MySqlLexerCHAIN = 351 + MySqlLexerCHANGED = 352 + MySqlLexerCHANNEL = 353 + MySqlLexerCHECKSUM = 354 + MySqlLexerPAGE_CHECKSUM = 355 + MySqlLexerCIPHER = 356 + MySqlLexerCLASS_ORIGIN = 357 + MySqlLexerCLIENT = 358 + MySqlLexerCLOSE = 359 + MySqlLexerCLUSTERING = 360 + MySqlLexerCOALESCE = 361 + MySqlLexerCODE = 362 + MySqlLexerCOLUMNS = 363 + MySqlLexerCOLUMN_FORMAT = 364 + MySqlLexerCOLUMN_NAME = 365 + MySqlLexerCOMMENT = 366 + MySqlLexerCOMMIT = 367 + MySqlLexerCOMPACT = 368 + MySqlLexerCOMPLETION = 369 + MySqlLexerCOMPRESSED = 370 + MySqlLexerCOMPRESSION = 371 + MySqlLexerCONCURRENT = 372 + MySqlLexerCONNECT = 373 + MySqlLexerCONNECTION = 374 + MySqlLexerCONSISTENT = 375 + MySqlLexerCONSTRAINT_CATALOG = 376 + MySqlLexerCONSTRAINT_SCHEMA = 377 + MySqlLexerCONSTRAINT_NAME = 378 + MySqlLexerCONTAINS = 379 + MySqlLexerCONTEXT = 380 + MySqlLexerCONTRIBUTORS = 381 + MySqlLexerCOPY = 382 + MySqlLexerCPU = 383 + MySqlLexerCYCLE = 384 + MySqlLexerCURSOR_NAME = 385 + MySqlLexerDATA = 386 + MySqlLexerDATAFILE = 387 + MySqlLexerDEALLOCATE = 388 + MySqlLexerDEFAULT_AUTH = 389 + MySqlLexerDEFINER = 390 + MySqlLexerDELAY_KEY_WRITE = 391 + MySqlLexerDES_KEY_FILE = 392 + MySqlLexerDIRECTORY = 393 + MySqlLexerDISABLE = 394 + MySqlLexerDISCARD = 395 + MySqlLexerDISK = 396 + MySqlLexerDO = 397 + MySqlLexerDUMPFILE = 398 + MySqlLexerDUPLICATE = 399 + MySqlLexerDYNAMIC = 400 + MySqlLexerENABLE = 401 + MySqlLexerENCRYPTED = 402 + MySqlLexerENCRYPTION = 403 + MySqlLexerENCRYPTION_KEY_ID = 404 + MySqlLexerEND = 405 + MySqlLexerENDS = 406 + MySqlLexerENGINE = 407 + MySqlLexerENGINES = 408 + MySqlLexerERROR = 409 + MySqlLexerERRORS = 410 + MySqlLexerESCAPE = 411 + MySqlLexerEVEN = 412 + MySqlLexerEVENT = 413 + MySqlLexerEVENTS = 414 + MySqlLexerEVERY = 415 + MySqlLexerEXCHANGE = 416 + MySqlLexerEXCLUSIVE = 417 + MySqlLexerEXPIRE = 418 + MySqlLexerEXPORT = 419 + MySqlLexerEXTENDED = 420 + MySqlLexerEXTENT_SIZE = 421 + MySqlLexerFAILED_LOGIN_ATTEMPTS = 422 + MySqlLexerFAST = 423 + MySqlLexerFAULTS = 424 + MySqlLexerFIELDS = 425 + MySqlLexerFILE_BLOCK_SIZE = 426 + MySqlLexerFILTER = 427 + MySqlLexerFIRST = 428 + MySqlLexerFIXED = 429 + MySqlLexerFLUSH = 430 + MySqlLexerFOLLOWING = 431 + MySqlLexerFOLLOWS = 432 + MySqlLexerFOUND = 433 + MySqlLexerFULL = 434 + MySqlLexerFUNCTION = 435 + MySqlLexerGENERAL = 436 + MySqlLexerGLOBAL = 437 + MySqlLexerGRANTS = 438 + MySqlLexerGROUP_REPLICATION = 439 + MySqlLexerHANDLER = 440 + MySqlLexerHASH = 441 + MySqlLexerHELP = 442 + MySqlLexerHISTORY = 443 + MySqlLexerHOST = 444 + MySqlLexerHOSTS = 445 + MySqlLexerIDENTIFIED = 446 + MySqlLexerIGNORE_SERVER_IDS = 447 + MySqlLexerIMPORT = 448 + MySqlLexerINCREMENT = 449 + MySqlLexerINDEXES = 450 + MySqlLexerINITIAL_SIZE = 451 + MySqlLexerINPLACE = 452 + MySqlLexerINSERT_METHOD = 453 + MySqlLexerINSTALL = 454 + MySqlLexerINSTANCE = 455 + MySqlLexerINSTANT = 456 + MySqlLexerINVISIBLE = 457 + MySqlLexerINVOKER = 458 + MySqlLexerIO = 459 + MySqlLexerIO_THREAD = 460 + MySqlLexerIPC = 461 + MySqlLexerISOLATION = 462 + MySqlLexerISSUER = 463 + MySqlLexerJSON = 464 + MySqlLexerKEY_BLOCK_SIZE = 465 + MySqlLexerLANGUAGE = 466 + MySqlLexerLAST = 467 + MySqlLexerLEAVES = 468 + MySqlLexerLESS = 469 + MySqlLexerLEVEL = 470 + MySqlLexerLIST = 471 + MySqlLexerLOCAL = 472 + MySqlLexerLOGFILE = 473 + MySqlLexerLOGS = 474 + MySqlLexerMASTER = 475 + MySqlLexerMASTER_AUTO_POSITION = 476 + MySqlLexerMASTER_CONNECT_RETRY = 477 + MySqlLexerMASTER_DELAY = 478 + MySqlLexerMASTER_HEARTBEAT_PERIOD = 479 + MySqlLexerMASTER_HOST = 480 + MySqlLexerMASTER_LOG_FILE = 481 + MySqlLexerMASTER_LOG_POS = 482 + MySqlLexerMASTER_PASSWORD = 483 + MySqlLexerMASTER_PORT = 484 + MySqlLexerMASTER_RETRY_COUNT = 485 + MySqlLexerMASTER_SSL = 486 + MySqlLexerMASTER_SSL_CA = 487 + MySqlLexerMASTER_SSL_CAPATH = 488 + MySqlLexerMASTER_SSL_CERT = 489 + MySqlLexerMASTER_SSL_CIPHER = 490 + MySqlLexerMASTER_SSL_CRL = 491 + MySqlLexerMASTER_SSL_CRLPATH = 492 + MySqlLexerMASTER_SSL_KEY = 493 + MySqlLexerMASTER_TLS_VERSION = 494 + MySqlLexerMASTER_USER = 495 + MySqlLexerMAX_CONNECTIONS_PER_HOUR = 496 + MySqlLexerMAX_QUERIES_PER_HOUR = 497 + MySqlLexerMAX_ROWS = 498 + MySqlLexerMAX_SIZE = 499 + MySqlLexerMAX_UPDATES_PER_HOUR = 500 + MySqlLexerMAX_USER_CONNECTIONS = 501 + MySqlLexerMEDIUM = 502 + MySqlLexerMEMBER = 503 + MySqlLexerMERGE = 504 + MySqlLexerMESSAGE_TEXT = 505 + MySqlLexerMID = 506 + MySqlLexerMIGRATE = 507 + MySqlLexerMIN_ROWS = 508 + MySqlLexerMODE = 509 + MySqlLexerMODIFY = 510 + MySqlLexerMUTEX = 511 + MySqlLexerMYSQL = 512 + MySqlLexerMYSQL_ERRNO = 513 + MySqlLexerNAME = 514 + MySqlLexerNAMES = 515 + MySqlLexerNCHAR = 516 + MySqlLexerNEVER = 517 + MySqlLexerNEXT = 518 + MySqlLexerNO = 519 + MySqlLexerNOCACHE = 520 + MySqlLexerNOCOPY = 521 + MySqlLexerNOCYCLE = 522 + MySqlLexerNOMAXVALUE = 523 + MySqlLexerNOMINVALUE = 524 + MySqlLexerNOWAIT = 525 + MySqlLexerNODEGROUP = 526 + MySqlLexerNONE = 527 + MySqlLexerODBC = 528 + MySqlLexerOFFLINE = 529 + MySqlLexerOFFSET = 530 + MySqlLexerOF = 531 + MySqlLexerOJ = 532 + MySqlLexerOLD_PASSWORD = 533 + MySqlLexerONE = 534 + MySqlLexerONLINE = 535 + MySqlLexerONLY = 536 + MySqlLexerOPEN = 537 + MySqlLexerOPTIMIZER_COSTS = 538 + MySqlLexerOPTIONS = 539 + MySqlLexerOWNER = 540 + MySqlLexerPACK_KEYS = 541 + MySqlLexerPAGE = 542 + MySqlLexerPAGE_COMPRESSED = 543 + MySqlLexerPAGE_COMPRESSION_LEVEL = 544 + MySqlLexerPARSER = 545 + MySqlLexerPARTIAL = 546 + MySqlLexerPARTITIONING = 547 + MySqlLexerPARTITIONS = 548 + MySqlLexerPASSWORD = 549 + MySqlLexerPASSWORD_LOCK_TIME = 550 + MySqlLexerPHASE = 551 + MySqlLexerPLUGIN = 552 + MySqlLexerPLUGIN_DIR = 553 + MySqlLexerPLUGINS = 554 + MySqlLexerPORT = 555 + MySqlLexerPRECEDES = 556 + MySqlLexerPRECEDING = 557 + MySqlLexerPREPARE = 558 + MySqlLexerPRESERVE = 559 + MySqlLexerPREV = 560 + MySqlLexerPROCESSLIST = 561 + MySqlLexerPROFILE = 562 + MySqlLexerPROFILES = 563 + MySqlLexerPROXY = 564 + MySqlLexerQUERY = 565 + MySqlLexerQUICK = 566 + MySqlLexerREBUILD = 567 + MySqlLexerRECOVER = 568 + MySqlLexerRECURSIVE = 569 + MySqlLexerREDO_BUFFER_SIZE = 570 + MySqlLexerREDUNDANT = 571 + MySqlLexerRELAY = 572 + MySqlLexerRELAY_LOG_FILE = 573 + MySqlLexerRELAY_LOG_POS = 574 + MySqlLexerRELAYLOG = 575 + MySqlLexerREMOVE = 576 + MySqlLexerREORGANIZE = 577 + MySqlLexerREPAIR = 578 + MySqlLexerREPLICATE_DO_DB = 579 + MySqlLexerREPLICATE_DO_TABLE = 580 + MySqlLexerREPLICATE_IGNORE_DB = 581 + MySqlLexerREPLICATE_IGNORE_TABLE = 582 + MySqlLexerREPLICATE_REWRITE_DB = 583 + MySqlLexerREPLICATE_WILD_DO_TABLE = 584 + MySqlLexerREPLICATE_WILD_IGNORE_TABLE = 585 + MySqlLexerREPLICATION = 586 + MySqlLexerRESET = 587 + MySqlLexerRESTART = 588 + MySqlLexerRESUME = 589 + MySqlLexerRETURNED_SQLSTATE = 590 + MySqlLexerRETURNING = 591 + MySqlLexerRETURNS = 592 + MySqlLexerREUSE = 593 + MySqlLexerROLE = 594 + MySqlLexerROLLBACK = 595 + MySqlLexerROLLUP = 596 + MySqlLexerROTATE = 597 + MySqlLexerROW = 598 + MySqlLexerROWS = 599 + MySqlLexerROW_FORMAT = 600 + MySqlLexerRTREE = 601 + MySqlLexerSAVEPOINT = 602 + MySqlLexerSCHEDULE = 603 + MySqlLexerSECURITY = 604 + MySqlLexerSEQUENCE = 605 + MySqlLexerSERVER = 606 + MySqlLexerSESSION = 607 + MySqlLexerSHARE = 608 + MySqlLexerSHARED = 609 + MySqlLexerSIGNED = 610 + MySqlLexerSIMPLE = 611 + MySqlLexerSLAVE = 612 + MySqlLexerSLOW = 613 + MySqlLexerSNAPSHOT = 614 + MySqlLexerSOCKET = 615 + MySqlLexerSOME = 616 + MySqlLexerSONAME = 617 + MySqlLexerSOUNDS = 618 + MySqlLexerSOURCE = 619 + MySqlLexerSQL_AFTER_GTIDS = 620 + MySqlLexerSQL_AFTER_MTS_GAPS = 621 + MySqlLexerSQL_BEFORE_GTIDS = 622 + MySqlLexerSQL_BUFFER_RESULT = 623 + MySqlLexerSQL_CACHE = 624 + MySqlLexerSQL_NO_CACHE = 625 + MySqlLexerSQL_THREAD = 626 + MySqlLexerSTART = 627 + MySqlLexerSTARTS = 628 + MySqlLexerSTATS_AUTO_RECALC = 629 + MySqlLexerSTATS_PERSISTENT = 630 + MySqlLexerSTATS_SAMPLE_PAGES = 631 + MySqlLexerSTATUS = 632 + MySqlLexerSTOP = 633 + MySqlLexerSTORAGE = 634 + MySqlLexerSTORED = 635 + MySqlLexerSTRING = 636 + MySqlLexerSUBCLASS_ORIGIN = 637 + MySqlLexerSUBJECT = 638 + MySqlLexerSUBPARTITION = 639 + MySqlLexerSUBPARTITIONS = 640 + MySqlLexerSUSPEND = 641 + MySqlLexerSWAPS = 642 + MySqlLexerSWITCHES = 643 + MySqlLexerTABLE_NAME = 644 + MySqlLexerTABLESPACE = 645 + MySqlLexerTABLE_TYPE = 646 + MySqlLexerTEMPORARY = 647 + MySqlLexerTEMPTABLE = 648 + MySqlLexerTHAN = 649 + MySqlLexerTRADITIONAL = 650 + MySqlLexerTRANSACTION = 651 + MySqlLexerTRANSACTIONAL = 652 + MySqlLexerTRIGGERS = 653 + MySqlLexerTRUNCATE = 654 + MySqlLexerUNBOUNDED = 655 + MySqlLexerUNDEFINED = 656 + MySqlLexerUNDOFILE = 657 + MySqlLexerUNDO_BUFFER_SIZE = 658 + MySqlLexerUNINSTALL = 659 + MySqlLexerUNKNOWN = 660 + MySqlLexerUNTIL = 661 + MySqlLexerUPGRADE = 662 + MySqlLexerUSER = 663 + MySqlLexerUSE_FRM = 664 + MySqlLexerUSER_RESOURCES = 665 + MySqlLexerVALIDATION = 666 + MySqlLexerVALUE = 667 + MySqlLexerVARIABLES = 668 + MySqlLexerVIEW = 669 + MySqlLexerVIRTUAL = 670 + MySqlLexerVISIBLE = 671 + MySqlLexerWAIT = 672 + MySqlLexerWARNINGS = 673 + MySqlLexerWINDOW = 674 + MySqlLexerWITHOUT = 675 + MySqlLexerWORK = 676 + MySqlLexerWRAPPER = 677 + MySqlLexerX509 = 678 + MySqlLexerXA = 679 + MySqlLexerXML = 680 + MySqlLexerYES = 681 + MySqlLexerEUR = 682 + MySqlLexerUSA = 683 + MySqlLexerJIS = 684 + MySqlLexerISO = 685 + MySqlLexerINTERNAL = 686 + MySqlLexerQUARTER = 687 + MySqlLexerMONTH = 688 + MySqlLexerDAY = 689 + MySqlLexerHOUR = 690 + MySqlLexerMINUTE = 691 + MySqlLexerWEEK = 692 + MySqlLexerSECOND = 693 + MySqlLexerMICROSECOND = 694 + MySqlLexerADMIN = 695 + MySqlLexerAPPLICATION_PASSWORD_ADMIN = 696 + MySqlLexerAUDIT_ADMIN = 697 + MySqlLexerBACKUP_ADMIN = 698 + MySqlLexerBINLOG_ADMIN = 699 + MySqlLexerBINLOG_ENCRYPTION_ADMIN = 700 + MySqlLexerCLONE_ADMIN = 701 + MySqlLexerCONNECTION_ADMIN = 702 + MySqlLexerENCRYPTION_KEY_ADMIN = 703 + MySqlLexerEXECUTE = 704 + MySqlLexerFILE = 705 + MySqlLexerFIREWALL_ADMIN = 706 + MySqlLexerFIREWALL_USER = 707 + MySqlLexerFLUSH_OPTIMIZER_COSTS = 708 + MySqlLexerFLUSH_STATUS = 709 + MySqlLexerFLUSH_TABLES = 710 + MySqlLexerFLUSH_USER_RESOURCES = 711 + MySqlLexerGROUP_REPLICATION_ADMIN = 712 + MySqlLexerINNODB_REDO_LOG_ARCHIVE = 713 + MySqlLexerINNODB_REDO_LOG_ENABLE = 714 + MySqlLexerINVOKE = 715 + MySqlLexerLAMBDA = 716 + MySqlLexerNDB_STORED_USER = 717 + MySqlLexerPASSWORDLESS_USER_ADMIN = 718 + MySqlLexerPERSIST_RO_VARIABLES_ADMIN = 719 + MySqlLexerPRIVILEGES = 720 + MySqlLexerPROCESS = 721 + MySqlLexerRELOAD = 722 + MySqlLexerREPLICATION_APPLIER = 723 + MySqlLexerREPLICATION_SLAVE_ADMIN = 724 + MySqlLexerRESOURCE_GROUP_ADMIN = 725 + MySqlLexerRESOURCE_GROUP_USER = 726 + MySqlLexerROLE_ADMIN = 727 + MySqlLexerROUTINE = 728 + MySqlLexerS3 = 729 + MySqlLexerSERVICE_CONNECTION_ADMIN = 730 + MySqlLexerSESSION_VARIABLES_ADMIN = 731 + MySqlLexerSET_USER_ID = 732 + MySqlLexerSHOW_ROUTINE = 733 + MySqlLexerSHUTDOWN = 734 + MySqlLexerSUPER = 735 + MySqlLexerSYSTEM_VARIABLES_ADMIN = 736 + MySqlLexerTABLES = 737 + MySqlLexerTABLE_ENCRYPTION_ADMIN = 738 + MySqlLexerVERSION_TOKEN_ADMIN = 739 + MySqlLexerXA_RECOVER_ADMIN = 740 + MySqlLexerARMSCII8 = 741 + MySqlLexerASCII = 742 + MySqlLexerBIG5 = 743 + MySqlLexerCP1250 = 744 + MySqlLexerCP1251 = 745 + MySqlLexerCP1256 = 746 + MySqlLexerCP1257 = 747 + MySqlLexerCP850 = 748 + MySqlLexerCP852 = 749 + MySqlLexerCP866 = 750 + MySqlLexerCP932 = 751 + MySqlLexerDEC8 = 752 + MySqlLexerEUCJPMS = 753 + MySqlLexerEUCKR = 754 + MySqlLexerGB18030 = 755 + MySqlLexerGB2312 = 756 + MySqlLexerGBK = 757 + MySqlLexerGEOSTD8 = 758 + MySqlLexerGREEK = 759 + MySqlLexerHEBREW = 760 + MySqlLexerHP8 = 761 + MySqlLexerKEYBCS2 = 762 + MySqlLexerKOI8R = 763 + MySqlLexerKOI8U = 764 + MySqlLexerLATIN1 = 765 + MySqlLexerLATIN2 = 766 + MySqlLexerLATIN5 = 767 + MySqlLexerLATIN7 = 768 + MySqlLexerMACCE = 769 + MySqlLexerMACROMAN = 770 + MySqlLexerSJIS = 771 + MySqlLexerSWE7 = 772 + MySqlLexerTIS620 = 773 + MySqlLexerUCS2 = 774 + MySqlLexerUJIS = 775 + MySqlLexerUTF16 = 776 + MySqlLexerUTF16LE = 777 + MySqlLexerUTF32 = 778 + MySqlLexerUTF8 = 779 + MySqlLexerUTF8MB3 = 780 + MySqlLexerUTF8MB4 = 781 + MySqlLexerARCHIVE = 782 + MySqlLexerBLACKHOLE = 783 + MySqlLexerCSV = 784 + MySqlLexerFEDERATED = 785 + MySqlLexerINNODB = 786 + MySqlLexerMEMORY = 787 + MySqlLexerMRG_MYISAM = 788 + MySqlLexerMYISAM = 789 + MySqlLexerNDB = 790 + MySqlLexerNDBCLUSTER = 791 + MySqlLexerPERFORMANCE_SCHEMA = 792 + MySqlLexerTOKUDB = 793 + MySqlLexerREPEATABLE = 794 + MySqlLexerCOMMITTED = 795 + MySqlLexerUNCOMMITTED = 796 + MySqlLexerSERIALIZABLE = 797 + MySqlLexerGEOMETRYCOLLECTION = 798 + MySqlLexerGEOMCOLLECTION = 799 + MySqlLexerGEOMETRY = 800 + MySqlLexerLINESTRING = 801 + MySqlLexerMULTILINESTRING = 802 + MySqlLexerMULTIPOINT = 803 + MySqlLexerMULTIPOLYGON = 804 + MySqlLexerPOINT = 805 + MySqlLexerPOLYGON = 806 + MySqlLexerABS = 807 + MySqlLexerACOS = 808 + MySqlLexerADDDATE = 809 + MySqlLexerADDTIME = 810 + MySqlLexerAES_DECRYPT = 811 + MySqlLexerAES_ENCRYPT = 812 + MySqlLexerAREA = 813 + MySqlLexerASBINARY = 814 + MySqlLexerASIN = 815 + MySqlLexerASTEXT = 816 + MySqlLexerASWKB = 817 + MySqlLexerASWKT = 818 + MySqlLexerASYMMETRIC_DECRYPT = 819 + MySqlLexerASYMMETRIC_DERIVE = 820 + MySqlLexerASYMMETRIC_ENCRYPT = 821 + MySqlLexerASYMMETRIC_SIGN = 822 + MySqlLexerASYMMETRIC_VERIFY = 823 + MySqlLexerATAN = 824 + MySqlLexerATAN2 = 825 + MySqlLexerBENCHMARK = 826 + MySqlLexerBIN = 827 + MySqlLexerBIT_COUNT = 828 + MySqlLexerBIT_LENGTH = 829 + MySqlLexerBUFFER = 830 + MySqlLexerCATALOG_NAME = 831 + MySqlLexerCEIL = 832 + MySqlLexerCEILING = 833 + MySqlLexerCENTROID = 834 + MySqlLexerCHARACTER_LENGTH = 835 + MySqlLexerCHARSET = 836 + MySqlLexerCHAR_LENGTH = 837 + MySqlLexerCOERCIBILITY = 838 + MySqlLexerCOLLATION = 839 + MySqlLexerCOMPRESS = 840 + MySqlLexerCONCAT = 841 + MySqlLexerCONCAT_WS = 842 + MySqlLexerCONNECTION_ID = 843 + MySqlLexerCONV = 844 + MySqlLexerCONVERT_TZ = 845 + MySqlLexerCOS = 846 + MySqlLexerCOT = 847 + MySqlLexerCRC32 = 848 + MySqlLexerCREATE_ASYMMETRIC_PRIV_KEY = 849 + MySqlLexerCREATE_ASYMMETRIC_PUB_KEY = 850 + MySqlLexerCREATE_DH_PARAMETERS = 851 + MySqlLexerCREATE_DIGEST = 852 + MySqlLexerCROSSES = 853 + MySqlLexerDATEDIFF = 854 + MySqlLexerDATE_FORMAT = 855 + MySqlLexerDAYNAME = 856 + MySqlLexerDAYOFMONTH = 857 + MySqlLexerDAYOFWEEK = 858 + MySqlLexerDAYOFYEAR = 859 + MySqlLexerDECODE = 860 + MySqlLexerDEGREES = 861 + MySqlLexerDES_DECRYPT = 862 + MySqlLexerDES_ENCRYPT = 863 + MySqlLexerDIMENSION = 864 + MySqlLexerDISJOINT = 865 + MySqlLexerELT = 866 + MySqlLexerENCODE = 867 + MySqlLexerENCRYPT = 868 + MySqlLexerENDPOINT = 869 + MySqlLexerENGINE_ATTRIBUTE = 870 + MySqlLexerENVELOPE = 871 + MySqlLexerEQUALS = 872 + MySqlLexerEXP = 873 + MySqlLexerEXPORT_SET = 874 + MySqlLexerEXTERIORRING = 875 + MySqlLexerEXTRACTVALUE = 876 + MySqlLexerFIELD = 877 + MySqlLexerFIND_IN_SET = 878 + MySqlLexerFLOOR = 879 + MySqlLexerFORMAT = 880 + MySqlLexerFOUND_ROWS = 881 + MySqlLexerFROM_BASE64 = 882 + MySqlLexerFROM_DAYS = 883 + MySqlLexerFROM_UNIXTIME = 884 + MySqlLexerGEOMCOLLFROMTEXT = 885 + MySqlLexerGEOMCOLLFROMWKB = 886 + MySqlLexerGEOMETRYCOLLECTIONFROMTEXT = 887 + MySqlLexerGEOMETRYCOLLECTIONFROMWKB = 888 + MySqlLexerGEOMETRYFROMTEXT = 889 + MySqlLexerGEOMETRYFROMWKB = 890 + MySqlLexerGEOMETRYN = 891 + MySqlLexerGEOMETRYTYPE = 892 + MySqlLexerGEOMFROMTEXT = 893 + MySqlLexerGEOMFROMWKB = 894 + MySqlLexerGET_FORMAT = 895 + MySqlLexerGET_LOCK = 896 + MySqlLexerGLENGTH = 897 + MySqlLexerGREATEST = 898 + MySqlLexerGTID_SUBSET = 899 + MySqlLexerGTID_SUBTRACT = 900 + MySqlLexerHEX = 901 + MySqlLexerIFNULL = 902 + MySqlLexerINET6_ATON = 903 + MySqlLexerINET6_NTOA = 904 + MySqlLexerINET_ATON = 905 + MySqlLexerINET_NTOA = 906 + MySqlLexerINSTR = 907 + MySqlLexerINTERIORRINGN = 908 + MySqlLexerINTERSECTS = 909 + MySqlLexerISCLOSED = 910 + MySqlLexerISEMPTY = 911 + MySqlLexerISNULL = 912 + MySqlLexerISSIMPLE = 913 + MySqlLexerIS_FREE_LOCK = 914 + MySqlLexerIS_IPV4 = 915 + MySqlLexerIS_IPV4_COMPAT = 916 + MySqlLexerIS_IPV4_MAPPED = 917 + MySqlLexerIS_IPV6 = 918 + MySqlLexerIS_USED_LOCK = 919 + MySqlLexerLAST_INSERT_ID = 920 + MySqlLexerLCASE = 921 + MySqlLexerLEAST = 922 + MySqlLexerLENGTH = 923 + MySqlLexerLINEFROMTEXT = 924 + MySqlLexerLINEFROMWKB = 925 + MySqlLexerLINESTRINGFROMTEXT = 926 + MySqlLexerLINESTRINGFROMWKB = 927 + MySqlLexerLN = 928 + MySqlLexerLOAD_FILE = 929 + MySqlLexerLOCATE = 930 + MySqlLexerLOG = 931 + MySqlLexerLOG10 = 932 + MySqlLexerLOG2 = 933 + MySqlLexerLOWER = 934 + MySqlLexerLPAD = 935 + MySqlLexerLTRIM = 936 + MySqlLexerMAKEDATE = 937 + MySqlLexerMAKETIME = 938 + MySqlLexerMAKE_SET = 939 + MySqlLexerMASTER_POS_WAIT = 940 + MySqlLexerMBRCONTAINS = 941 + MySqlLexerMBRDISJOINT = 942 + MySqlLexerMBREQUAL = 943 + MySqlLexerMBRINTERSECTS = 944 + MySqlLexerMBROVERLAPS = 945 + MySqlLexerMBRTOUCHES = 946 + MySqlLexerMBRWITHIN = 947 + MySqlLexerMD5 = 948 + MySqlLexerMLINEFROMTEXT = 949 + MySqlLexerMLINEFROMWKB = 950 + MySqlLexerMONTHNAME = 951 + MySqlLexerMPOINTFROMTEXT = 952 + MySqlLexerMPOINTFROMWKB = 953 + MySqlLexerMPOLYFROMTEXT = 954 + MySqlLexerMPOLYFROMWKB = 955 + MySqlLexerMULTILINESTRINGFROMTEXT = 956 + MySqlLexerMULTILINESTRINGFROMWKB = 957 + MySqlLexerMULTIPOINTFROMTEXT = 958 + MySqlLexerMULTIPOINTFROMWKB = 959 + MySqlLexerMULTIPOLYGONFROMTEXT = 960 + MySqlLexerMULTIPOLYGONFROMWKB = 961 + MySqlLexerNAME_CONST = 962 + MySqlLexerNULLIF = 963 + MySqlLexerNUMGEOMETRIES = 964 + MySqlLexerNUMINTERIORRINGS = 965 + MySqlLexerNUMPOINTS = 966 + MySqlLexerOCT = 967 + MySqlLexerOCTET_LENGTH = 968 + MySqlLexerORD = 969 + MySqlLexerOVERLAPS = 970 + MySqlLexerPERIOD_ADD = 971 + MySqlLexerPERIOD_DIFF = 972 + MySqlLexerPI = 973 + MySqlLexerPOINTFROMTEXT = 974 + MySqlLexerPOINTFROMWKB = 975 + MySqlLexerPOINTN = 976 + MySqlLexerPOLYFROMTEXT = 977 + MySqlLexerPOLYFROMWKB = 978 + MySqlLexerPOLYGONFROMTEXT = 979 + MySqlLexerPOLYGONFROMWKB = 980 + MySqlLexerPOW = 981 + MySqlLexerPOWER = 982 + MySqlLexerQUOTE = 983 + MySqlLexerRADIANS = 984 + MySqlLexerRAND = 985 + MySqlLexerRANDOM_BYTES = 986 + MySqlLexerRELEASE_LOCK = 987 + MySqlLexerREVERSE = 988 + MySqlLexerROUND = 989 + MySqlLexerROW_COUNT = 990 + MySqlLexerRPAD = 991 + MySqlLexerRTRIM = 992 + MySqlLexerSEC_TO_TIME = 993 + MySqlLexerSECONDARY_ENGINE_ATTRIBUTE = 994 + MySqlLexerSESSION_USER = 995 + MySqlLexerSHA = 996 + MySqlLexerSHA1 = 997 + MySqlLexerSHA2 = 998 + MySqlLexerSCHEMA_NAME = 999 + MySqlLexerSIGN = 1000 + MySqlLexerSIN = 1001 + MySqlLexerSLEEP = 1002 + MySqlLexerSOUNDEX = 1003 + MySqlLexerSQL_THREAD_WAIT_AFTER_GTIDS = 1004 + MySqlLexerSQRT = 1005 + MySqlLexerSRID = 1006 + MySqlLexerSTARTPOINT = 1007 + MySqlLexerSTRCMP = 1008 + MySqlLexerSTR_TO_DATE = 1009 + MySqlLexerST_AREA = 1010 + MySqlLexerST_ASBINARY = 1011 + MySqlLexerST_ASTEXT = 1012 + MySqlLexerST_ASWKB = 1013 + MySqlLexerST_ASWKT = 1014 + MySqlLexerST_BUFFER = 1015 + MySqlLexerST_CENTROID = 1016 + MySqlLexerST_CONTAINS = 1017 + MySqlLexerST_CROSSES = 1018 + MySqlLexerST_DIFFERENCE = 1019 + MySqlLexerST_DIMENSION = 1020 + MySqlLexerST_DISJOINT = 1021 + MySqlLexerST_DISTANCE = 1022 + MySqlLexerST_ENDPOINT = 1023 + MySqlLexerST_ENVELOPE = 1024 + MySqlLexerST_EQUALS = 1025 + MySqlLexerST_EXTERIORRING = 1026 + MySqlLexerST_GEOMCOLLFROMTEXT = 1027 + MySqlLexerST_GEOMCOLLFROMTXT = 1028 + MySqlLexerST_GEOMCOLLFROMWKB = 1029 + MySqlLexerST_GEOMETRYCOLLECTIONFROMTEXT = 1030 + MySqlLexerST_GEOMETRYCOLLECTIONFROMWKB = 1031 + MySqlLexerST_GEOMETRYFROMTEXT = 1032 + MySqlLexerST_GEOMETRYFROMWKB = 1033 + MySqlLexerST_GEOMETRYN = 1034 + MySqlLexerST_GEOMETRYTYPE = 1035 + MySqlLexerST_GEOMFROMTEXT = 1036 + MySqlLexerST_GEOMFROMWKB = 1037 + MySqlLexerST_INTERIORRINGN = 1038 + MySqlLexerST_INTERSECTION = 1039 + MySqlLexerST_INTERSECTS = 1040 + MySqlLexerST_ISCLOSED = 1041 + MySqlLexerST_ISEMPTY = 1042 + MySqlLexerST_ISSIMPLE = 1043 + MySqlLexerST_LINEFROMTEXT = 1044 + MySqlLexerST_LINEFROMWKB = 1045 + MySqlLexerST_LINESTRINGFROMTEXT = 1046 + MySqlLexerST_LINESTRINGFROMWKB = 1047 + MySqlLexerST_NUMGEOMETRIES = 1048 + MySqlLexerST_NUMINTERIORRING = 1049 + MySqlLexerST_NUMINTERIORRINGS = 1050 + MySqlLexerST_NUMPOINTS = 1051 + MySqlLexerST_OVERLAPS = 1052 + MySqlLexerST_POINTFROMTEXT = 1053 + MySqlLexerST_POINTFROMWKB = 1054 + MySqlLexerST_POINTN = 1055 + MySqlLexerST_POLYFROMTEXT = 1056 + MySqlLexerST_POLYFROMWKB = 1057 + MySqlLexerST_POLYGONFROMTEXT = 1058 + MySqlLexerST_POLYGONFROMWKB = 1059 + MySqlLexerST_SRID = 1060 + MySqlLexerST_STARTPOINT = 1061 + MySqlLexerST_SYMDIFFERENCE = 1062 + MySqlLexerST_TOUCHES = 1063 + MySqlLexerST_UNION = 1064 + MySqlLexerST_WITHIN = 1065 + MySqlLexerST_X = 1066 + MySqlLexerST_Y = 1067 + MySqlLexerSUBDATE = 1068 + MySqlLexerSUBSTRING_INDEX = 1069 + MySqlLexerSUBTIME = 1070 + MySqlLexerSYSTEM_USER = 1071 + MySqlLexerTAN = 1072 + MySqlLexerTIMEDIFF = 1073 + MySqlLexerTIMESTAMPADD = 1074 + MySqlLexerTIMESTAMPDIFF = 1075 + MySqlLexerTIME_FORMAT = 1076 + MySqlLexerTIME_TO_SEC = 1077 + MySqlLexerTOUCHES = 1078 + MySqlLexerTO_BASE64 = 1079 + MySqlLexerTO_DAYS = 1080 + MySqlLexerTO_SECONDS = 1081 + MySqlLexerUCASE = 1082 + MySqlLexerUNCOMPRESS = 1083 + MySqlLexerUNCOMPRESSED_LENGTH = 1084 + MySqlLexerUNHEX = 1085 + MySqlLexerUNIX_TIMESTAMP = 1086 + MySqlLexerUPDATEXML = 1087 + MySqlLexerUPPER = 1088 + MySqlLexerUUID = 1089 + MySqlLexerUUID_SHORT = 1090 + MySqlLexerVALIDATE_PASSWORD_STRENGTH = 1091 + MySqlLexerVERSION = 1092 + MySqlLexerWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 1093 + MySqlLexerWEEKDAY = 1094 + MySqlLexerWEEKOFYEAR = 1095 + MySqlLexerWEIGHT_STRING = 1096 + MySqlLexerWITHIN = 1097 + MySqlLexerYEARWEEK = 1098 + MySqlLexerY_FUNCTION = 1099 + MySqlLexerX_FUNCTION = 1100 + MySqlLexerVAR_ASSIGN = 1101 + MySqlLexerPLUS_ASSIGN = 1102 + MySqlLexerMINUS_ASSIGN = 1103 + MySqlLexerMULT_ASSIGN = 1104 + MySqlLexerDIV_ASSIGN = 1105 + MySqlLexerMOD_ASSIGN = 1106 + MySqlLexerAND_ASSIGN = 1107 + MySqlLexerXOR_ASSIGN = 1108 + MySqlLexerOR_ASSIGN = 1109 + MySqlLexerSTAR = 1110 + MySqlLexerDIVIDE = 1111 + MySqlLexerMODULE = 1112 + MySqlLexerPLUS = 1113 + MySqlLexerMINUS = 1114 + MySqlLexerDIV = 1115 + MySqlLexerMOD = 1116 + MySqlLexerEQUAL_SYMBOL = 1117 + MySqlLexerGREATER_SYMBOL = 1118 + MySqlLexerLESS_SYMBOL = 1119 + MySqlLexerEXCLAMATION_SYMBOL = 1120 + MySqlLexerBIT_NOT_OP = 1121 + MySqlLexerBIT_OR_OP = 1122 + MySqlLexerBIT_AND_OP = 1123 + MySqlLexerBIT_XOR_OP = 1124 + MySqlLexerDOT = 1125 + MySqlLexerLR_BRACKET = 1126 + MySqlLexerRR_BRACKET = 1127 + MySqlLexerCOMMA = 1128 + MySqlLexerSEMI = 1129 + MySqlLexerAT_SIGN = 1130 + MySqlLexerZERO_DECIMAL = 1131 + MySqlLexerONE_DECIMAL = 1132 + MySqlLexerTWO_DECIMAL = 1133 + MySqlLexerSINGLE_QUOTE_SYMB = 1134 + MySqlLexerDOUBLE_QUOTE_SYMB = 1135 + MySqlLexerREVERSE_QUOTE_SYMB = 1136 + MySqlLexerCOLON_SYMB = 1137 + MySqlLexerCHARSET_REVERSE_QOUTE_STRING = 1138 + MySqlLexerFILESIZE_LITERAL = 1139 + MySqlLexerSTART_NATIONAL_STRING_LITERAL = 1140 + MySqlLexerSTRING_LITERAL = 1141 + MySqlLexerDECIMAL_LITERAL = 1142 + MySqlLexerHEXADECIMAL_LITERAL = 1143 + MySqlLexerREAL_LITERAL = 1144 + MySqlLexerNULL_SPEC_LITERAL = 1145 + MySqlLexerBIT_STRING = 1146 + MySqlLexerSTRING_CHARSET_NAME = 1147 + MySqlLexerDOT_ID = 1148 + MySqlLexerID = 1149 + MySqlLexerREVERSE_QUOTE_ID = 1150 + MySqlLexerSTRING_USER_NAME = 1151 + MySqlLexerIP_ADDRESS = 1152 + MySqlLexerLOCAL_ID = 1153 + MySqlLexerGLOBAL_ID = 1154 + MySqlLexerERROR_RECONGNIGION = 1155 +) + +// MySqlLexer escapedChannels. +const ( + MySqlLexerMYSQLCOMMENT = 2 + MySqlLexerERRORCHANNEL = 3 +) diff --git a/internal/mysqld/parser/antlrparser/parser/mysql_parser.go b/internal/mysqld/parser/antlrparser/parser/mysql_parser.go new file mode 100644 index 0000000000..1dd7c80975 --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/mysql_parser.go @@ -0,0 +1,8418 @@ +// Code generated from java-escape by ANTLR 4.11.1. DO NOT EDIT. + +package parser // MySqlParser +import ( + "fmt" + "strconv" + "sync" + + "github.com/antlr/antlr4/runtime/Go/antlr/v4" +) + +// Suppress unused import errors +var _ = fmt.Printf +var _ = strconv.Itoa +var _ = sync.Once{} + +type MySqlParser struct { + *antlr.BaseParser +} + +var mysqlparserParserStaticData struct { + once sync.Once + serializedATN []int32 + literalNames []string + symbolicNames []string + ruleNames []string + predictionContextCache *antlr.PredictionContextCache + atn *antlr.ATN + decisionToDFA []*antlr.DFA +} + +func mysqlparserParserInit() { + staticData := &mysqlparserParserStaticData + staticData.literalNames = []string{ + "", "", "", "", "", "'ADD'", "'ALL'", "'ALTER'", "'ALWAYS'", "'ANALYZE'", + "'AND'", "'ARRAY'", "'AS'", "'ASC'", "'ATTRIBUTE'", "'BEFORE'", "'BETWEEN'", + "'BOTH'", "'BUCKETS'", "'BY'", "'CALL'", "'CASCADE'", "'CASE'", "'CAST'", + "'CHANGE'", "'CHARACTER'", "'CHECK'", "'COLLATE'", "'COLUMN'", "'CONDITION'", + "'CONSTRAINT'", "'CONTINUE'", "'CONVERT'", "'CREATE'", "'CROSS'", "'CURRENT'", + "'CURRENT_ROLE'", "'CURRENT_USER'", "'CURSOR'", "'DATABASE'", "'DATABASES'", + "'DECLARE'", "'DEFAULT'", "'DELAYED'", "'DELETE'", "'DESC'", "'DESCRIBE'", + "'DETERMINISTIC'", "'DIAGNOSTICS'", "'DISTINCT'", "'DISTINCTROW'", "'DROP'", + "'EACH'", "'ELSE'", "'ELSEIF'", "'EMPTY'", "'ENCLOSED'", "'ESCAPED'", + "'EXCEPT'", "'EXISTS'", "'EXIT'", "'EXPLAIN'", "'FALSE'", "'FETCH'", + "'FOR'", "'FORCE'", "'FOREIGN'", "'FROM'", "'FULLTEXT'", "'GENERATED'", + "'GET'", "'GRANT'", "'GROUP'", "'HAVING'", "'HIGH_PRIORITY'", "'HISTOGRAM'", + "'IF'", "'IGNORE'", "'IGNORED'", "'IN'", "'INDEX'", "'INFILE'", "'INNER'", + "'INOUT'", "'INSERT'", "'INTERVAL'", "'INTO'", "'IS'", "'ITERATE'", + "'JOIN'", "'KEY'", "'KEYS'", "'KILL'", "'LATERAL'", "'LEADING'", "'LEAVE'", + "'LEFT'", "'LIKE'", "'LIMIT'", "'LINEAR'", "'LINES'", "'LOAD'", "'LOCK'", + "'LOCKED'", "'LOOP'", "'LOW_PRIORITY'", "'MASTER_BIND'", "'MASTER_SSL_VERIFY_SERVER_CERT'", + "'MATCH'", "'MAXVALUE'", "'MINVALUE'", "'MODIFIES'", "'NATURAL'", "'NOT'", + "'NO_WRITE_TO_BINLOG'", "'NULL'", "'NUMBER'", "'ON'", "'OPTIMIZE'", + "'OPTION'", "'OPTIONAL'", "'OPTIONALLY'", "'OR'", "'ORDER'", "'OUT'", + "'OUTER'", "'OUTFILE'", "'OVER'", "'PARTITION'", "'PRIMARY'", "'PROCEDURE'", + "'PURGE'", "'RANGE'", "'READ'", "'READS'", "'REFERENCES'", "'REGEXP'", + "'RELEASE'", "'RENAME'", "'REPEAT'", "'REPLACE'", "'REQUIRE'", "'RESIGNAL'", + "'RESTRICT'", "'RETAIN'", "'RETURN'", "'REVOKE'", "'RIGHT'", "'RLIKE'", + "'SCHEMA'", "'SCHEMAS'", "'SELECT'", "'SET'", "'SEPARATOR'", "'SHOW'", + "'SIGNAL'", "'SKIP'", "'SPATIAL'", "'SQL'", "'SQLEXCEPTION'", "'SQLSTATE'", + "'SQLWARNING'", "'SQL_BIG_RESULT'", "'SQL_CALC_FOUND_ROWS'", "'SQL_SMALL_RESULT'", + "'SSL'", "'STACKED'", "'STARTING'", "'STATEMENT'", "'STRAIGHT_JOIN'", + "'TABLE'", "'TERMINATED'", "'THEN'", "'TO'", "'TRAILING'", "'TRIGGER'", + "'TRUE'", "'UNDO'", "'UNION'", "'UNIQUE'", "'UNLOCK'", "'UNSIGNED'", + "'UPDATE'", "'USAGE'", "'USE'", "'USING'", "'VALUES'", "'WHEN'", "'WHERE'", + "'WHILE'", "'WITH'", "'WRITE'", "'XOR'", "'ZEROFILL'", "'TINYINT'", + "'SMALLINT'", "'MEDIUMINT'", "'MIDDLEINT'", "'INT'", "'INT1'", "'INT2'", + "'INT3'", "'INT4'", "'INT8'", "'INTEGER'", "'BIGINT'", "'REAL'", "'DOUBLE'", + "'PRECISION'", "'FLOAT'", "'FLOAT4'", "'FLOAT8'", "'DECIMAL'", "'DEC'", + "'NUMERIC'", "'DATE'", "'TIME'", "'TIMESTAMP'", "'DATETIME'", "'YEAR'", + "'CHAR'", "'VARCHAR'", "'NVARCHAR'", "'NATIONAL'", "'BINARY'", "'VARBINARY'", + "'TINYBLOB'", "'BLOB'", "'MEDIUMBLOB'", "'LONG'", "'LONGBLOB'", "'TINYTEXT'", + "'TEXT'", "'MEDIUMTEXT'", "'LONGTEXT'", "'ENUM'", "'VARYING'", "'SERIAL'", + "'YEAR_MONTH'", "'DAY_HOUR'", "'DAY_MINUTE'", "'DAY_SECOND'", "'HOUR_MINUTE'", + "'HOUR_SECOND'", "'MINUTE_SECOND'", "'SECOND_MICROSECOND'", "'MINUTE_MICROSECOND'", + "'HOUR_MICROSECOND'", "'DAY_MICROSECOND'", "'JSON_ARRAY'", "'JSON_ARRAYAGG'", + "'JSON_ARRAY_APPEND'", "'JSON_ARRAY_INSERT'", "'JSON_CONTAINS'", "'JSON_CONTAINS_PATH'", + "'JSON_DEPTH'", "'JSON_EXTRACT'", "'JSON_INSERT'", "'JSON_KEYS'", "'JSON_LENGTH'", + "'JSON_MERGE'", "'JSON_MERGE_PATCH'", "'JSON_MERGE_PRESERVE'", "'JSON_OBJECT'", + "'JSON_OBJECTAGG'", "'JSON_OVERLAPS'", "'JSON_PRETTY'", "'JSON_QUOTE'", + "'JSON_REMOVE'", "'JSON_REPLACE'", "'JSON_SCHEMA_VALID'", "'JSON_SCHEMA_VALIDATION_REPORT'", + "'JSON_SEARCH'", "'JSON_SET'", "'JSON_STORAGE_FREE'", "'JSON_STORAGE_SIZE'", + "'JSON_TABLE'", "'JSON_TYPE'", "'JSON_UNQUOTE'", "'JSON_VALID'", "'JSON_VALUE'", + "'NESTED'", "'ORDINALITY'", "'PATH'", "'AVG'", "'BIT_AND'", "'BIT_OR'", + "'BIT_XOR'", "'COUNT'", "'CUME_DIST'", "'DENSE_RANK'", "'FIRST_VALUE'", + "'GROUP_CONCAT'", "'LAG'", "'LAST_VALUE'", "'LEAD'", "'MAX'", "'MIN'", + "'NTILE'", "'NTH_VALUE'", "'PERCENT_RANK'", "'RANK'", "'ROW_NUMBER'", + "'STD'", "'STDDEV'", "'STDDEV_POP'", "'STDDEV_SAMP'", "'SUM'", "'VAR_POP'", + "'VAR_SAMP'", "'VARIANCE'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", + "'LOCALTIME'", "'CURDATE'", "'CURTIME'", "'DATE_ADD'", "'DATE_SUB'", + "'EXTRACT'", "'LOCALTIMESTAMP'", "'NOW'", "'POSITION'", "'SUBSTR'", + "'SUBSTRING'", "'SYSDATE'", "'TRIM'", "'UTC_DATE'", "'UTC_TIME'", "'UTC_TIMESTAMP'", + "'ACCOUNT'", "'ACTION'", "'AFTER'", "'AGGREGATE'", "'ALGORITHM'", "'ANY'", + "'AT'", "'AUTHORS'", "'AUTOCOMMIT'", "'AUTOEXTEND_SIZE'", "'AUTO_INCREMENT'", + "'AVG_ROW_LENGTH'", "'BEGIN'", "'BINLOG'", "'BIT'", "'BLOCK'", "'BOOL'", + "'BOOLEAN'", "'BTREE'", "'CACHE'", "'CASCADED'", "'CHAIN'", "'CHANGED'", + "'CHANNEL'", "'CHECKSUM'", "'PAGE_CHECKSUM'", "'CIPHER'", "'CLASS_ORIGIN'", + "'CLIENT'", "'CLOSE'", "'CLUSTERING'", "'COALESCE'", "'CODE'", "'COLUMNS'", + "'COLUMN_FORMAT'", "'COLUMN_NAME'", "'COMMENT'", "'COMMIT'", "'COMPACT'", + "'COMPLETION'", "'COMPRESSED'", "", "'CONCURRENT'", "'CONNECT'", "'CONNECTION'", + "'CONSISTENT'", "'CONSTRAINT_CATALOG'", "'CONSTRAINT_SCHEMA'", "'CONSTRAINT_NAME'", + "'CONTAINS'", "'CONTEXT'", "'CONTRIBUTORS'", "'COPY'", "'CPU'", "'CYCLE'", + "'CURSOR_NAME'", "'DATA'", "'DATAFILE'", "'DEALLOCATE'", "'DEFAULT_AUTH'", + "'DEFINER'", "'DELAY_KEY_WRITE'", "'DES_KEY_FILE'", "'DIRECTORY'", "'DISABLE'", + "'DISCARD'", "'DISK'", "'DO'", "'DUMPFILE'", "'DUPLICATE'", "'DYNAMIC'", + "'ENABLE'", "'ENCRYPTED'", "'ENCRYPTION'", "'ENCRYPTION_KEY_ID'", "'END'", + "'ENDS'", "'ENGINE'", "'ENGINES'", "'ERROR'", "'ERRORS'", "'ESCAPE'", + "'EVEN'", "'EVENT'", "'EVENTS'", "'EVERY'", "'EXCHANGE'", "'EXCLUSIVE'", + "'EXPIRE'", "'EXPORT'", "'EXTENDED'", "'EXTENT_SIZE'", "'FAILED_LOGIN_ATTEMPTS'", + "'FAST'", "'FAULTS'", "'FIELDS'", "'FILE_BLOCK_SIZE'", "'FILTER'", "'FIRST'", + "'FIXED'", "'FLUSH'", "'FOLLOWING'", "'FOLLOWS'", "'FOUND'", "'FULL'", + "'FUNCTION'", "'GENERAL'", "'GLOBAL'", "'GRANTS'", "'GROUP_REPLICATION'", + "'HANDLER'", "'HASH'", "'HELP'", "'HISTORY'", "'HOST'", "'HOSTS'", "'IDENTIFIED'", + "'IGNORE_SERVER_IDS'", "'IMPORT'", "'INCREMENT'", "'INDEXES'", "'INITIAL_SIZE'", + "'INPLACE'", "'INSERT_METHOD'", "'INSTALL'", "'INSTANCE'", "'INSTANT'", + "'INVISIBLE'", "'INVOKER'", "'IO'", "'IO_THREAD'", "'IPC'", "'ISOLATION'", + "'ISSUER'", "'JSON'", "'KEY_BLOCK_SIZE'", "'LANGUAGE'", "'LAST'", "'LEAVES'", + "'LESS'", "'LEVEL'", "'LIST'", "'LOCAL'", "'LOGFILE'", "'LOGS'", "'MASTER'", + "'MASTER_AUTO_POSITION'", "'MASTER_CONNECT_RETRY'", "'MASTER_DELAY'", + "'MASTER_HEARTBEAT_PERIOD'", "'MASTER_HOST'", "'MASTER_LOG_FILE'", "'MASTER_LOG_POS'", + "'MASTER_PASSWORD'", "'MASTER_PORT'", "'MASTER_RETRY_COUNT'", "'MASTER_SSL'", + "'MASTER_SSL_CA'", "'MASTER_SSL_CAPATH'", "'MASTER_SSL_CERT'", "'MASTER_SSL_CIPHER'", + "'MASTER_SSL_CRL'", "'MASTER_SSL_CRLPATH'", "'MASTER_SSL_KEY'", "'MASTER_TLS_VERSION'", + "'MASTER_USER'", "'MAX_CONNECTIONS_PER_HOUR'", "'MAX_QUERIES_PER_HOUR'", + "'MAX_ROWS'", "'MAX_SIZE'", "'MAX_UPDATES_PER_HOUR'", "'MAX_USER_CONNECTIONS'", + "'MEDIUM'", "'MEMBER'", "'MERGE'", "'MESSAGE_TEXT'", "'MID'", "'MIGRATE'", + "'MIN_ROWS'", "'MODE'", "'MODIFY'", "'MUTEX'", "'MYSQL'", "'MYSQL_ERRNO'", + "'NAME'", "'NAMES'", "'NCHAR'", "'NEVER'", "'NEXT'", "'NO'", "'NOCACHE'", + "'NOCOPY'", "'NOCYCLE'", "'NOMAXVALUE'", "'NOMINVALUE'", "'NOWAIT'", + "'NODEGROUP'", "'NONE'", "'ODBC'", "'OFFLINE'", "'OFFSET'", "'OF'", + "'OJ'", "'OLD_PASSWORD'", "'ONE'", "'ONLINE'", "'ONLY'", "'OPEN'", "'OPTIMIZER_COSTS'", + "'OPTIONS'", "'OWNER'", "'PACK_KEYS'", "'PAGE'", "'PAGE_COMPRESSED'", + "'PAGE_COMPRESSION_LEVEL'", "'PARSER'", "'PARTIAL'", "'PARTITIONING'", + "'PARTITIONS'", "'PASSWORD'", "'PASSWORD_LOCK_TIME'", "'PHASE'", "'PLUGIN'", + "'PLUGIN_DIR'", "'PLUGINS'", "'PORT'", "'PRECEDES'", "'PRECEDING'", + "'PREPARE'", "'PRESERVE'", "'PREV'", "'PROCESSLIST'", "'PROFILE'", "'PROFILES'", + "'PROXY'", "'QUERY'", "'QUICK'", "'REBUILD'", "'RECOVER'", "'RECURSIVE'", + "'REDO_BUFFER_SIZE'", "'REDUNDANT'", "'RELAY'", "'RELAY_LOG_FILE'", + "'RELAY_LOG_POS'", "'RELAYLOG'", "'REMOVE'", "'REORGANIZE'", "'REPAIR'", + "'REPLICATE_DO_DB'", "'REPLICATE_DO_TABLE'", "'REPLICATE_IGNORE_DB'", + "'REPLICATE_IGNORE_TABLE'", "'REPLICATE_REWRITE_DB'", "'REPLICATE_WILD_DO_TABLE'", + "'REPLICATE_WILD_IGNORE_TABLE'", "'REPLICATION'", "'RESET'", "'RESTART'", + "'RESUME'", "'RETURNED_SQLSTATE'", "'RETURNING'", "'RETURNS'", "'REUSE'", + "'ROLE'", "'ROLLBACK'", "'ROLLUP'", "'ROTATE'", "'ROW'", "'ROWS'", "'ROW_FORMAT'", + "'RTREE'", "'SAVEPOINT'", "'SCHEDULE'", "'SECURITY'", "'SEQUENCE'", + "'SERVER'", "'SESSION'", "'SHARE'", "'SHARED'", "'SIGNED'", "'SIMPLE'", + "'SLAVE'", "'SLOW'", "'SNAPSHOT'", "'SOCKET'", "'SOME'", "'SONAME'", + "'SOUNDS'", "'SOURCE'", "'SQL_AFTER_GTIDS'", "'SQL_AFTER_MTS_GAPS'", + "'SQL_BEFORE_GTIDS'", "'SQL_BUFFER_RESULT'", "'SQL_CACHE'", "'SQL_NO_CACHE'", + "'SQL_THREAD'", "'START'", "'STARTS'", "'STATS_AUTO_RECALC'", "'STATS_PERSISTENT'", + "'STATS_SAMPLE_PAGES'", "'STATUS'", "'STOP'", "'STORAGE'", "'STORED'", + "'STRING'", "'SUBCLASS_ORIGIN'", "'SUBJECT'", "'SUBPARTITION'", "'SUBPARTITIONS'", + "'SUSPEND'", "'SWAPS'", "'SWITCHES'", "'TABLE_NAME'", "'TABLESPACE'", + "'TABLE_TYPE'", "'TEMPORARY'", "'TEMPTABLE'", "'THAN'", "'TRADITIONAL'", + "'TRANSACTION'", "'TRANSACTIONAL'", "'TRIGGERS'", "'TRUNCATE'", "'UNBOUNDED'", + "'UNDEFINED'", "'UNDOFILE'", "'UNDO_BUFFER_SIZE'", "'UNINSTALL'", "'UNKNOWN'", + "'UNTIL'", "'UPGRADE'", "'USER'", "'USE_FRM'", "'USER_RESOURCES'", "'VALIDATION'", + "'VALUE'", "'VARIABLES'", "'VIEW'", "'VIRTUAL'", "'VISIBLE'", "'WAIT'", + "'WARNINGS'", "'WINDOW'", "'WITHOUT'", "'WORK'", "'WRAPPER'", "'X509'", + "'XA'", "'XML'", "'YES'", "'EUR'", "'USA'", "'JIS'", "'ISO'", "'INTERNAL'", + "'QUARTER'", "'MONTH'", "'DAY'", "'HOUR'", "'MINUTE'", "'WEEK'", "'SECOND'", + "'MICROSECOND'", "'ADMIN'", "'APPLICATION_PASSWORD_ADMIN'", "'AUDIT_ADMIN'", + "'BACKUP_ADMIN'", "'BINLOG_ADMIN'", "'BINLOG_ENCRYPTION_ADMIN'", "'CLONE_ADMIN'", + "'CONNECTION_ADMIN'", "'ENCRYPTION_KEY_ADMIN'", "'EXECUTE'", "'FILE'", + "'FIREWALL_ADMIN'", "'FIREWALL_USER'", "'FLUSH_OPTIMIZER_COSTS'", "'FLUSH_STATUS'", + "'FLUSH_TABLES'", "'FLUSH_USER_RESOURCES'", "'GROUP_REPLICATION_ADMIN'", + "'INNODB_REDO_LOG_ARCHIVE'", "'INNODB_REDO_LOG_ENABLE'", "'INVOKE'", + "'LAMBDA'", "'NDB_STORED_USER'", "'PASSWORDLESS_USER_ADMIN'", "'PERSIST_RO_VARIABLES_ADMIN'", + "'PRIVILEGES'", "'PROCESS'", "'RELOAD'", "'REPLICATION_APPLIER'", "'REPLICATION_SLAVE_ADMIN'", + "'RESOURCE_GROUP_ADMIN'", "'RESOURCE_GROUP_USER'", "'ROLE_ADMIN'", "'ROUTINE'", + "'S3'", "'SERVICE_CONNECTION_ADMIN'", "", "'SET_USER_ID'", "'SHOW_ROUTINE'", + "'SHUTDOWN'", "'SUPER'", "'SYSTEM_VARIABLES_ADMIN'", "'TABLES'", "'TABLE_ENCRYPTION_ADMIN'", + "'VERSION_TOKEN_ADMIN'", "'XA_RECOVER_ADMIN'", "'ARMSCII8'", "'ASCII'", + "'BIG5'", "'CP1250'", "'CP1251'", "'CP1256'", "'CP1257'", "'CP850'", + "'CP852'", "'CP866'", "'CP932'", "'DEC8'", "'EUCJPMS'", "'EUCKR'", "'GB18030'", + "'GB2312'", "'GBK'", "'GEOSTD8'", "'GREEK'", "'HEBREW'", "'HP8'", "'KEYBCS2'", + "'KOI8R'", "'KOI8U'", "'LATIN1'", "'LATIN2'", "'LATIN5'", "'LATIN7'", + "'MACCE'", "'MACROMAN'", "'SJIS'", "'SWE7'", "'TIS620'", "'UCS2'", "'UJIS'", + "'UTF16'", "'UTF16LE'", "'UTF32'", "'UTF8'", "'UTF8MB3'", "'UTF8MB4'", + "'ARCHIVE'", "'BLACKHOLE'", "'CSV'", "'FEDERATED'", "'INNODB'", "'MEMORY'", + "'MRG_MYISAM'", "'MYISAM'", "'NDB'", "'NDBCLUSTER'", "'PERFORMANCE_SCHEMA'", + "'TOKUDB'", "'REPEATABLE'", "'COMMITTED'", "'UNCOMMITTED'", "'SERIALIZABLE'", + "'GEOMETRYCOLLECTION'", "'GEOMCOLLECTION'", "'GEOMETRY'", "'LINESTRING'", + "'MULTILINESTRING'", "'MULTIPOINT'", "'MULTIPOLYGON'", "'POINT'", "'POLYGON'", + "'ABS'", "'ACOS'", "'ADDDATE'", "'ADDTIME'", "'AES_DECRYPT'", "'AES_ENCRYPT'", + "'AREA'", "'ASBINARY'", "'ASIN'", "'ASTEXT'", "'ASWKB'", "'ASWKT'", + "'ASYMMETRIC_DECRYPT'", "'ASYMMETRIC_DERIVE'", "'ASYMMETRIC_ENCRYPT'", + "'ASYMMETRIC_SIGN'", "'ASYMMETRIC_VERIFY'", "'ATAN'", "'ATAN2'", "'BENCHMARK'", + "'BIN'", "'BIT_COUNT'", "'BIT_LENGTH'", "'BUFFER'", "'CATALOG_NAME'", + "'CEIL'", "'CEILING'", "'CENTROID'", "'CHARACTER_LENGTH'", "'CHARSET'", + "'CHAR_LENGTH'", "'COERCIBILITY'", "'COLLATION'", "'COMPRESS'", "'CONCAT'", + "'CONCAT_WS'", "'CONNECTION_ID'", "'CONV'", "'CONVERT_TZ'", "'COS'", + "'COT'", "'CRC32'", "'CREATE_ASYMMETRIC_PRIV_KEY'", "'CREATE_ASYMMETRIC_PUB_KEY'", + "'CREATE_DH_PARAMETERS'", "'CREATE_DIGEST'", "'CROSSES'", "'DATEDIFF'", + "'DATE_FORMAT'", "'DAYNAME'", "'DAYOFMONTH'", "'DAYOFWEEK'", "'DAYOFYEAR'", + "'DECODE'", "'DEGREES'", "'DES_DECRYPT'", "'DES_ENCRYPT'", "'DIMENSION'", + "'DISJOINT'", "'ELT'", "'ENCODE'", "'ENCRYPT'", "'ENDPOINT'", "'ENGINE_ATTRIBUTE'", + "'ENVELOPE'", "'EQUALS'", "'EXP'", "'EXPORT_SET'", "'EXTERIORRING'", + "'EXTRACTVALUE'", "'FIELD'", "'FIND_IN_SET'", "'FLOOR'", "'FORMAT'", + "'FOUND_ROWS'", "'FROM_BASE64'", "'FROM_DAYS'", "'FROM_UNIXTIME'", "'GEOMCOLLFROMTEXT'", + "'GEOMCOLLFROMWKB'", "'GEOMETRYCOLLECTIONFROMTEXT'", "'GEOMETRYCOLLECTIONFROMWKB'", + "'GEOMETRYFROMTEXT'", "'GEOMETRYFROMWKB'", "'GEOMETRYN'", "'GEOMETRYTYPE'", + "'GEOMFROMTEXT'", "'GEOMFROMWKB'", "'GET_FORMAT'", "'GET_LOCK'", "'GLENGTH'", + "'GREATEST'", "'GTID_SUBSET'", "'GTID_SUBTRACT'", "'HEX'", "'IFNULL'", + "'INET6_ATON'", "'INET6_NTOA'", "'INET_ATON'", "'INET_NTOA'", "'INSTR'", + "'INTERIORRINGN'", "'INTERSECTS'", "'ISCLOSED'", "'ISEMPTY'", "'ISNULL'", + "'ISSIMPLE'", "'IS_FREE_LOCK'", "'IS_IPV4'", "'IS_IPV4_COMPAT'", "'IS_IPV4_MAPPED'", + "'IS_IPV6'", "'IS_USED_LOCK'", "'LAST_INSERT_ID'", "'LCASE'", "'LEAST'", + "'LENGTH'", "'LINEFROMTEXT'", "'LINEFROMWKB'", "'LINESTRINGFROMTEXT'", + "'LINESTRINGFROMWKB'", "'LN'", "'LOAD_FILE'", "'LOCATE'", "'LOG'", "'LOG10'", + "'LOG2'", "'LOWER'", "'LPAD'", "'LTRIM'", "'MAKEDATE'", "'MAKETIME'", + "'MAKE_SET'", "'MASTER_POS_WAIT'", "'MBRCONTAINS'", "'MBRDISJOINT'", + "'MBREQUAL'", "'MBRINTERSECTS'", "'MBROVERLAPS'", "'MBRTOUCHES'", "'MBRWITHIN'", + "'MD5'", "'MLINEFROMTEXT'", "'MLINEFROMWKB'", "'MONTHNAME'", "'MPOINTFROMTEXT'", + "'MPOINTFROMWKB'", "'MPOLYFROMTEXT'", "'MPOLYFROMWKB'", "'MULTILINESTRINGFROMTEXT'", + "'MULTILINESTRINGFROMWKB'", "'MULTIPOINTFROMTEXT'", "'MULTIPOINTFROMWKB'", + "'MULTIPOLYGONFROMTEXT'", "'MULTIPOLYGONFROMWKB'", "'NAME_CONST'", "'NULLIF'", + "'NUMGEOMETRIES'", "'NUMINTERIORRINGS'", "'NUMPOINTS'", "'OCT'", "'OCTET_LENGTH'", + "'ORD'", "'OVERLAPS'", "'PERIOD_ADD'", "'PERIOD_DIFF'", "'PI'", "'POINTFROMTEXT'", + "'POINTFROMWKB'", "'POINTN'", "'POLYFROMTEXT'", "'POLYFROMWKB'", "'POLYGONFROMTEXT'", + "'POLYGONFROMWKB'", "'POW'", "'POWER'", "'QUOTE'", "'RADIANS'", "'RAND'", + "'RANDOM_BYTES'", "'RELEASE_LOCK'", "'REVERSE'", "'ROUND'", "'ROW_COUNT'", + "'RPAD'", "'RTRIM'", "'SEC_TO_TIME'", "'SECONDARY_ENGINE_ATTRIBUTE'", + "'SESSION_USER'", "'SHA'", "'SHA1'", "'SHA2'", "'SCHEMA_NAME'", "'SIGN'", + "'SIN'", "'SLEEP'", "'SOUNDEX'", "'SQL_THREAD_WAIT_AFTER_GTIDS'", "'SQRT'", + "'SRID'", "'STARTPOINT'", "'STRCMP'", "'STR_TO_DATE'", "'ST_AREA'", + "'ST_ASBINARY'", "'ST_ASTEXT'", "'ST_ASWKB'", "'ST_ASWKT'", "'ST_BUFFER'", + "'ST_CENTROID'", "'ST_CONTAINS'", "'ST_CROSSES'", "'ST_DIFFERENCE'", + "'ST_DIMENSION'", "'ST_DISJOINT'", "'ST_DISTANCE'", "'ST_ENDPOINT'", + "'ST_ENVELOPE'", "'ST_EQUALS'", "'ST_EXTERIORRING'", "'ST_GEOMCOLLFROMTEXT'", + "'ST_GEOMCOLLFROMTXT'", "'ST_GEOMCOLLFROMWKB'", "'ST_GEOMETRYCOLLECTIONFROMTEXT'", + "'ST_GEOMETRYCOLLECTIONFROMWKB'", "'ST_GEOMETRYFROMTEXT'", "'ST_GEOMETRYFROMWKB'", + "'ST_GEOMETRYN'", "'ST_GEOMETRYTYPE'", "'ST_GEOMFROMTEXT'", "'ST_GEOMFROMWKB'", + "'ST_INTERIORRINGN'", "'ST_INTERSECTION'", "'ST_INTERSECTS'", "'ST_ISCLOSED'", + "'ST_ISEMPTY'", "'ST_ISSIMPLE'", "'ST_LINEFROMTEXT'", "'ST_LINEFROMWKB'", + "'ST_LINESTRINGFROMTEXT'", "'ST_LINESTRINGFROMWKB'", "'ST_NUMGEOMETRIES'", + "'ST_NUMINTERIORRING'", "'ST_NUMINTERIORRINGS'", "'ST_NUMPOINTS'", "'ST_OVERLAPS'", + "'ST_POINTFROMTEXT'", "'ST_POINTFROMWKB'", "'ST_POINTN'", "'ST_POLYFROMTEXT'", + "'ST_POLYFROMWKB'", "'ST_POLYGONFROMTEXT'", "'ST_POLYGONFROMWKB'", "'ST_SRID'", + "'ST_STARTPOINT'", "'ST_SYMDIFFERENCE'", "'ST_TOUCHES'", "'ST_UNION'", + "'ST_WITHIN'", "'ST_X'", "'ST_Y'", "'SUBDATE'", "'SUBSTRING_INDEX'", + "'SUBTIME'", "'SYSTEM_USER'", "'TAN'", "'TIMEDIFF'", "'TIMESTAMPADD'", + "'TIMESTAMPDIFF'", "'TIME_FORMAT'", "'TIME_TO_SEC'", "'TOUCHES'", "'TO_BASE64'", + "'TO_DAYS'", "'TO_SECONDS'", "'UCASE'", "'UNCOMPRESS'", "'UNCOMPRESSED_LENGTH'", + "'UNHEX'", "'UNIX_TIMESTAMP'", "'UPDATEXML'", "'UPPER'", "'UUID'", "'UUID_SHORT'", + "'VALIDATE_PASSWORD_STRENGTH'", "'VERSION'", "'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS'", + "'WEEKDAY'", "'WEEKOFYEAR'", "'WEIGHT_STRING'", "'WITHIN'", "'YEARWEEK'", + "'Y'", "'X'", "':='", "'+='", "'-='", "'*='", "'/='", "'%='", "'&='", + "'^='", "'|='", "'*'", "'/'", "'%'", "'+'", "'-'", "'DIV'", "'MOD'", + "'='", "'>'", "'<'", "'!'", "'~'", "'|'", "'&'", "'^'", "'.'", "'('", + "')'", "','", "';'", "'@'", "'0'", "'1'", "'2'", "'''", "'\"'", "'`'", + "':'", + } + staticData.symbolicNames = []string{ + "", "SPACE", "SPEC_MYSQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", + "ADD", "ALL", "ALTER", "ALWAYS", "ANALYZE", "AND", "ARRAY", "AS", "ASC", + "ATTRIBUTE", "BEFORE", "BETWEEN", "BOTH", "BUCKETS", "BY", "CALL", "CASCADE", + "CASE", "CAST", "CHANGE", "CHARACTER", "CHECK", "COLLATE", "COLUMN", + "CONDITION", "CONSTRAINT", "CONTINUE", "CONVERT", "CREATE", "CROSS", + "CURRENT", "CURRENT_ROLE", "CURRENT_USER", "CURSOR", "DATABASE", "DATABASES", + "DECLARE", "DEFAULT", "DELAYED", "DELETE", "DESC", "DESCRIBE", "DETERMINISTIC", + "DIAGNOSTICS", "DISTINCT", "DISTINCTROW", "DROP", "EACH", "ELSE", "ELSEIF", + "EMPTY", "ENCLOSED", "ESCAPED", "EXCEPT", "EXISTS", "EXIT", "EXPLAIN", + "FALSE", "FETCH", "FOR", "FORCE", "FOREIGN", "FROM", "FULLTEXT", "GENERATED", + "GET", "GRANT", "GROUP", "HAVING", "HIGH_PRIORITY", "HISTOGRAM", "IF", + "IGNORE", "IGNORED", "IN", "INDEX", "INFILE", "INNER", "INOUT", "INSERT", + "INTERVAL", "INTO", "IS", "ITERATE", "JOIN", "KEY", "KEYS", "KILL", + "LATERAL", "LEADING", "LEAVE", "LEFT", "LIKE", "LIMIT", "LINEAR", "LINES", + "LOAD", "LOCK", "LOCKED", "LOOP", "LOW_PRIORITY", "MASTER_BIND", "MASTER_SSL_VERIFY_SERVER_CERT", + "MATCH", "MAXVALUE", "MINVALUE", "MODIFIES", "NATURAL", "NOT", "NO_WRITE_TO_BINLOG", + "NULL_LITERAL", "NUMBER", "ON", "OPTIMIZE", "OPTION", "OPTIONAL", "OPTIONALLY", + "OR", "ORDER", "OUT", "OUTER", "OUTFILE", "OVER", "PARTITION", "PRIMARY", + "PROCEDURE", "PURGE", "RANGE", "READ", "READS", "REFERENCES", "REGEXP", + "RELEASE", "RENAME", "REPEAT", "REPLACE", "REQUIRE", "RESIGNAL", "RESTRICT", + "RETAIN", "RETURN", "REVOKE", "RIGHT", "RLIKE", "SCHEMA", "SCHEMAS", + "SELECT", "SET", "SEPARATOR", "SHOW", "SIGNAL", "SKIP_", "SPATIAL", + "SQL", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", "SQL_BIG_RESULT", "SQL_CALC_FOUND_ROWS", + "SQL_SMALL_RESULT", "SSL", "STACKED", "STARTING", "STATEMENT", "STRAIGHT_JOIN", + "TABLE", "TERMINATED", "THEN", "TO", "TRAILING", "TRIGGER", "TRUE", + "UNDO", "UNION", "UNIQUE", "UNLOCK", "UNSIGNED", "UPDATE", "USAGE", + "USE", "USING", "VALUES", "WHEN", "WHERE", "WHILE", "WITH", "WRITE", + "XOR", "ZEROFILL", "TINYINT", "SMALLINT", "MEDIUMINT", "MIDDLEINT", + "INT", "INT1", "INT2", "INT3", "INT4", "INT8", "INTEGER", "BIGINT", + "REAL", "DOUBLE", "PRECISION", "FLOAT", "FLOAT4", "FLOAT8", "DECIMAL", + "DEC", "NUMERIC", "DATE", "TIME", "TIMESTAMP", "DATETIME", "YEAR", "CHAR", + "VARCHAR", "NVARCHAR", "NATIONAL", "BINARY", "VARBINARY", "TINYBLOB", + "BLOB", "MEDIUMBLOB", "LONG", "LONGBLOB", "TINYTEXT", "TEXT", "MEDIUMTEXT", + "LONGTEXT", "ENUM", "VARYING", "SERIAL", "YEAR_MONTH", "DAY_HOUR", "DAY_MINUTE", + "DAY_SECOND", "HOUR_MINUTE", "HOUR_SECOND", "MINUTE_SECOND", "SECOND_MICROSECOND", + "MINUTE_MICROSECOND", "HOUR_MICROSECOND", "DAY_MICROSECOND", "JSON_ARRAY", + "JSON_ARRAYAGG", "JSON_ARRAY_APPEND", "JSON_ARRAY_INSERT", "JSON_CONTAINS", + "JSON_CONTAINS_PATH", "JSON_DEPTH", "JSON_EXTRACT", "JSON_INSERT", "JSON_KEYS", + "JSON_LENGTH", "JSON_MERGE", "JSON_MERGE_PATCH", "JSON_MERGE_PRESERVE", + "JSON_OBJECT", "JSON_OBJECTAGG", "JSON_OVERLAPS", "JSON_PRETTY", "JSON_QUOTE", + "JSON_REMOVE", "JSON_REPLACE", "JSON_SCHEMA_VALID", "JSON_SCHEMA_VALIDATION_REPORT", + "JSON_SEARCH", "JSON_SET", "JSON_STORAGE_FREE", "JSON_STORAGE_SIZE", + "JSON_TABLE", "JSON_TYPE", "JSON_UNQUOTE", "JSON_VALID", "JSON_VALUE", + "NESTED", "ORDINALITY", "PATH", "AVG", "BIT_AND", "BIT_OR", "BIT_XOR", + "COUNT", "CUME_DIST", "DENSE_RANK", "FIRST_VALUE", "GROUP_CONCAT", "LAG", + "LAST_VALUE", "LEAD", "MAX", "MIN", "NTILE", "NTH_VALUE", "PERCENT_RANK", + "RANK", "ROW_NUMBER", "STD", "STDDEV", "STDDEV_POP", "STDDEV_SAMP", + "SUM", "VAR_POP", "VAR_SAMP", "VARIANCE", "CURRENT_DATE", "CURRENT_TIME", + "CURRENT_TIMESTAMP", "LOCALTIME", "CURDATE", "CURTIME", "DATE_ADD", + "DATE_SUB", "EXTRACT", "LOCALTIMESTAMP", "NOW", "POSITION", "SUBSTR", + "SUBSTRING", "SYSDATE", "TRIM", "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", + "ACCOUNT", "ACTION", "AFTER", "AGGREGATE", "ALGORITHM", "ANY", "AT", + "AUTHORS", "AUTOCOMMIT", "AUTOEXTEND_SIZE", "AUTO_INCREMENT", "AVG_ROW_LENGTH", + "BEGIN", "BINLOG", "BIT", "BLOCK", "BOOL", "BOOLEAN", "BTREE", "CACHE", + "CASCADED", "CHAIN", "CHANGED", "CHANNEL", "CHECKSUM", "PAGE_CHECKSUM", + "CIPHER", "CLASS_ORIGIN", "CLIENT", "CLOSE", "CLUSTERING", "COALESCE", + "CODE", "COLUMNS", "COLUMN_FORMAT", "COLUMN_NAME", "COMMENT", "COMMIT", + "COMPACT", "COMPLETION", "COMPRESSED", "COMPRESSION", "CONCURRENT", + "CONNECT", "CONNECTION", "CONSISTENT", "CONSTRAINT_CATALOG", "CONSTRAINT_SCHEMA", + "CONSTRAINT_NAME", "CONTAINS", "CONTEXT", "CONTRIBUTORS", "COPY", "CPU", + "CYCLE", "CURSOR_NAME", "DATA", "DATAFILE", "DEALLOCATE", "DEFAULT_AUTH", + "DEFINER", "DELAY_KEY_WRITE", "DES_KEY_FILE", "DIRECTORY", "DISABLE", + "DISCARD", "DISK", "DO", "DUMPFILE", "DUPLICATE", "DYNAMIC", "ENABLE", + "ENCRYPTED", "ENCRYPTION", "ENCRYPTION_KEY_ID", "END", "ENDS", "ENGINE", + "ENGINES", "ERROR", "ERRORS", "ESCAPE", "EVEN", "EVENT", "EVENTS", "EVERY", + "EXCHANGE", "EXCLUSIVE", "EXPIRE", "EXPORT", "EXTENDED", "EXTENT_SIZE", + "FAILED_LOGIN_ATTEMPTS", "FAST", "FAULTS", "FIELDS", "FILE_BLOCK_SIZE", + "FILTER", "FIRST", "FIXED", "FLUSH", "FOLLOWING", "FOLLOWS", "FOUND", + "FULL", "FUNCTION", "GENERAL", "GLOBAL", "GRANTS", "GROUP_REPLICATION", + "HANDLER", "HASH", "HELP", "HISTORY", "HOST", "HOSTS", "IDENTIFIED", + "IGNORE_SERVER_IDS", "IMPORT", "INCREMENT", "INDEXES", "INITIAL_SIZE", + "INPLACE", "INSERT_METHOD", "INSTALL", "INSTANCE", "INSTANT", "INVISIBLE", + "INVOKER", "IO", "IO_THREAD", "IPC", "ISOLATION", "ISSUER", "JSON", + "KEY_BLOCK_SIZE", "LANGUAGE", "LAST", "LEAVES", "LESS", "LEVEL", "LIST", + "LOCAL", "LOGFILE", "LOGS", "MASTER", "MASTER_AUTO_POSITION", "MASTER_CONNECT_RETRY", + "MASTER_DELAY", "MASTER_HEARTBEAT_PERIOD", "MASTER_HOST", "MASTER_LOG_FILE", + "MASTER_LOG_POS", "MASTER_PASSWORD", "MASTER_PORT", "MASTER_RETRY_COUNT", + "MASTER_SSL", "MASTER_SSL_CA", "MASTER_SSL_CAPATH", "MASTER_SSL_CERT", + "MASTER_SSL_CIPHER", "MASTER_SSL_CRL", "MASTER_SSL_CRLPATH", "MASTER_SSL_KEY", + "MASTER_TLS_VERSION", "MASTER_USER", "MAX_CONNECTIONS_PER_HOUR", "MAX_QUERIES_PER_HOUR", + "MAX_ROWS", "MAX_SIZE", "MAX_UPDATES_PER_HOUR", "MAX_USER_CONNECTIONS", + "MEDIUM", "MEMBER", "MERGE", "MESSAGE_TEXT", "MID", "MIGRATE", "MIN_ROWS", + "MODE", "MODIFY", "MUTEX", "MYSQL", "MYSQL_ERRNO", "NAME", "NAMES", + "NCHAR", "NEVER", "NEXT", "NO", "NOCACHE", "NOCOPY", "NOCYCLE", "NOMAXVALUE", + "NOMINVALUE", "NOWAIT", "NODEGROUP", "NONE", "ODBC", "OFFLINE", "OFFSET", + "OF", "OJ", "OLD_PASSWORD", "ONE", "ONLINE", "ONLY", "OPEN", "OPTIMIZER_COSTS", + "OPTIONS", "OWNER", "PACK_KEYS", "PAGE", "PAGE_COMPRESSED", "PAGE_COMPRESSION_LEVEL", + "PARSER", "PARTIAL", "PARTITIONING", "PARTITIONS", "PASSWORD", "PASSWORD_LOCK_TIME", + "PHASE", "PLUGIN", "PLUGIN_DIR", "PLUGINS", "PORT", "PRECEDES", "PRECEDING", + "PREPARE", "PRESERVE", "PREV", "PROCESSLIST", "PROFILE", "PROFILES", + "PROXY", "QUERY", "QUICK", "REBUILD", "RECOVER", "RECURSIVE", "REDO_BUFFER_SIZE", + "REDUNDANT", "RELAY", "RELAY_LOG_FILE", "RELAY_LOG_POS", "RELAYLOG", + "REMOVE", "REORGANIZE", "REPAIR", "REPLICATE_DO_DB", "REPLICATE_DO_TABLE", + "REPLICATE_IGNORE_DB", "REPLICATE_IGNORE_TABLE", "REPLICATE_REWRITE_DB", + "REPLICATE_WILD_DO_TABLE", "REPLICATE_WILD_IGNORE_TABLE", "REPLICATION", + "RESET", "RESTART", "RESUME", "RETURNED_SQLSTATE", "RETURNING", "RETURNS", + "REUSE", "ROLE", "ROLLBACK", "ROLLUP", "ROTATE", "ROW", "ROWS", "ROW_FORMAT", + "RTREE", "SAVEPOINT", "SCHEDULE", "SECURITY", "SEQUENCE", "SERVER", + "SESSION", "SHARE", "SHARED", "SIGNED", "SIMPLE", "SLAVE", "SLOW", "SNAPSHOT", + "SOCKET", "SOME", "SONAME", "SOUNDS", "SOURCE", "SQL_AFTER_GTIDS", "SQL_AFTER_MTS_GAPS", + "SQL_BEFORE_GTIDS", "SQL_BUFFER_RESULT", "SQL_CACHE", "SQL_NO_CACHE", + "SQL_THREAD", "START", "STARTS", "STATS_AUTO_RECALC", "STATS_PERSISTENT", + "STATS_SAMPLE_PAGES", "STATUS", "STOP", "STORAGE", "STORED", "STRING", + "SUBCLASS_ORIGIN", "SUBJECT", "SUBPARTITION", "SUBPARTITIONS", "SUSPEND", + "SWAPS", "SWITCHES", "TABLE_NAME", "TABLESPACE", "TABLE_TYPE", "TEMPORARY", + "TEMPTABLE", "THAN", "TRADITIONAL", "TRANSACTION", "TRANSACTIONAL", + "TRIGGERS", "TRUNCATE", "UNBOUNDED", "UNDEFINED", "UNDOFILE", "UNDO_BUFFER_SIZE", + "UNINSTALL", "UNKNOWN", "UNTIL", "UPGRADE", "USER", "USE_FRM", "USER_RESOURCES", + "VALIDATION", "VALUE", "VARIABLES", "VIEW", "VIRTUAL", "VISIBLE", "WAIT", + "WARNINGS", "WINDOW", "WITHOUT", "WORK", "WRAPPER", "X509", "XA", "XML", + "YES", "EUR", "USA", "JIS", "ISO", "INTERNAL", "QUARTER", "MONTH", "DAY", + "HOUR", "MINUTE", "WEEK", "SECOND", "MICROSECOND", "ADMIN", "APPLICATION_PASSWORD_ADMIN", + "AUDIT_ADMIN", "BACKUP_ADMIN", "BINLOG_ADMIN", "BINLOG_ENCRYPTION_ADMIN", + "CLONE_ADMIN", "CONNECTION_ADMIN", "ENCRYPTION_KEY_ADMIN", "EXECUTE", + "FILE", "FIREWALL_ADMIN", "FIREWALL_USER", "FLUSH_OPTIMIZER_COSTS", + "FLUSH_STATUS", "FLUSH_TABLES", "FLUSH_USER_RESOURCES", "GROUP_REPLICATION_ADMIN", + "INNODB_REDO_LOG_ARCHIVE", "INNODB_REDO_LOG_ENABLE", "INVOKE", "LAMBDA", + "NDB_STORED_USER", "PASSWORDLESS_USER_ADMIN", "PERSIST_RO_VARIABLES_ADMIN", + "PRIVILEGES", "PROCESS", "RELOAD", "REPLICATION_APPLIER", "REPLICATION_SLAVE_ADMIN", + "RESOURCE_GROUP_ADMIN", "RESOURCE_GROUP_USER", "ROLE_ADMIN", "ROUTINE", + "S3", "SERVICE_CONNECTION_ADMIN", "SESSION_VARIABLES_ADMIN", "SET_USER_ID", + "SHOW_ROUTINE", "SHUTDOWN", "SUPER", "SYSTEM_VARIABLES_ADMIN", "TABLES", + "TABLE_ENCRYPTION_ADMIN", "VERSION_TOKEN_ADMIN", "XA_RECOVER_ADMIN", + "ARMSCII8", "ASCII", "BIG5", "CP1250", "CP1251", "CP1256", "CP1257", + "CP850", "CP852", "CP866", "CP932", "DEC8", "EUCJPMS", "EUCKR", "GB18030", + "GB2312", "GBK", "GEOSTD8", "GREEK", "HEBREW", "HP8", "KEYBCS2", "KOI8R", + "KOI8U", "LATIN1", "LATIN2", "LATIN5", "LATIN7", "MACCE", "MACROMAN", + "SJIS", "SWE7", "TIS620", "UCS2", "UJIS", "UTF16", "UTF16LE", "UTF32", + "UTF8", "UTF8MB3", "UTF8MB4", "ARCHIVE", "BLACKHOLE", "CSV", "FEDERATED", + "INNODB", "MEMORY", "MRG_MYISAM", "MYISAM", "NDB", "NDBCLUSTER", "PERFORMANCE_SCHEMA", + "TOKUDB", "REPEATABLE", "COMMITTED", "UNCOMMITTED", "SERIALIZABLE", + "GEOMETRYCOLLECTION", "GEOMCOLLECTION", "GEOMETRY", "LINESTRING", "MULTILINESTRING", + "MULTIPOINT", "MULTIPOLYGON", "POINT", "POLYGON", "ABS", "ACOS", "ADDDATE", + "ADDTIME", "AES_DECRYPT", "AES_ENCRYPT", "AREA", "ASBINARY", "ASIN", + "ASTEXT", "ASWKB", "ASWKT", "ASYMMETRIC_DECRYPT", "ASYMMETRIC_DERIVE", + "ASYMMETRIC_ENCRYPT", "ASYMMETRIC_SIGN", "ASYMMETRIC_VERIFY", "ATAN", + "ATAN2", "BENCHMARK", "BIN", "BIT_COUNT", "BIT_LENGTH", "BUFFER", "CATALOG_NAME", + "CEIL", "CEILING", "CENTROID", "CHARACTER_LENGTH", "CHARSET", "CHAR_LENGTH", + "COERCIBILITY", "COLLATION", "COMPRESS", "CONCAT", "CONCAT_WS", "CONNECTION_ID", + "CONV", "CONVERT_TZ", "COS", "COT", "CRC32", "CREATE_ASYMMETRIC_PRIV_KEY", + "CREATE_ASYMMETRIC_PUB_KEY", "CREATE_DH_PARAMETERS", "CREATE_DIGEST", + "CROSSES", "DATEDIFF", "DATE_FORMAT", "DAYNAME", "DAYOFMONTH", "DAYOFWEEK", + "DAYOFYEAR", "DECODE", "DEGREES", "DES_DECRYPT", "DES_ENCRYPT", "DIMENSION", + "DISJOINT", "ELT", "ENCODE", "ENCRYPT", "ENDPOINT", "ENGINE_ATTRIBUTE", + "ENVELOPE", "EQUALS", "EXP", "EXPORT_SET", "EXTERIORRING", "EXTRACTVALUE", + "FIELD", "FIND_IN_SET", "FLOOR", "FORMAT", "FOUND_ROWS", "FROM_BASE64", + "FROM_DAYS", "FROM_UNIXTIME", "GEOMCOLLFROMTEXT", "GEOMCOLLFROMWKB", + "GEOMETRYCOLLECTIONFROMTEXT", "GEOMETRYCOLLECTIONFROMWKB", "GEOMETRYFROMTEXT", + "GEOMETRYFROMWKB", "GEOMETRYN", "GEOMETRYTYPE", "GEOMFROMTEXT", "GEOMFROMWKB", + "GET_FORMAT", "GET_LOCK", "GLENGTH", "GREATEST", "GTID_SUBSET", "GTID_SUBTRACT", + "HEX", "IFNULL", "INET6_ATON", "INET6_NTOA", "INET_ATON", "INET_NTOA", + "INSTR", "INTERIORRINGN", "INTERSECTS", "ISCLOSED", "ISEMPTY", "ISNULL", + "ISSIMPLE", "IS_FREE_LOCK", "IS_IPV4", "IS_IPV4_COMPAT", "IS_IPV4_MAPPED", + "IS_IPV6", "IS_USED_LOCK", "LAST_INSERT_ID", "LCASE", "LEAST", "LENGTH", + "LINEFROMTEXT", "LINEFROMWKB", "LINESTRINGFROMTEXT", "LINESTRINGFROMWKB", + "LN", "LOAD_FILE", "LOCATE", "LOG", "LOG10", "LOG2", "LOWER", "LPAD", + "LTRIM", "MAKEDATE", "MAKETIME", "MAKE_SET", "MASTER_POS_WAIT", "MBRCONTAINS", + "MBRDISJOINT", "MBREQUAL", "MBRINTERSECTS", "MBROVERLAPS", "MBRTOUCHES", + "MBRWITHIN", "MD5", "MLINEFROMTEXT", "MLINEFROMWKB", "MONTHNAME", "MPOINTFROMTEXT", + "MPOINTFROMWKB", "MPOLYFROMTEXT", "MPOLYFROMWKB", "MULTILINESTRINGFROMTEXT", + "MULTILINESTRINGFROMWKB", "MULTIPOINTFROMTEXT", "MULTIPOINTFROMWKB", + "MULTIPOLYGONFROMTEXT", "MULTIPOLYGONFROMWKB", "NAME_CONST", "NULLIF", + "NUMGEOMETRIES", "NUMINTERIORRINGS", "NUMPOINTS", "OCT", "OCTET_LENGTH", + "ORD", "OVERLAPS", "PERIOD_ADD", "PERIOD_DIFF", "PI", "POINTFROMTEXT", + "POINTFROMWKB", "POINTN", "POLYFROMTEXT", "POLYFROMWKB", "POLYGONFROMTEXT", + "POLYGONFROMWKB", "POW", "POWER", "QUOTE", "RADIANS", "RAND", "RANDOM_BYTES", + "RELEASE_LOCK", "REVERSE", "ROUND", "ROW_COUNT", "RPAD", "RTRIM", "SEC_TO_TIME", + "SECONDARY_ENGINE_ATTRIBUTE", "SESSION_USER", "SHA", "SHA1", "SHA2", + "SCHEMA_NAME", "SIGN", "SIN", "SLEEP", "SOUNDEX", "SQL_THREAD_WAIT_AFTER_GTIDS", + "SQRT", "SRID", "STARTPOINT", "STRCMP", "STR_TO_DATE", "ST_AREA", "ST_ASBINARY", + "ST_ASTEXT", "ST_ASWKB", "ST_ASWKT", "ST_BUFFER", "ST_CENTROID", "ST_CONTAINS", + "ST_CROSSES", "ST_DIFFERENCE", "ST_DIMENSION", "ST_DISJOINT", "ST_DISTANCE", + "ST_ENDPOINT", "ST_ENVELOPE", "ST_EQUALS", "ST_EXTERIORRING", "ST_GEOMCOLLFROMTEXT", + "ST_GEOMCOLLFROMTXT", "ST_GEOMCOLLFROMWKB", "ST_GEOMETRYCOLLECTIONFROMTEXT", + "ST_GEOMETRYCOLLECTIONFROMWKB", "ST_GEOMETRYFROMTEXT", "ST_GEOMETRYFROMWKB", + "ST_GEOMETRYN", "ST_GEOMETRYTYPE", "ST_GEOMFROMTEXT", "ST_GEOMFROMWKB", + "ST_INTERIORRINGN", "ST_INTERSECTION", "ST_INTERSECTS", "ST_ISCLOSED", + "ST_ISEMPTY", "ST_ISSIMPLE", "ST_LINEFROMTEXT", "ST_LINEFROMWKB", "ST_LINESTRINGFROMTEXT", + "ST_LINESTRINGFROMWKB", "ST_NUMGEOMETRIES", "ST_NUMINTERIORRING", "ST_NUMINTERIORRINGS", + "ST_NUMPOINTS", "ST_OVERLAPS", "ST_POINTFROMTEXT", "ST_POINTFROMWKB", + "ST_POINTN", "ST_POLYFROMTEXT", "ST_POLYFROMWKB", "ST_POLYGONFROMTEXT", + "ST_POLYGONFROMWKB", "ST_SRID", "ST_STARTPOINT", "ST_SYMDIFFERENCE", + "ST_TOUCHES", "ST_UNION", "ST_WITHIN", "ST_X", "ST_Y", "SUBDATE", "SUBSTRING_INDEX", + "SUBTIME", "SYSTEM_USER", "TAN", "TIMEDIFF", "TIMESTAMPADD", "TIMESTAMPDIFF", + "TIME_FORMAT", "TIME_TO_SEC", "TOUCHES", "TO_BASE64", "TO_DAYS", "TO_SECONDS", + "UCASE", "UNCOMPRESS", "UNCOMPRESSED_LENGTH", "UNHEX", "UNIX_TIMESTAMP", + "UPDATEXML", "UPPER", "UUID", "UUID_SHORT", "VALIDATE_PASSWORD_STRENGTH", + "VERSION", "WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS", "WEEKDAY", "WEEKOFYEAR", + "WEIGHT_STRING", "WITHIN", "YEARWEEK", "Y_FUNCTION", "X_FUNCTION", "VAR_ASSIGN", + "PLUS_ASSIGN", "MINUS_ASSIGN", "MULT_ASSIGN", "DIV_ASSIGN", "MOD_ASSIGN", + "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "STAR", "DIVIDE", "MODULE", + "PLUS", "MINUS", "DIV", "MOD", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", + "EXCLAMATION_SYMBOL", "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", + "DOT", "LR_BRACKET", "RR_BRACKET", "COMMA", "SEMI", "AT_SIGN", "ZERO_DECIMAL", + "ONE_DECIMAL", "TWO_DECIMAL", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "REVERSE_QUOTE_SYMB", "COLON_SYMB", "CHARSET_REVERSE_QOUTE_STRING", + "FILESIZE_LITERAL", "START_NATIONAL_STRING_LITERAL", "STRING_LITERAL", + "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", "NULL_SPEC_LITERAL", + "BIT_STRING", "STRING_CHARSET_NAME", "DOT_ID", "ID", "REVERSE_QUOTE_ID", + "STRING_USER_NAME", "IP_ADDRESS", "LOCAL_ID", "GLOBAL_ID", "ERROR_RECONGNIGION", + } + staticData.ruleNames = []string{ + "root", "sqlStatements", "sqlStatement", "emptyStatement_", "dmlStatement", + "selectStatement", "lockClause", "tableSources", "tableSource", "querySpecification", + "selectSpec", "selectElements", "selectElement", "fromClause", "limitClause", + "limitClauseAtom", "fullId", "tableName", "fullColumnName", "collationName", + "uid", "simpleId", "dottedId", "decimalLiteral", "stringLiteral", "booleanLiteral", + "hexadecimalLiteral", "constant", "expressions", "functionCall", "aggregateWindowedFunction", + "expression", "predicate", "expressionAtom", "unaryOperator", "comparisonOperator", + "logicalOperator", + } + staticData.predictionContextCache = antlr.NewPredictionContextCache() + staticData.serializedATN = []int32{ + 4, 1, 1155, 396, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, + 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, + 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, + 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, + 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, + 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, + 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, + 36, 1, 0, 3, 0, 76, 8, 0, 1, 0, 1, 0, 3, 0, 80, 8, 0, 1, 0, 1, 0, 1, 1, + 1, 1, 1, 1, 3, 1, 87, 8, 1, 1, 1, 3, 1, 90, 8, 1, 1, 1, 5, 1, 93, 8, 1, + 10, 1, 12, 1, 96, 9, 1, 1, 1, 1, 1, 1, 1, 3, 1, 101, 8, 1, 1, 1, 3, 1, + 104, 8, 1, 1, 1, 3, 1, 107, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, + 5, 1, 5, 3, 5, 117, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 125, + 8, 6, 1, 7, 1, 7, 1, 7, 5, 7, 130, 8, 7, 10, 7, 12, 7, 133, 9, 7, 1, 8, + 1, 8, 1, 9, 1, 9, 5, 9, 139, 8, 9, 10, 9, 12, 9, 142, 9, 9, 1, 9, 1, 9, + 3, 9, 146, 8, 9, 1, 9, 3, 9, 149, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, + 10, 1, 10, 1, 10, 1, 10, 3, 10, 159, 8, 10, 1, 11, 1, 11, 3, 11, 163, 8, + 11, 1, 11, 1, 11, 5, 11, 167, 8, 11, 10, 11, 12, 11, 170, 9, 11, 1, 12, + 1, 12, 3, 12, 174, 8, 12, 1, 12, 3, 12, 177, 8, 12, 1, 12, 1, 12, 3, 12, + 181, 8, 12, 1, 12, 3, 12, 184, 8, 12, 3, 12, 186, 8, 12, 1, 13, 1, 13, + 1, 13, 1, 13, 1, 13, 3, 13, 193, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, + 14, 199, 8, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 206, 8, 14, 1, + 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 214, 8, 16, 1, 17, 1, 17, + 1, 18, 1, 18, 1, 18, 3, 18, 221, 8, 18, 3, 18, 223, 8, 18, 1, 18, 3, 18, + 226, 8, 18, 1, 18, 1, 18, 3, 18, 230, 8, 18, 3, 18, 232, 8, 18, 1, 19, + 1, 19, 3, 19, 236, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 241, 8, 20, 1, 21, + 1, 21, 1, 22, 1, 22, 1, 22, 3, 22, 248, 8, 22, 1, 23, 1, 23, 1, 24, 3, + 24, 253, 8, 24, 1, 24, 1, 24, 3, 24, 257, 8, 24, 1, 24, 4, 24, 260, 8, + 24, 11, 24, 12, 24, 261, 1, 24, 3, 24, 265, 8, 24, 1, 24, 1, 24, 3, 24, + 269, 8, 24, 1, 24, 1, 24, 3, 24, 273, 8, 24, 3, 24, 275, 8, 24, 1, 25, + 1, 25, 1, 26, 3, 26, 280, 8, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, + 27, 1, 27, 1, 27, 1, 27, 3, 27, 291, 8, 27, 1, 28, 1, 28, 1, 28, 5, 28, + 296, 8, 28, 10, 28, 12, 28, 299, 9, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, + 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 314, + 8, 31, 1, 31, 1, 31, 1, 31, 3, 31, 319, 8, 31, 1, 31, 1, 31, 1, 31, 1, + 31, 5, 31, 325, 8, 31, 10, 31, 12, 31, 328, 9, 31, 1, 32, 1, 32, 1, 32, + 3, 32, 333, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, + 32, 3, 32, 343, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 5, 32, 350, 8, + 32, 10, 32, 12, 32, 353, 9, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, + 1, 33, 1, 33, 1, 33, 5, 33, 364, 8, 33, 10, 33, 12, 33, 367, 9, 33, 1, + 33, 1, 33, 3, 33, 371, 8, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, + 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 386, 8, 35, 1, + 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 394, 8, 36, 1, 36, 0, 2, + 62, 64, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, + 68, 70, 72, 0, 7, 2, 0, 6, 6, 49, 50, 1, 0, 624, 625, 3, 0, 1131, 1133, + 1142, 1142, 1144, 1144, 2, 0, 62, 62, 176, 176, 2, 0, 113, 113, 1120, 1120, + 3, 0, 62, 62, 176, 176, 660, 660, 3, 0, 113, 113, 1113, 1114, 1120, 1121, + 436, 0, 75, 1, 0, 0, 0, 2, 94, 1, 0, 0, 0, 4, 108, 1, 0, 0, 0, 6, 110, + 1, 0, 0, 0, 8, 112, 1, 0, 0, 0, 10, 114, 1, 0, 0, 0, 12, 124, 1, 0, 0, + 0, 14, 126, 1, 0, 0, 0, 16, 134, 1, 0, 0, 0, 18, 136, 1, 0, 0, 0, 20, 158, + 1, 0, 0, 0, 22, 162, 1, 0, 0, 0, 24, 185, 1, 0, 0, 0, 26, 187, 1, 0, 0, + 0, 28, 194, 1, 0, 0, 0, 30, 207, 1, 0, 0, 0, 32, 209, 1, 0, 0, 0, 34, 215, + 1, 0, 0, 0, 36, 231, 1, 0, 0, 0, 38, 235, 1, 0, 0, 0, 40, 240, 1, 0, 0, + 0, 42, 242, 1, 0, 0, 0, 44, 247, 1, 0, 0, 0, 46, 249, 1, 0, 0, 0, 48, 274, + 1, 0, 0, 0, 50, 276, 1, 0, 0, 0, 52, 279, 1, 0, 0, 0, 54, 290, 1, 0, 0, + 0, 56, 292, 1, 0, 0, 0, 58, 300, 1, 0, 0, 0, 60, 302, 1, 0, 0, 0, 62, 318, + 1, 0, 0, 0, 64, 329, 1, 0, 0, 0, 66, 370, 1, 0, 0, 0, 68, 372, 1, 0, 0, + 0, 70, 385, 1, 0, 0, 0, 72, 393, 1, 0, 0, 0, 74, 76, 3, 2, 1, 0, 75, 74, + 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 79, 1, 0, 0, 0, 77, 78, 5, 1114, 0, + 0, 78, 80, 5, 1114, 0, 0, 79, 77, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, 81, + 1, 0, 0, 0, 81, 82, 5, 0, 0, 1, 82, 1, 1, 0, 0, 0, 83, 86, 3, 4, 2, 0, + 84, 85, 5, 1114, 0, 0, 85, 87, 5, 1114, 0, 0, 86, 84, 1, 0, 0, 0, 86, 87, + 1, 0, 0, 0, 87, 89, 1, 0, 0, 0, 88, 90, 5, 1129, 0, 0, 89, 88, 1, 0, 0, + 0, 89, 90, 1, 0, 0, 0, 90, 93, 1, 0, 0, 0, 91, 93, 3, 6, 3, 0, 92, 83, + 1, 0, 0, 0, 92, 91, 1, 0, 0, 0, 93, 96, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, + 94, 95, 1, 0, 0, 0, 95, 106, 1, 0, 0, 0, 96, 94, 1, 0, 0, 0, 97, 103, 3, + 4, 2, 0, 98, 99, 5, 1114, 0, 0, 99, 101, 5, 1114, 0, 0, 100, 98, 1, 0, + 0, 0, 100, 101, 1, 0, 0, 0, 101, 102, 1, 0, 0, 0, 102, 104, 5, 1129, 0, + 0, 103, 100, 1, 0, 0, 0, 103, 104, 1, 0, 0, 0, 104, 107, 1, 0, 0, 0, 105, + 107, 3, 6, 3, 0, 106, 97, 1, 0, 0, 0, 106, 105, 1, 0, 0, 0, 107, 3, 1, + 0, 0, 0, 108, 109, 3, 8, 4, 0, 109, 5, 1, 0, 0, 0, 110, 111, 5, 1129, 0, + 0, 111, 7, 1, 0, 0, 0, 112, 113, 3, 10, 5, 0, 113, 9, 1, 0, 0, 0, 114, + 116, 3, 18, 9, 0, 115, 117, 3, 12, 6, 0, 116, 115, 1, 0, 0, 0, 116, 117, + 1, 0, 0, 0, 117, 11, 1, 0, 0, 0, 118, 119, 5, 64, 0, 0, 119, 125, 5, 182, + 0, 0, 120, 121, 5, 102, 0, 0, 121, 122, 5, 79, 0, 0, 122, 123, 5, 608, + 0, 0, 123, 125, 5, 509, 0, 0, 124, 118, 1, 0, 0, 0, 124, 120, 1, 0, 0, + 0, 125, 13, 1, 0, 0, 0, 126, 131, 3, 16, 8, 0, 127, 128, 5, 1128, 0, 0, + 128, 130, 3, 16, 8, 0, 129, 127, 1, 0, 0, 0, 130, 133, 1, 0, 0, 0, 131, + 129, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 15, 1, 0, 0, 0, 133, 131, 1, + 0, 0, 0, 134, 135, 3, 34, 17, 0, 135, 17, 1, 0, 0, 0, 136, 140, 5, 151, + 0, 0, 137, 139, 3, 20, 10, 0, 138, 137, 1, 0, 0, 0, 139, 142, 1, 0, 0, + 0, 140, 138, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 143, 1, 0, 0, 0, 142, + 140, 1, 0, 0, 0, 143, 145, 3, 22, 11, 0, 144, 146, 3, 26, 13, 0, 145, 144, + 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 149, 3, 28, + 14, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 19, 1, 0, 0, 0, + 150, 159, 7, 0, 0, 0, 151, 159, 5, 74, 0, 0, 152, 159, 5, 169, 0, 0, 153, + 159, 5, 164, 0, 0, 154, 159, 5, 162, 0, 0, 155, 159, 5, 623, 0, 0, 156, + 159, 7, 1, 0, 0, 157, 159, 5, 163, 0, 0, 158, 150, 1, 0, 0, 0, 158, 151, + 1, 0, 0, 0, 158, 152, 1, 0, 0, 0, 158, 153, 1, 0, 0, 0, 158, 154, 1, 0, + 0, 0, 158, 155, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 158, 157, 1, 0, 0, 0, + 159, 21, 1, 0, 0, 0, 160, 163, 5, 1110, 0, 0, 161, 163, 3, 24, 12, 0, 162, + 160, 1, 0, 0, 0, 162, 161, 1, 0, 0, 0, 163, 168, 1, 0, 0, 0, 164, 165, + 5, 1128, 0, 0, 165, 167, 3, 24, 12, 0, 166, 164, 1, 0, 0, 0, 167, 170, + 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 23, 1, 0, + 0, 0, 170, 168, 1, 0, 0, 0, 171, 176, 3, 36, 18, 0, 172, 174, 5, 12, 0, + 0, 173, 172, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 174, 175, 1, 0, 0, 0, 175, + 177, 3, 40, 20, 0, 176, 173, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 186, + 1, 0, 0, 0, 178, 183, 3, 58, 29, 0, 179, 181, 5, 12, 0, 0, 180, 179, 1, + 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 184, 3, 40, 20, + 0, 183, 180, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 186, 1, 0, 0, 0, 185, + 171, 1, 0, 0, 0, 185, 178, 1, 0, 0, 0, 186, 25, 1, 0, 0, 0, 187, 188, 5, + 67, 0, 0, 188, 189, 3, 14, 7, 0, 189, 192, 1, 0, 0, 0, 190, 191, 5, 188, + 0, 0, 191, 193, 3, 62, 31, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, + 0, 193, 27, 1, 0, 0, 0, 194, 205, 5, 98, 0, 0, 195, 196, 3, 30, 15, 0, + 196, 197, 5, 1128, 0, 0, 197, 199, 1, 0, 0, 0, 198, 195, 1, 0, 0, 0, 198, + 199, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 206, 3, 30, 15, 0, 201, 202, + 3, 30, 15, 0, 202, 203, 5, 530, 0, 0, 203, 204, 3, 30, 15, 0, 204, 206, + 1, 0, 0, 0, 205, 198, 1, 0, 0, 0, 205, 201, 1, 0, 0, 0, 206, 29, 1, 0, + 0, 0, 207, 208, 3, 46, 23, 0, 208, 31, 1, 0, 0, 0, 209, 213, 3, 40, 20, + 0, 210, 214, 5, 1148, 0, 0, 211, 212, 5, 1125, 0, 0, 212, 214, 3, 40, 20, + 0, 213, 210, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, + 33, 1, 0, 0, 0, 215, 216, 3, 32, 16, 0, 216, 35, 1, 0, 0, 0, 217, 222, + 3, 40, 20, 0, 218, 220, 3, 44, 22, 0, 219, 221, 3, 44, 22, 0, 220, 219, + 1, 0, 0, 0, 220, 221, 1, 0, 0, 0, 221, 223, 1, 0, 0, 0, 222, 218, 1, 0, + 0, 0, 222, 223, 1, 0, 0, 0, 223, 232, 1, 0, 0, 0, 224, 226, 9, 0, 0, 0, + 225, 224, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, + 229, 3, 44, 22, 0, 228, 230, 3, 44, 22, 0, 229, 228, 1, 0, 0, 0, 229, 230, + 1, 0, 0, 0, 230, 232, 1, 0, 0, 0, 231, 217, 1, 0, 0, 0, 231, 225, 1, 0, + 0, 0, 232, 37, 1, 0, 0, 0, 233, 236, 3, 40, 20, 0, 234, 236, 5, 1141, 0, + 0, 235, 233, 1, 0, 0, 0, 235, 234, 1, 0, 0, 0, 236, 39, 1, 0, 0, 0, 237, + 241, 3, 42, 21, 0, 238, 241, 5, 1150, 0, 0, 239, 241, 5, 1138, 0, 0, 240, + 237, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 240, 239, 1, 0, 0, 0, 241, 41, 1, + 0, 0, 0, 242, 243, 5, 1149, 0, 0, 243, 43, 1, 0, 0, 0, 244, 248, 5, 1148, + 0, 0, 245, 246, 5, 1125, 0, 0, 246, 248, 3, 40, 20, 0, 247, 244, 1, 0, + 0, 0, 247, 245, 1, 0, 0, 0, 248, 45, 1, 0, 0, 0, 249, 250, 7, 2, 0, 0, + 250, 47, 1, 0, 0, 0, 251, 253, 5, 1147, 0, 0, 252, 251, 1, 0, 0, 0, 252, + 253, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 257, 5, 1141, 0, 0, 255, 257, + 5, 1140, 0, 0, 256, 252, 1, 0, 0, 0, 256, 255, 1, 0, 0, 0, 257, 259, 1, + 0, 0, 0, 258, 260, 5, 1141, 0, 0, 259, 258, 1, 0, 0, 0, 260, 261, 1, 0, + 0, 0, 261, 259, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 275, 1, 0, 0, 0, + 263, 265, 5, 1147, 0, 0, 264, 263, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, + 266, 1, 0, 0, 0, 266, 269, 5, 1141, 0, 0, 267, 269, 5, 1140, 0, 0, 268, + 264, 1, 0, 0, 0, 268, 267, 1, 0, 0, 0, 269, 272, 1, 0, 0, 0, 270, 271, + 5, 27, 0, 0, 271, 273, 3, 38, 19, 0, 272, 270, 1, 0, 0, 0, 272, 273, 1, + 0, 0, 0, 273, 275, 1, 0, 0, 0, 274, 256, 1, 0, 0, 0, 274, 268, 1, 0, 0, + 0, 275, 49, 1, 0, 0, 0, 276, 277, 7, 3, 0, 0, 277, 51, 1, 0, 0, 0, 278, + 280, 5, 1147, 0, 0, 279, 278, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, + 1, 0, 0, 0, 281, 282, 5, 1143, 0, 0, 282, 53, 1, 0, 0, 0, 283, 291, 3, + 48, 24, 0, 284, 291, 3, 46, 23, 0, 285, 286, 5, 1114, 0, 0, 286, 291, 3, + 46, 23, 0, 287, 291, 3, 52, 26, 0, 288, 291, 3, 50, 25, 0, 289, 291, 5, + 1144, 0, 0, 290, 283, 1, 0, 0, 0, 290, 284, 1, 0, 0, 0, 290, 285, 1, 0, + 0, 0, 290, 287, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 290, 289, 1, 0, 0, 0, + 291, 55, 1, 0, 0, 0, 292, 297, 3, 62, 31, 0, 293, 294, 5, 1128, 0, 0, 294, + 296, 3, 62, 31, 0, 295, 293, 1, 0, 0, 0, 296, 299, 1, 0, 0, 0, 297, 295, + 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 57, 1, 0, 0, 0, 299, 297, 1, 0, + 0, 0, 300, 301, 3, 60, 30, 0, 301, 59, 1, 0, 0, 0, 302, 303, 5, 288, 0, + 0, 303, 304, 5, 1126, 0, 0, 304, 305, 5, 1110, 0, 0, 305, 306, 5, 1127, + 0, 0, 306, 61, 1, 0, 0, 0, 307, 308, 6, 31, -1, 0, 308, 309, 7, 4, 0, 0, + 309, 319, 3, 62, 31, 4, 310, 311, 3, 64, 32, 0, 311, 313, 5, 87, 0, 0, + 312, 314, 5, 113, 0, 0, 313, 312, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, + 315, 1, 0, 0, 0, 315, 316, 7, 5, 0, 0, 316, 319, 1, 0, 0, 0, 317, 319, + 3, 64, 32, 0, 318, 307, 1, 0, 0, 0, 318, 310, 1, 0, 0, 0, 318, 317, 1, + 0, 0, 0, 319, 326, 1, 0, 0, 0, 320, 321, 10, 3, 0, 0, 321, 322, 3, 72, + 36, 0, 322, 323, 3, 62, 31, 4, 323, 325, 1, 0, 0, 0, 324, 320, 1, 0, 0, + 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, + 63, 1, 0, 0, 0, 328, 326, 1, 0, 0, 0, 329, 332, 6, 32, -1, 0, 330, 331, + 5, 1153, 0, 0, 331, 333, 5, 1101, 0, 0, 332, 330, 1, 0, 0, 0, 332, 333, + 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 3, 66, 33, 0, 335, 351, 1, + 0, 0, 0, 336, 337, 10, 2, 0, 0, 337, 338, 3, 70, 35, 0, 338, 339, 3, 64, + 32, 3, 339, 350, 1, 0, 0, 0, 340, 342, 10, 3, 0, 0, 341, 343, 5, 113, 0, + 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, + 345, 5, 79, 0, 0, 345, 346, 5, 1126, 0, 0, 346, 347, 3, 56, 28, 0, 347, + 348, 5, 1127, 0, 0, 348, 350, 1, 0, 0, 0, 349, 336, 1, 0, 0, 0, 349, 340, + 1, 0, 0, 0, 350, 353, 1, 0, 0, 0, 351, 349, 1, 0, 0, 0, 351, 352, 1, 0, + 0, 0, 352, 65, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 354, 371, 3, 54, 27, 0, + 355, 371, 3, 36, 18, 0, 356, 357, 3, 68, 34, 0, 357, 358, 3, 66, 33, 0, + 358, 371, 1, 0, 0, 0, 359, 360, 5, 1126, 0, 0, 360, 365, 3, 62, 31, 0, + 361, 362, 5, 1128, 0, 0, 362, 364, 3, 62, 31, 0, 363, 361, 1, 0, 0, 0, + 364, 367, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, + 368, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 368, 369, 5, 1127, 0, 0, 369, 371, + 1, 0, 0, 0, 370, 354, 1, 0, 0, 0, 370, 355, 1, 0, 0, 0, 370, 356, 1, 0, + 0, 0, 370, 359, 1, 0, 0, 0, 371, 67, 1, 0, 0, 0, 372, 373, 7, 6, 0, 0, + 373, 69, 1, 0, 0, 0, 374, 386, 5, 1117, 0, 0, 375, 386, 5, 1118, 0, 0, + 376, 386, 5, 1119, 0, 0, 377, 378, 5, 1119, 0, 0, 378, 386, 5, 1117, 0, + 0, 379, 380, 5, 1118, 0, 0, 380, 386, 5, 1117, 0, 0, 381, 382, 5, 1119, + 0, 0, 382, 386, 5, 1118, 0, 0, 383, 384, 5, 1120, 0, 0, 384, 386, 5, 1117, + 0, 0, 385, 374, 1, 0, 0, 0, 385, 375, 1, 0, 0, 0, 385, 376, 1, 0, 0, 0, + 385, 377, 1, 0, 0, 0, 385, 379, 1, 0, 0, 0, 385, 381, 1, 0, 0, 0, 385, + 383, 1, 0, 0, 0, 386, 71, 1, 0, 0, 0, 387, 394, 5, 10, 0, 0, 388, 389, + 5, 1123, 0, 0, 389, 394, 5, 1123, 0, 0, 390, 394, 5, 122, 0, 0, 391, 392, + 5, 1122, 0, 0, 392, 394, 5, 1122, 0, 0, 393, 387, 1, 0, 0, 0, 393, 388, + 1, 0, 0, 0, 393, 390, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 394, 73, 1, 0, + 0, 0, 56, 75, 79, 86, 89, 92, 94, 100, 103, 106, 116, 124, 131, 140, 145, + 148, 158, 162, 168, 173, 176, 180, 183, 185, 192, 198, 205, 213, 220, 222, + 225, 229, 231, 235, 240, 247, 252, 256, 261, 264, 268, 272, 274, 279, 290, + 297, 313, 318, 326, 332, 342, 349, 351, 365, 370, 385, 393, + } + deserializer := antlr.NewATNDeserializer(nil) + staticData.atn = deserializer.Deserialize(staticData.serializedATN) + atn := staticData.atn + staticData.decisionToDFA = make([]*antlr.DFA, len(atn.DecisionToState)) + decisionToDFA := staticData.decisionToDFA + for index, state := range atn.DecisionToState { + decisionToDFA[index] = antlr.NewDFA(state, index) + } +} + +// MySqlParserInit initializes any static state used to implement MySqlParser. By default the +// static state used to implement the parser is lazily initialized during the first call to +// NewMySqlParser(). You can call this function if you wish to initialize the static state ahead +// of time. +func MySqlParserInit() { + staticData := &mysqlparserParserStaticData + staticData.once.Do(mysqlparserParserInit) +} + +// NewMySqlParser produces a new parser instance for the optional input antlr.TokenStream. +func NewMySqlParser(input antlr.TokenStream) *MySqlParser { + MySqlParserInit() + this := new(MySqlParser) + this.BaseParser = antlr.NewBaseParser(input) + staticData := &mysqlparserParserStaticData + this.Interpreter = antlr.NewParserATNSimulator(this, staticData.atn, staticData.decisionToDFA, staticData.predictionContextCache) + this.RuleNames = staticData.ruleNames + this.LiteralNames = staticData.literalNames + this.SymbolicNames = staticData.symbolicNames + this.GrammarFileName = "java-escape" + + return this +} + +// MySqlParser tokens. +const ( + MySqlParserEOF = antlr.TokenEOF + MySqlParserSPACE = 1 + MySqlParserSPEC_MYSQL_COMMENT = 2 + MySqlParserCOMMENT_INPUT = 3 + MySqlParserLINE_COMMENT = 4 + MySqlParserADD = 5 + MySqlParserALL = 6 + MySqlParserALTER = 7 + MySqlParserALWAYS = 8 + MySqlParserANALYZE = 9 + MySqlParserAND = 10 + MySqlParserARRAY = 11 + MySqlParserAS = 12 + MySqlParserASC = 13 + MySqlParserATTRIBUTE = 14 + MySqlParserBEFORE = 15 + MySqlParserBETWEEN = 16 + MySqlParserBOTH = 17 + MySqlParserBUCKETS = 18 + MySqlParserBY = 19 + MySqlParserCALL = 20 + MySqlParserCASCADE = 21 + MySqlParserCASE = 22 + MySqlParserCAST = 23 + MySqlParserCHANGE = 24 + MySqlParserCHARACTER = 25 + MySqlParserCHECK = 26 + MySqlParserCOLLATE = 27 + MySqlParserCOLUMN = 28 + MySqlParserCONDITION = 29 + MySqlParserCONSTRAINT = 30 + MySqlParserCONTINUE = 31 + MySqlParserCONVERT = 32 + MySqlParserCREATE = 33 + MySqlParserCROSS = 34 + MySqlParserCURRENT = 35 + MySqlParserCURRENT_ROLE = 36 + MySqlParserCURRENT_USER = 37 + MySqlParserCURSOR = 38 + MySqlParserDATABASE = 39 + MySqlParserDATABASES = 40 + MySqlParserDECLARE = 41 + MySqlParserDEFAULT = 42 + MySqlParserDELAYED = 43 + MySqlParserDELETE = 44 + MySqlParserDESC = 45 + MySqlParserDESCRIBE = 46 + MySqlParserDETERMINISTIC = 47 + MySqlParserDIAGNOSTICS = 48 + MySqlParserDISTINCT = 49 + MySqlParserDISTINCTROW = 50 + MySqlParserDROP = 51 + MySqlParserEACH = 52 + MySqlParserELSE = 53 + MySqlParserELSEIF = 54 + MySqlParserEMPTY = 55 + MySqlParserENCLOSED = 56 + MySqlParserESCAPED = 57 + MySqlParserEXCEPT = 58 + MySqlParserEXISTS = 59 + MySqlParserEXIT = 60 + MySqlParserEXPLAIN = 61 + MySqlParserFALSE = 62 + MySqlParserFETCH = 63 + MySqlParserFOR = 64 + MySqlParserFORCE = 65 + MySqlParserFOREIGN = 66 + MySqlParserFROM = 67 + MySqlParserFULLTEXT = 68 + MySqlParserGENERATED = 69 + MySqlParserGET = 70 + MySqlParserGRANT = 71 + MySqlParserGROUP = 72 + MySqlParserHAVING = 73 + MySqlParserHIGH_PRIORITY = 74 + MySqlParserHISTOGRAM = 75 + MySqlParserIF = 76 + MySqlParserIGNORE = 77 + MySqlParserIGNORED = 78 + MySqlParserIN = 79 + MySqlParserINDEX = 80 + MySqlParserINFILE = 81 + MySqlParserINNER = 82 + MySqlParserINOUT = 83 + MySqlParserINSERT = 84 + MySqlParserINTERVAL = 85 + MySqlParserINTO = 86 + MySqlParserIS = 87 + MySqlParserITERATE = 88 + MySqlParserJOIN = 89 + MySqlParserKEY = 90 + MySqlParserKEYS = 91 + MySqlParserKILL = 92 + MySqlParserLATERAL = 93 + MySqlParserLEADING = 94 + MySqlParserLEAVE = 95 + MySqlParserLEFT = 96 + MySqlParserLIKE = 97 + MySqlParserLIMIT = 98 + MySqlParserLINEAR = 99 + MySqlParserLINES = 100 + MySqlParserLOAD = 101 + MySqlParserLOCK = 102 + MySqlParserLOCKED = 103 + MySqlParserLOOP = 104 + MySqlParserLOW_PRIORITY = 105 + MySqlParserMASTER_BIND = 106 + MySqlParserMASTER_SSL_VERIFY_SERVER_CERT = 107 + MySqlParserMATCH = 108 + MySqlParserMAXVALUE = 109 + MySqlParserMINVALUE = 110 + MySqlParserMODIFIES = 111 + MySqlParserNATURAL = 112 + MySqlParserNOT = 113 + MySqlParserNO_WRITE_TO_BINLOG = 114 + MySqlParserNULL_LITERAL = 115 + MySqlParserNUMBER = 116 + MySqlParserON = 117 + MySqlParserOPTIMIZE = 118 + MySqlParserOPTION = 119 + MySqlParserOPTIONAL = 120 + MySqlParserOPTIONALLY = 121 + MySqlParserOR = 122 + MySqlParserORDER = 123 + MySqlParserOUT = 124 + MySqlParserOUTER = 125 + MySqlParserOUTFILE = 126 + MySqlParserOVER = 127 + MySqlParserPARTITION = 128 + MySqlParserPRIMARY = 129 + MySqlParserPROCEDURE = 130 + MySqlParserPURGE = 131 + MySqlParserRANGE = 132 + MySqlParserREAD = 133 + MySqlParserREADS = 134 + MySqlParserREFERENCES = 135 + MySqlParserREGEXP = 136 + MySqlParserRELEASE = 137 + MySqlParserRENAME = 138 + MySqlParserREPEAT = 139 + MySqlParserREPLACE = 140 + MySqlParserREQUIRE = 141 + MySqlParserRESIGNAL = 142 + MySqlParserRESTRICT = 143 + MySqlParserRETAIN = 144 + MySqlParserRETURN = 145 + MySqlParserREVOKE = 146 + MySqlParserRIGHT = 147 + MySqlParserRLIKE = 148 + MySqlParserSCHEMA = 149 + MySqlParserSCHEMAS = 150 + MySqlParserSELECT = 151 + MySqlParserSET = 152 + MySqlParserSEPARATOR = 153 + MySqlParserSHOW = 154 + MySqlParserSIGNAL = 155 + MySqlParserSKIP_ = 156 + MySqlParserSPATIAL = 157 + MySqlParserSQL = 158 + MySqlParserSQLEXCEPTION = 159 + MySqlParserSQLSTATE = 160 + MySqlParserSQLWARNING = 161 + MySqlParserSQL_BIG_RESULT = 162 + MySqlParserSQL_CALC_FOUND_ROWS = 163 + MySqlParserSQL_SMALL_RESULT = 164 + MySqlParserSSL = 165 + MySqlParserSTACKED = 166 + MySqlParserSTARTING = 167 + MySqlParserSTATEMENT = 168 + MySqlParserSTRAIGHT_JOIN = 169 + MySqlParserTABLE = 170 + MySqlParserTERMINATED = 171 + MySqlParserTHEN = 172 + MySqlParserTO = 173 + MySqlParserTRAILING = 174 + MySqlParserTRIGGER = 175 + MySqlParserTRUE = 176 + MySqlParserUNDO = 177 + MySqlParserUNION = 178 + MySqlParserUNIQUE = 179 + MySqlParserUNLOCK = 180 + MySqlParserUNSIGNED = 181 + MySqlParserUPDATE = 182 + MySqlParserUSAGE = 183 + MySqlParserUSE = 184 + MySqlParserUSING = 185 + MySqlParserVALUES = 186 + MySqlParserWHEN = 187 + MySqlParserWHERE = 188 + MySqlParserWHILE = 189 + MySqlParserWITH = 190 + MySqlParserWRITE = 191 + MySqlParserXOR = 192 + MySqlParserZEROFILL = 193 + MySqlParserTINYINT = 194 + MySqlParserSMALLINT = 195 + MySqlParserMEDIUMINT = 196 + MySqlParserMIDDLEINT = 197 + MySqlParserINT = 198 + MySqlParserINT1 = 199 + MySqlParserINT2 = 200 + MySqlParserINT3 = 201 + MySqlParserINT4 = 202 + MySqlParserINT8 = 203 + MySqlParserINTEGER = 204 + MySqlParserBIGINT = 205 + MySqlParserREAL = 206 + MySqlParserDOUBLE = 207 + MySqlParserPRECISION = 208 + MySqlParserFLOAT = 209 + MySqlParserFLOAT4 = 210 + MySqlParserFLOAT8 = 211 + MySqlParserDECIMAL = 212 + MySqlParserDEC = 213 + MySqlParserNUMERIC = 214 + MySqlParserDATE = 215 + MySqlParserTIME = 216 + MySqlParserTIMESTAMP = 217 + MySqlParserDATETIME = 218 + MySqlParserYEAR = 219 + MySqlParserCHAR = 220 + MySqlParserVARCHAR = 221 + MySqlParserNVARCHAR = 222 + MySqlParserNATIONAL = 223 + MySqlParserBINARY = 224 + MySqlParserVARBINARY = 225 + MySqlParserTINYBLOB = 226 + MySqlParserBLOB = 227 + MySqlParserMEDIUMBLOB = 228 + MySqlParserLONG = 229 + MySqlParserLONGBLOB = 230 + MySqlParserTINYTEXT = 231 + MySqlParserTEXT = 232 + MySqlParserMEDIUMTEXT = 233 + MySqlParserLONGTEXT = 234 + MySqlParserENUM = 235 + MySqlParserVARYING = 236 + MySqlParserSERIAL = 237 + MySqlParserYEAR_MONTH = 238 + MySqlParserDAY_HOUR = 239 + MySqlParserDAY_MINUTE = 240 + MySqlParserDAY_SECOND = 241 + MySqlParserHOUR_MINUTE = 242 + MySqlParserHOUR_SECOND = 243 + MySqlParserMINUTE_SECOND = 244 + MySqlParserSECOND_MICROSECOND = 245 + MySqlParserMINUTE_MICROSECOND = 246 + MySqlParserHOUR_MICROSECOND = 247 + MySqlParserDAY_MICROSECOND = 248 + MySqlParserJSON_ARRAY = 249 + MySqlParserJSON_ARRAYAGG = 250 + MySqlParserJSON_ARRAY_APPEND = 251 + MySqlParserJSON_ARRAY_INSERT = 252 + MySqlParserJSON_CONTAINS = 253 + MySqlParserJSON_CONTAINS_PATH = 254 + MySqlParserJSON_DEPTH = 255 + MySqlParserJSON_EXTRACT = 256 + MySqlParserJSON_INSERT = 257 + MySqlParserJSON_KEYS = 258 + MySqlParserJSON_LENGTH = 259 + MySqlParserJSON_MERGE = 260 + MySqlParserJSON_MERGE_PATCH = 261 + MySqlParserJSON_MERGE_PRESERVE = 262 + MySqlParserJSON_OBJECT = 263 + MySqlParserJSON_OBJECTAGG = 264 + MySqlParserJSON_OVERLAPS = 265 + MySqlParserJSON_PRETTY = 266 + MySqlParserJSON_QUOTE = 267 + MySqlParserJSON_REMOVE = 268 + MySqlParserJSON_REPLACE = 269 + MySqlParserJSON_SCHEMA_VALID = 270 + MySqlParserJSON_SCHEMA_VALIDATION_REPORT = 271 + MySqlParserJSON_SEARCH = 272 + MySqlParserJSON_SET = 273 + MySqlParserJSON_STORAGE_FREE = 274 + MySqlParserJSON_STORAGE_SIZE = 275 + MySqlParserJSON_TABLE = 276 + MySqlParserJSON_TYPE = 277 + MySqlParserJSON_UNQUOTE = 278 + MySqlParserJSON_VALID = 279 + MySqlParserJSON_VALUE = 280 + MySqlParserNESTED = 281 + MySqlParserORDINALITY = 282 + MySqlParserPATH = 283 + MySqlParserAVG = 284 + MySqlParserBIT_AND = 285 + MySqlParserBIT_OR = 286 + MySqlParserBIT_XOR = 287 + MySqlParserCOUNT = 288 + MySqlParserCUME_DIST = 289 + MySqlParserDENSE_RANK = 290 + MySqlParserFIRST_VALUE = 291 + MySqlParserGROUP_CONCAT = 292 + MySqlParserLAG = 293 + MySqlParserLAST_VALUE = 294 + MySqlParserLEAD = 295 + MySqlParserMAX = 296 + MySqlParserMIN = 297 + MySqlParserNTILE = 298 + MySqlParserNTH_VALUE = 299 + MySqlParserPERCENT_RANK = 300 + MySqlParserRANK = 301 + MySqlParserROW_NUMBER = 302 + MySqlParserSTD = 303 + MySqlParserSTDDEV = 304 + MySqlParserSTDDEV_POP = 305 + MySqlParserSTDDEV_SAMP = 306 + MySqlParserSUM = 307 + MySqlParserVAR_POP = 308 + MySqlParserVAR_SAMP = 309 + MySqlParserVARIANCE = 310 + MySqlParserCURRENT_DATE = 311 + MySqlParserCURRENT_TIME = 312 + MySqlParserCURRENT_TIMESTAMP = 313 + MySqlParserLOCALTIME = 314 + MySqlParserCURDATE = 315 + MySqlParserCURTIME = 316 + MySqlParserDATE_ADD = 317 + MySqlParserDATE_SUB = 318 + MySqlParserEXTRACT = 319 + MySqlParserLOCALTIMESTAMP = 320 + MySqlParserNOW = 321 + MySqlParserPOSITION = 322 + MySqlParserSUBSTR = 323 + MySqlParserSUBSTRING = 324 + MySqlParserSYSDATE = 325 + MySqlParserTRIM = 326 + MySqlParserUTC_DATE = 327 + MySqlParserUTC_TIME = 328 + MySqlParserUTC_TIMESTAMP = 329 + MySqlParserACCOUNT = 330 + MySqlParserACTION = 331 + MySqlParserAFTER = 332 + MySqlParserAGGREGATE = 333 + MySqlParserALGORITHM = 334 + MySqlParserANY = 335 + MySqlParserAT = 336 + MySqlParserAUTHORS = 337 + MySqlParserAUTOCOMMIT = 338 + MySqlParserAUTOEXTEND_SIZE = 339 + MySqlParserAUTO_INCREMENT = 340 + MySqlParserAVG_ROW_LENGTH = 341 + MySqlParserBEGIN = 342 + MySqlParserBINLOG = 343 + MySqlParserBIT = 344 + MySqlParserBLOCK = 345 + MySqlParserBOOL = 346 + MySqlParserBOOLEAN = 347 + MySqlParserBTREE = 348 + MySqlParserCACHE = 349 + MySqlParserCASCADED = 350 + MySqlParserCHAIN = 351 + MySqlParserCHANGED = 352 + MySqlParserCHANNEL = 353 + MySqlParserCHECKSUM = 354 + MySqlParserPAGE_CHECKSUM = 355 + MySqlParserCIPHER = 356 + MySqlParserCLASS_ORIGIN = 357 + MySqlParserCLIENT = 358 + MySqlParserCLOSE = 359 + MySqlParserCLUSTERING = 360 + MySqlParserCOALESCE = 361 + MySqlParserCODE = 362 + MySqlParserCOLUMNS = 363 + MySqlParserCOLUMN_FORMAT = 364 + MySqlParserCOLUMN_NAME = 365 + MySqlParserCOMMENT = 366 + MySqlParserCOMMIT = 367 + MySqlParserCOMPACT = 368 + MySqlParserCOMPLETION = 369 + MySqlParserCOMPRESSED = 370 + MySqlParserCOMPRESSION = 371 + MySqlParserCONCURRENT = 372 + MySqlParserCONNECT = 373 + MySqlParserCONNECTION = 374 + MySqlParserCONSISTENT = 375 + MySqlParserCONSTRAINT_CATALOG = 376 + MySqlParserCONSTRAINT_SCHEMA = 377 + MySqlParserCONSTRAINT_NAME = 378 + MySqlParserCONTAINS = 379 + MySqlParserCONTEXT = 380 + MySqlParserCONTRIBUTORS = 381 + MySqlParserCOPY = 382 + MySqlParserCPU = 383 + MySqlParserCYCLE = 384 + MySqlParserCURSOR_NAME = 385 + MySqlParserDATA = 386 + MySqlParserDATAFILE = 387 + MySqlParserDEALLOCATE = 388 + MySqlParserDEFAULT_AUTH = 389 + MySqlParserDEFINER = 390 + MySqlParserDELAY_KEY_WRITE = 391 + MySqlParserDES_KEY_FILE = 392 + MySqlParserDIRECTORY = 393 + MySqlParserDISABLE = 394 + MySqlParserDISCARD = 395 + MySqlParserDISK = 396 + MySqlParserDO = 397 + MySqlParserDUMPFILE = 398 + MySqlParserDUPLICATE = 399 + MySqlParserDYNAMIC = 400 + MySqlParserENABLE = 401 + MySqlParserENCRYPTED = 402 + MySqlParserENCRYPTION = 403 + MySqlParserENCRYPTION_KEY_ID = 404 + MySqlParserEND = 405 + MySqlParserENDS = 406 + MySqlParserENGINE = 407 + MySqlParserENGINES = 408 + MySqlParserERROR = 409 + MySqlParserERRORS = 410 + MySqlParserESCAPE = 411 + MySqlParserEVEN = 412 + MySqlParserEVENT = 413 + MySqlParserEVENTS = 414 + MySqlParserEVERY = 415 + MySqlParserEXCHANGE = 416 + MySqlParserEXCLUSIVE = 417 + MySqlParserEXPIRE = 418 + MySqlParserEXPORT = 419 + MySqlParserEXTENDED = 420 + MySqlParserEXTENT_SIZE = 421 + MySqlParserFAILED_LOGIN_ATTEMPTS = 422 + MySqlParserFAST = 423 + MySqlParserFAULTS = 424 + MySqlParserFIELDS = 425 + MySqlParserFILE_BLOCK_SIZE = 426 + MySqlParserFILTER = 427 + MySqlParserFIRST = 428 + MySqlParserFIXED = 429 + MySqlParserFLUSH = 430 + MySqlParserFOLLOWING = 431 + MySqlParserFOLLOWS = 432 + MySqlParserFOUND = 433 + MySqlParserFULL = 434 + MySqlParserFUNCTION = 435 + MySqlParserGENERAL = 436 + MySqlParserGLOBAL = 437 + MySqlParserGRANTS = 438 + MySqlParserGROUP_REPLICATION = 439 + MySqlParserHANDLER = 440 + MySqlParserHASH = 441 + MySqlParserHELP = 442 + MySqlParserHISTORY = 443 + MySqlParserHOST = 444 + MySqlParserHOSTS = 445 + MySqlParserIDENTIFIED = 446 + MySqlParserIGNORE_SERVER_IDS = 447 + MySqlParserIMPORT = 448 + MySqlParserINCREMENT = 449 + MySqlParserINDEXES = 450 + MySqlParserINITIAL_SIZE = 451 + MySqlParserINPLACE = 452 + MySqlParserINSERT_METHOD = 453 + MySqlParserINSTALL = 454 + MySqlParserINSTANCE = 455 + MySqlParserINSTANT = 456 + MySqlParserINVISIBLE = 457 + MySqlParserINVOKER = 458 + MySqlParserIO = 459 + MySqlParserIO_THREAD = 460 + MySqlParserIPC = 461 + MySqlParserISOLATION = 462 + MySqlParserISSUER = 463 + MySqlParserJSON = 464 + MySqlParserKEY_BLOCK_SIZE = 465 + MySqlParserLANGUAGE = 466 + MySqlParserLAST = 467 + MySqlParserLEAVES = 468 + MySqlParserLESS = 469 + MySqlParserLEVEL = 470 + MySqlParserLIST = 471 + MySqlParserLOCAL = 472 + MySqlParserLOGFILE = 473 + MySqlParserLOGS = 474 + MySqlParserMASTER = 475 + MySqlParserMASTER_AUTO_POSITION = 476 + MySqlParserMASTER_CONNECT_RETRY = 477 + MySqlParserMASTER_DELAY = 478 + MySqlParserMASTER_HEARTBEAT_PERIOD = 479 + MySqlParserMASTER_HOST = 480 + MySqlParserMASTER_LOG_FILE = 481 + MySqlParserMASTER_LOG_POS = 482 + MySqlParserMASTER_PASSWORD = 483 + MySqlParserMASTER_PORT = 484 + MySqlParserMASTER_RETRY_COUNT = 485 + MySqlParserMASTER_SSL = 486 + MySqlParserMASTER_SSL_CA = 487 + MySqlParserMASTER_SSL_CAPATH = 488 + MySqlParserMASTER_SSL_CERT = 489 + MySqlParserMASTER_SSL_CIPHER = 490 + MySqlParserMASTER_SSL_CRL = 491 + MySqlParserMASTER_SSL_CRLPATH = 492 + MySqlParserMASTER_SSL_KEY = 493 + MySqlParserMASTER_TLS_VERSION = 494 + MySqlParserMASTER_USER = 495 + MySqlParserMAX_CONNECTIONS_PER_HOUR = 496 + MySqlParserMAX_QUERIES_PER_HOUR = 497 + MySqlParserMAX_ROWS = 498 + MySqlParserMAX_SIZE = 499 + MySqlParserMAX_UPDATES_PER_HOUR = 500 + MySqlParserMAX_USER_CONNECTIONS = 501 + MySqlParserMEDIUM = 502 + MySqlParserMEMBER = 503 + MySqlParserMERGE = 504 + MySqlParserMESSAGE_TEXT = 505 + MySqlParserMID = 506 + MySqlParserMIGRATE = 507 + MySqlParserMIN_ROWS = 508 + MySqlParserMODE = 509 + MySqlParserMODIFY = 510 + MySqlParserMUTEX = 511 + MySqlParserMYSQL = 512 + MySqlParserMYSQL_ERRNO = 513 + MySqlParserNAME = 514 + MySqlParserNAMES = 515 + MySqlParserNCHAR = 516 + MySqlParserNEVER = 517 + MySqlParserNEXT = 518 + MySqlParserNO = 519 + MySqlParserNOCACHE = 520 + MySqlParserNOCOPY = 521 + MySqlParserNOCYCLE = 522 + MySqlParserNOMAXVALUE = 523 + MySqlParserNOMINVALUE = 524 + MySqlParserNOWAIT = 525 + MySqlParserNODEGROUP = 526 + MySqlParserNONE = 527 + MySqlParserODBC = 528 + MySqlParserOFFLINE = 529 + MySqlParserOFFSET = 530 + MySqlParserOF = 531 + MySqlParserOJ = 532 + MySqlParserOLD_PASSWORD = 533 + MySqlParserONE = 534 + MySqlParserONLINE = 535 + MySqlParserONLY = 536 + MySqlParserOPEN = 537 + MySqlParserOPTIMIZER_COSTS = 538 + MySqlParserOPTIONS = 539 + MySqlParserOWNER = 540 + MySqlParserPACK_KEYS = 541 + MySqlParserPAGE = 542 + MySqlParserPAGE_COMPRESSED = 543 + MySqlParserPAGE_COMPRESSION_LEVEL = 544 + MySqlParserPARSER = 545 + MySqlParserPARTIAL = 546 + MySqlParserPARTITIONING = 547 + MySqlParserPARTITIONS = 548 + MySqlParserPASSWORD = 549 + MySqlParserPASSWORD_LOCK_TIME = 550 + MySqlParserPHASE = 551 + MySqlParserPLUGIN = 552 + MySqlParserPLUGIN_DIR = 553 + MySqlParserPLUGINS = 554 + MySqlParserPORT = 555 + MySqlParserPRECEDES = 556 + MySqlParserPRECEDING = 557 + MySqlParserPREPARE = 558 + MySqlParserPRESERVE = 559 + MySqlParserPREV = 560 + MySqlParserPROCESSLIST = 561 + MySqlParserPROFILE = 562 + MySqlParserPROFILES = 563 + MySqlParserPROXY = 564 + MySqlParserQUERY = 565 + MySqlParserQUICK = 566 + MySqlParserREBUILD = 567 + MySqlParserRECOVER = 568 + MySqlParserRECURSIVE = 569 + MySqlParserREDO_BUFFER_SIZE = 570 + MySqlParserREDUNDANT = 571 + MySqlParserRELAY = 572 + MySqlParserRELAY_LOG_FILE = 573 + MySqlParserRELAY_LOG_POS = 574 + MySqlParserRELAYLOG = 575 + MySqlParserREMOVE = 576 + MySqlParserREORGANIZE = 577 + MySqlParserREPAIR = 578 + MySqlParserREPLICATE_DO_DB = 579 + MySqlParserREPLICATE_DO_TABLE = 580 + MySqlParserREPLICATE_IGNORE_DB = 581 + MySqlParserREPLICATE_IGNORE_TABLE = 582 + MySqlParserREPLICATE_REWRITE_DB = 583 + MySqlParserREPLICATE_WILD_DO_TABLE = 584 + MySqlParserREPLICATE_WILD_IGNORE_TABLE = 585 + MySqlParserREPLICATION = 586 + MySqlParserRESET = 587 + MySqlParserRESTART = 588 + MySqlParserRESUME = 589 + MySqlParserRETURNED_SQLSTATE = 590 + MySqlParserRETURNING = 591 + MySqlParserRETURNS = 592 + MySqlParserREUSE = 593 + MySqlParserROLE = 594 + MySqlParserROLLBACK = 595 + MySqlParserROLLUP = 596 + MySqlParserROTATE = 597 + MySqlParserROW = 598 + MySqlParserROWS = 599 + MySqlParserROW_FORMAT = 600 + MySqlParserRTREE = 601 + MySqlParserSAVEPOINT = 602 + MySqlParserSCHEDULE = 603 + MySqlParserSECURITY = 604 + MySqlParserSEQUENCE = 605 + MySqlParserSERVER = 606 + MySqlParserSESSION = 607 + MySqlParserSHARE = 608 + MySqlParserSHARED = 609 + MySqlParserSIGNED = 610 + MySqlParserSIMPLE = 611 + MySqlParserSLAVE = 612 + MySqlParserSLOW = 613 + MySqlParserSNAPSHOT = 614 + MySqlParserSOCKET = 615 + MySqlParserSOME = 616 + MySqlParserSONAME = 617 + MySqlParserSOUNDS = 618 + MySqlParserSOURCE = 619 + MySqlParserSQL_AFTER_GTIDS = 620 + MySqlParserSQL_AFTER_MTS_GAPS = 621 + MySqlParserSQL_BEFORE_GTIDS = 622 + MySqlParserSQL_BUFFER_RESULT = 623 + MySqlParserSQL_CACHE = 624 + MySqlParserSQL_NO_CACHE = 625 + MySqlParserSQL_THREAD = 626 + MySqlParserSTART = 627 + MySqlParserSTARTS = 628 + MySqlParserSTATS_AUTO_RECALC = 629 + MySqlParserSTATS_PERSISTENT = 630 + MySqlParserSTATS_SAMPLE_PAGES = 631 + MySqlParserSTATUS = 632 + MySqlParserSTOP = 633 + MySqlParserSTORAGE = 634 + MySqlParserSTORED = 635 + MySqlParserSTRING = 636 + MySqlParserSUBCLASS_ORIGIN = 637 + MySqlParserSUBJECT = 638 + MySqlParserSUBPARTITION = 639 + MySqlParserSUBPARTITIONS = 640 + MySqlParserSUSPEND = 641 + MySqlParserSWAPS = 642 + MySqlParserSWITCHES = 643 + MySqlParserTABLE_NAME = 644 + MySqlParserTABLESPACE = 645 + MySqlParserTABLE_TYPE = 646 + MySqlParserTEMPORARY = 647 + MySqlParserTEMPTABLE = 648 + MySqlParserTHAN = 649 + MySqlParserTRADITIONAL = 650 + MySqlParserTRANSACTION = 651 + MySqlParserTRANSACTIONAL = 652 + MySqlParserTRIGGERS = 653 + MySqlParserTRUNCATE = 654 + MySqlParserUNBOUNDED = 655 + MySqlParserUNDEFINED = 656 + MySqlParserUNDOFILE = 657 + MySqlParserUNDO_BUFFER_SIZE = 658 + MySqlParserUNINSTALL = 659 + MySqlParserUNKNOWN = 660 + MySqlParserUNTIL = 661 + MySqlParserUPGRADE = 662 + MySqlParserUSER = 663 + MySqlParserUSE_FRM = 664 + MySqlParserUSER_RESOURCES = 665 + MySqlParserVALIDATION = 666 + MySqlParserVALUE = 667 + MySqlParserVARIABLES = 668 + MySqlParserVIEW = 669 + MySqlParserVIRTUAL = 670 + MySqlParserVISIBLE = 671 + MySqlParserWAIT = 672 + MySqlParserWARNINGS = 673 + MySqlParserWINDOW = 674 + MySqlParserWITHOUT = 675 + MySqlParserWORK = 676 + MySqlParserWRAPPER = 677 + MySqlParserX509 = 678 + MySqlParserXA = 679 + MySqlParserXML = 680 + MySqlParserYES = 681 + MySqlParserEUR = 682 + MySqlParserUSA = 683 + MySqlParserJIS = 684 + MySqlParserISO = 685 + MySqlParserINTERNAL = 686 + MySqlParserQUARTER = 687 + MySqlParserMONTH = 688 + MySqlParserDAY = 689 + MySqlParserHOUR = 690 + MySqlParserMINUTE = 691 + MySqlParserWEEK = 692 + MySqlParserSECOND = 693 + MySqlParserMICROSECOND = 694 + MySqlParserADMIN = 695 + MySqlParserAPPLICATION_PASSWORD_ADMIN = 696 + MySqlParserAUDIT_ADMIN = 697 + MySqlParserBACKUP_ADMIN = 698 + MySqlParserBINLOG_ADMIN = 699 + MySqlParserBINLOG_ENCRYPTION_ADMIN = 700 + MySqlParserCLONE_ADMIN = 701 + MySqlParserCONNECTION_ADMIN = 702 + MySqlParserENCRYPTION_KEY_ADMIN = 703 + MySqlParserEXECUTE = 704 + MySqlParserFILE = 705 + MySqlParserFIREWALL_ADMIN = 706 + MySqlParserFIREWALL_USER = 707 + MySqlParserFLUSH_OPTIMIZER_COSTS = 708 + MySqlParserFLUSH_STATUS = 709 + MySqlParserFLUSH_TABLES = 710 + MySqlParserFLUSH_USER_RESOURCES = 711 + MySqlParserGROUP_REPLICATION_ADMIN = 712 + MySqlParserINNODB_REDO_LOG_ARCHIVE = 713 + MySqlParserINNODB_REDO_LOG_ENABLE = 714 + MySqlParserINVOKE = 715 + MySqlParserLAMBDA = 716 + MySqlParserNDB_STORED_USER = 717 + MySqlParserPASSWORDLESS_USER_ADMIN = 718 + MySqlParserPERSIST_RO_VARIABLES_ADMIN = 719 + MySqlParserPRIVILEGES = 720 + MySqlParserPROCESS = 721 + MySqlParserRELOAD = 722 + MySqlParserREPLICATION_APPLIER = 723 + MySqlParserREPLICATION_SLAVE_ADMIN = 724 + MySqlParserRESOURCE_GROUP_ADMIN = 725 + MySqlParserRESOURCE_GROUP_USER = 726 + MySqlParserROLE_ADMIN = 727 + MySqlParserROUTINE = 728 + MySqlParserS3 = 729 + MySqlParserSERVICE_CONNECTION_ADMIN = 730 + MySqlParserSESSION_VARIABLES_ADMIN = 731 + MySqlParserSET_USER_ID = 732 + MySqlParserSHOW_ROUTINE = 733 + MySqlParserSHUTDOWN = 734 + MySqlParserSUPER = 735 + MySqlParserSYSTEM_VARIABLES_ADMIN = 736 + MySqlParserTABLES = 737 + MySqlParserTABLE_ENCRYPTION_ADMIN = 738 + MySqlParserVERSION_TOKEN_ADMIN = 739 + MySqlParserXA_RECOVER_ADMIN = 740 + MySqlParserARMSCII8 = 741 + MySqlParserASCII = 742 + MySqlParserBIG5 = 743 + MySqlParserCP1250 = 744 + MySqlParserCP1251 = 745 + MySqlParserCP1256 = 746 + MySqlParserCP1257 = 747 + MySqlParserCP850 = 748 + MySqlParserCP852 = 749 + MySqlParserCP866 = 750 + MySqlParserCP932 = 751 + MySqlParserDEC8 = 752 + MySqlParserEUCJPMS = 753 + MySqlParserEUCKR = 754 + MySqlParserGB18030 = 755 + MySqlParserGB2312 = 756 + MySqlParserGBK = 757 + MySqlParserGEOSTD8 = 758 + MySqlParserGREEK = 759 + MySqlParserHEBREW = 760 + MySqlParserHP8 = 761 + MySqlParserKEYBCS2 = 762 + MySqlParserKOI8R = 763 + MySqlParserKOI8U = 764 + MySqlParserLATIN1 = 765 + MySqlParserLATIN2 = 766 + MySqlParserLATIN5 = 767 + MySqlParserLATIN7 = 768 + MySqlParserMACCE = 769 + MySqlParserMACROMAN = 770 + MySqlParserSJIS = 771 + MySqlParserSWE7 = 772 + MySqlParserTIS620 = 773 + MySqlParserUCS2 = 774 + MySqlParserUJIS = 775 + MySqlParserUTF16 = 776 + MySqlParserUTF16LE = 777 + MySqlParserUTF32 = 778 + MySqlParserUTF8 = 779 + MySqlParserUTF8MB3 = 780 + MySqlParserUTF8MB4 = 781 + MySqlParserARCHIVE = 782 + MySqlParserBLACKHOLE = 783 + MySqlParserCSV = 784 + MySqlParserFEDERATED = 785 + MySqlParserINNODB = 786 + MySqlParserMEMORY = 787 + MySqlParserMRG_MYISAM = 788 + MySqlParserMYISAM = 789 + MySqlParserNDB = 790 + MySqlParserNDBCLUSTER = 791 + MySqlParserPERFORMANCE_SCHEMA = 792 + MySqlParserTOKUDB = 793 + MySqlParserREPEATABLE = 794 + MySqlParserCOMMITTED = 795 + MySqlParserUNCOMMITTED = 796 + MySqlParserSERIALIZABLE = 797 + MySqlParserGEOMETRYCOLLECTION = 798 + MySqlParserGEOMCOLLECTION = 799 + MySqlParserGEOMETRY = 800 + MySqlParserLINESTRING = 801 + MySqlParserMULTILINESTRING = 802 + MySqlParserMULTIPOINT = 803 + MySqlParserMULTIPOLYGON = 804 + MySqlParserPOINT = 805 + MySqlParserPOLYGON = 806 + MySqlParserABS = 807 + MySqlParserACOS = 808 + MySqlParserADDDATE = 809 + MySqlParserADDTIME = 810 + MySqlParserAES_DECRYPT = 811 + MySqlParserAES_ENCRYPT = 812 + MySqlParserAREA = 813 + MySqlParserASBINARY = 814 + MySqlParserASIN = 815 + MySqlParserASTEXT = 816 + MySqlParserASWKB = 817 + MySqlParserASWKT = 818 + MySqlParserASYMMETRIC_DECRYPT = 819 + MySqlParserASYMMETRIC_DERIVE = 820 + MySqlParserASYMMETRIC_ENCRYPT = 821 + MySqlParserASYMMETRIC_SIGN = 822 + MySqlParserASYMMETRIC_VERIFY = 823 + MySqlParserATAN = 824 + MySqlParserATAN2 = 825 + MySqlParserBENCHMARK = 826 + MySqlParserBIN = 827 + MySqlParserBIT_COUNT = 828 + MySqlParserBIT_LENGTH = 829 + MySqlParserBUFFER = 830 + MySqlParserCATALOG_NAME = 831 + MySqlParserCEIL = 832 + MySqlParserCEILING = 833 + MySqlParserCENTROID = 834 + MySqlParserCHARACTER_LENGTH = 835 + MySqlParserCHARSET = 836 + MySqlParserCHAR_LENGTH = 837 + MySqlParserCOERCIBILITY = 838 + MySqlParserCOLLATION = 839 + MySqlParserCOMPRESS = 840 + MySqlParserCONCAT = 841 + MySqlParserCONCAT_WS = 842 + MySqlParserCONNECTION_ID = 843 + MySqlParserCONV = 844 + MySqlParserCONVERT_TZ = 845 + MySqlParserCOS = 846 + MySqlParserCOT = 847 + MySqlParserCRC32 = 848 + MySqlParserCREATE_ASYMMETRIC_PRIV_KEY = 849 + MySqlParserCREATE_ASYMMETRIC_PUB_KEY = 850 + MySqlParserCREATE_DH_PARAMETERS = 851 + MySqlParserCREATE_DIGEST = 852 + MySqlParserCROSSES = 853 + MySqlParserDATEDIFF = 854 + MySqlParserDATE_FORMAT = 855 + MySqlParserDAYNAME = 856 + MySqlParserDAYOFMONTH = 857 + MySqlParserDAYOFWEEK = 858 + MySqlParserDAYOFYEAR = 859 + MySqlParserDECODE = 860 + MySqlParserDEGREES = 861 + MySqlParserDES_DECRYPT = 862 + MySqlParserDES_ENCRYPT = 863 + MySqlParserDIMENSION = 864 + MySqlParserDISJOINT = 865 + MySqlParserELT = 866 + MySqlParserENCODE = 867 + MySqlParserENCRYPT = 868 + MySqlParserENDPOINT = 869 + MySqlParserENGINE_ATTRIBUTE = 870 + MySqlParserENVELOPE = 871 + MySqlParserEQUALS = 872 + MySqlParserEXP = 873 + MySqlParserEXPORT_SET = 874 + MySqlParserEXTERIORRING = 875 + MySqlParserEXTRACTVALUE = 876 + MySqlParserFIELD = 877 + MySqlParserFIND_IN_SET = 878 + MySqlParserFLOOR = 879 + MySqlParserFORMAT = 880 + MySqlParserFOUND_ROWS = 881 + MySqlParserFROM_BASE64 = 882 + MySqlParserFROM_DAYS = 883 + MySqlParserFROM_UNIXTIME = 884 + MySqlParserGEOMCOLLFROMTEXT = 885 + MySqlParserGEOMCOLLFROMWKB = 886 + MySqlParserGEOMETRYCOLLECTIONFROMTEXT = 887 + MySqlParserGEOMETRYCOLLECTIONFROMWKB = 888 + MySqlParserGEOMETRYFROMTEXT = 889 + MySqlParserGEOMETRYFROMWKB = 890 + MySqlParserGEOMETRYN = 891 + MySqlParserGEOMETRYTYPE = 892 + MySqlParserGEOMFROMTEXT = 893 + MySqlParserGEOMFROMWKB = 894 + MySqlParserGET_FORMAT = 895 + MySqlParserGET_LOCK = 896 + MySqlParserGLENGTH = 897 + MySqlParserGREATEST = 898 + MySqlParserGTID_SUBSET = 899 + MySqlParserGTID_SUBTRACT = 900 + MySqlParserHEX = 901 + MySqlParserIFNULL = 902 + MySqlParserINET6_ATON = 903 + MySqlParserINET6_NTOA = 904 + MySqlParserINET_ATON = 905 + MySqlParserINET_NTOA = 906 + MySqlParserINSTR = 907 + MySqlParserINTERIORRINGN = 908 + MySqlParserINTERSECTS = 909 + MySqlParserISCLOSED = 910 + MySqlParserISEMPTY = 911 + MySqlParserISNULL = 912 + MySqlParserISSIMPLE = 913 + MySqlParserIS_FREE_LOCK = 914 + MySqlParserIS_IPV4 = 915 + MySqlParserIS_IPV4_COMPAT = 916 + MySqlParserIS_IPV4_MAPPED = 917 + MySqlParserIS_IPV6 = 918 + MySqlParserIS_USED_LOCK = 919 + MySqlParserLAST_INSERT_ID = 920 + MySqlParserLCASE = 921 + MySqlParserLEAST = 922 + MySqlParserLENGTH = 923 + MySqlParserLINEFROMTEXT = 924 + MySqlParserLINEFROMWKB = 925 + MySqlParserLINESTRINGFROMTEXT = 926 + MySqlParserLINESTRINGFROMWKB = 927 + MySqlParserLN = 928 + MySqlParserLOAD_FILE = 929 + MySqlParserLOCATE = 930 + MySqlParserLOG = 931 + MySqlParserLOG10 = 932 + MySqlParserLOG2 = 933 + MySqlParserLOWER = 934 + MySqlParserLPAD = 935 + MySqlParserLTRIM = 936 + MySqlParserMAKEDATE = 937 + MySqlParserMAKETIME = 938 + MySqlParserMAKE_SET = 939 + MySqlParserMASTER_POS_WAIT = 940 + MySqlParserMBRCONTAINS = 941 + MySqlParserMBRDISJOINT = 942 + MySqlParserMBREQUAL = 943 + MySqlParserMBRINTERSECTS = 944 + MySqlParserMBROVERLAPS = 945 + MySqlParserMBRTOUCHES = 946 + MySqlParserMBRWITHIN = 947 + MySqlParserMD5 = 948 + MySqlParserMLINEFROMTEXT = 949 + MySqlParserMLINEFROMWKB = 950 + MySqlParserMONTHNAME = 951 + MySqlParserMPOINTFROMTEXT = 952 + MySqlParserMPOINTFROMWKB = 953 + MySqlParserMPOLYFROMTEXT = 954 + MySqlParserMPOLYFROMWKB = 955 + MySqlParserMULTILINESTRINGFROMTEXT = 956 + MySqlParserMULTILINESTRINGFROMWKB = 957 + MySqlParserMULTIPOINTFROMTEXT = 958 + MySqlParserMULTIPOINTFROMWKB = 959 + MySqlParserMULTIPOLYGONFROMTEXT = 960 + MySqlParserMULTIPOLYGONFROMWKB = 961 + MySqlParserNAME_CONST = 962 + MySqlParserNULLIF = 963 + MySqlParserNUMGEOMETRIES = 964 + MySqlParserNUMINTERIORRINGS = 965 + MySqlParserNUMPOINTS = 966 + MySqlParserOCT = 967 + MySqlParserOCTET_LENGTH = 968 + MySqlParserORD = 969 + MySqlParserOVERLAPS = 970 + MySqlParserPERIOD_ADD = 971 + MySqlParserPERIOD_DIFF = 972 + MySqlParserPI = 973 + MySqlParserPOINTFROMTEXT = 974 + MySqlParserPOINTFROMWKB = 975 + MySqlParserPOINTN = 976 + MySqlParserPOLYFROMTEXT = 977 + MySqlParserPOLYFROMWKB = 978 + MySqlParserPOLYGONFROMTEXT = 979 + MySqlParserPOLYGONFROMWKB = 980 + MySqlParserPOW = 981 + MySqlParserPOWER = 982 + MySqlParserQUOTE = 983 + MySqlParserRADIANS = 984 + MySqlParserRAND = 985 + MySqlParserRANDOM_BYTES = 986 + MySqlParserRELEASE_LOCK = 987 + MySqlParserREVERSE = 988 + MySqlParserROUND = 989 + MySqlParserROW_COUNT = 990 + MySqlParserRPAD = 991 + MySqlParserRTRIM = 992 + MySqlParserSEC_TO_TIME = 993 + MySqlParserSECONDARY_ENGINE_ATTRIBUTE = 994 + MySqlParserSESSION_USER = 995 + MySqlParserSHA = 996 + MySqlParserSHA1 = 997 + MySqlParserSHA2 = 998 + MySqlParserSCHEMA_NAME = 999 + MySqlParserSIGN = 1000 + MySqlParserSIN = 1001 + MySqlParserSLEEP = 1002 + MySqlParserSOUNDEX = 1003 + MySqlParserSQL_THREAD_WAIT_AFTER_GTIDS = 1004 + MySqlParserSQRT = 1005 + MySqlParserSRID = 1006 + MySqlParserSTARTPOINT = 1007 + MySqlParserSTRCMP = 1008 + MySqlParserSTR_TO_DATE = 1009 + MySqlParserST_AREA = 1010 + MySqlParserST_ASBINARY = 1011 + MySqlParserST_ASTEXT = 1012 + MySqlParserST_ASWKB = 1013 + MySqlParserST_ASWKT = 1014 + MySqlParserST_BUFFER = 1015 + MySqlParserST_CENTROID = 1016 + MySqlParserST_CONTAINS = 1017 + MySqlParserST_CROSSES = 1018 + MySqlParserST_DIFFERENCE = 1019 + MySqlParserST_DIMENSION = 1020 + MySqlParserST_DISJOINT = 1021 + MySqlParserST_DISTANCE = 1022 + MySqlParserST_ENDPOINT = 1023 + MySqlParserST_ENVELOPE = 1024 + MySqlParserST_EQUALS = 1025 + MySqlParserST_EXTERIORRING = 1026 + MySqlParserST_GEOMCOLLFROMTEXT = 1027 + MySqlParserST_GEOMCOLLFROMTXT = 1028 + MySqlParserST_GEOMCOLLFROMWKB = 1029 + MySqlParserST_GEOMETRYCOLLECTIONFROMTEXT = 1030 + MySqlParserST_GEOMETRYCOLLECTIONFROMWKB = 1031 + MySqlParserST_GEOMETRYFROMTEXT = 1032 + MySqlParserST_GEOMETRYFROMWKB = 1033 + MySqlParserST_GEOMETRYN = 1034 + MySqlParserST_GEOMETRYTYPE = 1035 + MySqlParserST_GEOMFROMTEXT = 1036 + MySqlParserST_GEOMFROMWKB = 1037 + MySqlParserST_INTERIORRINGN = 1038 + MySqlParserST_INTERSECTION = 1039 + MySqlParserST_INTERSECTS = 1040 + MySqlParserST_ISCLOSED = 1041 + MySqlParserST_ISEMPTY = 1042 + MySqlParserST_ISSIMPLE = 1043 + MySqlParserST_LINEFROMTEXT = 1044 + MySqlParserST_LINEFROMWKB = 1045 + MySqlParserST_LINESTRINGFROMTEXT = 1046 + MySqlParserST_LINESTRINGFROMWKB = 1047 + MySqlParserST_NUMGEOMETRIES = 1048 + MySqlParserST_NUMINTERIORRING = 1049 + MySqlParserST_NUMINTERIORRINGS = 1050 + MySqlParserST_NUMPOINTS = 1051 + MySqlParserST_OVERLAPS = 1052 + MySqlParserST_POINTFROMTEXT = 1053 + MySqlParserST_POINTFROMWKB = 1054 + MySqlParserST_POINTN = 1055 + MySqlParserST_POLYFROMTEXT = 1056 + MySqlParserST_POLYFROMWKB = 1057 + MySqlParserST_POLYGONFROMTEXT = 1058 + MySqlParserST_POLYGONFROMWKB = 1059 + MySqlParserST_SRID = 1060 + MySqlParserST_STARTPOINT = 1061 + MySqlParserST_SYMDIFFERENCE = 1062 + MySqlParserST_TOUCHES = 1063 + MySqlParserST_UNION = 1064 + MySqlParserST_WITHIN = 1065 + MySqlParserST_X = 1066 + MySqlParserST_Y = 1067 + MySqlParserSUBDATE = 1068 + MySqlParserSUBSTRING_INDEX = 1069 + MySqlParserSUBTIME = 1070 + MySqlParserSYSTEM_USER = 1071 + MySqlParserTAN = 1072 + MySqlParserTIMEDIFF = 1073 + MySqlParserTIMESTAMPADD = 1074 + MySqlParserTIMESTAMPDIFF = 1075 + MySqlParserTIME_FORMAT = 1076 + MySqlParserTIME_TO_SEC = 1077 + MySqlParserTOUCHES = 1078 + MySqlParserTO_BASE64 = 1079 + MySqlParserTO_DAYS = 1080 + MySqlParserTO_SECONDS = 1081 + MySqlParserUCASE = 1082 + MySqlParserUNCOMPRESS = 1083 + MySqlParserUNCOMPRESSED_LENGTH = 1084 + MySqlParserUNHEX = 1085 + MySqlParserUNIX_TIMESTAMP = 1086 + MySqlParserUPDATEXML = 1087 + MySqlParserUPPER = 1088 + MySqlParserUUID = 1089 + MySqlParserUUID_SHORT = 1090 + MySqlParserVALIDATE_PASSWORD_STRENGTH = 1091 + MySqlParserVERSION = 1092 + MySqlParserWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 1093 + MySqlParserWEEKDAY = 1094 + MySqlParserWEEKOFYEAR = 1095 + MySqlParserWEIGHT_STRING = 1096 + MySqlParserWITHIN = 1097 + MySqlParserYEARWEEK = 1098 + MySqlParserY_FUNCTION = 1099 + MySqlParserX_FUNCTION = 1100 + MySqlParserVAR_ASSIGN = 1101 + MySqlParserPLUS_ASSIGN = 1102 + MySqlParserMINUS_ASSIGN = 1103 + MySqlParserMULT_ASSIGN = 1104 + MySqlParserDIV_ASSIGN = 1105 + MySqlParserMOD_ASSIGN = 1106 + MySqlParserAND_ASSIGN = 1107 + MySqlParserXOR_ASSIGN = 1108 + MySqlParserOR_ASSIGN = 1109 + MySqlParserSTAR = 1110 + MySqlParserDIVIDE = 1111 + MySqlParserMODULE = 1112 + MySqlParserPLUS = 1113 + MySqlParserMINUS = 1114 + MySqlParserDIV = 1115 + MySqlParserMOD = 1116 + MySqlParserEQUAL_SYMBOL = 1117 + MySqlParserGREATER_SYMBOL = 1118 + MySqlParserLESS_SYMBOL = 1119 + MySqlParserEXCLAMATION_SYMBOL = 1120 + MySqlParserBIT_NOT_OP = 1121 + MySqlParserBIT_OR_OP = 1122 + MySqlParserBIT_AND_OP = 1123 + MySqlParserBIT_XOR_OP = 1124 + MySqlParserDOT = 1125 + MySqlParserLR_BRACKET = 1126 + MySqlParserRR_BRACKET = 1127 + MySqlParserCOMMA = 1128 + MySqlParserSEMI = 1129 + MySqlParserAT_SIGN = 1130 + MySqlParserZERO_DECIMAL = 1131 + MySqlParserONE_DECIMAL = 1132 + MySqlParserTWO_DECIMAL = 1133 + MySqlParserSINGLE_QUOTE_SYMB = 1134 + MySqlParserDOUBLE_QUOTE_SYMB = 1135 + MySqlParserREVERSE_QUOTE_SYMB = 1136 + MySqlParserCOLON_SYMB = 1137 + MySqlParserCHARSET_REVERSE_QOUTE_STRING = 1138 + MySqlParserFILESIZE_LITERAL = 1139 + MySqlParserSTART_NATIONAL_STRING_LITERAL = 1140 + MySqlParserSTRING_LITERAL = 1141 + MySqlParserDECIMAL_LITERAL = 1142 + MySqlParserHEXADECIMAL_LITERAL = 1143 + MySqlParserREAL_LITERAL = 1144 + MySqlParserNULL_SPEC_LITERAL = 1145 + MySqlParserBIT_STRING = 1146 + MySqlParserSTRING_CHARSET_NAME = 1147 + MySqlParserDOT_ID = 1148 + MySqlParserID = 1149 + MySqlParserREVERSE_QUOTE_ID = 1150 + MySqlParserSTRING_USER_NAME = 1151 + MySqlParserIP_ADDRESS = 1152 + MySqlParserLOCAL_ID = 1153 + MySqlParserGLOBAL_ID = 1154 + MySqlParserERROR_RECONGNIGION = 1155 +) + +// MySqlParser rules. +const ( + MySqlParserRULE_root = 0 + MySqlParserRULE_sqlStatements = 1 + MySqlParserRULE_sqlStatement = 2 + MySqlParserRULE_emptyStatement_ = 3 + MySqlParserRULE_dmlStatement = 4 + MySqlParserRULE_selectStatement = 5 + MySqlParserRULE_lockClause = 6 + MySqlParserRULE_tableSources = 7 + MySqlParserRULE_tableSource = 8 + MySqlParserRULE_querySpecification = 9 + MySqlParserRULE_selectSpec = 10 + MySqlParserRULE_selectElements = 11 + MySqlParserRULE_selectElement = 12 + MySqlParserRULE_fromClause = 13 + MySqlParserRULE_limitClause = 14 + MySqlParserRULE_limitClauseAtom = 15 + MySqlParserRULE_fullId = 16 + MySqlParserRULE_tableName = 17 + MySqlParserRULE_fullColumnName = 18 + MySqlParserRULE_collationName = 19 + MySqlParserRULE_uid = 20 + MySqlParserRULE_simpleId = 21 + MySqlParserRULE_dottedId = 22 + MySqlParserRULE_decimalLiteral = 23 + MySqlParserRULE_stringLiteral = 24 + MySqlParserRULE_booleanLiteral = 25 + MySqlParserRULE_hexadecimalLiteral = 26 + MySqlParserRULE_constant = 27 + MySqlParserRULE_expressions = 28 + MySqlParserRULE_functionCall = 29 + MySqlParserRULE_aggregateWindowedFunction = 30 + MySqlParserRULE_expression = 31 + MySqlParserRULE_predicate = 32 + MySqlParserRULE_expressionAtom = 33 + MySqlParserRULE_unaryOperator = 34 + MySqlParserRULE_comparisonOperator = 35 + MySqlParserRULE_logicalOperator = 36 +) + +// IRootContext is an interface to support dynamic dispatch. +type IRootContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsRootContext differentiates from other interfaces. + IsRootContext() +} + +type RootContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyRootContext() *RootContext { + var p = new(RootContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_root + return p +} + +func (*RootContext) IsRootContext() {} + +func NewRootContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *RootContext { + var p = new(RootContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_root + + return p +} + +func (s *RootContext) GetParser() antlr.Parser { return s.parser } + +func (s *RootContext) EOF() antlr.TerminalNode { + return s.GetToken(MySqlParserEOF, 0) +} + +func (s *RootContext) SqlStatements() ISqlStatementsContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISqlStatementsContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ISqlStatementsContext) +} + +func (s *RootContext) AllMINUS() []antlr.TerminalNode { + return s.GetTokens(MySqlParserMINUS) +} + +func (s *RootContext) MINUS(i int) antlr.TerminalNode { + return s.GetToken(MySqlParserMINUS, i) +} + +func (s *RootContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *RootContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *RootContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitRoot(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) Root() (localctx IRootContext) { + this := p + _ = this + + localctx = NewRootContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 0, MySqlParserRULE_root) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(75) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserSELECT || _la == MySqlParserSEMI { + { + p.SetState(74) + p.SqlStatements() + } + + } + p.SetState(79) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserMINUS { + { + p.SetState(77) + p.Match(MySqlParserMINUS) + } + { + p.SetState(78) + p.Match(MySqlParserMINUS) + } + + } + { + p.SetState(81) + p.Match(MySqlParserEOF) + } + + return localctx +} + +// ISqlStatementsContext is an interface to support dynamic dispatch. +type ISqlStatementsContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsSqlStatementsContext differentiates from other interfaces. + IsSqlStatementsContext() +} + +type SqlStatementsContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptySqlStatementsContext() *SqlStatementsContext { + var p = new(SqlStatementsContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_sqlStatements + return p +} + +func (*SqlStatementsContext) IsSqlStatementsContext() {} + +func NewSqlStatementsContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SqlStatementsContext { + var p = new(SqlStatementsContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_sqlStatements + + return p +} + +func (s *SqlStatementsContext) GetParser() antlr.Parser { return s.parser } + +func (s *SqlStatementsContext) AllSqlStatement() []ISqlStatementContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(ISqlStatementContext); ok { + len++ + } + } + + tst := make([]ISqlStatementContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(ISqlStatementContext); ok { + tst[i] = t.(ISqlStatementContext) + i++ + } + } + + return tst +} + +func (s *SqlStatementsContext) SqlStatement(i int) ISqlStatementContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISqlStatementContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(ISqlStatementContext) +} + +func (s *SqlStatementsContext) AllEmptyStatement_() []IEmptyStatement_Context { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IEmptyStatement_Context); ok { + len++ + } + } + + tst := make([]IEmptyStatement_Context, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IEmptyStatement_Context); ok { + tst[i] = t.(IEmptyStatement_Context) + i++ + } + } + + return tst +} + +func (s *SqlStatementsContext) EmptyStatement_(i int) IEmptyStatement_Context { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IEmptyStatement_Context); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IEmptyStatement_Context) +} + +func (s *SqlStatementsContext) AllSEMI() []antlr.TerminalNode { + return s.GetTokens(MySqlParserSEMI) +} + +func (s *SqlStatementsContext) SEMI(i int) antlr.TerminalNode { + return s.GetToken(MySqlParserSEMI, i) +} + +func (s *SqlStatementsContext) AllMINUS() []antlr.TerminalNode { + return s.GetTokens(MySqlParserMINUS) +} + +func (s *SqlStatementsContext) MINUS(i int) antlr.TerminalNode { + return s.GetToken(MySqlParserMINUS, i) +} + +func (s *SqlStatementsContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SqlStatementsContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *SqlStatementsContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitSqlStatements(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) SqlStatements() (localctx ISqlStatementsContext) { + this := p + _ = this + + localctx = NewSqlStatementsContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 2, MySqlParserRULE_sqlStatements) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + p.SetState(94) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 5, p.GetParserRuleContext()) + + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + p.SetState(92) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserSELECT: + { + p.SetState(83) + p.SqlStatement() + } + p.SetState(86) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserMINUS { + { + p.SetState(84) + p.Match(MySqlParserMINUS) + } + { + p.SetState(85) + p.Match(MySqlParserMINUS) + } + + } + p.SetState(89) + p.GetErrorHandler().Sync(p) + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 3, p.GetParserRuleContext()) == 1 { + { + p.SetState(88) + p.Match(MySqlParserSEMI) + } + + } + + case MySqlParserSEMI: + { + p.SetState(91) + p.EmptyStatement_() + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + } + p.SetState(96) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 5, p.GetParserRuleContext()) + } + p.SetState(106) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserSELECT: + { + p.SetState(97) + p.SqlStatement() + } + p.SetState(103) + p.GetErrorHandler().Sync(p) + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 7, p.GetParserRuleContext()) == 1 { + p.SetState(100) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserMINUS { + { + p.SetState(98) + p.Match(MySqlParserMINUS) + } + { + p.SetState(99) + p.Match(MySqlParserMINUS) + } + + } + { + p.SetState(102) + p.Match(MySqlParserSEMI) + } + + } + + case MySqlParserSEMI: + { + p.SetState(105) + p.EmptyStatement_() + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + return localctx +} + +// ISqlStatementContext is an interface to support dynamic dispatch. +type ISqlStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsSqlStatementContext differentiates from other interfaces. + IsSqlStatementContext() +} + +type SqlStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptySqlStatementContext() *SqlStatementContext { + var p = new(SqlStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_sqlStatement + return p +} + +func (*SqlStatementContext) IsSqlStatementContext() {} + +func NewSqlStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SqlStatementContext { + var p = new(SqlStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_sqlStatement + + return p +} + +func (s *SqlStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *SqlStatementContext) DmlStatement() IDmlStatementContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IDmlStatementContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IDmlStatementContext) +} + +func (s *SqlStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SqlStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *SqlStatementContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitSqlStatement(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) SqlStatement() (localctx ISqlStatementContext) { + this := p + _ = this + + localctx = NewSqlStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 4, MySqlParserRULE_sqlStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(108) + p.DmlStatement() + } + + return localctx +} + +// IEmptyStatement_Context is an interface to support dynamic dispatch. +type IEmptyStatement_Context interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsEmptyStatement_Context differentiates from other interfaces. + IsEmptyStatement_Context() +} + +type EmptyStatement_Context struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyEmptyStatement_Context() *EmptyStatement_Context { + var p = new(EmptyStatement_Context) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_emptyStatement_ + return p +} + +func (*EmptyStatement_Context) IsEmptyStatement_Context() {} + +func NewEmptyStatement_Context(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *EmptyStatement_Context { + var p = new(EmptyStatement_Context) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_emptyStatement_ + + return p +} + +func (s *EmptyStatement_Context) GetParser() antlr.Parser { return s.parser } + +func (s *EmptyStatement_Context) SEMI() antlr.TerminalNode { + return s.GetToken(MySqlParserSEMI, 0) +} + +func (s *EmptyStatement_Context) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *EmptyStatement_Context) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *EmptyStatement_Context) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitEmptyStatement_(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) EmptyStatement_() (localctx IEmptyStatement_Context) { + this := p + _ = this + + localctx = NewEmptyStatement_Context(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 6, MySqlParserRULE_emptyStatement_) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(110) + p.Match(MySqlParserSEMI) + } + + return localctx +} + +// IDmlStatementContext is an interface to support dynamic dispatch. +type IDmlStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsDmlStatementContext differentiates from other interfaces. + IsDmlStatementContext() +} + +type DmlStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyDmlStatementContext() *DmlStatementContext { + var p = new(DmlStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_dmlStatement + return p +} + +func (*DmlStatementContext) IsDmlStatementContext() {} + +func NewDmlStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *DmlStatementContext { + var p = new(DmlStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_dmlStatement + + return p +} + +func (s *DmlStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *DmlStatementContext) SelectStatement() ISelectStatementContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISelectStatementContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ISelectStatementContext) +} + +func (s *DmlStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *DmlStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *DmlStatementContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitDmlStatement(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) DmlStatement() (localctx IDmlStatementContext) { + this := p + _ = this + + localctx = NewDmlStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 8, MySqlParserRULE_dmlStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(112) + p.SelectStatement() + } + + return localctx +} + +// ISelectStatementContext is an interface to support dynamic dispatch. +type ISelectStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsSelectStatementContext differentiates from other interfaces. + IsSelectStatementContext() +} + +type SelectStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptySelectStatementContext() *SelectStatementContext { + var p = new(SelectStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_selectStatement + return p +} + +func (*SelectStatementContext) IsSelectStatementContext() {} + +func NewSelectStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SelectStatementContext { + var p = new(SelectStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_selectStatement + + return p +} + +func (s *SelectStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *SelectStatementContext) CopyFrom(ctx *SelectStatementContext) { + s.BaseParserRuleContext.CopyFrom(ctx.BaseParserRuleContext) +} + +func (s *SelectStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SelectStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +type SimpleSelectContext struct { + *SelectStatementContext +} + +func NewSimpleSelectContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *SimpleSelectContext { + var p = new(SimpleSelectContext) + + p.SelectStatementContext = NewEmptySelectStatementContext() + p.parser = parser + p.CopyFrom(ctx.(*SelectStatementContext)) + + return p +} + +func (s *SimpleSelectContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SimpleSelectContext) QuerySpecification() IQuerySpecificationContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IQuerySpecificationContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IQuerySpecificationContext) +} + +func (s *SimpleSelectContext) LockClause() ILockClauseContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ILockClauseContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ILockClauseContext) +} + +func (s *SimpleSelectContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitSimpleSelect(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) SelectStatement() (localctx ISelectStatementContext) { + this := p + _ = this + + localctx = NewSelectStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 10, MySqlParserRULE_selectStatement) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + localctx = NewSimpleSelectContext(p, localctx) + p.EnterOuterAlt(localctx, 1) + { + p.SetState(114) + p.QuerySpecification() + } + p.SetState(116) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserFOR || _la == MySqlParserLOCK { + { + p.SetState(115) + p.LockClause() + } + + } + + return localctx +} + +// ILockClauseContext is an interface to support dynamic dispatch. +type ILockClauseContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsLockClauseContext differentiates from other interfaces. + IsLockClauseContext() +} + +type LockClauseContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyLockClauseContext() *LockClauseContext { + var p = new(LockClauseContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_lockClause + return p +} + +func (*LockClauseContext) IsLockClauseContext() {} + +func NewLockClauseContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *LockClauseContext { + var p = new(LockClauseContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_lockClause + + return p +} + +func (s *LockClauseContext) GetParser() antlr.Parser { return s.parser } + +func (s *LockClauseContext) FOR() antlr.TerminalNode { + return s.GetToken(MySqlParserFOR, 0) +} + +func (s *LockClauseContext) UPDATE() antlr.TerminalNode { + return s.GetToken(MySqlParserUPDATE, 0) +} + +func (s *LockClauseContext) LOCK() antlr.TerminalNode { + return s.GetToken(MySqlParserLOCK, 0) +} + +func (s *LockClauseContext) IN() antlr.TerminalNode { + return s.GetToken(MySqlParserIN, 0) +} + +func (s *LockClauseContext) SHARE() antlr.TerminalNode { + return s.GetToken(MySqlParserSHARE, 0) +} + +func (s *LockClauseContext) MODE() antlr.TerminalNode { + return s.GetToken(MySqlParserMODE, 0) +} + +func (s *LockClauseContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *LockClauseContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *LockClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitLockClause(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) LockClause() (localctx ILockClauseContext) { + this := p + _ = this + + localctx = NewLockClauseContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 12, MySqlParserRULE_lockClause) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(124) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserFOR: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(118) + p.Match(MySqlParserFOR) + } + { + p.SetState(119) + p.Match(MySqlParserUPDATE) + } + + case MySqlParserLOCK: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(120) + p.Match(MySqlParserLOCK) + } + { + p.SetState(121) + p.Match(MySqlParserIN) + } + { + p.SetState(122) + p.Match(MySqlParserSHARE) + } + { + p.SetState(123) + p.Match(MySqlParserMODE) + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + return localctx +} + +// ITableSourcesContext is an interface to support dynamic dispatch. +type ITableSourcesContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsTableSourcesContext differentiates from other interfaces. + IsTableSourcesContext() +} + +type TableSourcesContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyTableSourcesContext() *TableSourcesContext { + var p = new(TableSourcesContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_tableSources + return p +} + +func (*TableSourcesContext) IsTableSourcesContext() {} + +func NewTableSourcesContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *TableSourcesContext { + var p = new(TableSourcesContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_tableSources + + return p +} + +func (s *TableSourcesContext) GetParser() antlr.Parser { return s.parser } + +func (s *TableSourcesContext) AllTableSource() []ITableSourceContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(ITableSourceContext); ok { + len++ + } + } + + tst := make([]ITableSourceContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(ITableSourceContext); ok { + tst[i] = t.(ITableSourceContext) + i++ + } + } + + return tst +} + +func (s *TableSourcesContext) TableSource(i int) ITableSourceContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITableSourceContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(ITableSourceContext) +} + +func (s *TableSourcesContext) AllCOMMA() []antlr.TerminalNode { + return s.GetTokens(MySqlParserCOMMA) +} + +func (s *TableSourcesContext) COMMA(i int) antlr.TerminalNode { + return s.GetToken(MySqlParserCOMMA, i) +} + +func (s *TableSourcesContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *TableSourcesContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *TableSourcesContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitTableSources(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) TableSources() (localctx ITableSourcesContext) { + this := p + _ = this + + localctx = NewTableSourcesContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 14, MySqlParserRULE_tableSources) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(126) + p.TableSource() + } + p.SetState(131) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + for _la == MySqlParserCOMMA { + { + p.SetState(127) + p.Match(MySqlParserCOMMA) + } + { + p.SetState(128) + p.TableSource() + } + + p.SetState(133) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + return localctx +} + +// ITableSourceContext is an interface to support dynamic dispatch. +type ITableSourceContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsTableSourceContext differentiates from other interfaces. + IsTableSourceContext() +} + +type TableSourceContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyTableSourceContext() *TableSourceContext { + var p = new(TableSourceContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_tableSource + return p +} + +func (*TableSourceContext) IsTableSourceContext() {} + +func NewTableSourceContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *TableSourceContext { + var p = new(TableSourceContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_tableSource + + return p +} + +func (s *TableSourceContext) GetParser() antlr.Parser { return s.parser } + +func (s *TableSourceContext) CopyFrom(ctx *TableSourceContext) { + s.BaseParserRuleContext.CopyFrom(ctx.BaseParserRuleContext) +} + +func (s *TableSourceContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *TableSourceContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +type TableSourceBaseContext struct { + *TableSourceContext +} + +func NewTableSourceBaseContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *TableSourceBaseContext { + var p = new(TableSourceBaseContext) + + p.TableSourceContext = NewEmptyTableSourceContext() + p.parser = parser + p.CopyFrom(ctx.(*TableSourceContext)) + + return p +} + +func (s *TableSourceBaseContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *TableSourceBaseContext) TableName() ITableNameContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITableNameContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ITableNameContext) +} + +func (s *TableSourceBaseContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitTableSourceBase(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) TableSource() (localctx ITableSourceContext) { + this := p + _ = this + + localctx = NewTableSourceContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 16, MySqlParserRULE_tableSource) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + localctx = NewTableSourceBaseContext(p, localctx) + p.EnterOuterAlt(localctx, 1) + { + p.SetState(134) + p.TableName() + } + + return localctx +} + +// IQuerySpecificationContext is an interface to support dynamic dispatch. +type IQuerySpecificationContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsQuerySpecificationContext differentiates from other interfaces. + IsQuerySpecificationContext() +} + +type QuerySpecificationContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyQuerySpecificationContext() *QuerySpecificationContext { + var p = new(QuerySpecificationContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_querySpecification + return p +} + +func (*QuerySpecificationContext) IsQuerySpecificationContext() {} + +func NewQuerySpecificationContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *QuerySpecificationContext { + var p = new(QuerySpecificationContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_querySpecification + + return p +} + +func (s *QuerySpecificationContext) GetParser() antlr.Parser { return s.parser } + +func (s *QuerySpecificationContext) SELECT() antlr.TerminalNode { + return s.GetToken(MySqlParserSELECT, 0) +} + +func (s *QuerySpecificationContext) SelectElements() ISelectElementsContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISelectElementsContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ISelectElementsContext) +} + +func (s *QuerySpecificationContext) AllSelectSpec() []ISelectSpecContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(ISelectSpecContext); ok { + len++ + } + } + + tst := make([]ISelectSpecContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(ISelectSpecContext); ok { + tst[i] = t.(ISelectSpecContext) + i++ + } + } + + return tst +} + +func (s *QuerySpecificationContext) SelectSpec(i int) ISelectSpecContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISelectSpecContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(ISelectSpecContext) +} + +func (s *QuerySpecificationContext) FromClause() IFromClauseContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFromClauseContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IFromClauseContext) +} + +func (s *QuerySpecificationContext) LimitClause() ILimitClauseContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ILimitClauseContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ILimitClauseContext) +} + +func (s *QuerySpecificationContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *QuerySpecificationContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *QuerySpecificationContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitQuerySpecification(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) QuerySpecification() (localctx IQuerySpecificationContext) { + this := p + _ = this + + localctx = NewQuerySpecificationContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 18, MySqlParserRULE_querySpecification) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(136) + p.Match(MySqlParserSELECT) + } + p.SetState(140) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 12, p.GetParserRuleContext()) + + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + { + p.SetState(137) + p.SelectSpec() + } + + } + p.SetState(142) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 12, p.GetParserRuleContext()) + } + { + p.SetState(143) + p.SelectElements() + } + p.SetState(145) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserFROM { + { + p.SetState(144) + p.FromClause() + } + + } + p.SetState(148) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserLIMIT { + { + p.SetState(147) + p.LimitClause() + } + + } + + return localctx +} + +// ISelectSpecContext is an interface to support dynamic dispatch. +type ISelectSpecContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsSelectSpecContext differentiates from other interfaces. + IsSelectSpecContext() +} + +type SelectSpecContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptySelectSpecContext() *SelectSpecContext { + var p = new(SelectSpecContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_selectSpec + return p +} + +func (*SelectSpecContext) IsSelectSpecContext() {} + +func NewSelectSpecContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SelectSpecContext { + var p = new(SelectSpecContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_selectSpec + + return p +} + +func (s *SelectSpecContext) GetParser() antlr.Parser { return s.parser } + +func (s *SelectSpecContext) ALL() antlr.TerminalNode { + return s.GetToken(MySqlParserALL, 0) +} + +func (s *SelectSpecContext) DISTINCT() antlr.TerminalNode { + return s.GetToken(MySqlParserDISTINCT, 0) +} + +func (s *SelectSpecContext) DISTINCTROW() antlr.TerminalNode { + return s.GetToken(MySqlParserDISTINCTROW, 0) +} + +func (s *SelectSpecContext) HIGH_PRIORITY() antlr.TerminalNode { + return s.GetToken(MySqlParserHIGH_PRIORITY, 0) +} + +func (s *SelectSpecContext) STRAIGHT_JOIN() antlr.TerminalNode { + return s.GetToken(MySqlParserSTRAIGHT_JOIN, 0) +} + +func (s *SelectSpecContext) SQL_SMALL_RESULT() antlr.TerminalNode { + return s.GetToken(MySqlParserSQL_SMALL_RESULT, 0) +} + +func (s *SelectSpecContext) SQL_BIG_RESULT() antlr.TerminalNode { + return s.GetToken(MySqlParserSQL_BIG_RESULT, 0) +} + +func (s *SelectSpecContext) SQL_BUFFER_RESULT() antlr.TerminalNode { + return s.GetToken(MySqlParserSQL_BUFFER_RESULT, 0) +} + +func (s *SelectSpecContext) SQL_CACHE() antlr.TerminalNode { + return s.GetToken(MySqlParserSQL_CACHE, 0) +} + +func (s *SelectSpecContext) SQL_NO_CACHE() antlr.TerminalNode { + return s.GetToken(MySqlParserSQL_NO_CACHE, 0) +} + +func (s *SelectSpecContext) SQL_CALC_FOUND_ROWS() antlr.TerminalNode { + return s.GetToken(MySqlParserSQL_CALC_FOUND_ROWS, 0) +} + +func (s *SelectSpecContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SelectSpecContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *SelectSpecContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitSelectSpec(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) SelectSpec() (localctx ISelectSpecContext) { + this := p + _ = this + + localctx = NewSelectSpecContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 20, MySqlParserRULE_selectSpec) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(158) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserALL, MySqlParserDISTINCT, MySqlParserDISTINCTROW: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(150) + _la = p.GetTokenStream().LA(1) + + if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&1688849860264000) != 0) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + case MySqlParserHIGH_PRIORITY: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(151) + p.Match(MySqlParserHIGH_PRIORITY) + } + + case MySqlParserSTRAIGHT_JOIN: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(152) + p.Match(MySqlParserSTRAIGHT_JOIN) + } + + case MySqlParserSQL_SMALL_RESULT: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(153) + p.Match(MySqlParserSQL_SMALL_RESULT) + } + + case MySqlParserSQL_BIG_RESULT: + p.EnterOuterAlt(localctx, 5) + { + p.SetState(154) + p.Match(MySqlParserSQL_BIG_RESULT) + } + + case MySqlParserSQL_BUFFER_RESULT: + p.EnterOuterAlt(localctx, 6) + { + p.SetState(155) + p.Match(MySqlParserSQL_BUFFER_RESULT) + } + + case MySqlParserSQL_CACHE, MySqlParserSQL_NO_CACHE: + p.EnterOuterAlt(localctx, 7) + { + p.SetState(156) + _la = p.GetTokenStream().LA(1) + + if !(_la == MySqlParserSQL_CACHE || _la == MySqlParserSQL_NO_CACHE) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + case MySqlParserSQL_CALC_FOUND_ROWS: + p.EnterOuterAlt(localctx, 8) + { + p.SetState(157) + p.Match(MySqlParserSQL_CALC_FOUND_ROWS) + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + return localctx +} + +// ISelectElementsContext is an interface to support dynamic dispatch. +type ISelectElementsContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // GetStar returns the star token. + GetStar() antlr.Token + + // SetStar sets the star token. + SetStar(antlr.Token) + + // IsSelectElementsContext differentiates from other interfaces. + IsSelectElementsContext() +} + +type SelectElementsContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser + star antlr.Token +} + +func NewEmptySelectElementsContext() *SelectElementsContext { + var p = new(SelectElementsContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_selectElements + return p +} + +func (*SelectElementsContext) IsSelectElementsContext() {} + +func NewSelectElementsContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SelectElementsContext { + var p = new(SelectElementsContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_selectElements + + return p +} + +func (s *SelectElementsContext) GetParser() antlr.Parser { return s.parser } + +func (s *SelectElementsContext) GetStar() antlr.Token { return s.star } + +func (s *SelectElementsContext) SetStar(v antlr.Token) { s.star = v } + +func (s *SelectElementsContext) AllSelectElement() []ISelectElementContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(ISelectElementContext); ok { + len++ + } + } + + tst := make([]ISelectElementContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(ISelectElementContext); ok { + tst[i] = t.(ISelectElementContext) + i++ + } + } + + return tst +} + +func (s *SelectElementsContext) SelectElement(i int) ISelectElementContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISelectElementContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(ISelectElementContext) +} + +func (s *SelectElementsContext) STAR() antlr.TerminalNode { + return s.GetToken(MySqlParserSTAR, 0) +} + +func (s *SelectElementsContext) AllCOMMA() []antlr.TerminalNode { + return s.GetTokens(MySqlParserCOMMA) +} + +func (s *SelectElementsContext) COMMA(i int) antlr.TerminalNode { + return s.GetToken(MySqlParserCOMMA, i) +} + +func (s *SelectElementsContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SelectElementsContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *SelectElementsContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitSelectElements(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) SelectElements() (localctx ISelectElementsContext) { + this := p + _ = this + + localctx = NewSelectElementsContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 22, MySqlParserRULE_selectElements) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(162) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 16, p.GetParserRuleContext()) { + case 1: + { + p.SetState(160) + + var _m = p.Match(MySqlParserSTAR) + + localctx.(*SelectElementsContext).star = _m + } + + case 2: + { + p.SetState(161) + p.SelectElement() + } + + } + p.SetState(168) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + for _la == MySqlParserCOMMA { + { + p.SetState(164) + p.Match(MySqlParserCOMMA) + } + { + p.SetState(165) + p.SelectElement() + } + + p.SetState(170) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + return localctx +} + +// ISelectElementContext is an interface to support dynamic dispatch. +type ISelectElementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsSelectElementContext differentiates from other interfaces. + IsSelectElementContext() +} + +type SelectElementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptySelectElementContext() *SelectElementContext { + var p = new(SelectElementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_selectElement + return p +} + +func (*SelectElementContext) IsSelectElementContext() {} + +func NewSelectElementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SelectElementContext { + var p = new(SelectElementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_selectElement + + return p +} + +func (s *SelectElementContext) GetParser() antlr.Parser { return s.parser } + +func (s *SelectElementContext) CopyFrom(ctx *SelectElementContext) { + s.BaseParserRuleContext.CopyFrom(ctx.BaseParserRuleContext) +} + +func (s *SelectElementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SelectElementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +type SelectFunctionElementContext struct { + *SelectElementContext +} + +func NewSelectFunctionElementContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *SelectFunctionElementContext { + var p = new(SelectFunctionElementContext) + + p.SelectElementContext = NewEmptySelectElementContext() + p.parser = parser + p.CopyFrom(ctx.(*SelectElementContext)) + + return p +} + +func (s *SelectFunctionElementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SelectFunctionElementContext) FunctionCall() IFunctionCallContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFunctionCallContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IFunctionCallContext) +} + +func (s *SelectFunctionElementContext) Uid() IUidContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUidContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IUidContext) +} + +func (s *SelectFunctionElementContext) AS() antlr.TerminalNode { + return s.GetToken(MySqlParserAS, 0) +} + +func (s *SelectFunctionElementContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitSelectFunctionElement(s) + + default: + return t.VisitChildren(s) + } +} + +type SelectColumnElementContext struct { + *SelectElementContext +} + +func NewSelectColumnElementContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *SelectColumnElementContext { + var p = new(SelectColumnElementContext) + + p.SelectElementContext = NewEmptySelectElementContext() + p.parser = parser + p.CopyFrom(ctx.(*SelectElementContext)) + + return p +} + +func (s *SelectColumnElementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SelectColumnElementContext) FullColumnName() IFullColumnNameContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFullColumnNameContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IFullColumnNameContext) +} + +func (s *SelectColumnElementContext) Uid() IUidContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUidContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IUidContext) +} + +func (s *SelectColumnElementContext) AS() antlr.TerminalNode { + return s.GetToken(MySqlParserAS, 0) +} + +func (s *SelectColumnElementContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitSelectColumnElement(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) SelectElement() (localctx ISelectElementContext) { + this := p + _ = this + + localctx = NewSelectElementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 24, MySqlParserRULE_selectElement) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(185) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 22, p.GetParserRuleContext()) { + case 1: + localctx = NewSelectColumnElementContext(p, localctx) + p.EnterOuterAlt(localctx, 1) + { + p.SetState(171) + p.FullColumnName() + } + p.SetState(176) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserAS || (int64((_la-1138)) & ^0x3f) == 0 && ((int64(1)<<(_la-1138))&6145) != 0 { + p.SetState(173) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserAS { + { + p.SetState(172) + p.Match(MySqlParserAS) + } + + } + { + p.SetState(175) + p.Uid() + } + + } + + case 2: + localctx = NewSelectFunctionElementContext(p, localctx) + p.EnterOuterAlt(localctx, 2) + { + p.SetState(178) + p.FunctionCall() + } + p.SetState(183) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserAS || (int64((_la-1138)) & ^0x3f) == 0 && ((int64(1)<<(_la-1138))&6145) != 0 { + p.SetState(180) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserAS { + { + p.SetState(179) + p.Match(MySqlParserAS) + } + + } + { + p.SetState(182) + p.Uid() + } + + } + + } + + return localctx +} + +// IFromClauseContext is an interface to support dynamic dispatch. +type IFromClauseContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // GetWhereExpr returns the whereExpr rule contexts. + GetWhereExpr() IExpressionContext + + // SetWhereExpr sets the whereExpr rule contexts. + SetWhereExpr(IExpressionContext) + + // IsFromClauseContext differentiates from other interfaces. + IsFromClauseContext() +} + +type FromClauseContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser + whereExpr IExpressionContext +} + +func NewEmptyFromClauseContext() *FromClauseContext { + var p = new(FromClauseContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_fromClause + return p +} + +func (*FromClauseContext) IsFromClauseContext() {} + +func NewFromClauseContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *FromClauseContext { + var p = new(FromClauseContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_fromClause + + return p +} + +func (s *FromClauseContext) GetParser() antlr.Parser { return s.parser } + +func (s *FromClauseContext) GetWhereExpr() IExpressionContext { return s.whereExpr } + +func (s *FromClauseContext) SetWhereExpr(v IExpressionContext) { s.whereExpr = v } + +func (s *FromClauseContext) FROM() antlr.TerminalNode { + return s.GetToken(MySqlParserFROM, 0) +} + +func (s *FromClauseContext) TableSources() ITableSourcesContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITableSourcesContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ITableSourcesContext) +} + +func (s *FromClauseContext) WHERE() antlr.TerminalNode { + return s.GetToken(MySqlParserWHERE, 0) +} + +func (s *FromClauseContext) Expression() IExpressionContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *FromClauseContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *FromClauseContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *FromClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitFromClause(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) FromClause() (localctx IFromClauseContext) { + this := p + _ = this + + localctx = NewFromClauseContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 26, MySqlParserRULE_fromClause) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(187) + p.Match(MySqlParserFROM) + } + { + p.SetState(188) + p.TableSources() + } + + p.SetState(192) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserWHERE { + { + p.SetState(190) + p.Match(MySqlParserWHERE) + } + { + p.SetState(191) + + var _x = p.expression(0) + + localctx.(*FromClauseContext).whereExpr = _x + } + + } + + return localctx +} + +// ILimitClauseContext is an interface to support dynamic dispatch. +type ILimitClauseContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // GetOffset returns the offset rule contexts. + GetOffset() ILimitClauseAtomContext + + // GetLimit returns the limit rule contexts. + GetLimit() ILimitClauseAtomContext + + // SetOffset sets the offset rule contexts. + SetOffset(ILimitClauseAtomContext) + + // SetLimit sets the limit rule contexts. + SetLimit(ILimitClauseAtomContext) + + // IsLimitClauseContext differentiates from other interfaces. + IsLimitClauseContext() +} + +type LimitClauseContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser + offset ILimitClauseAtomContext + limit ILimitClauseAtomContext +} + +func NewEmptyLimitClauseContext() *LimitClauseContext { + var p = new(LimitClauseContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_limitClause + return p +} + +func (*LimitClauseContext) IsLimitClauseContext() {} + +func NewLimitClauseContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *LimitClauseContext { + var p = new(LimitClauseContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_limitClause + + return p +} + +func (s *LimitClauseContext) GetParser() antlr.Parser { return s.parser } + +func (s *LimitClauseContext) GetOffset() ILimitClauseAtomContext { return s.offset } + +func (s *LimitClauseContext) GetLimit() ILimitClauseAtomContext { return s.limit } + +func (s *LimitClauseContext) SetOffset(v ILimitClauseAtomContext) { s.offset = v } + +func (s *LimitClauseContext) SetLimit(v ILimitClauseAtomContext) { s.limit = v } + +func (s *LimitClauseContext) LIMIT() antlr.TerminalNode { + return s.GetToken(MySqlParserLIMIT, 0) +} + +func (s *LimitClauseContext) OFFSET() antlr.TerminalNode { + return s.GetToken(MySqlParserOFFSET, 0) +} + +func (s *LimitClauseContext) AllLimitClauseAtom() []ILimitClauseAtomContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(ILimitClauseAtomContext); ok { + len++ + } + } + + tst := make([]ILimitClauseAtomContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(ILimitClauseAtomContext); ok { + tst[i] = t.(ILimitClauseAtomContext) + i++ + } + } + + return tst +} + +func (s *LimitClauseContext) LimitClauseAtom(i int) ILimitClauseAtomContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ILimitClauseAtomContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(ILimitClauseAtomContext) +} + +func (s *LimitClauseContext) COMMA() antlr.TerminalNode { + return s.GetToken(MySqlParserCOMMA, 0) +} + +func (s *LimitClauseContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *LimitClauseContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *LimitClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitLimitClause(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) LimitClause() (localctx ILimitClauseContext) { + this := p + _ = this + + localctx = NewLimitClauseContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 28, MySqlParserRULE_limitClause) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(194) + p.Match(MySqlParserLIMIT) + } + p.SetState(205) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 25, p.GetParserRuleContext()) { + case 1: + p.SetState(198) + p.GetErrorHandler().Sync(p) + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 24, p.GetParserRuleContext()) == 1 { + { + p.SetState(195) + + var _x = p.LimitClauseAtom() + + localctx.(*LimitClauseContext).offset = _x + } + { + p.SetState(196) + p.Match(MySqlParserCOMMA) + } + + } + { + p.SetState(200) + + var _x = p.LimitClauseAtom() + + localctx.(*LimitClauseContext).limit = _x + } + + case 2: + { + p.SetState(201) + + var _x = p.LimitClauseAtom() + + localctx.(*LimitClauseContext).limit = _x + } + { + p.SetState(202) + p.Match(MySqlParserOFFSET) + } + { + p.SetState(203) + + var _x = p.LimitClauseAtom() + + localctx.(*LimitClauseContext).offset = _x + } + + } + + return localctx +} + +// ILimitClauseAtomContext is an interface to support dynamic dispatch. +type ILimitClauseAtomContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsLimitClauseAtomContext differentiates from other interfaces. + IsLimitClauseAtomContext() +} + +type LimitClauseAtomContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyLimitClauseAtomContext() *LimitClauseAtomContext { + var p = new(LimitClauseAtomContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_limitClauseAtom + return p +} + +func (*LimitClauseAtomContext) IsLimitClauseAtomContext() {} + +func NewLimitClauseAtomContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *LimitClauseAtomContext { + var p = new(LimitClauseAtomContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_limitClauseAtom + + return p +} + +func (s *LimitClauseAtomContext) GetParser() antlr.Parser { return s.parser } + +func (s *LimitClauseAtomContext) DecimalLiteral() IDecimalLiteralContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IDecimalLiteralContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IDecimalLiteralContext) +} + +func (s *LimitClauseAtomContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *LimitClauseAtomContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *LimitClauseAtomContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitLimitClauseAtom(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) LimitClauseAtom() (localctx ILimitClauseAtomContext) { + this := p + _ = this + + localctx = NewLimitClauseAtomContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 30, MySqlParserRULE_limitClauseAtom) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(207) + p.DecimalLiteral() + } + + return localctx +} + +// IFullIdContext is an interface to support dynamic dispatch. +type IFullIdContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsFullIdContext differentiates from other interfaces. + IsFullIdContext() +} + +type FullIdContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyFullIdContext() *FullIdContext { + var p = new(FullIdContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_fullId + return p +} + +func (*FullIdContext) IsFullIdContext() {} + +func NewFullIdContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *FullIdContext { + var p = new(FullIdContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_fullId + + return p +} + +func (s *FullIdContext) GetParser() antlr.Parser { return s.parser } + +func (s *FullIdContext) AllUid() []IUidContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IUidContext); ok { + len++ + } + } + + tst := make([]IUidContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IUidContext); ok { + tst[i] = t.(IUidContext) + i++ + } + } + + return tst +} + +func (s *FullIdContext) Uid(i int) IUidContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUidContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IUidContext) +} + +func (s *FullIdContext) DOT_ID() antlr.TerminalNode { + return s.GetToken(MySqlParserDOT_ID, 0) +} + +func (s *FullIdContext) DOT() antlr.TerminalNode { + return s.GetToken(MySqlParserDOT, 0) +} + +func (s *FullIdContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *FullIdContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *FullIdContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitFullId(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) FullId() (localctx IFullIdContext) { + this := p + _ = this + + localctx = NewFullIdContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 32, MySqlParserRULE_fullId) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(209) + p.Uid() + } + p.SetState(213) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserDOT_ID: + { + p.SetState(210) + p.Match(MySqlParserDOT_ID) + } + + case MySqlParserDOT: + { + p.SetState(211) + p.Match(MySqlParserDOT) + } + { + p.SetState(212) + p.Uid() + } + + case MySqlParserEOF, MySqlParserFOR, MySqlParserLIMIT, MySqlParserLOCK, MySqlParserSELECT, MySqlParserWHERE, MySqlParserMINUS, MySqlParserCOMMA, MySqlParserSEMI: + + default: + } + + return localctx +} + +// ITableNameContext is an interface to support dynamic dispatch. +type ITableNameContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsTableNameContext differentiates from other interfaces. + IsTableNameContext() +} + +type TableNameContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyTableNameContext() *TableNameContext { + var p = new(TableNameContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_tableName + return p +} + +func (*TableNameContext) IsTableNameContext() {} + +func NewTableNameContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *TableNameContext { + var p = new(TableNameContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_tableName + + return p +} + +func (s *TableNameContext) GetParser() antlr.Parser { return s.parser } + +func (s *TableNameContext) FullId() IFullIdContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFullIdContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IFullIdContext) +} + +func (s *TableNameContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *TableNameContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *TableNameContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitTableName(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) TableName() (localctx ITableNameContext) { + this := p + _ = this + + localctx = NewTableNameContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 34, MySqlParserRULE_tableName) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(215) + p.FullId() + } + + return localctx +} + +// IFullColumnNameContext is an interface to support dynamic dispatch. +type IFullColumnNameContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsFullColumnNameContext differentiates from other interfaces. + IsFullColumnNameContext() +} + +type FullColumnNameContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyFullColumnNameContext() *FullColumnNameContext { + var p = new(FullColumnNameContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_fullColumnName + return p +} + +func (*FullColumnNameContext) IsFullColumnNameContext() {} + +func NewFullColumnNameContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *FullColumnNameContext { + var p = new(FullColumnNameContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_fullColumnName + + return p +} + +func (s *FullColumnNameContext) GetParser() antlr.Parser { return s.parser } + +func (s *FullColumnNameContext) Uid() IUidContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUidContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IUidContext) +} + +func (s *FullColumnNameContext) AllDottedId() []IDottedIdContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IDottedIdContext); ok { + len++ + } + } + + tst := make([]IDottedIdContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IDottedIdContext); ok { + tst[i] = t.(IDottedIdContext) + i++ + } + } + + return tst +} + +func (s *FullColumnNameContext) DottedId(i int) IDottedIdContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IDottedIdContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IDottedIdContext) +} + +func (s *FullColumnNameContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *FullColumnNameContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *FullColumnNameContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitFullColumnName(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) FullColumnName() (localctx IFullColumnNameContext) { + this := p + _ = this + + localctx = NewFullColumnNameContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 36, MySqlParserRULE_fullColumnName) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(231) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 31, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(217) + p.Uid() + } + p.SetState(222) + p.GetErrorHandler().Sync(p) + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 28, p.GetParserRuleContext()) == 1 { + { + p.SetState(218) + p.DottedId() + } + p.SetState(220) + p.GetErrorHandler().Sync(p) + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 27, p.GetParserRuleContext()) == 1 { + { + p.SetState(219) + p.DottedId() + } + + } + + } + + case 2: + p.EnterOuterAlt(localctx, 2) + p.SetState(225) + p.GetErrorHandler().Sync(p) + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 29, p.GetParserRuleContext()) == 1 { + p.SetState(224) + p.MatchWildcard() + + } + { + p.SetState(227) + p.DottedId() + } + p.SetState(229) + p.GetErrorHandler().Sync(p) + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 30, p.GetParserRuleContext()) == 1 { + { + p.SetState(228) + p.DottedId() + } + + } + + } + + return localctx +} + +// ICollationNameContext is an interface to support dynamic dispatch. +type ICollationNameContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsCollationNameContext differentiates from other interfaces. + IsCollationNameContext() +} + +type CollationNameContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyCollationNameContext() *CollationNameContext { + var p = new(CollationNameContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_collationName + return p +} + +func (*CollationNameContext) IsCollationNameContext() {} + +func NewCollationNameContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *CollationNameContext { + var p = new(CollationNameContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_collationName + + return p +} + +func (s *CollationNameContext) GetParser() antlr.Parser { return s.parser } + +func (s *CollationNameContext) Uid() IUidContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUidContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IUidContext) +} + +func (s *CollationNameContext) STRING_LITERAL() antlr.TerminalNode { + return s.GetToken(MySqlParserSTRING_LITERAL, 0) +} + +func (s *CollationNameContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *CollationNameContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *CollationNameContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitCollationName(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) CollationName() (localctx ICollationNameContext) { + this := p + _ = this + + localctx = NewCollationNameContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 38, MySqlParserRULE_collationName) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(235) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserCHARSET_REVERSE_QOUTE_STRING, MySqlParserID, MySqlParserREVERSE_QUOTE_ID: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(233) + p.Uid() + } + + case MySqlParserSTRING_LITERAL: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(234) + p.Match(MySqlParserSTRING_LITERAL) + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + return localctx +} + +// IUidContext is an interface to support dynamic dispatch. +type IUidContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsUidContext differentiates from other interfaces. + IsUidContext() +} + +type UidContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyUidContext() *UidContext { + var p = new(UidContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_uid + return p +} + +func (*UidContext) IsUidContext() {} + +func NewUidContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *UidContext { + var p = new(UidContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_uid + + return p +} + +func (s *UidContext) GetParser() antlr.Parser { return s.parser } + +func (s *UidContext) SimpleId() ISimpleIdContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISimpleIdContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ISimpleIdContext) +} + +func (s *UidContext) REVERSE_QUOTE_ID() antlr.TerminalNode { + return s.GetToken(MySqlParserREVERSE_QUOTE_ID, 0) +} + +func (s *UidContext) CHARSET_REVERSE_QOUTE_STRING() antlr.TerminalNode { + return s.GetToken(MySqlParserCHARSET_REVERSE_QOUTE_STRING, 0) +} + +func (s *UidContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *UidContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *UidContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitUid(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) Uid() (localctx IUidContext) { + this := p + _ = this + + localctx = NewUidContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 40, MySqlParserRULE_uid) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(240) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserID: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(237) + p.SimpleId() + } + + case MySqlParserREVERSE_QUOTE_ID: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(238) + p.Match(MySqlParserREVERSE_QUOTE_ID) + } + + case MySqlParserCHARSET_REVERSE_QOUTE_STRING: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(239) + p.Match(MySqlParserCHARSET_REVERSE_QOUTE_STRING) + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + return localctx +} + +// ISimpleIdContext is an interface to support dynamic dispatch. +type ISimpleIdContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsSimpleIdContext differentiates from other interfaces. + IsSimpleIdContext() +} + +type SimpleIdContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptySimpleIdContext() *SimpleIdContext { + var p = new(SimpleIdContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_simpleId + return p +} + +func (*SimpleIdContext) IsSimpleIdContext() {} + +func NewSimpleIdContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SimpleIdContext { + var p = new(SimpleIdContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_simpleId + + return p +} + +func (s *SimpleIdContext) GetParser() antlr.Parser { return s.parser } + +func (s *SimpleIdContext) ID() antlr.TerminalNode { + return s.GetToken(MySqlParserID, 0) +} + +func (s *SimpleIdContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SimpleIdContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *SimpleIdContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitSimpleId(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) SimpleId() (localctx ISimpleIdContext) { + this := p + _ = this + + localctx = NewSimpleIdContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 42, MySqlParserRULE_simpleId) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(242) + p.Match(MySqlParserID) + } + + return localctx +} + +// IDottedIdContext is an interface to support dynamic dispatch. +type IDottedIdContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsDottedIdContext differentiates from other interfaces. + IsDottedIdContext() +} + +type DottedIdContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyDottedIdContext() *DottedIdContext { + var p = new(DottedIdContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_dottedId + return p +} + +func (*DottedIdContext) IsDottedIdContext() {} + +func NewDottedIdContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *DottedIdContext { + var p = new(DottedIdContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_dottedId + + return p +} + +func (s *DottedIdContext) GetParser() antlr.Parser { return s.parser } + +func (s *DottedIdContext) DOT_ID() antlr.TerminalNode { + return s.GetToken(MySqlParserDOT_ID, 0) +} + +func (s *DottedIdContext) DOT() antlr.TerminalNode { + return s.GetToken(MySqlParserDOT, 0) +} + +func (s *DottedIdContext) Uid() IUidContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUidContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IUidContext) +} + +func (s *DottedIdContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *DottedIdContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *DottedIdContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitDottedId(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) DottedId() (localctx IDottedIdContext) { + this := p + _ = this + + localctx = NewDottedIdContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 44, MySqlParserRULE_dottedId) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(247) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserDOT_ID: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(244) + p.Match(MySqlParserDOT_ID) + } + + case MySqlParserDOT: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(245) + p.Match(MySqlParserDOT) + } + { + p.SetState(246) + p.Uid() + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + return localctx +} + +// IDecimalLiteralContext is an interface to support dynamic dispatch. +type IDecimalLiteralContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsDecimalLiteralContext differentiates from other interfaces. + IsDecimalLiteralContext() +} + +type DecimalLiteralContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyDecimalLiteralContext() *DecimalLiteralContext { + var p = new(DecimalLiteralContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_decimalLiteral + return p +} + +func (*DecimalLiteralContext) IsDecimalLiteralContext() {} + +func NewDecimalLiteralContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *DecimalLiteralContext { + var p = new(DecimalLiteralContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_decimalLiteral + + return p +} + +func (s *DecimalLiteralContext) GetParser() antlr.Parser { return s.parser } + +func (s *DecimalLiteralContext) DECIMAL_LITERAL() antlr.TerminalNode { + return s.GetToken(MySqlParserDECIMAL_LITERAL, 0) +} + +func (s *DecimalLiteralContext) ZERO_DECIMAL() antlr.TerminalNode { + return s.GetToken(MySqlParserZERO_DECIMAL, 0) +} + +func (s *DecimalLiteralContext) ONE_DECIMAL() antlr.TerminalNode { + return s.GetToken(MySqlParserONE_DECIMAL, 0) +} + +func (s *DecimalLiteralContext) TWO_DECIMAL() antlr.TerminalNode { + return s.GetToken(MySqlParserTWO_DECIMAL, 0) +} + +func (s *DecimalLiteralContext) REAL_LITERAL() antlr.TerminalNode { + return s.GetToken(MySqlParserREAL_LITERAL, 0) +} + +func (s *DecimalLiteralContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *DecimalLiteralContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *DecimalLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitDecimalLiteral(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) DecimalLiteral() (localctx IDecimalLiteralContext) { + this := p + _ = this + + localctx = NewDecimalLiteralContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 46, MySqlParserRULE_decimalLiteral) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(249) + _la = p.GetTokenStream().LA(1) + + if !((int64((_la-1131)) & ^0x3f) == 0 && ((int64(1)<<(_la-1131))&10247) != 0) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + return localctx +} + +// IStringLiteralContext is an interface to support dynamic dispatch. +type IStringLiteralContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsStringLiteralContext differentiates from other interfaces. + IsStringLiteralContext() +} + +type StringLiteralContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyStringLiteralContext() *StringLiteralContext { + var p = new(StringLiteralContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_stringLiteral + return p +} + +func (*StringLiteralContext) IsStringLiteralContext() {} + +func NewStringLiteralContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *StringLiteralContext { + var p = new(StringLiteralContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_stringLiteral + + return p +} + +func (s *StringLiteralContext) GetParser() antlr.Parser { return s.parser } + +func (s *StringLiteralContext) AllSTRING_LITERAL() []antlr.TerminalNode { + return s.GetTokens(MySqlParserSTRING_LITERAL) +} + +func (s *StringLiteralContext) STRING_LITERAL(i int) antlr.TerminalNode { + return s.GetToken(MySqlParserSTRING_LITERAL, i) +} + +func (s *StringLiteralContext) START_NATIONAL_STRING_LITERAL() antlr.TerminalNode { + return s.GetToken(MySqlParserSTART_NATIONAL_STRING_LITERAL, 0) +} + +func (s *StringLiteralContext) STRING_CHARSET_NAME() antlr.TerminalNode { + return s.GetToken(MySqlParserSTRING_CHARSET_NAME, 0) +} + +func (s *StringLiteralContext) COLLATE() antlr.TerminalNode { + return s.GetToken(MySqlParserCOLLATE, 0) +} + +func (s *StringLiteralContext) CollationName() ICollationNameContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ICollationNameContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ICollationNameContext) +} + +func (s *StringLiteralContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *StringLiteralContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *StringLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitStringLiteral(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) StringLiteral() (localctx IStringLiteralContext) { + this := p + _ = this + + localctx = NewStringLiteralContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 48, MySqlParserRULE_stringLiteral) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.SetState(274) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 41, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + p.SetState(256) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserSTRING_LITERAL, MySqlParserSTRING_CHARSET_NAME: + p.SetState(252) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserSTRING_CHARSET_NAME { + { + p.SetState(251) + p.Match(MySqlParserSTRING_CHARSET_NAME) + } + + } + { + p.SetState(254) + p.Match(MySqlParserSTRING_LITERAL) + } + + case MySqlParserSTART_NATIONAL_STRING_LITERAL: + { + p.SetState(255) + p.Match(MySqlParserSTART_NATIONAL_STRING_LITERAL) + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + p.SetState(259) + p.GetErrorHandler().Sync(p) + _alt = 1 + for ok := true; ok; ok = _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + switch _alt { + case 1: + { + p.SetState(258) + p.Match(MySqlParserSTRING_LITERAL) + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + p.SetState(261) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 37, p.GetParserRuleContext()) + } + + case 2: + p.EnterOuterAlt(localctx, 2) + p.SetState(268) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserSTRING_LITERAL, MySqlParserSTRING_CHARSET_NAME: + p.SetState(264) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserSTRING_CHARSET_NAME { + { + p.SetState(263) + p.Match(MySqlParserSTRING_CHARSET_NAME) + } + + } + { + p.SetState(266) + p.Match(MySqlParserSTRING_LITERAL) + } + + case MySqlParserSTART_NATIONAL_STRING_LITERAL: + { + p.SetState(267) + p.Match(MySqlParserSTART_NATIONAL_STRING_LITERAL) + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + p.SetState(272) + p.GetErrorHandler().Sync(p) + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 40, p.GetParserRuleContext()) == 1 { + { + p.SetState(270) + p.Match(MySqlParserCOLLATE) + } + { + p.SetState(271) + p.CollationName() + } + + } + + } + + return localctx +} + +// IBooleanLiteralContext is an interface to support dynamic dispatch. +type IBooleanLiteralContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsBooleanLiteralContext differentiates from other interfaces. + IsBooleanLiteralContext() +} + +type BooleanLiteralContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyBooleanLiteralContext() *BooleanLiteralContext { + var p = new(BooleanLiteralContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_booleanLiteral + return p +} + +func (*BooleanLiteralContext) IsBooleanLiteralContext() {} + +func NewBooleanLiteralContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *BooleanLiteralContext { + var p = new(BooleanLiteralContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_booleanLiteral + + return p +} + +func (s *BooleanLiteralContext) GetParser() antlr.Parser { return s.parser } + +func (s *BooleanLiteralContext) TRUE() antlr.TerminalNode { + return s.GetToken(MySqlParserTRUE, 0) +} + +func (s *BooleanLiteralContext) FALSE() antlr.TerminalNode { + return s.GetToken(MySqlParserFALSE, 0) +} + +func (s *BooleanLiteralContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *BooleanLiteralContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *BooleanLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitBooleanLiteral(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) BooleanLiteral() (localctx IBooleanLiteralContext) { + this := p + _ = this + + localctx = NewBooleanLiteralContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 50, MySqlParserRULE_booleanLiteral) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(276) + _la = p.GetTokenStream().LA(1) + + if !(_la == MySqlParserFALSE || _la == MySqlParserTRUE) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + return localctx +} + +// IHexadecimalLiteralContext is an interface to support dynamic dispatch. +type IHexadecimalLiteralContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsHexadecimalLiteralContext differentiates from other interfaces. + IsHexadecimalLiteralContext() +} + +type HexadecimalLiteralContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyHexadecimalLiteralContext() *HexadecimalLiteralContext { + var p = new(HexadecimalLiteralContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_hexadecimalLiteral + return p +} + +func (*HexadecimalLiteralContext) IsHexadecimalLiteralContext() {} + +func NewHexadecimalLiteralContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *HexadecimalLiteralContext { + var p = new(HexadecimalLiteralContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_hexadecimalLiteral + + return p +} + +func (s *HexadecimalLiteralContext) GetParser() antlr.Parser { return s.parser } + +func (s *HexadecimalLiteralContext) HEXADECIMAL_LITERAL() antlr.TerminalNode { + return s.GetToken(MySqlParserHEXADECIMAL_LITERAL, 0) +} + +func (s *HexadecimalLiteralContext) STRING_CHARSET_NAME() antlr.TerminalNode { + return s.GetToken(MySqlParserSTRING_CHARSET_NAME, 0) +} + +func (s *HexadecimalLiteralContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *HexadecimalLiteralContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *HexadecimalLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitHexadecimalLiteral(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) HexadecimalLiteral() (localctx IHexadecimalLiteralContext) { + this := p + _ = this + + localctx = NewHexadecimalLiteralContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 52, MySqlParserRULE_hexadecimalLiteral) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(279) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserSTRING_CHARSET_NAME { + { + p.SetState(278) + p.Match(MySqlParserSTRING_CHARSET_NAME) + } + + } + { + p.SetState(281) + p.Match(MySqlParserHEXADECIMAL_LITERAL) + } + + return localctx +} + +// IConstantContext is an interface to support dynamic dispatch. +type IConstantContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsConstantContext differentiates from other interfaces. + IsConstantContext() +} + +type ConstantContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyConstantContext() *ConstantContext { + var p = new(ConstantContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_constant + return p +} + +func (*ConstantContext) IsConstantContext() {} + +func NewConstantContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ConstantContext { + var p = new(ConstantContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_constant + + return p +} + +func (s *ConstantContext) GetParser() antlr.Parser { return s.parser } + +func (s *ConstantContext) StringLiteral() IStringLiteralContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStringLiteralContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IStringLiteralContext) +} + +func (s *ConstantContext) DecimalLiteral() IDecimalLiteralContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IDecimalLiteralContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IDecimalLiteralContext) +} + +func (s *ConstantContext) MINUS() antlr.TerminalNode { + return s.GetToken(MySqlParserMINUS, 0) +} + +func (s *ConstantContext) HexadecimalLiteral() IHexadecimalLiteralContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IHexadecimalLiteralContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IHexadecimalLiteralContext) +} + +func (s *ConstantContext) BooleanLiteral() IBooleanLiteralContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IBooleanLiteralContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IBooleanLiteralContext) +} + +func (s *ConstantContext) REAL_LITERAL() antlr.TerminalNode { + return s.GetToken(MySqlParserREAL_LITERAL, 0) +} + +func (s *ConstantContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ConstantContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *ConstantContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitConstant(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) Constant() (localctx IConstantContext) { + this := p + _ = this + + localctx = NewConstantContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 54, MySqlParserRULE_constant) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(290) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 43, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(283) + p.StringLiteral() + } + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(284) + p.DecimalLiteral() + } + + case 3: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(285) + p.Match(MySqlParserMINUS) + } + { + p.SetState(286) + p.DecimalLiteral() + } + + case 4: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(287) + p.HexadecimalLiteral() + } + + case 5: + p.EnterOuterAlt(localctx, 5) + { + p.SetState(288) + p.BooleanLiteral() + } + + case 6: + p.EnterOuterAlt(localctx, 6) + { + p.SetState(289) + p.Match(MySqlParserREAL_LITERAL) + } + + } + + return localctx +} + +// IExpressionsContext is an interface to support dynamic dispatch. +type IExpressionsContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsExpressionsContext differentiates from other interfaces. + IsExpressionsContext() +} + +type ExpressionsContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyExpressionsContext() *ExpressionsContext { + var p = new(ExpressionsContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_expressions + return p +} + +func (*ExpressionsContext) IsExpressionsContext() {} + +func NewExpressionsContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ExpressionsContext { + var p = new(ExpressionsContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_expressions + + return p +} + +func (s *ExpressionsContext) GetParser() antlr.Parser { return s.parser } + +func (s *ExpressionsContext) AllExpression() []IExpressionContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExpressionContext); ok { + len++ + } + } + + tst := make([]IExpressionContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExpressionContext); ok { + tst[i] = t.(IExpressionContext) + i++ + } + } + + return tst +} + +func (s *ExpressionsContext) Expression(i int) IExpressionContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *ExpressionsContext) AllCOMMA() []antlr.TerminalNode { + return s.GetTokens(MySqlParserCOMMA) +} + +func (s *ExpressionsContext) COMMA(i int) antlr.TerminalNode { + return s.GetToken(MySqlParserCOMMA, i) +} + +func (s *ExpressionsContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ExpressionsContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *ExpressionsContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitExpressions(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) Expressions() (localctx IExpressionsContext) { + this := p + _ = this + + localctx = NewExpressionsContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 56, MySqlParserRULE_expressions) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(292) + p.expression(0) + } + p.SetState(297) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + for _la == MySqlParserCOMMA { + { + p.SetState(293) + p.Match(MySqlParserCOMMA) + } + { + p.SetState(294) + p.expression(0) + } + + p.SetState(299) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + return localctx +} + +// IFunctionCallContext is an interface to support dynamic dispatch. +type IFunctionCallContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsFunctionCallContext differentiates from other interfaces. + IsFunctionCallContext() +} + +type FunctionCallContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyFunctionCallContext() *FunctionCallContext { + var p = new(FunctionCallContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_functionCall + return p +} + +func (*FunctionCallContext) IsFunctionCallContext() {} + +func NewFunctionCallContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *FunctionCallContext { + var p = new(FunctionCallContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_functionCall + + return p +} + +func (s *FunctionCallContext) GetParser() antlr.Parser { return s.parser } + +func (s *FunctionCallContext) CopyFrom(ctx *FunctionCallContext) { + s.BaseParserRuleContext.CopyFrom(ctx.BaseParserRuleContext) +} + +func (s *FunctionCallContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *FunctionCallContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +type AggregateFunctionCallContext struct { + *FunctionCallContext +} + +func NewAggregateFunctionCallContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *AggregateFunctionCallContext { + var p = new(AggregateFunctionCallContext) + + p.FunctionCallContext = NewEmptyFunctionCallContext() + p.parser = parser + p.CopyFrom(ctx.(*FunctionCallContext)) + + return p +} + +func (s *AggregateFunctionCallContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AggregateFunctionCallContext) AggregateWindowedFunction() IAggregateWindowedFunctionContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAggregateWindowedFunctionContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IAggregateWindowedFunctionContext) +} + +func (s *AggregateFunctionCallContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitAggregateFunctionCall(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) FunctionCall() (localctx IFunctionCallContext) { + this := p + _ = this + + localctx = NewFunctionCallContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 58, MySqlParserRULE_functionCall) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + localctx = NewAggregateFunctionCallContext(p, localctx) + p.EnterOuterAlt(localctx, 1) + { + p.SetState(300) + p.AggregateWindowedFunction() + } + + return localctx +} + +// IAggregateWindowedFunctionContext is an interface to support dynamic dispatch. +type IAggregateWindowedFunctionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // GetStarArg returns the starArg token. + GetStarArg() antlr.Token + + // SetStarArg sets the starArg token. + SetStarArg(antlr.Token) + + // IsAggregateWindowedFunctionContext differentiates from other interfaces. + IsAggregateWindowedFunctionContext() +} + +type AggregateWindowedFunctionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser + starArg antlr.Token +} + +func NewEmptyAggregateWindowedFunctionContext() *AggregateWindowedFunctionContext { + var p = new(AggregateWindowedFunctionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_aggregateWindowedFunction + return p +} + +func (*AggregateWindowedFunctionContext) IsAggregateWindowedFunctionContext() {} + +func NewAggregateWindowedFunctionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AggregateWindowedFunctionContext { + var p = new(AggregateWindowedFunctionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_aggregateWindowedFunction + + return p +} + +func (s *AggregateWindowedFunctionContext) GetParser() antlr.Parser { return s.parser } + +func (s *AggregateWindowedFunctionContext) GetStarArg() antlr.Token { return s.starArg } + +func (s *AggregateWindowedFunctionContext) SetStarArg(v antlr.Token) { s.starArg = v } + +func (s *AggregateWindowedFunctionContext) COUNT() antlr.TerminalNode { + return s.GetToken(MySqlParserCOUNT, 0) +} + +func (s *AggregateWindowedFunctionContext) LR_BRACKET() antlr.TerminalNode { + return s.GetToken(MySqlParserLR_BRACKET, 0) +} + +func (s *AggregateWindowedFunctionContext) RR_BRACKET() antlr.TerminalNode { + return s.GetToken(MySqlParserRR_BRACKET, 0) +} + +func (s *AggregateWindowedFunctionContext) STAR() antlr.TerminalNode { + return s.GetToken(MySqlParserSTAR, 0) +} + +func (s *AggregateWindowedFunctionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AggregateWindowedFunctionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *AggregateWindowedFunctionContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitAggregateWindowedFunction(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) AggregateWindowedFunction() (localctx IAggregateWindowedFunctionContext) { + this := p + _ = this + + localctx = NewAggregateWindowedFunctionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 60, MySqlParserRULE_aggregateWindowedFunction) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(302) + p.Match(MySqlParserCOUNT) + } + { + p.SetState(303) + p.Match(MySqlParserLR_BRACKET) + } + + { + p.SetState(304) + + var _m = p.Match(MySqlParserSTAR) + + localctx.(*AggregateWindowedFunctionContext).starArg = _m + } + + { + p.SetState(305) + p.Match(MySqlParserRR_BRACKET) + } + + return localctx +} + +// IExpressionContext is an interface to support dynamic dispatch. +type IExpressionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsExpressionContext differentiates from other interfaces. + IsExpressionContext() +} + +type ExpressionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyExpressionContext() *ExpressionContext { + var p = new(ExpressionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_expression + return p +} + +func (*ExpressionContext) IsExpressionContext() {} + +func NewExpressionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ExpressionContext { + var p = new(ExpressionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_expression + + return p +} + +func (s *ExpressionContext) GetParser() antlr.Parser { return s.parser } + +func (s *ExpressionContext) CopyFrom(ctx *ExpressionContext) { + s.BaseParserRuleContext.CopyFrom(ctx.BaseParserRuleContext) +} + +func (s *ExpressionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ExpressionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +type IsExpressionContext struct { + *ExpressionContext + testValue antlr.Token +} + +func NewIsExpressionContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *IsExpressionContext { + var p = new(IsExpressionContext) + + p.ExpressionContext = NewEmptyExpressionContext() + p.parser = parser + p.CopyFrom(ctx.(*ExpressionContext)) + + return p +} + +func (s *IsExpressionContext) GetTestValue() antlr.Token { return s.testValue } + +func (s *IsExpressionContext) SetTestValue(v antlr.Token) { s.testValue = v } + +func (s *IsExpressionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *IsExpressionContext) Predicate() IPredicateContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IPredicateContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IPredicateContext) +} + +func (s *IsExpressionContext) IS() antlr.TerminalNode { + return s.GetToken(MySqlParserIS, 0) +} + +func (s *IsExpressionContext) TRUE() antlr.TerminalNode { + return s.GetToken(MySqlParserTRUE, 0) +} + +func (s *IsExpressionContext) FALSE() antlr.TerminalNode { + return s.GetToken(MySqlParserFALSE, 0) +} + +func (s *IsExpressionContext) UNKNOWN() antlr.TerminalNode { + return s.GetToken(MySqlParserUNKNOWN, 0) +} + +func (s *IsExpressionContext) NOT() antlr.TerminalNode { + return s.GetToken(MySqlParserNOT, 0) +} + +func (s *IsExpressionContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitIsExpression(s) + + default: + return t.VisitChildren(s) + } +} + +type NotExpressionContext struct { + *ExpressionContext + notOperator antlr.Token +} + +func NewNotExpressionContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *NotExpressionContext { + var p = new(NotExpressionContext) + + p.ExpressionContext = NewEmptyExpressionContext() + p.parser = parser + p.CopyFrom(ctx.(*ExpressionContext)) + + return p +} + +func (s *NotExpressionContext) GetNotOperator() antlr.Token { return s.notOperator } + +func (s *NotExpressionContext) SetNotOperator(v antlr.Token) { s.notOperator = v } + +func (s *NotExpressionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *NotExpressionContext) Expression() IExpressionContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *NotExpressionContext) NOT() antlr.TerminalNode { + return s.GetToken(MySqlParserNOT, 0) +} + +func (s *NotExpressionContext) EXCLAMATION_SYMBOL() antlr.TerminalNode { + return s.GetToken(MySqlParserEXCLAMATION_SYMBOL, 0) +} + +func (s *NotExpressionContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitNotExpression(s) + + default: + return t.VisitChildren(s) + } +} + +type LogicalExpressionContext struct { + *ExpressionContext +} + +func NewLogicalExpressionContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *LogicalExpressionContext { + var p = new(LogicalExpressionContext) + + p.ExpressionContext = NewEmptyExpressionContext() + p.parser = parser + p.CopyFrom(ctx.(*ExpressionContext)) + + return p +} + +func (s *LogicalExpressionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *LogicalExpressionContext) AllExpression() []IExpressionContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExpressionContext); ok { + len++ + } + } + + tst := make([]IExpressionContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExpressionContext); ok { + tst[i] = t.(IExpressionContext) + i++ + } + } + + return tst +} + +func (s *LogicalExpressionContext) Expression(i int) IExpressionContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *LogicalExpressionContext) LogicalOperator() ILogicalOperatorContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ILogicalOperatorContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ILogicalOperatorContext) +} + +func (s *LogicalExpressionContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitLogicalExpression(s) + + default: + return t.VisitChildren(s) + } +} + +type PredicateExpressionContext struct { + *ExpressionContext +} + +func NewPredicateExpressionContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *PredicateExpressionContext { + var p = new(PredicateExpressionContext) + + p.ExpressionContext = NewEmptyExpressionContext() + p.parser = parser + p.CopyFrom(ctx.(*ExpressionContext)) + + return p +} + +func (s *PredicateExpressionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *PredicateExpressionContext) Predicate() IPredicateContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IPredicateContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IPredicateContext) +} + +func (s *PredicateExpressionContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitPredicateExpression(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) Expression() (localctx IExpressionContext) { + return p.expression(0) +} + +func (p *MySqlParser) expression(_p int) (localctx IExpressionContext) { + this := p + _ = this + + var _parentctx antlr.ParserRuleContext = p.GetParserRuleContext() + _parentState := p.GetState() + localctx = NewExpressionContext(p, p.GetParserRuleContext(), _parentState) + var _prevctx IExpressionContext = localctx + var _ antlr.ParserRuleContext = _prevctx // TODO: To prevent unused variable warning. + _startState := 62 + p.EnterRecursionRule(localctx, 62, MySqlParserRULE_expression, _p) + var _la int + + defer func() { + p.UnrollRecursionContexts(_parentctx) + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + p.SetState(318) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 46, p.GetParserRuleContext()) { + case 1: + localctx = NewNotExpressionContext(p, localctx) + p.SetParserRuleContext(localctx) + _prevctx = localctx + + { + p.SetState(308) + + var _lt = p.GetTokenStream().LT(1) + + localctx.(*NotExpressionContext).notOperator = _lt + + _la = p.GetTokenStream().LA(1) + + if !(_la == MySqlParserNOT || _la == MySqlParserEXCLAMATION_SYMBOL) { + var _ri = p.GetErrorHandler().RecoverInline(p) + + localctx.(*NotExpressionContext).notOperator = _ri + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(309) + p.expression(4) + } + + case 2: + localctx = NewIsExpressionContext(p, localctx) + p.SetParserRuleContext(localctx) + _prevctx = localctx + { + p.SetState(310) + p.predicate(0) + } + { + p.SetState(311) + p.Match(MySqlParserIS) + } + p.SetState(313) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserNOT { + { + p.SetState(312) + p.Match(MySqlParserNOT) + } + + } + { + p.SetState(315) + + var _lt = p.GetTokenStream().LT(1) + + localctx.(*IsExpressionContext).testValue = _lt + + _la = p.GetTokenStream().LA(1) + + if !(_la == MySqlParserFALSE || _la == MySqlParserTRUE || _la == MySqlParserUNKNOWN) { + var _ri = p.GetErrorHandler().RecoverInline(p) + + localctx.(*IsExpressionContext).testValue = _ri + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + case 3: + localctx = NewPredicateExpressionContext(p, localctx) + p.SetParserRuleContext(localctx) + _prevctx = localctx + { + p.SetState(317) + p.predicate(0) + } + + } + p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) + p.SetState(326) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 47, p.GetParserRuleContext()) + + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + if p.GetParseListeners() != nil { + p.TriggerExitRuleEvent() + } + _prevctx = localctx + localctx = NewLogicalExpressionContext(p, NewExpressionContext(p, _parentctx, _parentState)) + p.PushNewRecursionContext(localctx, _startState, MySqlParserRULE_expression) + p.SetState(320) + + if !(p.Precpred(p.GetParserRuleContext(), 3)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", "")) + } + { + p.SetState(321) + p.LogicalOperator() + } + { + p.SetState(322) + p.expression(4) + } + + } + p.SetState(328) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 47, p.GetParserRuleContext()) + } + + return localctx +} + +// IPredicateContext is an interface to support dynamic dispatch. +type IPredicateContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsPredicateContext differentiates from other interfaces. + IsPredicateContext() +} + +type PredicateContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyPredicateContext() *PredicateContext { + var p = new(PredicateContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_predicate + return p +} + +func (*PredicateContext) IsPredicateContext() {} + +func NewPredicateContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *PredicateContext { + var p = new(PredicateContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_predicate + + return p +} + +func (s *PredicateContext) GetParser() antlr.Parser { return s.parser } + +func (s *PredicateContext) CopyFrom(ctx *PredicateContext) { + s.BaseParserRuleContext.CopyFrom(ctx.BaseParserRuleContext) +} + +func (s *PredicateContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *PredicateContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +type ExpressionAtomPredicateContext struct { + *PredicateContext +} + +func NewExpressionAtomPredicateContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpressionAtomPredicateContext { + var p = new(ExpressionAtomPredicateContext) + + p.PredicateContext = NewEmptyPredicateContext() + p.parser = parser + p.CopyFrom(ctx.(*PredicateContext)) + + return p +} + +func (s *ExpressionAtomPredicateContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ExpressionAtomPredicateContext) ExpressionAtom() IExpressionAtomContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionAtomContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionAtomContext) +} + +func (s *ExpressionAtomPredicateContext) LOCAL_ID() antlr.TerminalNode { + return s.GetToken(MySqlParserLOCAL_ID, 0) +} + +func (s *ExpressionAtomPredicateContext) VAR_ASSIGN() antlr.TerminalNode { + return s.GetToken(MySqlParserVAR_ASSIGN, 0) +} + +func (s *ExpressionAtomPredicateContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitExpressionAtomPredicate(s) + + default: + return t.VisitChildren(s) + } +} + +type BinaryComparisonPredicateContext struct { + *PredicateContext + left IPredicateContext + right IPredicateContext +} + +func NewBinaryComparisonPredicateContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *BinaryComparisonPredicateContext { + var p = new(BinaryComparisonPredicateContext) + + p.PredicateContext = NewEmptyPredicateContext() + p.parser = parser + p.CopyFrom(ctx.(*PredicateContext)) + + return p +} + +func (s *BinaryComparisonPredicateContext) GetLeft() IPredicateContext { return s.left } + +func (s *BinaryComparisonPredicateContext) GetRight() IPredicateContext { return s.right } + +func (s *BinaryComparisonPredicateContext) SetLeft(v IPredicateContext) { s.left = v } + +func (s *BinaryComparisonPredicateContext) SetRight(v IPredicateContext) { s.right = v } + +func (s *BinaryComparisonPredicateContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *BinaryComparisonPredicateContext) ComparisonOperator() IComparisonOperatorContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IComparisonOperatorContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IComparisonOperatorContext) +} + +func (s *BinaryComparisonPredicateContext) AllPredicate() []IPredicateContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IPredicateContext); ok { + len++ + } + } + + tst := make([]IPredicateContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IPredicateContext); ok { + tst[i] = t.(IPredicateContext) + i++ + } + } + + return tst +} + +func (s *BinaryComparisonPredicateContext) Predicate(i int) IPredicateContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IPredicateContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IPredicateContext) +} + +func (s *BinaryComparisonPredicateContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitBinaryComparisonPredicate(s) + + default: + return t.VisitChildren(s) + } +} + +type InPredicateContext struct { + *PredicateContext +} + +func NewInPredicateContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *InPredicateContext { + var p = new(InPredicateContext) + + p.PredicateContext = NewEmptyPredicateContext() + p.parser = parser + p.CopyFrom(ctx.(*PredicateContext)) + + return p +} + +func (s *InPredicateContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *InPredicateContext) Predicate() IPredicateContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IPredicateContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IPredicateContext) +} + +func (s *InPredicateContext) IN() antlr.TerminalNode { + return s.GetToken(MySqlParserIN, 0) +} + +func (s *InPredicateContext) LR_BRACKET() antlr.TerminalNode { + return s.GetToken(MySqlParserLR_BRACKET, 0) +} + +func (s *InPredicateContext) Expressions() IExpressionsContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionsContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionsContext) +} + +func (s *InPredicateContext) RR_BRACKET() antlr.TerminalNode { + return s.GetToken(MySqlParserRR_BRACKET, 0) +} + +func (s *InPredicateContext) NOT() antlr.TerminalNode { + return s.GetToken(MySqlParserNOT, 0) +} + +func (s *InPredicateContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitInPredicate(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) Predicate() (localctx IPredicateContext) { + return p.predicate(0) +} + +func (p *MySqlParser) predicate(_p int) (localctx IPredicateContext) { + this := p + _ = this + + var _parentctx antlr.ParserRuleContext = p.GetParserRuleContext() + _parentState := p.GetState() + localctx = NewPredicateContext(p, p.GetParserRuleContext(), _parentState) + var _prevctx IPredicateContext = localctx + var _ antlr.ParserRuleContext = _prevctx // TODO: To prevent unused variable warning. + _startState := 64 + p.EnterRecursionRule(localctx, 64, MySqlParserRULE_predicate, _p) + var _la int + + defer func() { + p.UnrollRecursionContexts(_parentctx) + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + localctx = NewExpressionAtomPredicateContext(p, localctx) + p.SetParserRuleContext(localctx) + _prevctx = localctx + + p.SetState(332) + p.GetErrorHandler().Sync(p) + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 48, p.GetParserRuleContext()) == 1 { + { + p.SetState(330) + p.Match(MySqlParserLOCAL_ID) + } + { + p.SetState(331) + p.Match(MySqlParserVAR_ASSIGN) + } + + } + { + p.SetState(334) + p.ExpressionAtom() + } + + p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) + p.SetState(351) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 51, p.GetParserRuleContext()) + + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + if p.GetParseListeners() != nil { + p.TriggerExitRuleEvent() + } + _prevctx = localctx + p.SetState(349) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 50, p.GetParserRuleContext()) { + case 1: + localctx = NewBinaryComparisonPredicateContext(p, NewPredicateContext(p, _parentctx, _parentState)) + localctx.(*BinaryComparisonPredicateContext).left = _prevctx + + p.PushNewRecursionContext(localctx, _startState, MySqlParserRULE_predicate) + p.SetState(336) + + if !(p.Precpred(p.GetParserRuleContext(), 2)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", "")) + } + { + p.SetState(337) + p.ComparisonOperator() + } + { + p.SetState(338) + + var _x = p.predicate(3) + + localctx.(*BinaryComparisonPredicateContext).right = _x + } + + case 2: + localctx = NewInPredicateContext(p, NewPredicateContext(p, _parentctx, _parentState)) + p.PushNewRecursionContext(localctx, _startState, MySqlParserRULE_predicate) + p.SetState(340) + + if !(p.Precpred(p.GetParserRuleContext(), 3)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", "")) + } + p.SetState(342) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + if _la == MySqlParserNOT { + { + p.SetState(341) + p.Match(MySqlParserNOT) + } + + } + { + p.SetState(344) + p.Match(MySqlParserIN) + } + { + p.SetState(345) + p.Match(MySqlParserLR_BRACKET) + } + { + p.SetState(346) + p.Expressions() + } + { + p.SetState(347) + p.Match(MySqlParserRR_BRACKET) + } + + } + + } + p.SetState(353) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 51, p.GetParserRuleContext()) + } + + return localctx +} + +// IExpressionAtomContext is an interface to support dynamic dispatch. +type IExpressionAtomContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsExpressionAtomContext differentiates from other interfaces. + IsExpressionAtomContext() +} + +type ExpressionAtomContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyExpressionAtomContext() *ExpressionAtomContext { + var p = new(ExpressionAtomContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_expressionAtom + return p +} + +func (*ExpressionAtomContext) IsExpressionAtomContext() {} + +func NewExpressionAtomContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ExpressionAtomContext { + var p = new(ExpressionAtomContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_expressionAtom + + return p +} + +func (s *ExpressionAtomContext) GetParser() antlr.Parser { return s.parser } + +func (s *ExpressionAtomContext) CopyFrom(ctx *ExpressionAtomContext) { + s.BaseParserRuleContext.CopyFrom(ctx.BaseParserRuleContext) +} + +func (s *ExpressionAtomContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ExpressionAtomContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +type UnaryExpressionAtomContext struct { + *ExpressionAtomContext +} + +func NewUnaryExpressionAtomContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *UnaryExpressionAtomContext { + var p = new(UnaryExpressionAtomContext) + + p.ExpressionAtomContext = NewEmptyExpressionAtomContext() + p.parser = parser + p.CopyFrom(ctx.(*ExpressionAtomContext)) + + return p +} + +func (s *UnaryExpressionAtomContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *UnaryExpressionAtomContext) UnaryOperator() IUnaryOperatorContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUnaryOperatorContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IUnaryOperatorContext) +} + +func (s *UnaryExpressionAtomContext) ExpressionAtom() IExpressionAtomContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionAtomContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionAtomContext) +} + +func (s *UnaryExpressionAtomContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitUnaryExpressionAtom(s) + + default: + return t.VisitChildren(s) + } +} + +type ConstantExpressionAtomContext struct { + *ExpressionAtomContext +} + +func NewConstantExpressionAtomContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ConstantExpressionAtomContext { + var p = new(ConstantExpressionAtomContext) + + p.ExpressionAtomContext = NewEmptyExpressionAtomContext() + p.parser = parser + p.CopyFrom(ctx.(*ExpressionAtomContext)) + + return p +} + +func (s *ConstantExpressionAtomContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ConstantExpressionAtomContext) Constant() IConstantContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IConstantContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IConstantContext) +} + +func (s *ConstantExpressionAtomContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitConstantExpressionAtom(s) + + default: + return t.VisitChildren(s) + } +} + +type FullColumnNameExpressionAtomContext struct { + *ExpressionAtomContext +} + +func NewFullColumnNameExpressionAtomContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *FullColumnNameExpressionAtomContext { + var p = new(FullColumnNameExpressionAtomContext) + + p.ExpressionAtomContext = NewEmptyExpressionAtomContext() + p.parser = parser + p.CopyFrom(ctx.(*ExpressionAtomContext)) + + return p +} + +func (s *FullColumnNameExpressionAtomContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *FullColumnNameExpressionAtomContext) FullColumnName() IFullColumnNameContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFullColumnNameContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IFullColumnNameContext) +} + +func (s *FullColumnNameExpressionAtomContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitFullColumnNameExpressionAtom(s) + + default: + return t.VisitChildren(s) + } +} + +type NestedExpressionAtomContext struct { + *ExpressionAtomContext +} + +func NewNestedExpressionAtomContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *NestedExpressionAtomContext { + var p = new(NestedExpressionAtomContext) + + p.ExpressionAtomContext = NewEmptyExpressionAtomContext() + p.parser = parser + p.CopyFrom(ctx.(*ExpressionAtomContext)) + + return p +} + +func (s *NestedExpressionAtomContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *NestedExpressionAtomContext) LR_BRACKET() antlr.TerminalNode { + return s.GetToken(MySqlParserLR_BRACKET, 0) +} + +func (s *NestedExpressionAtomContext) AllExpression() []IExpressionContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExpressionContext); ok { + len++ + } + } + + tst := make([]IExpressionContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExpressionContext); ok { + tst[i] = t.(IExpressionContext) + i++ + } + } + + return tst +} + +func (s *NestedExpressionAtomContext) Expression(i int) IExpressionContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *NestedExpressionAtomContext) RR_BRACKET() antlr.TerminalNode { + return s.GetToken(MySqlParserRR_BRACKET, 0) +} + +func (s *NestedExpressionAtomContext) AllCOMMA() []antlr.TerminalNode { + return s.GetTokens(MySqlParserCOMMA) +} + +func (s *NestedExpressionAtomContext) COMMA(i int) antlr.TerminalNode { + return s.GetToken(MySqlParserCOMMA, i) +} + +func (s *NestedExpressionAtomContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitNestedExpressionAtom(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) ExpressionAtom() (localctx IExpressionAtomContext) { + this := p + _ = this + + localctx = NewExpressionAtomContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 66, MySqlParserRULE_expressionAtom) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(370) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 53, p.GetParserRuleContext()) { + case 1: + localctx = NewConstantExpressionAtomContext(p, localctx) + p.EnterOuterAlt(localctx, 1) + { + p.SetState(354) + p.Constant() + } + + case 2: + localctx = NewFullColumnNameExpressionAtomContext(p, localctx) + p.EnterOuterAlt(localctx, 2) + { + p.SetState(355) + p.FullColumnName() + } + + case 3: + localctx = NewUnaryExpressionAtomContext(p, localctx) + p.EnterOuterAlt(localctx, 3) + { + p.SetState(356) + p.UnaryOperator() + } + { + p.SetState(357) + p.ExpressionAtom() + } + + case 4: + localctx = NewNestedExpressionAtomContext(p, localctx) + p.EnterOuterAlt(localctx, 4) + { + p.SetState(359) + p.Match(MySqlParserLR_BRACKET) + } + { + p.SetState(360) + p.expression(0) + } + p.SetState(365) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + for _la == MySqlParserCOMMA { + { + p.SetState(361) + p.Match(MySqlParserCOMMA) + } + { + p.SetState(362) + p.expression(0) + } + + p.SetState(367) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + { + p.SetState(368) + p.Match(MySqlParserRR_BRACKET) + } + + } + + return localctx +} + +// IUnaryOperatorContext is an interface to support dynamic dispatch. +type IUnaryOperatorContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsUnaryOperatorContext differentiates from other interfaces. + IsUnaryOperatorContext() +} + +type UnaryOperatorContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyUnaryOperatorContext() *UnaryOperatorContext { + var p = new(UnaryOperatorContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_unaryOperator + return p +} + +func (*UnaryOperatorContext) IsUnaryOperatorContext() {} + +func NewUnaryOperatorContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *UnaryOperatorContext { + var p = new(UnaryOperatorContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_unaryOperator + + return p +} + +func (s *UnaryOperatorContext) GetParser() antlr.Parser { return s.parser } + +func (s *UnaryOperatorContext) EXCLAMATION_SYMBOL() antlr.TerminalNode { + return s.GetToken(MySqlParserEXCLAMATION_SYMBOL, 0) +} + +func (s *UnaryOperatorContext) BIT_NOT_OP() antlr.TerminalNode { + return s.GetToken(MySqlParserBIT_NOT_OP, 0) +} + +func (s *UnaryOperatorContext) PLUS() antlr.TerminalNode { + return s.GetToken(MySqlParserPLUS, 0) +} + +func (s *UnaryOperatorContext) MINUS() antlr.TerminalNode { + return s.GetToken(MySqlParserMINUS, 0) +} + +func (s *UnaryOperatorContext) NOT() antlr.TerminalNode { + return s.GetToken(MySqlParserNOT, 0) +} + +func (s *UnaryOperatorContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *UnaryOperatorContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *UnaryOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitUnaryOperator(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) UnaryOperator() (localctx IUnaryOperatorContext) { + this := p + _ = this + + localctx = NewUnaryOperatorContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 68, MySqlParserRULE_unaryOperator) + var _la int + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(372) + _la = p.GetTokenStream().LA(1) + + if !(_la == MySqlParserNOT || (int64((_la-1113)) & ^0x3f) == 0 && ((int64(1)<<(_la-1113))&387) != 0) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + return localctx +} + +// IComparisonOperatorContext is an interface to support dynamic dispatch. +type IComparisonOperatorContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsComparisonOperatorContext differentiates from other interfaces. + IsComparisonOperatorContext() +} + +type ComparisonOperatorContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyComparisonOperatorContext() *ComparisonOperatorContext { + var p = new(ComparisonOperatorContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_comparisonOperator + return p +} + +func (*ComparisonOperatorContext) IsComparisonOperatorContext() {} + +func NewComparisonOperatorContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ComparisonOperatorContext { + var p = new(ComparisonOperatorContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_comparisonOperator + + return p +} + +func (s *ComparisonOperatorContext) GetParser() antlr.Parser { return s.parser } + +func (s *ComparisonOperatorContext) EQUAL_SYMBOL() antlr.TerminalNode { + return s.GetToken(MySqlParserEQUAL_SYMBOL, 0) +} + +func (s *ComparisonOperatorContext) GREATER_SYMBOL() antlr.TerminalNode { + return s.GetToken(MySqlParserGREATER_SYMBOL, 0) +} + +func (s *ComparisonOperatorContext) LESS_SYMBOL() antlr.TerminalNode { + return s.GetToken(MySqlParserLESS_SYMBOL, 0) +} + +func (s *ComparisonOperatorContext) EXCLAMATION_SYMBOL() antlr.TerminalNode { + return s.GetToken(MySqlParserEXCLAMATION_SYMBOL, 0) +} + +func (s *ComparisonOperatorContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ComparisonOperatorContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *ComparisonOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitComparisonOperator(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) ComparisonOperator() (localctx IComparisonOperatorContext) { + this := p + _ = this + + localctx = NewComparisonOperatorContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 70, MySqlParserRULE_comparisonOperator) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(385) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 54, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(374) + p.Match(MySqlParserEQUAL_SYMBOL) + } + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(375) + p.Match(MySqlParserGREATER_SYMBOL) + } + + case 3: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(376) + p.Match(MySqlParserLESS_SYMBOL) + } + + case 4: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(377) + p.Match(MySqlParserLESS_SYMBOL) + } + { + p.SetState(378) + p.Match(MySqlParserEQUAL_SYMBOL) + } + + case 5: + p.EnterOuterAlt(localctx, 5) + { + p.SetState(379) + p.Match(MySqlParserGREATER_SYMBOL) + } + { + p.SetState(380) + p.Match(MySqlParserEQUAL_SYMBOL) + } + + case 6: + p.EnterOuterAlt(localctx, 6) + { + p.SetState(381) + p.Match(MySqlParserLESS_SYMBOL) + } + { + p.SetState(382) + p.Match(MySqlParserGREATER_SYMBOL) + } + + case 7: + p.EnterOuterAlt(localctx, 7) + { + p.SetState(383) + p.Match(MySqlParserEXCLAMATION_SYMBOL) + } + { + p.SetState(384) + p.Match(MySqlParserEQUAL_SYMBOL) + } + + } + + return localctx +} + +// ILogicalOperatorContext is an interface to support dynamic dispatch. +type ILogicalOperatorContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsLogicalOperatorContext differentiates from other interfaces. + IsLogicalOperatorContext() +} + +type LogicalOperatorContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyLogicalOperatorContext() *LogicalOperatorContext { + var p = new(LogicalOperatorContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = MySqlParserRULE_logicalOperator + return p +} + +func (*LogicalOperatorContext) IsLogicalOperatorContext() {} + +func NewLogicalOperatorContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *LogicalOperatorContext { + var p = new(LogicalOperatorContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = MySqlParserRULE_logicalOperator + + return p +} + +func (s *LogicalOperatorContext) GetParser() antlr.Parser { return s.parser } + +func (s *LogicalOperatorContext) AND() antlr.TerminalNode { + return s.GetToken(MySqlParserAND, 0) +} + +func (s *LogicalOperatorContext) AllBIT_AND_OP() []antlr.TerminalNode { + return s.GetTokens(MySqlParserBIT_AND_OP) +} + +func (s *LogicalOperatorContext) BIT_AND_OP(i int) antlr.TerminalNode { + return s.GetToken(MySqlParserBIT_AND_OP, i) +} + +func (s *LogicalOperatorContext) OR() antlr.TerminalNode { + return s.GetToken(MySqlParserOR, 0) +} + +func (s *LogicalOperatorContext) AllBIT_OR_OP() []antlr.TerminalNode { + return s.GetTokens(MySqlParserBIT_OR_OP) +} + +func (s *LogicalOperatorContext) BIT_OR_OP(i int) antlr.TerminalNode { + return s.GetToken(MySqlParserBIT_OR_OP, i) +} + +func (s *LogicalOperatorContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *LogicalOperatorContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *LogicalOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case MySqlParserVisitor: + return t.VisitLogicalOperator(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *MySqlParser) LogicalOperator() (localctx ILogicalOperatorContext) { + this := p + _ = this + + localctx = NewLogicalOperatorContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 72, MySqlParserRULE_logicalOperator) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(393) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case MySqlParserAND: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(387) + p.Match(MySqlParserAND) + } + + case MySqlParserBIT_AND_OP: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(388) + p.Match(MySqlParserBIT_AND_OP) + } + { + p.SetState(389) + p.Match(MySqlParserBIT_AND_OP) + } + + case MySqlParserOR: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(390) + p.Match(MySqlParserOR) + } + + case MySqlParserBIT_OR_OP: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(391) + p.Match(MySqlParserBIT_OR_OP) + } + { + p.SetState(392) + p.Match(MySqlParserBIT_OR_OP) + } + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + return localctx +} + +func (p *MySqlParser) Sempred(localctx antlr.RuleContext, ruleIndex, predIndex int) bool { + switch ruleIndex { + case 31: + var t *ExpressionContext = nil + if localctx != nil { + t = localctx.(*ExpressionContext) + } + return p.Expression_Sempred(t, predIndex) + + case 32: + var t *PredicateContext = nil + if localctx != nil { + t = localctx.(*PredicateContext) + } + return p.Predicate_Sempred(t, predIndex) + + default: + panic("No predicate with index: " + fmt.Sprint(ruleIndex)) + } +} + +func (p *MySqlParser) Expression_Sempred(localctx antlr.RuleContext, predIndex int) bool { + this := p + _ = this + + switch predIndex { + case 0: + return p.Precpred(p.GetParserRuleContext(), 3) + + default: + panic("No predicate with index: " + fmt.Sprint(predIndex)) + } +} + +func (p *MySqlParser) Predicate_Sempred(localctx antlr.RuleContext, predIndex int) bool { + this := p + _ = this + + switch predIndex { + case 1: + return p.Precpred(p.GetParserRuleContext(), 2) + + case 2: + return p.Precpred(p.GetParserRuleContext(), 3) + + default: + panic("No predicate with index: " + fmt.Sprint(predIndex)) + } +} diff --git a/internal/mysqld/parser/antlrparser/parser/mysqlparser_base_visitor.go b/internal/mysqld/parser/antlrparser/parser/mysqlparser_base_visitor.go new file mode 100644 index 0000000000..d5ee31d9f5 --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/mysqlparser_base_visitor.go @@ -0,0 +1,192 @@ +// Code generated from java-escape by ANTLR 4.11.1. DO NOT EDIT. + +package parser // MySqlParser +import "github.com/antlr/antlr4/runtime/Go/antlr/v4" + +type BaseMySqlParserVisitor struct { + *antlr.BaseParseTreeVisitor +} + +func (v *BaseMySqlParserVisitor) VisitRoot(ctx *RootContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitSqlStatements(ctx *SqlStatementsContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitSqlStatement(ctx *SqlStatementContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitEmptyStatement_(ctx *EmptyStatement_Context) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitDmlStatement(ctx *DmlStatementContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitSimpleSelect(ctx *SimpleSelectContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitLockClause(ctx *LockClauseContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitTableSources(ctx *TableSourcesContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitTableSourceBase(ctx *TableSourceBaseContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitQuerySpecification(ctx *QuerySpecificationContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitSelectSpec(ctx *SelectSpecContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitSelectElements(ctx *SelectElementsContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitSelectColumnElement(ctx *SelectColumnElementContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitSelectFunctionElement(ctx *SelectFunctionElementContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitFromClause(ctx *FromClauseContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitLimitClause(ctx *LimitClauseContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitLimitClauseAtom(ctx *LimitClauseAtomContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitFullId(ctx *FullIdContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitTableName(ctx *TableNameContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitFullColumnName(ctx *FullColumnNameContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitCollationName(ctx *CollationNameContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitUid(ctx *UidContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitSimpleId(ctx *SimpleIdContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitDottedId(ctx *DottedIdContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitDecimalLiteral(ctx *DecimalLiteralContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitStringLiteral(ctx *StringLiteralContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitBooleanLiteral(ctx *BooleanLiteralContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitHexadecimalLiteral(ctx *HexadecimalLiteralContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitConstant(ctx *ConstantContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitExpressions(ctx *ExpressionsContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitAggregateFunctionCall(ctx *AggregateFunctionCallContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitAggregateWindowedFunction(ctx *AggregateWindowedFunctionContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitIsExpression(ctx *IsExpressionContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitNotExpression(ctx *NotExpressionContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitLogicalExpression(ctx *LogicalExpressionContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitPredicateExpression(ctx *PredicateExpressionContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitExpressionAtomPredicate(ctx *ExpressionAtomPredicateContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitBinaryComparisonPredicate(ctx *BinaryComparisonPredicateContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitInPredicate(ctx *InPredicateContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitConstantExpressionAtom(ctx *ConstantExpressionAtomContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitFullColumnNameExpressionAtom(ctx *FullColumnNameExpressionAtomContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitUnaryExpressionAtom(ctx *UnaryExpressionAtomContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitNestedExpressionAtom(ctx *NestedExpressionAtomContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitUnaryOperator(ctx *UnaryOperatorContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitComparisonOperator(ctx *ComparisonOperatorContext) interface{} { + return v.VisitChildren(ctx) +} + +func (v *BaseMySqlParserVisitor) VisitLogicalOperator(ctx *LogicalOperatorContext) interface{} { + return v.VisitChildren(ctx) +} diff --git a/internal/mysqld/parser/antlrparser/parser/mysqlparser_visitor.go b/internal/mysqld/parser/antlrparser/parser/mysqlparser_visitor.go new file mode 100644 index 0000000000..881ebfe479 --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser/mysqlparser_visitor.go @@ -0,0 +1,147 @@ +// Code generated from java-escape by ANTLR 4.11.1. DO NOT EDIT. + +package parser // MySqlParser +import "github.com/antlr/antlr4/runtime/Go/antlr/v4" + +// A complete Visitor for a parse tree produced by MySqlParser. +type MySqlParserVisitor interface { + antlr.ParseTreeVisitor + + // Visit a parse tree produced by MySqlParser#root. + VisitRoot(ctx *RootContext) interface{} + + // Visit a parse tree produced by MySqlParser#sqlStatements. + VisitSqlStatements(ctx *SqlStatementsContext) interface{} + + // Visit a parse tree produced by MySqlParser#sqlStatement. + VisitSqlStatement(ctx *SqlStatementContext) interface{} + + // Visit a parse tree produced by MySqlParser#emptyStatement_. + VisitEmptyStatement_(ctx *EmptyStatement_Context) interface{} + + // Visit a parse tree produced by MySqlParser#dmlStatement. + VisitDmlStatement(ctx *DmlStatementContext) interface{} + + // Visit a parse tree produced by MySqlParser#simpleSelect. + VisitSimpleSelect(ctx *SimpleSelectContext) interface{} + + // Visit a parse tree produced by MySqlParser#lockClause. + VisitLockClause(ctx *LockClauseContext) interface{} + + // Visit a parse tree produced by MySqlParser#tableSources. + VisitTableSources(ctx *TableSourcesContext) interface{} + + // Visit a parse tree produced by MySqlParser#tableSourceBase. + VisitTableSourceBase(ctx *TableSourceBaseContext) interface{} + + // Visit a parse tree produced by MySqlParser#querySpecification. + VisitQuerySpecification(ctx *QuerySpecificationContext) interface{} + + // Visit a parse tree produced by MySqlParser#selectSpec. + VisitSelectSpec(ctx *SelectSpecContext) interface{} + + // Visit a parse tree produced by MySqlParser#selectElements. + VisitSelectElements(ctx *SelectElementsContext) interface{} + + // Visit a parse tree produced by MySqlParser#selectColumnElement. + VisitSelectColumnElement(ctx *SelectColumnElementContext) interface{} + + // Visit a parse tree produced by MySqlParser#selectFunctionElement. + VisitSelectFunctionElement(ctx *SelectFunctionElementContext) interface{} + + // Visit a parse tree produced by MySqlParser#fromClause. + VisitFromClause(ctx *FromClauseContext) interface{} + + // Visit a parse tree produced by MySqlParser#limitClause. + VisitLimitClause(ctx *LimitClauseContext) interface{} + + // Visit a parse tree produced by MySqlParser#limitClauseAtom. + VisitLimitClauseAtom(ctx *LimitClauseAtomContext) interface{} + + // Visit a parse tree produced by MySqlParser#fullId. + VisitFullId(ctx *FullIdContext) interface{} + + // Visit a parse tree produced by MySqlParser#tableName. + VisitTableName(ctx *TableNameContext) interface{} + + // Visit a parse tree produced by MySqlParser#fullColumnName. + VisitFullColumnName(ctx *FullColumnNameContext) interface{} + + // Visit a parse tree produced by MySqlParser#collationName. + VisitCollationName(ctx *CollationNameContext) interface{} + + // Visit a parse tree produced by MySqlParser#uid. + VisitUid(ctx *UidContext) interface{} + + // Visit a parse tree produced by MySqlParser#simpleId. + VisitSimpleId(ctx *SimpleIdContext) interface{} + + // Visit a parse tree produced by MySqlParser#dottedId. + VisitDottedId(ctx *DottedIdContext) interface{} + + // Visit a parse tree produced by MySqlParser#decimalLiteral. + VisitDecimalLiteral(ctx *DecimalLiteralContext) interface{} + + // Visit a parse tree produced by MySqlParser#stringLiteral. + VisitStringLiteral(ctx *StringLiteralContext) interface{} + + // Visit a parse tree produced by MySqlParser#booleanLiteral. + VisitBooleanLiteral(ctx *BooleanLiteralContext) interface{} + + // Visit a parse tree produced by MySqlParser#hexadecimalLiteral. + VisitHexadecimalLiteral(ctx *HexadecimalLiteralContext) interface{} + + // Visit a parse tree produced by MySqlParser#constant. + VisitConstant(ctx *ConstantContext) interface{} + + // Visit a parse tree produced by MySqlParser#expressions. + VisitExpressions(ctx *ExpressionsContext) interface{} + + // Visit a parse tree produced by MySqlParser#aggregateFunctionCall. + VisitAggregateFunctionCall(ctx *AggregateFunctionCallContext) interface{} + + // Visit a parse tree produced by MySqlParser#aggregateWindowedFunction. + VisitAggregateWindowedFunction(ctx *AggregateWindowedFunctionContext) interface{} + + // Visit a parse tree produced by MySqlParser#isExpression. + VisitIsExpression(ctx *IsExpressionContext) interface{} + + // Visit a parse tree produced by MySqlParser#notExpression. + VisitNotExpression(ctx *NotExpressionContext) interface{} + + // Visit a parse tree produced by MySqlParser#logicalExpression. + VisitLogicalExpression(ctx *LogicalExpressionContext) interface{} + + // Visit a parse tree produced by MySqlParser#predicateExpression. + VisitPredicateExpression(ctx *PredicateExpressionContext) interface{} + + // Visit a parse tree produced by MySqlParser#expressionAtomPredicate. + VisitExpressionAtomPredicate(ctx *ExpressionAtomPredicateContext) interface{} + + // Visit a parse tree produced by MySqlParser#binaryComparisonPredicate. + VisitBinaryComparisonPredicate(ctx *BinaryComparisonPredicateContext) interface{} + + // Visit a parse tree produced by MySqlParser#inPredicate. + VisitInPredicate(ctx *InPredicateContext) interface{} + + // Visit a parse tree produced by MySqlParser#constantExpressionAtom. + VisitConstantExpressionAtom(ctx *ConstantExpressionAtomContext) interface{} + + // Visit a parse tree produced by MySqlParser#fullColumnNameExpressionAtom. + VisitFullColumnNameExpressionAtom(ctx *FullColumnNameExpressionAtomContext) interface{} + + // Visit a parse tree produced by MySqlParser#unaryExpressionAtom. + VisitUnaryExpressionAtom(ctx *UnaryExpressionAtomContext) interface{} + + // Visit a parse tree produced by MySqlParser#nestedExpressionAtom. + VisitNestedExpressionAtom(ctx *NestedExpressionAtomContext) interface{} + + // Visit a parse tree produced by MySqlParser#unaryOperator. + VisitUnaryOperator(ctx *UnaryOperatorContext) interface{} + + // Visit a parse tree produced by MySqlParser#comparisonOperator. + VisitComparisonOperator(ctx *ComparisonOperatorContext) interface{} + + // Visit a parse tree produced by MySqlParser#logicalOperator. + VisitLogicalOperator(ctx *LogicalOperatorContext) interface{} +} diff --git a/internal/mysqld/parser/antlrparser/parser_test.go b/internal/mysqld/parser/antlrparser/parser_test.go new file mode 100644 index 0000000000..67808eec96 --- /dev/null +++ b/internal/mysqld/parser/antlrparser/parser_test.go @@ -0,0 +1,50 @@ +package antlrparser + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/milvus-io/milvus/internal/mysqld/planner" +) + +func Test_antlrParser_Parse(t *testing.T) { + restore := func(t *testing.T, n planner.Node) { + text := planner.NewExprTextRestorer().RestoreExprText(n) + fmt.Println(text) + } + + debug := func(t *testing.T, sql string) { + plan, warns, err := NewAntlrParser().Parse(sql) + assert.NoError(t, err) + assert.Nil(t, warns) + fmt.Println(sql) + planner.NewTreeUtils().PrettyPrintHrn(GetSqlStatements(plan.Node)) + fmt.Println() + statements := GetSqlStatements(plan.Node) + expr := statements.Statements[0]. + DmlStatement.Unwrap(). + SelectStatement.Unwrap(). + SimpleSelect.Unwrap(). + Query.Unwrap(). + From.Unwrap(). + Where + if expr.IsSome() { + restore(t, expr.Unwrap()) + } + } + + sqls := []string{ + "select a as f1, b as f2 from t", // query without predicate + "select a as f1, b as f2 from t where a > 5 and b < 2", // query with predicate + "select count(*) as cnt from t", // count without predicate + "select count(*) as cnt from t where a > 5 and b < 2", // count with predicate + "select a as f1, b as f2 from t where a > 5 and b < 2 limit 9, 4", // query with predicate and limit + "select a as f1, b as f2 from t where a > 5 and b < 2 limit 4 offset 9", // query with predicate and limit + } + + for _, sql := range sqls { + debug(t, sql) + } +} diff --git a/internal/mysqld/parser/antlrparser/pool.go b/internal/mysqld/parser/antlrparser/pool.go new file mode 100644 index 0000000000..2361a9e8a8 --- /dev/null +++ b/internal/mysqld/parser/antlrparser/pool.go @@ -0,0 +1,57 @@ +package antlrparser + +import ( + "sync" + + "github.com/antlr/antlr4/runtime/Go/antlr/v4" + parsergen "github.com/milvus-io/milvus/internal/mysqld/parser/antlrparser/parser" +) + +var ( + lexerPool = sync.Pool{ + New: func() interface{} { + return parsergen.NewMySqlLexer(nil) + }, + } + parserPool = sync.Pool{ + New: func() interface{} { + return parsergen.NewMySqlParser(nil) + }, + } +) + +func getLexer(stream *antlr.InputStream, listeners ...antlr.ErrorListener) *parsergen.MySqlLexer { + lexer, ok := lexerPool.Get().(*parsergen.MySqlLexer) + if !ok { + lexer = parsergen.NewMySqlLexer(nil) + } + for _, listener := range listeners { + lexer.AddErrorListener(listener) + } + lexer.SetInputStream(stream) + return lexer +} + +func getParser(lexer *parsergen.MySqlLexer, listeners ...antlr.ErrorListener) *parsergen.MySqlParser { + tokenStream := antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel) + parser, ok := parserPool.Get().(*parsergen.MySqlParser) + if !ok { + parser = parsergen.NewMySqlParser(nil) + } + for _, listener := range listeners { + parser.AddErrorListener(listener) + } + parser.BuildParseTrees = true + parser.SetInputStream(tokenStream) + return parser +} + +func putLexer(lexer *parsergen.MySqlLexer) { + lexer.SetInputStream(nil) + lexerPool.Put(lexer) +} + +func putParser(parser *parsergen.MySqlParser) { + parser.SetInputStream(nil) + parserPool.Put(parser) +} diff --git a/internal/mysqld/parser/antlrparser/utils.go b/internal/mysqld/parser/antlrparser/utils.go new file mode 100644 index 0000000000..46363f3e70 --- /dev/null +++ b/internal/mysqld/parser/antlrparser/utils.go @@ -0,0 +1,20 @@ +package antlrparser + +import ( + "strings" + + "github.com/antlr/antlr4/runtime/Go/antlr/v4" +) + +func CaseInsensitiveEqual(s1, s2 string) bool { + return strings.ToLower(s1) == strings.ToLower(s2) +} + +// GetOriginalText don't work. +func GetOriginalText(ctx antlr.ParserRuleContext) string { + if true { + return ctx.GetText() + } + interval := ctx.GetSourceInterval() + return ctx.GetStart().GetInputStream().GetTextFromInterval(interval) +} diff --git a/internal/mysqld/parser/config.go b/internal/mysqld/parser/config.go new file mode 100644 index 0000000000..0b6ab7fb2f --- /dev/null +++ b/internal/mysqld/parser/config.go @@ -0,0 +1,15 @@ +package parser + +type Config struct{} + +type Option = func(c *Config) + +func (c *Config) Apply(opts ...Option) { + for _, opt := range opts { + opt(c) + } +} + +func defaultParserConfig() Config { + return Config{} +} diff --git a/internal/mysqld/parser/parser.go b/internal/mysqld/parser/parser.go new file mode 100644 index 0000000000..f1f6a0d870 --- /dev/null +++ b/internal/mysqld/parser/parser.go @@ -0,0 +1,9 @@ +package parser + +import ( + "github.com/milvus-io/milvus/internal/mysqld/planner" +) + +type Parser interface { + Parse(sql string, opts ...Option) (*planner.LogicalPlan, []error, error) +} diff --git a/internal/mysqld/planner/aggregate_windowed_function.go b/internal/mysqld/planner/aggregate_windowed_function.go new file mode 100644 index 0000000000..00e76af31a --- /dev/null +++ b/internal/mysqld/planner/aggregate_windowed_function.go @@ -0,0 +1,47 @@ +package planner + +import ( + "github.com/moznion/go-optional" +) + +type NodeAggregateWindowedFunction struct { + baseNode + AggCount optional.Option[*NodeCount] +} + +func (n *NodeAggregateWindowedFunction) String() string { + return "NodeAggregateWindowedFunction" +} + +func (n *NodeAggregateWindowedFunction) GetChildren() []Node { + if n.AggCount.IsSome() { + return []Node{n.AggCount.Unwrap()} + } + return nil +} + +func (n *NodeAggregateWindowedFunction) Accept(v Visitor) interface{} { + return v.VisitAggregateWindowedFunction(n) +} + +type NodeAggregateWindowedFunctionOption func(*NodeAggregateWindowedFunction) + +func (n *NodeAggregateWindowedFunction) apply(opts ...NodeAggregateWindowedFunctionOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithAggCount(c *NodeCount) NodeAggregateWindowedFunctionOption { + return func(n *NodeAggregateWindowedFunction) { + n.AggCount = optional.Some(c) + } +} + +func NewNodeAggregateWindowedFunction(text string, opts ...NodeAggregateWindowedFunctionOption) *NodeAggregateWindowedFunction { + n := &NodeAggregateWindowedFunction{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/binary_comparison_predicate.go b/internal/mysqld/planner/binary_comparison_predicate.go new file mode 100644 index 0000000000..9da8f5c982 --- /dev/null +++ b/internal/mysqld/planner/binary_comparison_predicate.go @@ -0,0 +1,31 @@ +package planner + +import "fmt" + +type NodeBinaryComparisonPredicate struct { + baseNode + Left *NodePredicate + Right *NodePredicate + Op ComparisonOperator +} + +func (n *NodeBinaryComparisonPredicate) String() string { + return fmt.Sprintf("NodeBinaryComparisonPredicate, Op: %v", n.Op) +} + +func (n *NodeBinaryComparisonPredicate) GetChildren() []Node { + return []Node{n.Left, n.Right} +} + +func (n *NodeBinaryComparisonPredicate) Accept(v Visitor) interface{} { + return v.VisitBinaryComparisonPredicate(n) +} + +func NewNodeBinaryComparisonPredicate(text string, left, right *NodePredicate, op ComparisonOperator) *NodeBinaryComparisonPredicate { + return &NodeBinaryComparisonPredicate{ + baseNode: newBaseNode(text), + Left: left, + Right: right, + Op: op, + } +} diff --git a/internal/mysqld/planner/constant.go b/internal/mysqld/planner/constant.go new file mode 100644 index 0000000000..bb1537598f --- /dev/null +++ b/internal/mysqld/planner/constant.go @@ -0,0 +1,63 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeConstant struct { + baseNode + StringLiteral optional.Option[string] + DecimalLiteral optional.Option[int64] + BooleanLiteral optional.Option[bool] + RealLiteral optional.Option[float64] +} + +func (n *NodeConstant) String() string { + return "NodeConstant: " + n.GetText() +} + +func (n *NodeConstant) GetChildren() []Node { + return nil +} + +func (n *NodeConstant) Accept(v Visitor) interface{} { + return v.VisitConstant(n) +} + +type NodeConstantOption func(*NodeConstant) + +func (n *NodeConstant) apply(opts ...NodeConstantOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithStringLiteral(s string) NodeConstantOption { + return func(n *NodeConstant) { + n.StringLiteral = optional.Some(s) + } +} + +func WithDecimalLiteral(s int64) NodeConstantOption { + return func(n *NodeConstant) { + n.DecimalLiteral = optional.Some(s) + } +} + +func WithBooleanLiteral(s bool) NodeConstantOption { + return func(n *NodeConstant) { + n.BooleanLiteral = optional.Some(s) + } +} + +func WithRealLiteral(s float64) NodeConstantOption { + return func(n *NodeConstant) { + n.RealLiteral = optional.Some(s) + } +} + +func NewNodeConstant(text string, opts ...NodeConstantOption) *NodeConstant { + n := &NodeConstant{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/count.go b/internal/mysqld/planner/count.go new file mode 100644 index 0000000000..252fb44793 --- /dev/null +++ b/internal/mysqld/planner/count.go @@ -0,0 +1,23 @@ +package planner + +type NodeCount struct { + baseNode +} + +func (n *NodeCount) String() string { + return "NodeCount" +} + +func (n *NodeCount) GetChildren() []Node { + return nil +} + +func (n *NodeCount) Accept(v Visitor) interface{} { + return v.VisitCount(n) +} + +func NewNodeCount(text string) *NodeCount { + return &NodeCount{ + baseNode: newBaseNode(text), + } +} diff --git a/internal/mysqld/planner/dml_statement.go b/internal/mysqld/planner/dml_statement.go new file mode 100644 index 0000000000..1d99268695 --- /dev/null +++ b/internal/mysqld/planner/dml_statement.go @@ -0,0 +1,45 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeDmlStatement struct { + baseNode + SelectStatement optional.Option[*NodeSelectStatement] +} + +func (n *NodeDmlStatement) String() string { + return "NodeDmlStatement" +} + +func (n *NodeDmlStatement) GetChildren() []Node { + if n.SelectStatement.IsSome() { + return []Node{n.SelectStatement.Unwrap()} + } + return nil +} + +func (n *NodeDmlStatement) Accept(v Visitor) interface{} { + return v.VisitDmlStatement(n) +} + +type NodeDmlStatementOption func(*NodeDmlStatement) + +func (n *NodeDmlStatement) apply(opts ...NodeDmlStatementOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithSelectStatement(s *NodeSelectStatement) NodeDmlStatementOption { + return func(n *NodeDmlStatement) { + n.SelectStatement = optional.Some(s) + } +} + +func NewNodeDmlStatement(text string, opts ...NodeDmlStatementOption) *NodeDmlStatement { + n := &NodeDmlStatement{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/expression.go b/internal/mysqld/planner/expression.go new file mode 100644 index 0000000000..7bc9f09dfc --- /dev/null +++ b/internal/mysqld/planner/expression.go @@ -0,0 +1,75 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeExpression struct { + baseNode + NotExpr optional.Option[*NodeNotExpression] + LogicalExpr optional.Option[*NodeLogicalExpression] + IsExpr optional.Option[*NodeIsExpression] + Predicate optional.Option[*NodePredicate] +} + +func (n *NodeExpression) String() string { + return "NodeExpression" +} + +func (n *NodeExpression) GetChildren() []Node { + if n.NotExpr.IsSome() { + return []Node{n.NotExpr.Unwrap()} + } + if n.LogicalExpr.IsSome() { + return []Node{n.LogicalExpr.Unwrap()} + } + if n.IsExpr.IsSome() { + return []Node{n.IsExpr.Unwrap()} + } + if n.Predicate.IsSome() { + return []Node{n.Predicate.Unwrap()} + } + return nil +} + +func (n *NodeExpression) Accept(v Visitor) interface{} { + return v.VisitExpression(n) +} + +type NodeExpressionOption func(*NodeExpression) + +func (n *NodeExpression) apply(opts ...NodeExpressionOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithNotExpr(expr *NodeNotExpression) NodeExpressionOption { + return func(n *NodeExpression) { + n.NotExpr = optional.Some(expr) + } +} + +func WithLogicalExpr(expr *NodeLogicalExpression) NodeExpressionOption { + return func(n *NodeExpression) { + n.LogicalExpr = optional.Some(expr) + } +} + +func WithIsExpr(expr *NodeIsExpression) NodeExpressionOption { + return func(n *NodeExpression) { + n.IsExpr = optional.Some(expr) + } +} + +func WithPredicate(predicate *NodePredicate) NodeExpressionOption { + return func(n *NodeExpression) { + n.Predicate = optional.Some(predicate) + } +} + +func NewNodeExpression(text string, opts ...NodeExpressionOption) *NodeExpression { + n := &NodeExpression{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/expression_atom.go b/internal/mysqld/planner/expression_atom.go new file mode 100644 index 0000000000..59fcdf3677 --- /dev/null +++ b/internal/mysqld/planner/expression_atom.go @@ -0,0 +1,75 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeExpressionAtom struct { + baseNode + Constant optional.Option[*NodeConstant] + FullColumnName optional.Option[*NodeFullColumnName] + UnaryExpr optional.Option[*NodeUnaryExpressionAtom] + NestedExpr optional.Option[*NodeNestedExpressionAtom] +} + +func (n *NodeExpressionAtom) String() string { + return "NodeExpression" +} + +func (n *NodeExpressionAtom) GetChildren() []Node { + if n.Constant.IsSome() { + return []Node{n.Constant.Unwrap()} + } + if n.FullColumnName.IsSome() { + return []Node{n.FullColumnName.Unwrap()} + } + if n.UnaryExpr.IsSome() { + return []Node{n.UnaryExpr.Unwrap()} + } + if n.NestedExpr.IsSome() { + return []Node{n.NestedExpr.Unwrap()} + } + return nil +} + +func (n *NodeExpressionAtom) Accept(v Visitor) interface{} { + return v.VisitExpressionAtom(n) +} + +type NodeExpressionAtomOption func(*NodeExpressionAtom) + +func (n *NodeExpressionAtom) apply(opts ...NodeExpressionAtomOption) { + for _, opt := range opts { + opt(n) + } +} + +func ExpressionAtomWithConstant(c *NodeConstant) NodeExpressionAtomOption { + return func(n *NodeExpressionAtom) { + n.Constant = optional.Some(c) + } +} + +func ExpressionAtomWithFullColumnName(c *NodeFullColumnName) NodeExpressionAtomOption { + return func(n *NodeExpressionAtom) { + n.FullColumnName = optional.Some(c) + } +} + +func ExpressionAtomWithUnaryExpr(c *NodeUnaryExpressionAtom) NodeExpressionAtomOption { + return func(n *NodeExpressionAtom) { + n.UnaryExpr = optional.Some(c) + } +} + +func ExpressionAtomWithNestedExpr(c *NodeNestedExpressionAtom) NodeExpressionAtomOption { + return func(n *NodeExpressionAtom) { + n.NestedExpr = optional.Some(c) + } +} + +func NewNodeExpressionAtom(text string, opts ...NodeExpressionAtomOption) *NodeExpressionAtom { + n := &NodeExpressionAtom{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/expression_atom_predicate.go b/internal/mysqld/planner/expression_atom_predicate.go new file mode 100644 index 0000000000..da5fb1f5ea --- /dev/null +++ b/internal/mysqld/planner/expression_atom_predicate.go @@ -0,0 +1,44 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeExpressionAtomPredicate struct { + baseNode + Assignment optional.Option[*NodeLocalID] + ExpressionAtom *NodeExpressionAtom +} + +func (n *NodeExpressionAtomPredicate) String() string { + return "NodeExpressionAtomPredicate" +} + +func (n *NodeExpressionAtomPredicate) GetChildren() []Node { + return []Node{n.ExpressionAtom} +} + +func (n *NodeExpressionAtomPredicate) Accept(v Visitor) interface{} { + return v.VisitExpressionAtomPredicate(n) +} + +type NodeExpressionAtomPredicateOption func(*NodeExpressionAtomPredicate) + +func (n *NodeExpressionAtomPredicate) apply(opts ...NodeExpressionAtomPredicateOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithAssignment(assign *NodeLocalID) NodeExpressionAtomPredicateOption { + return func(n *NodeExpressionAtomPredicate) { + n.Assignment = optional.Some(assign) + } +} + +func NewNodeExpressionAtomPredicate(text string, exprAtom *NodeExpressionAtom, opts ...NodeExpressionAtomPredicateOption) *NodeExpressionAtomPredicate { + n := &NodeExpressionAtomPredicate{ + baseNode: newBaseNode(text), + ExpressionAtom: exprAtom, + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/expression_text_restorer.go b/internal/mysqld/planner/expression_text_restorer.go new file mode 100644 index 0000000000..7eeb42f845 --- /dev/null +++ b/internal/mysqld/planner/expression_text_restorer.go @@ -0,0 +1,134 @@ +package planner + +import ( + "fmt" + "strconv" +) + +// TODO: remove this after execution engine is ready. +type exprTextRestorer struct { + Visitor +} + +func (v *exprTextRestorer) VisitFullColumnName(n *NodeFullColumnName) interface{} { + return n.Name +} + +func (v *exprTextRestorer) VisitExpression(n *NodeExpression) interface{} { + if n.NotExpr.IsSome() { + return n.NotExpr.Unwrap().Accept(v) + } + if n.LogicalExpr.IsSome() { + return n.LogicalExpr.Unwrap().Accept(v) + } + if n.IsExpr.IsSome() { + return n.IsExpr.Unwrap().Accept(v) + } + if n.Predicate.IsSome() { + return n.Predicate.Unwrap().Accept(v) + } + return "" +} + +func (v *exprTextRestorer) VisitExpressions(n *NodeExpressions) interface{} { + l := len(n.Expressions) + if l == 0 { + return "" + } + s := n.Expressions[0].Accept(v).(string) + for i := 1; i < l; i++ { + s += fmt.Sprintf(", %s", n.Expressions[i].Accept(v)) + } + return s +} + +func (v *exprTextRestorer) VisitNotExpression(n *NodeNotExpression) interface{} { + r := n.Expression.Accept(v) + return fmt.Sprintf("not (%s)", r) +} + +func (v *exprTextRestorer) VisitLogicalExpression(n *NodeLogicalExpression) interface{} { + l := n.Left.Accept(v) + r := n.Right.Accept(v) + return fmt.Sprintf("(%s) %s (%s)", l, n.Op, r) +} + +func (v *exprTextRestorer) VisitIsExpression(n *NodeIsExpression) interface{} { + r := n.Predicate.Accept(v) + return fmt.Sprintf("%s (%s)", n.Op, r) +} + +func (v *exprTextRestorer) VisitPredicate(n *NodePredicate) interface{} { + if n.InPredicate.IsSome() { + return n.InPredicate.Unwrap().Accept(v) + } + if n.BinaryComparisonPredicate.IsSome() { + return n.BinaryComparisonPredicate.Unwrap().Accept(v) + } + if n.ExpressionAtomPredicate.IsSome() { + return n.ExpressionAtomPredicate.Unwrap().Accept(v) + } + return "" +} + +func (v *exprTextRestorer) VisitInPredicate(n *NodeInPredicate) interface{} { + // TODO: consider () instead of [] + predicate := n.Predicate.Accept(v) + exprs := n.Expressions.Accept(v) + return fmt.Sprintf("(%s) %s [%s]", predicate, n.Op, exprs) +} + +func (v *exprTextRestorer) VisitBinaryComparisonPredicate(n *NodeBinaryComparisonPredicate) interface{} { + l := n.Left.Accept(v) + r := n.Right.Accept(v) + return fmt.Sprintf("(%s) %s (%s)", l, n.Op, r) +} + +func (v *exprTextRestorer) VisitExpressionAtomPredicate(n *NodeExpressionAtomPredicate) interface{} { + return n.ExpressionAtom.Accept(v) +} + +func (v *exprTextRestorer) VisitExpressionAtom(n *NodeExpressionAtom) interface{} { + if n.Constant.IsSome() { + return n.Constant.Unwrap().Accept(v) + } + if n.FullColumnName.IsSome() { + return n.FullColumnName.Unwrap().Accept(v) + } + if n.UnaryExpr.IsSome() { + return n.UnaryExpr.Unwrap().Accept(v) + } + if n.NestedExpr.IsSome() { + return n.NestedExpr.Unwrap().Accept(v) + } + return "" +} + +func (v *exprTextRestorer) VisitUnaryExpressionAtom(n *NodeUnaryExpressionAtom) interface{} { + expr := n.Expr.Accept(v) + return fmt.Sprintf("%s (%s)", n.Op, expr) +} + +func (v *exprTextRestorer) VisitConstant(n *NodeConstant) interface{} { + if n.StringLiteral.IsSome() { + return n.StringLiteral.Unwrap() + } + if n.DecimalLiteral.IsSome() { + return strconv.Itoa(int(n.DecimalLiteral.Unwrap())) + } + if n.BooleanLiteral.IsSome() { + return strconv.FormatBool(n.BooleanLiteral.Unwrap()) + } + if n.RealLiteral.IsSome() { + return strconv.FormatFloat(n.RealLiteral.Unwrap(), 'g', 10, 14) + } + return "" +} + +func (v *exprTextRestorer) RestoreExprText(n Node) string { + return n.Accept(v).(string) +} + +func NewExprTextRestorer() *exprTextRestorer { + return &exprTextRestorer{} +} diff --git a/internal/mysqld/planner/expressions.go b/internal/mysqld/planner/expressions.go new file mode 100644 index 0000000000..db541636bf --- /dev/null +++ b/internal/mysqld/planner/expressions.go @@ -0,0 +1,29 @@ +package planner + +type NodeExpressions struct { + baseNode + Expressions []*NodeExpression +} + +func (n *NodeExpressions) String() string { + return "NodeExpressions" +} + +func (n *NodeExpressions) GetChildren() []Node { + children := make([]Node, 0, len(n.Expressions)) + for _, child := range n.Expressions { + children = append(children, child) + } + return children +} + +func (n *NodeExpressions) Accept(v Visitor) interface{} { + return v.VisitExpressions(n) +} + +func NewNodeExpressions(text string, exprs []*NodeExpression) *NodeExpressions { + return &NodeExpressions{ + baseNode: newBaseNode(text), + Expressions: exprs, + } +} diff --git a/internal/mysqld/planner/from_clause.go b/internal/mysqld/planner/from_clause.go new file mode 100644 index 0000000000..ab1f12cd7a --- /dev/null +++ b/internal/mysqld/planner/from_clause.go @@ -0,0 +1,51 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeFromClause struct { + baseNode + TableSources []*NodeTableSource + Where optional.Option[*NodeExpression] +} + +func (n *NodeFromClause) String() string { + return "NodeFromClause" +} + +func (n *NodeFromClause) GetChildren() []Node { + children := make([]Node, 0, len(n.TableSources)+1) + for _, child := range n.TableSources { + children = append(children, child) + } + if n.Where.IsSome() { + children = append(children, n.Where.Unwrap()) + } + return children +} + +func (n *NodeFromClause) Accept(v Visitor) interface{} { + return v.VisitFromClause(n) +} + +type NodeFromClauseOption func(*NodeFromClause) + +func (n *NodeFromClause) apply(opts ...NodeFromClauseOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithWhere(where *NodeExpression) NodeFromClauseOption { + return func(n *NodeFromClause) { + n.Where = optional.Some(where) + } +} + +func NewNodeFromClause(text string, tableSources []*NodeTableSource, opts ...NodeFromClauseOption) *NodeFromClause { + n := &NodeFromClause{ + baseNode: newBaseNode(text), + TableSources: tableSources, + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/full_column_name.go b/internal/mysqld/planner/full_column_name.go new file mode 100644 index 0000000000..8f214dcbc2 --- /dev/null +++ b/internal/mysqld/planner/full_column_name.go @@ -0,0 +1,51 @@ +package planner + +import ( + "fmt" + + "github.com/moznion/go-optional" +) + +type NodeFullColumnName struct { + baseNode + Name string + Alias optional.Option[string] +} + +func (n *NodeFullColumnName) String() string { + if n.Alias.IsSome() { + return fmt.Sprintf("NodeFullColumnName, Name: %s, Alias: %s", n.Name, n.Alias.Unwrap()) + } + return fmt.Sprintf("NodeFullColumnName, Name: %s", n.Name) +} + +func (n *NodeFullColumnName) GetChildren() []Node { + return nil +} + +func (n *NodeFullColumnName) Accept(v Visitor) interface{} { + return v.VisitFullColumnName(n) +} + +type NodeFullColumnNameOption func(*NodeFullColumnName) + +func (n *NodeFullColumnName) apply(opts ...NodeFullColumnNameOption) { + for _, opt := range opts { + opt(n) + } +} + +func FullColumnNameWithAlias(alias string) NodeFullColumnNameOption { + return func(n *NodeFullColumnName) { + n.Alias = optional.Some(alias) + } +} + +func NewNodeFullColumnName(text, name string, opts ...NodeFullColumnNameOption) *NodeFullColumnName { + n := &NodeFullColumnName{ + baseNode: newBaseNode(text), + Name: name, + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/function_call.go b/internal/mysqld/planner/function_call.go new file mode 100644 index 0000000000..774f2d804f --- /dev/null +++ b/internal/mysqld/planner/function_call.go @@ -0,0 +1,55 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeFunctionCall struct { + baseNode + Agg optional.Option[*NodeAggregateWindowedFunction] + Alias optional.Option[string] +} + +func (n *NodeFunctionCall) String() string { + if n.Alias.IsSome() { + return "NodeFunctionCall, Alias: " + n.Alias.Unwrap() + } + return "NodeFunctionCall" +} + +func (n *NodeFunctionCall) GetChildren() []Node { + if n.Agg.IsSome() { + return []Node{n.Agg.Unwrap()} + } + return nil +} + +func (n *NodeFunctionCall) Accept(v Visitor) interface{} { + return v.VisitFunctionCall(n) +} + +type NodeFunctionCallOption func(*NodeFunctionCall) + +func (n *NodeFunctionCall) apply(opts ...NodeFunctionCallOption) { + for _, opt := range opts { + opt(n) + } +} + +func FunctionCallWithAlias(alias string) NodeFunctionCallOption { + return func(n *NodeFunctionCall) { + n.Alias = optional.Some(alias) + } +} + +func WithAgg(agg *NodeAggregateWindowedFunction) NodeFunctionCallOption { + return func(n *NodeFunctionCall) { + n.Agg = optional.Some(agg) + } +} + +func NewNodeFunctionCall(text string, opts ...NodeFunctionCallOption) *NodeFunctionCall { + n := &NodeFunctionCall{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/in_predicate.go b/internal/mysqld/planner/in_predicate.go new file mode 100644 index 0000000000..cd0fab228f --- /dev/null +++ b/internal/mysqld/planner/in_predicate.go @@ -0,0 +1,31 @@ +package planner + +import "fmt" + +type NodeInPredicate struct { + baseNode + Predicate *NodePredicate + Expressions *NodeExpressions + Op InOperator +} + +func (n *NodeInPredicate) String() string { + return fmt.Sprintf("NodeInPredicate, Op: %v", n.Op) +} + +func (n *NodeInPredicate) GetChildren() []Node { + return []Node{n.Predicate, n.Expressions} +} + +func (n *NodeInPredicate) Accept(v Visitor) interface{} { + return v.VisitInPredicate(n) +} + +func NewNodeInPredicate(text string, predicate *NodePredicate, exprs *NodeExpressions, op InOperator) *NodeInPredicate { + return &NodeInPredicate{ + baseNode: newBaseNode(text), + Predicate: predicate, + Expressions: exprs, + Op: op, + } +} diff --git a/internal/mysqld/planner/is_expression.go b/internal/mysqld/planner/is_expression.go new file mode 100644 index 0000000000..b40ba19050 --- /dev/null +++ b/internal/mysqld/planner/is_expression.go @@ -0,0 +1,32 @@ +package planner + +import "fmt" + +type NodeIsExpression struct { + baseNode + Predicate *NodePredicate + TV TestValue + Op IsOperator +} + +func (n *NodeIsExpression) String() string { + return fmt.Sprintf("NodeIsExpression, Op: %v, Test Value: %v", n.Op, n.TV) +} + +func (n *NodeIsExpression) GetChildren() []Node { + return []Node{n.Predicate} +} + +func (n *NodeIsExpression) Accept(v Visitor) interface{} { + return v.VisitIsExpression(n) +} + +func NewNodeIsExpression(text string, predicate *NodePredicate, tv TestValue, op IsOperator) *NodeIsExpression { + n := &NodeIsExpression{ + baseNode: newBaseNode(text), + Predicate: predicate, + TV: tv, + Op: op, + } + return n +} diff --git a/internal/mysqld/planner/limit.go b/internal/mysqld/planner/limit.go new file mode 100644 index 0000000000..acddc87d38 --- /dev/null +++ b/internal/mysqld/planner/limit.go @@ -0,0 +1,29 @@ +package planner + +import "fmt" + +type NodeLimitClause struct { + baseNode + Limit int64 + Offset int64 +} + +func (n *NodeLimitClause) String() string { + return fmt.Sprintf("Offet: %d, Limit: %d", n.Offset, n.Limit) +} + +func (n *NodeLimitClause) GetChildren() []Node { + return nil +} + +func (n *NodeLimitClause) Accept(v Visitor) interface{} { + return v.VisitLimitClause(n) +} + +func NewNodeLimitClause(text string, limit, offset int64) *NodeLimitClause { + return &NodeLimitClause{ + baseNode: newBaseNode(text), + Limit: limit, + Offset: offset, + } +} diff --git a/internal/mysqld/planner/local_id.go b/internal/mysqld/planner/local_id.go new file mode 100644 index 0000000000..7685194499 --- /dev/null +++ b/internal/mysqld/planner/local_id.go @@ -0,0 +1,5 @@ +package planner + +type NodeLocalID struct { + Name string +} diff --git a/internal/mysqld/planner/lock_clause.go b/internal/mysqld/planner/lock_clause.go new file mode 100644 index 0000000000..df688a14b3 --- /dev/null +++ b/internal/mysqld/planner/lock_clause.go @@ -0,0 +1,44 @@ +package planner + +type LockClauseOption int + +const ( + LockClauseOptionUnknown LockClauseOption = iota + LockClauseOptionForUpdate + LockClauseOptionLockInShareMode +) + +func (o LockClauseOption) String() string { + switch o { + case LockClauseOptionForUpdate: + return "FOR UPDATE" + case LockClauseOptionLockInShareMode: + return "LOCK IN SHARE MODE" + default: + return "UNKNOWN" + } +} + +type NodeLockClause struct { + baseNode + Option LockClauseOption +} + +func (n *NodeLockClause) String() string { + return n.Option.String() +} + +func (n *NodeLockClause) GetChildren() []Node { + return nil +} + +func (n *NodeLockClause) Accept(v Visitor) interface{} { + return v.VisitLockClause(n) +} + +func NewNodeLockClause(text string, option LockClauseOption) *NodeLockClause { + return &NodeLockClause{ + baseNode: newBaseNode(text), + Option: option, + } +} diff --git a/internal/mysqld/planner/logical_expression.go b/internal/mysqld/planner/logical_expression.go new file mode 100644 index 0000000000..d52ce01617 --- /dev/null +++ b/internal/mysqld/planner/logical_expression.go @@ -0,0 +1,31 @@ +package planner + +import "fmt" + +type NodeLogicalExpression struct { + baseNode + Left *NodeExpression + Right *NodeExpression + Op LogicalOperator +} + +func (n *NodeLogicalExpression) String() string { + return fmt.Sprintf("NodeLogicalExpression, Op: %v", n.Op) +} + +func (n *NodeLogicalExpression) GetChildren() []Node { + return []Node{n.Left, n.Right} +} + +func (n *NodeLogicalExpression) Accept(v Visitor) interface{} { + return v.VisitLogicalExpression(n) +} + +func NewNodeLogicalExpression(text string, left, right *NodeExpression, op LogicalOperator) *NodeLogicalExpression { + return &NodeLogicalExpression{ + baseNode: newBaseNode(text), + Left: left, + Right: right, + Op: op, + } +} diff --git a/internal/mysqld/planner/nested_expression_atom.go b/internal/mysqld/planner/nested_expression_atom.go new file mode 100644 index 0000000000..0599028e85 --- /dev/null +++ b/internal/mysqld/planner/nested_expression_atom.go @@ -0,0 +1,29 @@ +package planner + +type NodeNestedExpressionAtom struct { + baseNode + Expressions []*NodeExpression +} + +func (n *NodeNestedExpressionAtom) String() string { + return "NodeNestedExpressionAtom" +} + +func (n *NodeNestedExpressionAtom) GetChildren() []Node { + children := make([]Node, 0, len(n.Expressions)) + for _, child := range n.Expressions { + children = append(children, child) + } + return children +} + +func (n *NodeNestedExpressionAtom) Accept(v Visitor) interface{} { + return v.VisitNestedExpressionAtom(n) +} + +func NewNodeNestedExpressionAtom(text string, exprs []*NodeExpression) *NodeNestedExpressionAtom { + return &NodeNestedExpressionAtom{ + baseNode: newBaseNode(text), + Expressions: exprs, + } +} diff --git a/internal/mysqld/planner/node.go b/internal/mysqld/planner/node.go new file mode 100644 index 0000000000..9ceecacb26 --- /dev/null +++ b/internal/mysqld/planner/node.go @@ -0,0 +1,22 @@ +package planner + +import "fmt" + +type Node interface { + fmt.Stringer + GetText() string + GetChildren() []Node + Accept(visitor Visitor) interface{} +} + +type baseNode struct { + text string +} + +func (n baseNode) GetText() string { + return n.text +} + +func newBaseNode(text string) baseNode { + return baseNode{text: text} +} diff --git a/internal/mysqld/planner/not_expression.go b/internal/mysqld/planner/not_expression.go new file mode 100644 index 0000000000..4b5033ee00 --- /dev/null +++ b/internal/mysqld/planner/not_expression.go @@ -0,0 +1,25 @@ +package planner + +type NodeNotExpression struct { + baseNode + Expression *NodeExpression +} + +func (n *NodeNotExpression) String() string { + return "NodeNotExpression" +} + +func (n *NodeNotExpression) GetChildren() []Node { + return []Node{n.Expression} +} + +func (n *NodeNotExpression) Accept(v Visitor) interface{} { + return v.VisitNotExpression(n) +} + +func NewNodeNotExpression(text string, expr *NodeExpression) *NodeNotExpression { + return &NodeNotExpression{ + baseNode: newBaseNode(text), + Expression: expr, + } +} diff --git a/internal/mysqld/planner/one_of.go b/internal/mysqld/planner/one_of.go new file mode 100644 index 0000000000..3b2cd0a52e --- /dev/null +++ b/internal/mysqld/planner/one_of.go @@ -0,0 +1,3 @@ +package planner + +// TODO(longjiquan): better to use `one_of` to replace `optional`. diff --git a/internal/mysqld/planner/operator.go b/internal/mysqld/planner/operator.go new file mode 100644 index 0000000000..a7dafe5312 --- /dev/null +++ b/internal/mysqld/planner/operator.go @@ -0,0 +1,117 @@ +package planner + +type UnaryOperator int + +const ( + UnaryOperatorUnknown UnaryOperator = iota + UnaryOperatorExclamationSymbol // '!' + UnaryOperatorTilde // '~' + UnaryOperatorPositive // '+' + UnaryOperatorNegative // '-' + UnaryOperatorNot // 'not' +) + +func (o UnaryOperator) String() string { + switch o { + case UnaryOperatorExclamationSymbol: + return "!" + case UnaryOperatorTilde: + return "~" + case UnaryOperatorPositive: + return "+" + case UnaryOperatorNegative: + return "-" + case UnaryOperatorNot: + return "not" + default: + return "UNKNOWN" + } +} + +type ComparisonOperator int + +const ( + ComparisonOperatorUnknown ComparisonOperator = 0 + ComparisonOperatorEqual ComparisonOperator = 1 // '=' + ComparisonOperatorGreaterThan ComparisonOperator = 2 // '>' + ComparisonOperatorLessThan ComparisonOperator = 4 // '<' + ComparisonOperatorNotEqual ComparisonOperator = 8 // '<>', '!=' + ComparisonOperatorLessEqual = ComparisonOperatorLessThan | ComparisonOperatorEqual // '<=' + ComparisonOperatorGreaterEqual = ComparisonOperatorGreaterThan | ComparisonOperatorEqual // '>=' +) + +func (o ComparisonOperator) String() string { + switch o { + case ComparisonOperatorEqual: + return "=" + case ComparisonOperatorGreaterThan: + return ">" + case ComparisonOperatorLessThan: + return "<" + case ComparisonOperatorNotEqual: + return "!=" + case ComparisonOperatorLessEqual: + return "<=" + case ComparisonOperatorGreaterEqual: + return ">=" + default: + return "UNKNOWN" + } +} + +type LogicalOperator int + +const ( + LogicalOperatorUnknown LogicalOperator = iota + LogicalOperatorAnd + LogicalOperatorOr +) + +func (o LogicalOperator) String() string { + switch o { + case LogicalOperatorAnd: + return "AND" + case LogicalOperatorOr: + return "OR" + default: + return "UNKNOWN" + } +} + +type IsOperator int + +const ( + IsOperatorUnknown IsOperator = iota + IsOperatorIs + IsOperatorIsNot +) + +func (o IsOperator) String() string { + switch o { + case IsOperatorIs: + return "IS" + case IsOperatorIsNot: + return "IS NOT" + default: + return "UNKNOWN" + } +} + +type InOperator int + +const ( + InOperatorUnknown InOperator = iota + InOperatorIn + InOperatorNotIn +) + +func (o InOperator) String() string { + switch o { + case InOperatorIn: + return "In" + case InOperatorNotIn: + return "NOT IN" + default: + return "UNKNOWN" + } +} diff --git a/internal/mysqld/planner/plan.go b/internal/mysqld/planner/plan.go new file mode 100644 index 0000000000..7913f6964c --- /dev/null +++ b/internal/mysqld/planner/plan.go @@ -0,0 +1,9 @@ +package planner + +type LogicalPlan struct { + Node Node +} + +type PhysicalPlan struct { + Node Node +} diff --git a/internal/mysqld/planner/predicate.go b/internal/mysqld/planner/predicate.go new file mode 100644 index 0000000000..b7cee69693 --- /dev/null +++ b/internal/mysqld/planner/predicate.go @@ -0,0 +1,65 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodePredicate struct { + baseNode + InPredicate optional.Option[*NodeInPredicate] + BinaryComparisonPredicate optional.Option[*NodeBinaryComparisonPredicate] + ExpressionAtomPredicate optional.Option[*NodeExpressionAtomPredicate] +} + +func (n *NodePredicate) String() string { + return "NodePredicate" +} + +func (n *NodePredicate) GetChildren() []Node { + if n.InPredicate.IsSome() { + return []Node{n.InPredicate.Unwrap()} + } + if n.BinaryComparisonPredicate.IsSome() { + return []Node{n.BinaryComparisonPredicate.Unwrap()} + } + if n.ExpressionAtomPredicate.IsSome() { + return []Node{n.ExpressionAtomPredicate.Unwrap()} + } + return nil +} + +func (n *NodePredicate) Accept(v Visitor) interface{} { + return v.VisitPredicate(n) +} + +type NodePredicateOption func(*NodePredicate) + +func (n *NodePredicate) apply(opts ...NodePredicateOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithInPredicate(p *NodeInPredicate) NodePredicateOption { + return func(n *NodePredicate) { + n.InPredicate = optional.Some(p) + } +} + +func WithNodeBinaryComparisonPredicate(p *NodeBinaryComparisonPredicate) NodePredicateOption { + return func(n *NodePredicate) { + n.BinaryComparisonPredicate = optional.Some(p) + } +} + +func WithNodeExpressionAtomPredicate(p *NodeExpressionAtomPredicate) NodePredicateOption { + return func(n *NodePredicate) { + n.ExpressionAtomPredicate = optional.Some(p) + } +} + +func NewNodePredicate(text string, opts ...NodePredicateOption) *NodePredicate { + n := &NodePredicate{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/query_specification.go b/internal/mysqld/planner/query_specification.go new file mode 100644 index 0000000000..52050b2dee --- /dev/null +++ b/internal/mysqld/planner/query_specification.go @@ -0,0 +1,71 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeQuerySpecification struct { + baseNode + SelectSpecs []*NodeSelectSpec + SelectElements []*NodeSelectElement + From optional.Option[*NodeFromClause] + Limit optional.Option[*NodeLimitClause] +} + +func (n *NodeQuerySpecification) String() string { + return "NodeQuerySpecification" +} + +func (n *NodeQuerySpecification) GetChildren() []Node { + children := make([]Node, 0, len(n.SelectSpecs)+len(n.SelectElements)+2) + for _, child := range n.SelectSpecs { + children = append(children, child) + } + for _, child := range n.SelectElements { + children = append(children, child) + } + if n.From.IsSome() { + children = append(children, n.From.Unwrap()) + } + if n.Limit.IsSome() { + children = append(children, n.Limit.Unwrap()) + } + return children +} + +func (n *NodeQuerySpecification) Accept(v Visitor) interface{} { + return v.VisitQuerySpecification(n) +} + +type NodeQuerySpecificationOption func(*NodeQuerySpecification) + +func (n *NodeQuerySpecification) apply(opts ...NodeQuerySpecificationOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithFrom(from *NodeFromClause) NodeQuerySpecificationOption { + return func(n *NodeQuerySpecification) { + n.From = optional.Some(from) + } +} + +func WithLimit(Limit *NodeLimitClause) NodeQuerySpecificationOption { + return func(n *NodeQuerySpecification) { + n.Limit = optional.Some(Limit) + } +} + +func NewNodeQuerySpecification( + text string, + selectSpecs []*NodeSelectSpec, + selectElements []*NodeSelectElement, + opts ...NodeQuerySpecificationOption, +) *NodeQuerySpecification { + n := &NodeQuerySpecification{ + baseNode: newBaseNode(text), + SelectSpecs: selectSpecs, + SelectElements: selectElements, + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/select_element_star.go b/internal/mysqld/planner/select_element_star.go new file mode 100644 index 0000000000..84754b68b0 --- /dev/null +++ b/internal/mysqld/planner/select_element_star.go @@ -0,0 +1,19 @@ +package planner + +type NodeSelectElementStar struct{} // select *; + +func (n *NodeSelectElementStar) String() string { + return "NodeSelectElementStar" +} + +func (n *NodeSelectElementStar) GetText() string { + return "*" +} + +func (n *NodeSelectElementStar) GetChildren() []Node { + return nil +} + +func (n *NodeSelectElementStar) Accept(v Visitor) interface{} { + return v.VisitSelectElementStar(n) +} diff --git a/internal/mysqld/planner/select_elements.go b/internal/mysqld/planner/select_elements.go new file mode 100644 index 0000000000..12299c961b --- /dev/null +++ b/internal/mysqld/planner/select_elements.go @@ -0,0 +1,65 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeSelectElement struct { + baseNode + Star optional.Option[*NodeSelectElementStar] + FullColumnName optional.Option[*NodeFullColumnName] + FunctionCall optional.Option[*NodeFunctionCall] +} + +func (n *NodeSelectElement) String() string { + return "NodeSelectElement" +} + +func (n *NodeSelectElement) GetChildren() []Node { + if n.Star.IsSome() { + return []Node{n.Star.Unwrap()} + } + if n.FullColumnName.IsSome() { + return []Node{n.FullColumnName.Unwrap()} + } + if n.FunctionCall.IsSome() { + return []Node{n.FunctionCall.Unwrap()} + } + return nil +} + +func (n *NodeSelectElement) Accept(v Visitor) interface{} { + return v.VisitSelectElement(n) +} + +type NodeSelectElementOption func(*NodeSelectElement) + +func (n *NodeSelectElement) apply(opts ...NodeSelectElementOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithStar() NodeSelectElementOption { + return func(n *NodeSelectElement) { + n.Star = optional.Some(&NodeSelectElementStar{}) + } +} + +func WithFullColumnName(c *NodeFullColumnName) NodeSelectElementOption { + return func(n *NodeSelectElement) { + n.FullColumnName = optional.Some(c) + } +} + +func WithFunctionCall(c *NodeFunctionCall) NodeSelectElementOption { + return func(n *NodeSelectElement) { + n.FunctionCall = optional.Some(c) + } +} + +func NewNodeSelectElement(text string, opts ...NodeSelectElementOption) *NodeSelectElement { + n := &NodeSelectElement{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/select_spec.go b/internal/mysqld/planner/select_spec.go new file mode 100644 index 0000000000..739799e0ac --- /dev/null +++ b/internal/mysqld/planner/select_spec.go @@ -0,0 +1,24 @@ +package planner + +type NodeSelectSpec struct { + baseNode + // TODO(longjiquan) +} + +func (n *NodeSelectSpec) String() string { + return "NodeSelectSpec" +} + +func (n *NodeSelectSpec) GetChildren() []Node { + return nil +} + +func (n *NodeSelectSpec) Accept(v Visitor) interface{} { + return v.VisitSelectSpec(n) +} + +func NewNodeSelectSpec(text string) *NodeSelectSpec { + return &NodeSelectSpec{ + baseNode: newBaseNode(text), + } +} diff --git a/internal/mysqld/planner/select_statement.go b/internal/mysqld/planner/select_statement.go new file mode 100644 index 0000000000..bc3baed6e8 --- /dev/null +++ b/internal/mysqld/planner/select_statement.go @@ -0,0 +1,45 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeSelectStatement struct { + baseNode + SimpleSelect optional.Option[*NodeSimpleSelect] +} + +func (n *NodeSelectStatement) String() string { + return "NodeSelectStatement" +} + +func (n *NodeSelectStatement) GetChildren() []Node { + if n.SimpleSelect.IsSome() { + return []Node{n.SimpleSelect.Unwrap()} + } + return nil +} + +func (n *NodeSelectStatement) Accept(v Visitor) interface{} { + return v.VisitSelectStatement(n) +} + +type NodeSelectStatementOption func(*NodeSelectStatement) + +func (n *NodeSelectStatement) apply(opts ...NodeSelectStatementOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithSimpleSelect(s *NodeSimpleSelect) NodeSelectStatementOption { + return func(n *NodeSelectStatement) { + n.SimpleSelect = optional.Some(s) + } +} + +func NewNodeSelectStatement(text string, opts ...NodeSelectStatementOption) *NodeSelectStatement { + n := &NodeSelectStatement{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/simple_select.go b/internal/mysqld/planner/simple_select.go new file mode 100644 index 0000000000..dd0d8db40c --- /dev/null +++ b/internal/mysqld/planner/simple_select.go @@ -0,0 +1,56 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeSimpleSelect struct { + baseNode + Query optional.Option[*NodeQuerySpecification] + LockClause optional.Option[*NodeLockClause] +} + +func (n *NodeSimpleSelect) String() string { + return "NodeSimpleSelect" +} + +func (n *NodeSimpleSelect) GetChildren() []Node { + children := make([]Node, 0, 2) + if n.Query.IsSome() { + children = append(children, n.Query.Unwrap()) + } + if n.LockClause.IsSome() { + children = append(children, n.LockClause.Unwrap()) + } + return children +} + +func (n *NodeSimpleSelect) Accept(v Visitor) interface{} { + return v.VisitSimpleSelect(n) +} + +type NodeSimpleSelectOption func(*NodeSimpleSelect) + +func (n *NodeSimpleSelect) apply(opts ...NodeSimpleSelectOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithQuery(query *NodeQuerySpecification) NodeSimpleSelectOption { + return func(n *NodeSimpleSelect) { + n.Query = optional.Some(query) + } +} + +func WithLockClause(clause *NodeLockClause) NodeSimpleSelectOption { + return func(n *NodeSimpleSelect) { + n.LockClause = optional.Some(clause) + } +} + +func NewNodeSimpleSelect(text string, opts ...NodeSimpleSelectOption) *NodeSimpleSelect { + n := &NodeSimpleSelect{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/sql_statement.go b/internal/mysqld/planner/sql_statement.go new file mode 100644 index 0000000000..95b599676d --- /dev/null +++ b/internal/mysqld/planner/sql_statement.go @@ -0,0 +1,45 @@ +package planner + +import "github.com/moznion/go-optional" + +type NodeSqlStatement struct { + baseNode + DmlStatement optional.Option[*NodeDmlStatement] +} + +func (n *NodeSqlStatement) String() string { + return "NodeSqlStatement" +} + +func (n *NodeSqlStatement) GetChildren() []Node { + if n.DmlStatement.IsSome() { + return []Node{n.DmlStatement.Unwrap()} + } + return nil +} + +func (n *NodeSqlStatement) Accept(v Visitor) interface{} { + return v.VisitSqlStatement(n) +} + +type NodeSqlStatementOption func(*NodeSqlStatement) + +func (n *NodeSqlStatement) apply(opts ...NodeSqlStatementOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithDmlStatement(s *NodeDmlStatement) NodeSqlStatementOption { + return func(n *NodeSqlStatement) { + n.DmlStatement = optional.Some(s) + } +} + +func NewNodeSqlStatement(text string, opts ...NodeSqlStatementOption) *NodeSqlStatement { + n := &NodeSqlStatement{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/sql_statements.go b/internal/mysqld/planner/sql_statements.go new file mode 100644 index 0000000000..bd9a9ecfb1 --- /dev/null +++ b/internal/mysqld/planner/sql_statements.go @@ -0,0 +1,29 @@ +package planner + +type NodeSqlStatements struct { + baseNode + Statements []*NodeSqlStatement +} + +func (n *NodeSqlStatements) String() string { + return "NodeSqlStatements" +} + +func (n *NodeSqlStatements) GetChildren() []Node { + children := make([]Node, 0, len(n.Statements)) + for _, child := range n.Statements { + children = append(children, child) + } + return children +} + +func (n *NodeSqlStatements) Accept(v Visitor) interface{} { + return v.VisitSqlStatements(n) +} + +func NewNodeSqlStatements(statements []*NodeSqlStatement, text string) *NodeSqlStatements { + return &NodeSqlStatements{ + baseNode: newBaseNode(text), + Statements: statements, + } +} diff --git a/internal/mysqld/planner/table_sources.go b/internal/mysqld/planner/table_sources.go new file mode 100644 index 0000000000..25999c20f2 --- /dev/null +++ b/internal/mysqld/planner/table_sources.go @@ -0,0 +1,49 @@ +package planner + +import ( + "fmt" + + "github.com/moznion/go-optional" +) + +type NodeTableSource struct { + baseNode + TableName optional.Option[string] +} + +func (n *NodeTableSource) String() string { + if n.TableName.IsSome() { + return fmt.Sprintf("NodeTableSource: %s", n.TableName.Unwrap()) + } + return "NodeTableSource" +} + +func (n *NodeTableSource) GetChildren() []Node { + return nil +} + +func (n *NodeTableSource) Accept(v Visitor) interface{} { + return v.VisitTableSource(n) +} + +type NodeTableSourceOption func(*NodeTableSource) + +func (n *NodeTableSource) apply(opts ...NodeTableSourceOption) { + for _, opt := range opts { + opt(n) + } +} + +func WithTableName(name string) NodeTableSourceOption { + return func(n *NodeTableSource) { + n.TableName = optional.Some(name) + } +} + +func NewNodeTableSource(text string, opts ...NodeTableSourceOption) *NodeTableSource { + n := &NodeTableSource{ + baseNode: newBaseNode(text), + } + n.apply(opts...) + return n +} diff --git a/internal/mysqld/planner/test_value.go b/internal/mysqld/planner/test_value.go new file mode 100644 index 0000000000..83336d46c9 --- /dev/null +++ b/internal/mysqld/planner/test_value.go @@ -0,0 +1,9 @@ +package planner + +type TestValue = int + +const ( + TestValueUnknown TestValue = iota + TestValueTrue + TestValueFalse +) diff --git a/internal/mysqld/planner/tree_utils.go b/internal/mysqld/planner/tree_utils.go new file mode 100644 index 0000000000..7fe44ccc0f --- /dev/null +++ b/internal/mysqld/planner/tree_utils.go @@ -0,0 +1,60 @@ +package planner + +import ( + "github.com/shivamMg/ppds/tree" +) + +type TreeUtils interface { + PreOrderTraverse(n Node, v Visitor) + PrettyPrint(n Node) + PrettyPrintHr(n Node) + PrettyPrintHrn(n Node) +} + +// wrappedNode implements tree.Node. +type wrappedNode struct { + n Node +} + +func (w wrappedNode) Data() interface{} { + return w.n.String() + ", text: " + w.n.GetText() +} + +func (w wrappedNode) Children() []tree.Node { + children := w.n.GetChildren() + r := make([]tree.Node, 0, len(children)) + for _, child := range children { + r = append(r, newWrappedNode(child)) + } + return r +} + +func newWrappedNode(n Node) *wrappedNode { + return &wrappedNode{n: n} +} + +type treeUtilsImpl struct{} + +func (t treeUtilsImpl) PreOrderTraverse(n Node, v Visitor) { + n.Accept(v) + children := n.GetChildren() + for _, child := range children { + t.PreOrderTraverse(child, v) + } +} + +func (t treeUtilsImpl) PrettyPrint(n Node) { + tree.Print(newWrappedNode(n)) +} + +func (t treeUtilsImpl) PrettyPrintHr(n Node) { + tree.PrintHr(newWrappedNode(n)) +} + +func (t treeUtilsImpl) PrettyPrintHrn(n Node) { + tree.PrintHrn(newWrappedNode(n)) +} + +func NewTreeUtils() TreeUtils { + return &treeUtilsImpl{} +} diff --git a/internal/mysqld/planner/unary_expression_atom.go b/internal/mysqld/planner/unary_expression_atom.go new file mode 100644 index 0000000000..322a068d9d --- /dev/null +++ b/internal/mysqld/planner/unary_expression_atom.go @@ -0,0 +1,29 @@ +package planner + +import "fmt" + +type NodeUnaryExpressionAtom struct { + baseNode + Expr *NodeExpressionAtom + Op UnaryOperator +} + +func (n *NodeUnaryExpressionAtom) String() string { + return fmt.Sprintf("NodeUnaryExpressionAtom, Op: %v", n.Op) +} + +func (n *NodeUnaryExpressionAtom) GetChildren() []Node { + return []Node{n.Expr} +} + +func (n *NodeUnaryExpressionAtom) Accept(v Visitor) interface{} { + return v.VisitUnaryExpressionAtom(n) +} + +func NewNodeUnaryExpressionAtom(text string, expr *NodeExpressionAtom, op UnaryOperator) *NodeUnaryExpressionAtom { + return &NodeUnaryExpressionAtom{ + baseNode: newBaseNode(text), + Expr: expr, + Op: op, + } +} diff --git a/internal/mysqld/planner/visitor.go b/internal/mysqld/planner/visitor.go new file mode 100644 index 0000000000..4c1864dfc1 --- /dev/null +++ b/internal/mysqld/planner/visitor.go @@ -0,0 +1,34 @@ +package planner + +type Visitor interface { + VisitSqlStatements(n *NodeSqlStatements) interface{} + VisitSqlStatement(n *NodeSqlStatement) interface{} + VisitDmlStatement(n *NodeDmlStatement) interface{} + VisitSelectStatement(n *NodeSelectStatement) interface{} + VisitSimpleSelect(n *NodeSimpleSelect) interface{} + VisitQuerySpecification(n *NodeQuerySpecification) interface{} + VisitLockClause(n *NodeLockClause) interface{} + VisitSelectSpec(n *NodeSelectSpec) interface{} + VisitSelectElement(n *NodeSelectElement) interface{} + VisitFromClause(n *NodeFromClause) interface{} + VisitLimitClause(n *NodeLimitClause) interface{} + VisitSelectElementStar(n *NodeSelectElementStar) interface{} + VisitFullColumnName(n *NodeFullColumnName) interface{} + VisitFunctionCall(n *NodeFunctionCall) interface{} + VisitAggregateWindowedFunction(n *NodeAggregateWindowedFunction) interface{} + VisitCount(n *NodeCount) interface{} + VisitTableSource(n *NodeTableSource) interface{} + VisitExpression(n *NodeExpression) interface{} + VisitExpressions(n *NodeExpressions) interface{} + VisitNotExpression(n *NodeNotExpression) interface{} + VisitLogicalExpression(n *NodeLogicalExpression) interface{} + VisitIsExpression(n *NodeIsExpression) interface{} + VisitPredicate(n *NodePredicate) interface{} + VisitInPredicate(n *NodeInPredicate) interface{} + VisitBinaryComparisonPredicate(n *NodeBinaryComparisonPredicate) interface{} + VisitExpressionAtomPredicate(n *NodeExpressionAtomPredicate) interface{} + VisitExpressionAtom(n *NodeExpressionAtom) interface{} + VisitUnaryExpressionAtom(n *NodeUnaryExpressionAtom) interface{} + VisitNestedExpressionAtom(n *NodeNestedExpressionAtom) interface{} + VisitConstant(n *NodeConstant) interface{} +} diff --git a/internal/mysqld/server.go b/internal/mysqld/server.go new file mode 100644 index 0000000000..3d13f3935d --- /dev/null +++ b/internal/mysqld/server.go @@ -0,0 +1,62 @@ +package mysqld + +import ( + "fmt" + "sync" + + "github.com/milvus-io/milvus/internal/types" + "github.com/xelabs/go-mysqlstack/driver" + "github.com/xelabs/go-mysqlstack/xlog" + "go.uber.org/zap/zapcore" +) + +type Server struct { + listener *driver.Listener + wg sync.WaitGroup +} + +func (s *Server) Start() error { + s.wg.Add(1) + go s.startInternalListener() + + return nil +} + +func (s *Server) startInternalListener() { + defer s.wg.Done() + s.listener.Accept() +} + +func (s *Server) Close() error { + s.listener.Close() + + s.wg.Wait() + + return nil +} + +func NewServer(s types.ProxyComponent, port int, level zapcore.Level) (*Server, error) { + var l = xlog.NewStdLog(xlog.Level(xlog.INFO)) + switch level { + case zapcore.DebugLevel: + l = xlog.NewStdLog(xlog.Level(xlog.DEBUG)) + case zapcore.InfoLevel: + l = xlog.NewStdLog(xlog.Level(xlog.INFO)) + case zapcore.WarnLevel: + l = xlog.NewStdLog(xlog.Level(xlog.WARNING)) + case zapcore.ErrorLevel: + l = xlog.NewStdLog(xlog.Level(xlog.ERROR)) + case zapcore.FatalLevel: + l = xlog.NewStdLog(xlog.Level(xlog.FATAL)) + case zapcore.PanicLevel: + l = xlog.NewStdLog(xlog.Level(xlog.PANIC)) + } + addr := fmt.Sprintf(":%d", port) + h := newHandler(s) + listener, err := driver.NewListener(l, addr, h) + if err != nil { + return nil, err + } + r := &Server{listener: listener} + return r, nil +} diff --git a/internal/parser/planparserv2/README.md b/internal/parser/planparserv2/README.md deleted file mode 100644 index 27665c1333..0000000000 --- a/internal/parser/planparserv2/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Generate Parser with Antlr4 - -## Install Antlr4 - -Please follow [install antlr4](https://github.com/antlr/antlr4/blob/master/doc/go-target.md) to install the antlr tool. - -The version of antlr tool: `4.9`. - -## Code Generate - -After you install the antlr4, you can generate the parser code in golang with: - -```shell -export CLASSPATH=".:${PWD}/antlr-4.9-complete.jar:$CLASSPATH" -alias antlr4='java -Xmx500M -cp "${PWD}/antlr-4.9-complete.jar:$CLASSPATH" org.antlr.v4.Tool' -alias grun='java -Xmx500M -cp "${PWD}/antlr-4.9-complete.jar:$CLASSPATH" org.antlr.v4.gui.TestRig' -``` - -```shell -antlr4 -Dlanguage=Go -package planparserv2 -o generated -no-listener -visitor Plan.g4 -``` - -All generated code will be under directory `generated`. diff --git a/internal/parser/planparserv2/error_listener.go b/internal/parser/planparserv2/error_listener.go index da5e3e449f..1ee1668a3d 100644 --- a/internal/parser/planparserv2/error_listener.go +++ b/internal/parser/planparserv2/error_listener.go @@ -4,7 +4,7 @@ import ( "fmt" "strconv" - "github.com/antlr/antlr4/runtime/Go/antlr" + "github.com/antlr/antlr4/runtime/Go/antlr/v4" ) type errorListener struct { diff --git a/internal/parser/planparserv2/Plan.g4 b/internal/parser/planparserv2/generated/Plan.g4 similarity index 100% rename from internal/parser/planparserv2/Plan.g4 rename to internal/parser/planparserv2/generated/Plan.g4 diff --git a/internal/parser/planparserv2/generated/Plan.interp b/internal/parser/planparserv2/generated/Plan.interp index 78f93a7178..1f7ab8bd84 100644 --- a/internal/parser/planparserv2/generated/Plan.interp +++ b/internal/parser/planparserv2/generated/Plan.interp @@ -83,4 +83,4 @@ expr atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 39, 89, 4, 2, 9, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 17, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 71, 10, 2, 12, 2, 14, 2, 74, 11, 2, 3, 2, 5, 2, 77, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 84, 10, 2, 12, 2, 14, 2, 87, 11, 2, 3, 2, 2, 3, 2, 3, 2, 2, 11, 4, 2, 15, 16, 28, 29, 3, 2, 17, 19, 3, 2, 15, 16, 3, 2, 21, 22, 3, 2, 8, 9, 3, 2, 10, 11, 3, 2, 8, 11, 3, 2, 12, 13, 3, 2, 30, 31, 2, 111, 2, 16, 3, 2, 2, 2, 4, 5, 8, 2, 1, 2, 5, 17, 7, 34, 2, 2, 6, 17, 7, 35, 2, 2, 7, 17, 7, 33, 2, 2, 8, 17, 7, 37, 2, 2, 9, 17, 7, 36, 2, 2, 10, 11, 7, 3, 2, 2, 11, 12, 5, 2, 2, 2, 12, 13, 7, 4, 2, 2, 13, 17, 3, 2, 2, 2, 14, 15, 9, 2, 2, 2, 15, 17, 5, 2, 2, 17, 16, 4, 3, 2, 2, 2, 16, 6, 3, 2, 2, 2, 16, 7, 3, 2, 2, 2, 16, 8, 3, 2, 2, 2, 16, 9, 3, 2, 2, 2, 16, 10, 3, 2, 2, 2, 16, 14, 3, 2, 2, 2, 17, 85, 3, 2, 2, 2, 18, 19, 12, 18, 2, 2, 19, 20, 7, 20, 2, 2, 20, 84, 5, 2, 2, 19, 21, 22, 12, 16, 2, 2, 22, 23, 9, 3, 2, 2, 23, 84, 5, 2, 2, 17, 24, 25, 12, 15, 2, 2, 25, 26, 9, 4, 2, 2, 26, 84, 5, 2, 2, 16, 27, 28, 12, 14, 2, 2, 28, 29, 9, 5, 2, 2, 29, 84, 5, 2, 2, 15, 30, 31, 12, 11, 2, 2, 31, 32, 9, 6, 2, 2, 32, 33, 7, 36, 2, 2, 33, 34, 9, 6, 2, 2, 34, 84, 5, 2, 2, 12, 35, 36, 12, 10, 2, 2, 36, 37, 9, 7, 2, 2, 37, 38, 7, 36, 2, 2, 38, 39, 9, 7, 2, 2, 39, 84, 5, 2, 2, 11, 40, 41, 12, 9, 2, 2, 41, 42, 9, 8, 2, 2, 42, 84, 5, 2, 2, 10, 43, 44, 12, 8, 2, 2, 44, 45, 9, 9, 2, 2, 45, 84, 5, 2, 2, 9, 46, 47, 12, 7, 2, 2, 47, 48, 7, 23, 2, 2, 48, 84, 5, 2, 2, 8, 49, 50, 12, 6, 2, 2, 50, 51, 7, 25, 2, 2, 51, 84, 5, 2, 2, 7, 52, 53, 12, 5, 2, 2, 53, 54, 7, 24, 2, 2, 54, 84, 5, 2, 2, 6, 55, 56, 12, 4, 2, 2, 56, 57, 7, 26, 2, 2, 57, 84, 5, 2, 2, 5, 58, 59, 12, 3, 2, 2, 59, 60, 7, 27, 2, 2, 60, 84, 5, 2, 2, 4, 61, 62, 12, 19, 2, 2, 62, 63, 7, 14, 2, 2, 63, 84, 7, 37, 2, 2, 64, 65, 12, 13, 2, 2, 65, 66, 9, 10, 2, 2, 66, 67, 7, 5, 2, 2, 67, 72, 5, 2, 2, 2, 68, 69, 7, 6, 2, 2, 69, 71, 5, 2, 2, 2, 70, 68, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 76, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 77, 7, 6, 2, 2, 76, 75, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 79, 7, 7, 2, 2, 79, 84, 3, 2, 2, 2, 80, 81, 12, 12, 2, 2, 81, 82, 9, 10, 2, 2, 82, 84, 7, 32, 2, 2, 83, 18, 3, 2, 2, 2, 83, 21, 3, 2, 2, 2, 83, 24, 3, 2, 2, 2, 83, 27, 3, 2, 2, 2, 83, 30, 3, 2, 2, 2, 83, 35, 3, 2, 2, 2, 83, 40, 3, 2, 2, 2, 83, 43, 3, 2, 2, 2, 83, 46, 3, 2, 2, 2, 83, 49, 3, 2, 2, 2, 83, 52, 3, 2, 2, 2, 83, 55, 3, 2, 2, 2, 83, 58, 3, 2, 2, 2, 83, 61, 3, 2, 2, 2, 83, 64, 3, 2, 2, 2, 83, 80, 3, 2, 2, 2, 84, 87, 3, 2, 2, 2, 85, 83, 3, 2, 2, 2, 85, 86, 3, 2, 2, 2, 86, 3, 3, 2, 2, 2, 87, 85, 3, 2, 2, 2, 7, 16, 72, 76, 83, 85] \ No newline at end of file +[4, 1, 37, 87, 2, 0, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 15, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 69, 8, 0, 10, 0, 12, 0, 72, 9, 0, 1, 0, 3, 0, 75, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 0, 1, 0, 1, 0, 0, 9, 2, 0, 13, 14, 26, 27, 1, 0, 15, 17, 1, 0, 13, 14, 1, 0, 19, 20, 1, 0, 6, 7, 1, 0, 8, 9, 1, 0, 6, 9, 1, 0, 10, 11, 1, 0, 28, 29, 109, 0, 14, 1, 0, 0, 0, 2, 3, 6, 0, -1, 0, 3, 15, 5, 32, 0, 0, 4, 15, 5, 33, 0, 0, 5, 15, 5, 31, 0, 0, 6, 15, 5, 35, 0, 0, 7, 15, 5, 34, 0, 0, 8, 9, 5, 1, 0, 0, 9, 10, 3, 0, 0, 0, 10, 11, 5, 2, 0, 0, 11, 15, 1, 0, 0, 0, 12, 13, 7, 0, 0, 0, 13, 15, 3, 0, 0, 15, 14, 2, 1, 0, 0, 0, 14, 4, 1, 0, 0, 0, 14, 5, 1, 0, 0, 0, 14, 6, 1, 0, 0, 0, 14, 7, 1, 0, 0, 0, 14, 8, 1, 0, 0, 0, 14, 12, 1, 0, 0, 0, 15, 83, 1, 0, 0, 0, 16, 17, 10, 16, 0, 0, 17, 18, 5, 18, 0, 0, 18, 82, 3, 0, 0, 17, 19, 20, 10, 14, 0, 0, 20, 21, 7, 1, 0, 0, 21, 82, 3, 0, 0, 15, 22, 23, 10, 13, 0, 0, 23, 24, 7, 2, 0, 0, 24, 82, 3, 0, 0, 14, 25, 26, 10, 12, 0, 0, 26, 27, 7, 3, 0, 0, 27, 82, 3, 0, 0, 13, 28, 29, 10, 9, 0, 0, 29, 30, 7, 4, 0, 0, 30, 31, 5, 34, 0, 0, 31, 32, 7, 4, 0, 0, 32, 82, 3, 0, 0, 10, 33, 34, 10, 8, 0, 0, 34, 35, 7, 5, 0, 0, 35, 36, 5, 34, 0, 0, 36, 37, 7, 5, 0, 0, 37, 82, 3, 0, 0, 9, 38, 39, 10, 7, 0, 0, 39, 40, 7, 6, 0, 0, 40, 82, 3, 0, 0, 8, 41, 42, 10, 6, 0, 0, 42, 43, 7, 7, 0, 0, 43, 82, 3, 0, 0, 7, 44, 45, 10, 5, 0, 0, 45, 46, 5, 21, 0, 0, 46, 82, 3, 0, 0, 6, 47, 48, 10, 4, 0, 0, 48, 49, 5, 23, 0, 0, 49, 82, 3, 0, 0, 5, 50, 51, 10, 3, 0, 0, 51, 52, 5, 22, 0, 0, 52, 82, 3, 0, 0, 4, 53, 54, 10, 2, 0, 0, 54, 55, 5, 24, 0, 0, 55, 82, 3, 0, 0, 3, 56, 57, 10, 1, 0, 0, 57, 58, 5, 25, 0, 0, 58, 82, 3, 0, 0, 2, 59, 60, 10, 17, 0, 0, 60, 61, 5, 12, 0, 0, 61, 82, 5, 35, 0, 0, 62, 63, 10, 11, 0, 0, 63, 64, 7, 8, 0, 0, 64, 65, 5, 3, 0, 0, 65, 70, 3, 0, 0, 0, 66, 67, 5, 4, 0, 0, 67, 69, 3, 0, 0, 0, 68, 66, 1, 0, 0, 0, 69, 72, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 74, 1, 0, 0, 0, 72, 70, 1, 0, 0, 0, 73, 75, 5, 4, 0, 0, 74, 73, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 77, 5, 5, 0, 0, 77, 82, 1, 0, 0, 0, 78, 79, 10, 10, 0, 0, 79, 80, 7, 8, 0, 0, 80, 82, 5, 30, 0, 0, 81, 16, 1, 0, 0, 0, 81, 19, 1, 0, 0, 0, 81, 22, 1, 0, 0, 0, 81, 25, 1, 0, 0, 0, 81, 28, 1, 0, 0, 0, 81, 33, 1, 0, 0, 0, 81, 38, 1, 0, 0, 0, 81, 41, 1, 0, 0, 0, 81, 44, 1, 0, 0, 0, 81, 47, 1, 0, 0, 0, 81, 50, 1, 0, 0, 0, 81, 53, 1, 0, 0, 0, 81, 56, 1, 0, 0, 0, 81, 59, 1, 0, 0, 0, 81, 62, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 1, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 5, 14, 70, 74, 81, 83] \ No newline at end of file diff --git a/internal/parser/planparserv2/generated/PlanLexer.interp b/internal/parser/planparserv2/generated/PlanLexer.interp index dfc3d72de2..146f845bca 100644 --- a/internal/parser/planparserv2/generated/PlanLexer.interp +++ b/internal/parser/planparserv2/generated/PlanLexer.interp @@ -148,4 +148,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 39, 444, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 158, 10, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 190, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 196, 10, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 204, 10, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 7, 31, 219, 10, 31, 12, 31, 14, 31, 222, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 253, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 259, 10, 33, 3, 34, 3, 34, 5, 34, 263, 10, 34, 3, 35, 3, 35, 3, 35, 7, 35, 268, 10, 35, 12, 35, 14, 35, 271, 11, 35, 3, 36, 5, 36, 274, 10, 36, 3, 36, 3, 36, 5, 36, 278, 10, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 5, 37, 285, 10, 37, 3, 38, 6, 38, 288, 10, 38, 13, 38, 14, 38, 289, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 299, 10, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 6, 42, 308, 10, 42, 13, 42, 14, 42, 309, 3, 43, 3, 43, 7, 43, 314, 10, 43, 12, 43, 14, 43, 317, 11, 43, 3, 44, 3, 44, 7, 44, 321, 10, 44, 12, 44, 14, 44, 324, 11, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 351, 10, 50, 3, 51, 3, 51, 5, 51, 355, 10, 51, 3, 51, 3, 51, 3, 51, 5, 51, 360, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 366, 10, 52, 3, 52, 3, 52, 3, 53, 5, 53, 371, 10, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 378, 10, 53, 3, 54, 3, 54, 5, 54, 382, 10, 54, 3, 54, 3, 54, 3, 55, 6, 55, 387, 10, 55, 13, 55, 14, 55, 388, 3, 56, 5, 56, 392, 10, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 399, 10, 56, 3, 57, 6, 57, 402, 10, 57, 13, 57, 14, 57, 403, 3, 58, 3, 58, 5, 58, 408, 10, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 417, 10, 59, 3, 59, 5, 59, 420, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 427, 10, 59, 3, 60, 6, 60, 430, 10, 60, 13, 60, 14, 60, 431, 3, 60, 3, 60, 3, 61, 3, 61, 5, 61, 438, 10, 61, 3, 61, 5, 61, 441, 10, 61, 3, 61, 3, 61, 2, 2, 62, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 2, 75, 2, 77, 2, 79, 2, 81, 2, 83, 2, 85, 2, 87, 2, 89, 2, 91, 2, 93, 2, 95, 2, 97, 2, 99, 2, 101, 2, 103, 2, 105, 2, 107, 2, 109, 2, 111, 2, 113, 2, 115, 2, 117, 2, 119, 38, 121, 39, 3, 2, 17, 5, 2, 78, 78, 87, 87, 119, 119, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 3, 2, 50, 51, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 82, 82, 114, 114, 12, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 4, 2, 11, 11, 34, 34, 2, 467, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 3, 123, 3, 2, 2, 2, 5, 125, 3, 2, 2, 2, 7, 127, 3, 2, 2, 2, 9, 129, 3, 2, 2, 2, 11, 131, 3, 2, 2, 2, 13, 133, 3, 2, 2, 2, 15, 135, 3, 2, 2, 2, 17, 138, 3, 2, 2, 2, 19, 140, 3, 2, 2, 2, 21, 143, 3, 2, 2, 2, 23, 146, 3, 2, 2, 2, 25, 157, 3, 2, 2, 2, 27, 159, 3, 2, 2, 2, 29, 161, 3, 2, 2, 2, 31, 163, 3, 2, 2, 2, 33, 165, 3, 2, 2, 2, 35, 167, 3, 2, 2, 2, 37, 169, 3, 2, 2, 2, 39, 172, 3, 2, 2, 2, 41, 175, 3, 2, 2, 2, 43, 178, 3, 2, 2, 2, 45, 180, 3, 2, 2, 2, 47, 182, 3, 2, 2, 2, 49, 189, 3, 2, 2, 2, 51, 195, 3, 2, 2, 2, 53, 197, 3, 2, 2, 2, 55, 203, 3, 2, 2, 2, 57, 205, 3, 2, 2, 2, 59, 208, 3, 2, 2, 2, 61, 215, 3, 2, 2, 2, 63, 252, 3, 2, 2, 2, 65, 258, 3, 2, 2, 2, 67, 262, 3, 2, 2, 2, 69, 264, 3, 2, 2, 2, 71, 273, 3, 2, 2, 2, 73, 284, 3, 2, 2, 2, 75, 287, 3, 2, 2, 2, 77, 298, 3, 2, 2, 2, 79, 300, 3, 2, 2, 2, 81, 302, 3, 2, 2, 2, 83, 304, 3, 2, 2, 2, 85, 311, 3, 2, 2, 2, 87, 318, 3, 2, 2, 2, 89, 325, 3, 2, 2, 2, 91, 329, 3, 2, 2, 2, 93, 331, 3, 2, 2, 2, 95, 333, 3, 2, 2, 2, 97, 335, 3, 2, 2, 2, 99, 350, 3, 2, 2, 2, 101, 359, 3, 2, 2, 2, 103, 361, 3, 2, 2, 2, 105, 377, 3, 2, 2, 2, 107, 379, 3, 2, 2, 2, 109, 386, 3, 2, 2, 2, 111, 398, 3, 2, 2, 2, 113, 401, 3, 2, 2, 2, 115, 405, 3, 2, 2, 2, 117, 426, 3, 2, 2, 2, 119, 429, 3, 2, 2, 2, 121, 440, 3, 2, 2, 2, 123, 124, 7, 42, 2, 2, 124, 4, 3, 2, 2, 2, 125, 126, 7, 43, 2, 2, 126, 6, 3, 2, 2, 2, 127, 128, 7, 93, 2, 2, 128, 8, 3, 2, 2, 2, 129, 130, 7, 46, 2, 2, 130, 10, 3, 2, 2, 2, 131, 132, 7, 95, 2, 2, 132, 12, 3, 2, 2, 2, 133, 134, 7, 62, 2, 2, 134, 14, 3, 2, 2, 2, 135, 136, 7, 62, 2, 2, 136, 137, 7, 63, 2, 2, 137, 16, 3, 2, 2, 2, 138, 139, 7, 64, 2, 2, 139, 18, 3, 2, 2, 2, 140, 141, 7, 64, 2, 2, 141, 142, 7, 63, 2, 2, 142, 20, 3, 2, 2, 2, 143, 144, 7, 63, 2, 2, 144, 145, 7, 63, 2, 2, 145, 22, 3, 2, 2, 2, 146, 147, 7, 35, 2, 2, 147, 148, 7, 63, 2, 2, 148, 24, 3, 2, 2, 2, 149, 150, 7, 110, 2, 2, 150, 151, 7, 107, 2, 2, 151, 152, 7, 109, 2, 2, 152, 158, 7, 103, 2, 2, 153, 154, 7, 78, 2, 2, 154, 155, 7, 75, 2, 2, 155, 156, 7, 77, 2, 2, 156, 158, 7, 71, 2, 2, 157, 149, 3, 2, 2, 2, 157, 153, 3, 2, 2, 2, 158, 26, 3, 2, 2, 2, 159, 160, 7, 45, 2, 2, 160, 28, 3, 2, 2, 2, 161, 162, 7, 47, 2, 2, 162, 30, 3, 2, 2, 2, 163, 164, 7, 44, 2, 2, 164, 32, 3, 2, 2, 2, 165, 166, 7, 49, 2, 2, 166, 34, 3, 2, 2, 2, 167, 168, 7, 39, 2, 2, 168, 36, 3, 2, 2, 2, 169, 170, 7, 44, 2, 2, 170, 171, 7, 44, 2, 2, 171, 38, 3, 2, 2, 2, 172, 173, 7, 62, 2, 2, 173, 174, 7, 62, 2, 2, 174, 40, 3, 2, 2, 2, 175, 176, 7, 64, 2, 2, 176, 177, 7, 64, 2, 2, 177, 42, 3, 2, 2, 2, 178, 179, 7, 40, 2, 2, 179, 44, 3, 2, 2, 2, 180, 181, 7, 126, 2, 2, 181, 46, 3, 2, 2, 2, 182, 183, 7, 96, 2, 2, 183, 48, 3, 2, 2, 2, 184, 185, 7, 40, 2, 2, 185, 190, 7, 40, 2, 2, 186, 187, 7, 99, 2, 2, 187, 188, 7, 112, 2, 2, 188, 190, 7, 102, 2, 2, 189, 184, 3, 2, 2, 2, 189, 186, 3, 2, 2, 2, 190, 50, 3, 2, 2, 2, 191, 192, 7, 126, 2, 2, 192, 196, 7, 126, 2, 2, 193, 194, 7, 113, 2, 2, 194, 196, 7, 116, 2, 2, 195, 191, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 196, 52, 3, 2, 2, 2, 197, 198, 7, 128, 2, 2, 198, 54, 3, 2, 2, 2, 199, 204, 7, 35, 2, 2, 200, 201, 7, 112, 2, 2, 201, 202, 7, 113, 2, 2, 202, 204, 7, 118, 2, 2, 203, 199, 3, 2, 2, 2, 203, 200, 3, 2, 2, 2, 204, 56, 3, 2, 2, 2, 205, 206, 7, 107, 2, 2, 206, 207, 7, 112, 2, 2, 207, 58, 3, 2, 2, 2, 208, 209, 7, 112, 2, 2, 209, 210, 7, 113, 2, 2, 210, 211, 7, 118, 2, 2, 211, 212, 7, 34, 2, 2, 212, 213, 7, 107, 2, 2, 213, 214, 7, 112, 2, 2, 214, 60, 3, 2, 2, 2, 215, 220, 7, 93, 2, 2, 216, 219, 5, 119, 60, 2, 217, 219, 5, 121, 61, 2, 218, 216, 3, 2, 2, 2, 218, 217, 3, 2, 2, 2, 219, 222, 3, 2, 2, 2, 220, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 223, 3, 2, 2, 2, 222, 220, 3, 2, 2, 2, 223, 224, 7, 95, 2, 2, 224, 62, 3, 2, 2, 2, 225, 226, 7, 118, 2, 2, 226, 227, 7, 116, 2, 2, 227, 228, 7, 119, 2, 2, 228, 253, 7, 103, 2, 2, 229, 230, 7, 86, 2, 2, 230, 231, 7, 116, 2, 2, 231, 232, 7, 119, 2, 2, 232, 253, 7, 103, 2, 2, 233, 234, 7, 86, 2, 2, 234, 235, 7, 84, 2, 2, 235, 236, 7, 87, 2, 2, 236, 253, 7, 71, 2, 2, 237, 238, 7, 104, 2, 2, 238, 239, 7, 99, 2, 2, 239, 240, 7, 110, 2, 2, 240, 241, 7, 117, 2, 2, 241, 253, 7, 103, 2, 2, 242, 243, 7, 72, 2, 2, 243, 244, 7, 99, 2, 2, 244, 245, 7, 110, 2, 2, 245, 246, 7, 117, 2, 2, 246, 253, 7, 103, 2, 2, 247, 248, 7, 72, 2, 2, 248, 249, 7, 67, 2, 2, 249, 250, 7, 78, 2, 2, 250, 251, 7, 85, 2, 2, 251, 253, 7, 71, 2, 2, 252, 225, 3, 2, 2, 2, 252, 229, 3, 2, 2, 2, 252, 233, 3, 2, 2, 2, 252, 237, 3, 2, 2, 2, 252, 242, 3, 2, 2, 2, 252, 247, 3, 2, 2, 2, 253, 64, 3, 2, 2, 2, 254, 259, 5, 85, 43, 2, 255, 259, 5, 87, 44, 2, 256, 259, 5, 89, 45, 2, 257, 259, 5, 83, 42, 2, 258, 254, 3, 2, 2, 2, 258, 255, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 258, 257, 3, 2, 2, 2, 259, 66, 3, 2, 2, 2, 260, 263, 5, 101, 51, 2, 261, 263, 5, 103, 52, 2, 262, 260, 3, 2, 2, 2, 262, 261, 3, 2, 2, 2, 263, 68, 3, 2, 2, 2, 264, 269, 5, 79, 40, 2, 265, 268, 5, 79, 40, 2, 266, 268, 5, 81, 41, 2, 267, 265, 3, 2, 2, 2, 267, 266, 3, 2, 2, 2, 268, 271, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 70, 3, 2, 2, 2, 271, 269, 3, 2, 2, 2, 272, 274, 5, 73, 37, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 277, 7, 36, 2, 2, 276, 278, 5, 75, 38, 2, 277, 276, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 280, 7, 36, 2, 2, 280, 72, 3, 2, 2, 2, 281, 282, 7, 119, 2, 2, 282, 285, 7, 58, 2, 2, 283, 285, 9, 2, 2, 2, 284, 281, 3, 2, 2, 2, 284, 283, 3, 2, 2, 2, 285, 74, 3, 2, 2, 2, 286, 288, 5, 77, 39, 2, 287, 286, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 76, 3, 2, 2, 2, 291, 299, 10, 3, 2, 2, 292, 299, 5, 117, 59, 2, 293, 294, 7, 94, 2, 2, 294, 299, 7, 12, 2, 2, 295, 296, 7, 94, 2, 2, 296, 297, 7, 15, 2, 2, 297, 299, 7, 12, 2, 2, 298, 291, 3, 2, 2, 2, 298, 292, 3, 2, 2, 2, 298, 293, 3, 2, 2, 2, 298, 295, 3, 2, 2, 2, 299, 78, 3, 2, 2, 2, 300, 301, 9, 4, 2, 2, 301, 80, 3, 2, 2, 2, 302, 303, 9, 5, 2, 2, 303, 82, 3, 2, 2, 2, 304, 305, 7, 50, 2, 2, 305, 307, 9, 6, 2, 2, 306, 308, 9, 7, 2, 2, 307, 306, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 84, 3, 2, 2, 2, 311, 315, 5, 91, 46, 2, 312, 314, 5, 81, 41, 2, 313, 312, 3, 2, 2, 2, 314, 317, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 86, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 318, 322, 7, 50, 2, 2, 319, 321, 5, 93, 47, 2, 320, 319, 3, 2, 2, 2, 321, 324, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 88, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 325, 326, 7, 50, 2, 2, 326, 327, 9, 8, 2, 2, 327, 328, 5, 113, 57, 2, 328, 90, 3, 2, 2, 2, 329, 330, 9, 9, 2, 2, 330, 92, 3, 2, 2, 2, 331, 332, 9, 10, 2, 2, 332, 94, 3, 2, 2, 2, 333, 334, 9, 11, 2, 2, 334, 96, 3, 2, 2, 2, 335, 336, 5, 95, 48, 2, 336, 337, 5, 95, 48, 2, 337, 338, 5, 95, 48, 2, 338, 339, 5, 95, 48, 2, 339, 98, 3, 2, 2, 2, 340, 341, 7, 94, 2, 2, 341, 342, 7, 119, 2, 2, 342, 343, 3, 2, 2, 2, 343, 351, 5, 97, 49, 2, 344, 345, 7, 94, 2, 2, 345, 346, 7, 87, 2, 2, 346, 347, 3, 2, 2, 2, 347, 348, 5, 97, 49, 2, 348, 349, 5, 97, 49, 2, 349, 351, 3, 2, 2, 2, 350, 340, 3, 2, 2, 2, 350, 344, 3, 2, 2, 2, 351, 100, 3, 2, 2, 2, 352, 354, 5, 105, 53, 2, 353, 355, 5, 107, 54, 2, 354, 353, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 360, 3, 2, 2, 2, 356, 357, 5, 109, 55, 2, 357, 358, 5, 107, 54, 2, 358, 360, 3, 2, 2, 2, 359, 352, 3, 2, 2, 2, 359, 356, 3, 2, 2, 2, 360, 102, 3, 2, 2, 2, 361, 362, 7, 50, 2, 2, 362, 365, 9, 8, 2, 2, 363, 366, 5, 111, 56, 2, 364, 366, 5, 113, 57, 2, 365, 363, 3, 2, 2, 2, 365, 364, 3, 2, 2, 2, 366, 367, 3, 2, 2, 2, 367, 368, 5, 115, 58, 2, 368, 104, 3, 2, 2, 2, 369, 371, 5, 109, 55, 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 373, 7, 48, 2, 2, 373, 378, 5, 109, 55, 2, 374, 375, 5, 109, 55, 2, 375, 376, 7, 48, 2, 2, 376, 378, 3, 2, 2, 2, 377, 370, 3, 2, 2, 2, 377, 374, 3, 2, 2, 2, 378, 106, 3, 2, 2, 2, 379, 381, 9, 12, 2, 2, 380, 382, 9, 13, 2, 2, 381, 380, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 384, 5, 109, 55, 2, 384, 108, 3, 2, 2, 2, 385, 387, 5, 81, 41, 2, 386, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 110, 3, 2, 2, 2, 390, 392, 5, 113, 57, 2, 391, 390, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 394, 7, 48, 2, 2, 394, 399, 5, 113, 57, 2, 395, 396, 5, 113, 57, 2, 396, 397, 7, 48, 2, 2, 397, 399, 3, 2, 2, 2, 398, 391, 3, 2, 2, 2, 398, 395, 3, 2, 2, 2, 399, 112, 3, 2, 2, 2, 400, 402, 5, 95, 48, 2, 401, 400, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 114, 3, 2, 2, 2, 405, 407, 9, 14, 2, 2, 406, 408, 9, 13, 2, 2, 407, 406, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 410, 5, 109, 55, 2, 410, 116, 3, 2, 2, 2, 411, 412, 7, 94, 2, 2, 412, 427, 9, 15, 2, 2, 413, 414, 7, 94, 2, 2, 414, 416, 5, 93, 47, 2, 415, 417, 5, 93, 47, 2, 416, 415, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 419, 3, 2, 2, 2, 418, 420, 5, 93, 47, 2, 419, 418, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 427, 3, 2, 2, 2, 421, 422, 7, 94, 2, 2, 422, 423, 7, 122, 2, 2, 423, 424, 3, 2, 2, 2, 424, 427, 5, 113, 57, 2, 425, 427, 5, 99, 50, 2, 426, 411, 3, 2, 2, 2, 426, 413, 3, 2, 2, 2, 426, 421, 3, 2, 2, 2, 426, 425, 3, 2, 2, 2, 427, 118, 3, 2, 2, 2, 428, 430, 9, 16, 2, 2, 429, 428, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 434, 8, 60, 2, 2, 434, 120, 3, 2, 2, 2, 435, 437, 7, 15, 2, 2, 436, 438, 7, 12, 2, 2, 437, 436, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 441, 3, 2, 2, 2, 439, 441, 7, 12, 2, 2, 440, 435, 3, 2, 2, 2, 440, 439, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 443, 8, 61, 2, 2, 443, 122, 3, 2, 2, 2, 40, 2, 157, 189, 195, 203, 218, 220, 252, 258, 262, 267, 269, 273, 277, 284, 289, 298, 309, 315, 322, 350, 354, 359, 365, 370, 377, 381, 388, 391, 398, 403, 407, 416, 419, 426, 431, 437, 440, 3, 8, 2, 2] \ No newline at end of file +[4, 0, 37, 442, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 156, 8, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 188, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 194, 8, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 202, 8, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 5, 29, 217, 8, 29, 10, 29, 12, 29, 220, 9, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 251, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 257, 8, 31, 1, 32, 1, 32, 3, 32, 261, 8, 32, 1, 33, 1, 33, 1, 33, 5, 33, 266, 8, 33, 10, 33, 12, 33, 269, 9, 33, 1, 34, 3, 34, 272, 8, 34, 1, 34, 1, 34, 3, 34, 276, 8, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 3, 35, 283, 8, 35, 1, 36, 4, 36, 286, 8, 36, 11, 36, 12, 36, 287, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 297, 8, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 4, 40, 306, 8, 40, 11, 40, 12, 40, 307, 1, 41, 1, 41, 5, 41, 312, 8, 41, 10, 41, 12, 41, 315, 9, 41, 1, 42, 1, 42, 5, 42, 319, 8, 42, 10, 42, 12, 42, 322, 9, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 349, 8, 48, 1, 49, 1, 49, 3, 49, 353, 8, 49, 1, 49, 1, 49, 1, 49, 3, 49, 358, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 364, 8, 50, 1, 50, 1, 50, 1, 51, 3, 51, 369, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 376, 8, 51, 1, 52, 1, 52, 3, 52, 380, 8, 52, 1, 52, 1, 52, 1, 53, 4, 53, 385, 8, 53, 11, 53, 12, 53, 386, 1, 54, 3, 54, 390, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 397, 8, 54, 1, 55, 4, 55, 400, 8, 55, 11, 55, 12, 55, 401, 1, 56, 1, 56, 3, 56, 406, 8, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 415, 8, 57, 1, 57, 3, 57, 418, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 425, 8, 57, 1, 58, 4, 58, 428, 8, 58, 11, 58, 12, 58, 429, 1, 58, 1, 58, 1, 59, 1, 59, 3, 59, 436, 8, 59, 1, 59, 3, 59, 439, 8, 59, 1, 59, 1, 59, 0, 0, 60, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 0, 73, 0, 75, 0, 77, 0, 79, 0, 81, 0, 83, 0, 85, 0, 87, 0, 89, 0, 91, 0, 93, 0, 95, 0, 97, 0, 99, 0, 101, 0, 103, 0, 105, 0, 107, 0, 109, 0, 111, 0, 113, 0, 115, 0, 117, 36, 119, 37, 1, 0, 15, 3, 0, 76, 76, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 2, 0, 88, 88, 120, 120, 1, 0, 49, 57, 1, 0, 48, 55, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 2, 0, 80, 80, 112, 112, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 97, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 9, 9, 32, 32, 465, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 1, 121, 1, 0, 0, 0, 3, 123, 1, 0, 0, 0, 5, 125, 1, 0, 0, 0, 7, 127, 1, 0, 0, 0, 9, 129, 1, 0, 0, 0, 11, 131, 1, 0, 0, 0, 13, 133, 1, 0, 0, 0, 15, 136, 1, 0, 0, 0, 17, 138, 1, 0, 0, 0, 19, 141, 1, 0, 0, 0, 21, 144, 1, 0, 0, 0, 23, 155, 1, 0, 0, 0, 25, 157, 1, 0, 0, 0, 27, 159, 1, 0, 0, 0, 29, 161, 1, 0, 0, 0, 31, 163, 1, 0, 0, 0, 33, 165, 1, 0, 0, 0, 35, 167, 1, 0, 0, 0, 37, 170, 1, 0, 0, 0, 39, 173, 1, 0, 0, 0, 41, 176, 1, 0, 0, 0, 43, 178, 1, 0, 0, 0, 45, 180, 1, 0, 0, 0, 47, 187, 1, 0, 0, 0, 49, 193, 1, 0, 0, 0, 51, 195, 1, 0, 0, 0, 53, 201, 1, 0, 0, 0, 55, 203, 1, 0, 0, 0, 57, 206, 1, 0, 0, 0, 59, 213, 1, 0, 0, 0, 61, 250, 1, 0, 0, 0, 63, 256, 1, 0, 0, 0, 65, 260, 1, 0, 0, 0, 67, 262, 1, 0, 0, 0, 69, 271, 1, 0, 0, 0, 71, 282, 1, 0, 0, 0, 73, 285, 1, 0, 0, 0, 75, 296, 1, 0, 0, 0, 77, 298, 1, 0, 0, 0, 79, 300, 1, 0, 0, 0, 81, 302, 1, 0, 0, 0, 83, 309, 1, 0, 0, 0, 85, 316, 1, 0, 0, 0, 87, 323, 1, 0, 0, 0, 89, 327, 1, 0, 0, 0, 91, 329, 1, 0, 0, 0, 93, 331, 1, 0, 0, 0, 95, 333, 1, 0, 0, 0, 97, 348, 1, 0, 0, 0, 99, 357, 1, 0, 0, 0, 101, 359, 1, 0, 0, 0, 103, 375, 1, 0, 0, 0, 105, 377, 1, 0, 0, 0, 107, 384, 1, 0, 0, 0, 109, 396, 1, 0, 0, 0, 111, 399, 1, 0, 0, 0, 113, 403, 1, 0, 0, 0, 115, 424, 1, 0, 0, 0, 117, 427, 1, 0, 0, 0, 119, 438, 1, 0, 0, 0, 121, 122, 5, 40, 0, 0, 122, 2, 1, 0, 0, 0, 123, 124, 5, 41, 0, 0, 124, 4, 1, 0, 0, 0, 125, 126, 5, 91, 0, 0, 126, 6, 1, 0, 0, 0, 127, 128, 5, 44, 0, 0, 128, 8, 1, 0, 0, 0, 129, 130, 5, 93, 0, 0, 130, 10, 1, 0, 0, 0, 131, 132, 5, 60, 0, 0, 132, 12, 1, 0, 0, 0, 133, 134, 5, 60, 0, 0, 134, 135, 5, 61, 0, 0, 135, 14, 1, 0, 0, 0, 136, 137, 5, 62, 0, 0, 137, 16, 1, 0, 0, 0, 138, 139, 5, 62, 0, 0, 139, 140, 5, 61, 0, 0, 140, 18, 1, 0, 0, 0, 141, 142, 5, 61, 0, 0, 142, 143, 5, 61, 0, 0, 143, 20, 1, 0, 0, 0, 144, 145, 5, 33, 0, 0, 145, 146, 5, 61, 0, 0, 146, 22, 1, 0, 0, 0, 147, 148, 5, 108, 0, 0, 148, 149, 5, 105, 0, 0, 149, 150, 5, 107, 0, 0, 150, 156, 5, 101, 0, 0, 151, 152, 5, 76, 0, 0, 152, 153, 5, 73, 0, 0, 153, 154, 5, 75, 0, 0, 154, 156, 5, 69, 0, 0, 155, 147, 1, 0, 0, 0, 155, 151, 1, 0, 0, 0, 156, 24, 1, 0, 0, 0, 157, 158, 5, 43, 0, 0, 158, 26, 1, 0, 0, 0, 159, 160, 5, 45, 0, 0, 160, 28, 1, 0, 0, 0, 161, 162, 5, 42, 0, 0, 162, 30, 1, 0, 0, 0, 163, 164, 5, 47, 0, 0, 164, 32, 1, 0, 0, 0, 165, 166, 5, 37, 0, 0, 166, 34, 1, 0, 0, 0, 167, 168, 5, 42, 0, 0, 168, 169, 5, 42, 0, 0, 169, 36, 1, 0, 0, 0, 170, 171, 5, 60, 0, 0, 171, 172, 5, 60, 0, 0, 172, 38, 1, 0, 0, 0, 173, 174, 5, 62, 0, 0, 174, 175, 5, 62, 0, 0, 175, 40, 1, 0, 0, 0, 176, 177, 5, 38, 0, 0, 177, 42, 1, 0, 0, 0, 178, 179, 5, 124, 0, 0, 179, 44, 1, 0, 0, 0, 180, 181, 5, 94, 0, 0, 181, 46, 1, 0, 0, 0, 182, 183, 5, 38, 0, 0, 183, 188, 5, 38, 0, 0, 184, 185, 5, 97, 0, 0, 185, 186, 5, 110, 0, 0, 186, 188, 5, 100, 0, 0, 187, 182, 1, 0, 0, 0, 187, 184, 1, 0, 0, 0, 188, 48, 1, 0, 0, 0, 189, 190, 5, 124, 0, 0, 190, 194, 5, 124, 0, 0, 191, 192, 5, 111, 0, 0, 192, 194, 5, 114, 0, 0, 193, 189, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 194, 50, 1, 0, 0, 0, 195, 196, 5, 126, 0, 0, 196, 52, 1, 0, 0, 0, 197, 202, 5, 33, 0, 0, 198, 199, 5, 110, 0, 0, 199, 200, 5, 111, 0, 0, 200, 202, 5, 116, 0, 0, 201, 197, 1, 0, 0, 0, 201, 198, 1, 0, 0, 0, 202, 54, 1, 0, 0, 0, 203, 204, 5, 105, 0, 0, 204, 205, 5, 110, 0, 0, 205, 56, 1, 0, 0, 0, 206, 207, 5, 110, 0, 0, 207, 208, 5, 111, 0, 0, 208, 209, 5, 116, 0, 0, 209, 210, 5, 32, 0, 0, 210, 211, 5, 105, 0, 0, 211, 212, 5, 110, 0, 0, 212, 58, 1, 0, 0, 0, 213, 218, 5, 91, 0, 0, 214, 217, 3, 117, 58, 0, 215, 217, 3, 119, 59, 0, 216, 214, 1, 0, 0, 0, 216, 215, 1, 0, 0, 0, 217, 220, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 221, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 221, 222, 5, 93, 0, 0, 222, 60, 1, 0, 0, 0, 223, 224, 5, 116, 0, 0, 224, 225, 5, 114, 0, 0, 225, 226, 5, 117, 0, 0, 226, 251, 5, 101, 0, 0, 227, 228, 5, 84, 0, 0, 228, 229, 5, 114, 0, 0, 229, 230, 5, 117, 0, 0, 230, 251, 5, 101, 0, 0, 231, 232, 5, 84, 0, 0, 232, 233, 5, 82, 0, 0, 233, 234, 5, 85, 0, 0, 234, 251, 5, 69, 0, 0, 235, 236, 5, 102, 0, 0, 236, 237, 5, 97, 0, 0, 237, 238, 5, 108, 0, 0, 238, 239, 5, 115, 0, 0, 239, 251, 5, 101, 0, 0, 240, 241, 5, 70, 0, 0, 241, 242, 5, 97, 0, 0, 242, 243, 5, 108, 0, 0, 243, 244, 5, 115, 0, 0, 244, 251, 5, 101, 0, 0, 245, 246, 5, 70, 0, 0, 246, 247, 5, 65, 0, 0, 247, 248, 5, 76, 0, 0, 248, 249, 5, 83, 0, 0, 249, 251, 5, 69, 0, 0, 250, 223, 1, 0, 0, 0, 250, 227, 1, 0, 0, 0, 250, 231, 1, 0, 0, 0, 250, 235, 1, 0, 0, 0, 250, 240, 1, 0, 0, 0, 250, 245, 1, 0, 0, 0, 251, 62, 1, 0, 0, 0, 252, 257, 3, 83, 41, 0, 253, 257, 3, 85, 42, 0, 254, 257, 3, 87, 43, 0, 255, 257, 3, 81, 40, 0, 256, 252, 1, 0, 0, 0, 256, 253, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 256, 255, 1, 0, 0, 0, 257, 64, 1, 0, 0, 0, 258, 261, 3, 99, 49, 0, 259, 261, 3, 101, 50, 0, 260, 258, 1, 0, 0, 0, 260, 259, 1, 0, 0, 0, 261, 66, 1, 0, 0, 0, 262, 267, 3, 77, 38, 0, 263, 266, 3, 77, 38, 0, 264, 266, 3, 79, 39, 0, 265, 263, 1, 0, 0, 0, 265, 264, 1, 0, 0, 0, 266, 269, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 68, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 270, 272, 3, 71, 35, 0, 271, 270, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 275, 5, 34, 0, 0, 274, 276, 3, 73, 36, 0, 275, 274, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 278, 5, 34, 0, 0, 278, 70, 1, 0, 0, 0, 279, 280, 5, 117, 0, 0, 280, 283, 5, 56, 0, 0, 281, 283, 7, 0, 0, 0, 282, 279, 1, 0, 0, 0, 282, 281, 1, 0, 0, 0, 283, 72, 1, 0, 0, 0, 284, 286, 3, 75, 37, 0, 285, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 285, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 74, 1, 0, 0, 0, 289, 297, 8, 1, 0, 0, 290, 297, 3, 115, 57, 0, 291, 292, 5, 92, 0, 0, 292, 297, 5, 10, 0, 0, 293, 294, 5, 92, 0, 0, 294, 295, 5, 13, 0, 0, 295, 297, 5, 10, 0, 0, 296, 289, 1, 0, 0, 0, 296, 290, 1, 0, 0, 0, 296, 291, 1, 0, 0, 0, 296, 293, 1, 0, 0, 0, 297, 76, 1, 0, 0, 0, 298, 299, 7, 2, 0, 0, 299, 78, 1, 0, 0, 0, 300, 301, 7, 3, 0, 0, 301, 80, 1, 0, 0, 0, 302, 303, 5, 48, 0, 0, 303, 305, 7, 4, 0, 0, 304, 306, 7, 5, 0, 0, 305, 304, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 82, 1, 0, 0, 0, 309, 313, 3, 89, 44, 0, 310, 312, 3, 79, 39, 0, 311, 310, 1, 0, 0, 0, 312, 315, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 84, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 316, 320, 5, 48, 0, 0, 317, 319, 3, 91, 45, 0, 318, 317, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 86, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 323, 324, 5, 48, 0, 0, 324, 325, 7, 6, 0, 0, 325, 326, 3, 111, 55, 0, 326, 88, 1, 0, 0, 0, 327, 328, 7, 7, 0, 0, 328, 90, 1, 0, 0, 0, 329, 330, 7, 8, 0, 0, 330, 92, 1, 0, 0, 0, 331, 332, 7, 9, 0, 0, 332, 94, 1, 0, 0, 0, 333, 334, 3, 93, 46, 0, 334, 335, 3, 93, 46, 0, 335, 336, 3, 93, 46, 0, 336, 337, 3, 93, 46, 0, 337, 96, 1, 0, 0, 0, 338, 339, 5, 92, 0, 0, 339, 340, 5, 117, 0, 0, 340, 341, 1, 0, 0, 0, 341, 349, 3, 95, 47, 0, 342, 343, 5, 92, 0, 0, 343, 344, 5, 85, 0, 0, 344, 345, 1, 0, 0, 0, 345, 346, 3, 95, 47, 0, 346, 347, 3, 95, 47, 0, 347, 349, 1, 0, 0, 0, 348, 338, 1, 0, 0, 0, 348, 342, 1, 0, 0, 0, 349, 98, 1, 0, 0, 0, 350, 352, 3, 103, 51, 0, 351, 353, 3, 105, 52, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 358, 1, 0, 0, 0, 354, 355, 3, 107, 53, 0, 355, 356, 3, 105, 52, 0, 356, 358, 1, 0, 0, 0, 357, 350, 1, 0, 0, 0, 357, 354, 1, 0, 0, 0, 358, 100, 1, 0, 0, 0, 359, 360, 5, 48, 0, 0, 360, 363, 7, 6, 0, 0, 361, 364, 3, 109, 54, 0, 362, 364, 3, 111, 55, 0, 363, 361, 1, 0, 0, 0, 363, 362, 1, 0, 0, 0, 364, 365, 1, 0, 0, 0, 365, 366, 3, 113, 56, 0, 366, 102, 1, 0, 0, 0, 367, 369, 3, 107, 53, 0, 368, 367, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 371, 5, 46, 0, 0, 371, 376, 3, 107, 53, 0, 372, 373, 3, 107, 53, 0, 373, 374, 5, 46, 0, 0, 374, 376, 1, 0, 0, 0, 375, 368, 1, 0, 0, 0, 375, 372, 1, 0, 0, 0, 376, 104, 1, 0, 0, 0, 377, 379, 7, 10, 0, 0, 378, 380, 7, 11, 0, 0, 379, 378, 1, 0, 0, 0, 379, 380, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 382, 3, 107, 53, 0, 382, 106, 1, 0, 0, 0, 383, 385, 3, 79, 39, 0, 384, 383, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 384, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 108, 1, 0, 0, 0, 388, 390, 3, 111, 55, 0, 389, 388, 1, 0, 0, 0, 389, 390, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 392, 5, 46, 0, 0, 392, 397, 3, 111, 55, 0, 393, 394, 3, 111, 55, 0, 394, 395, 5, 46, 0, 0, 395, 397, 1, 0, 0, 0, 396, 389, 1, 0, 0, 0, 396, 393, 1, 0, 0, 0, 397, 110, 1, 0, 0, 0, 398, 400, 3, 93, 46, 0, 399, 398, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 112, 1, 0, 0, 0, 403, 405, 7, 12, 0, 0, 404, 406, 7, 11, 0, 0, 405, 404, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 408, 3, 107, 53, 0, 408, 114, 1, 0, 0, 0, 409, 410, 5, 92, 0, 0, 410, 425, 7, 13, 0, 0, 411, 412, 5, 92, 0, 0, 412, 414, 3, 91, 45, 0, 413, 415, 3, 91, 45, 0, 414, 413, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 417, 1, 0, 0, 0, 416, 418, 3, 91, 45, 0, 417, 416, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 425, 1, 0, 0, 0, 419, 420, 5, 92, 0, 0, 420, 421, 5, 120, 0, 0, 421, 422, 1, 0, 0, 0, 422, 425, 3, 111, 55, 0, 423, 425, 3, 97, 48, 0, 424, 409, 1, 0, 0, 0, 424, 411, 1, 0, 0, 0, 424, 419, 1, 0, 0, 0, 424, 423, 1, 0, 0, 0, 425, 116, 1, 0, 0, 0, 426, 428, 7, 14, 0, 0, 427, 426, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 432, 6, 58, 0, 0, 432, 118, 1, 0, 0, 0, 433, 435, 5, 13, 0, 0, 434, 436, 5, 10, 0, 0, 435, 434, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 439, 1, 0, 0, 0, 437, 439, 5, 10, 0, 0, 438, 433, 1, 0, 0, 0, 438, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 441, 6, 59, 0, 0, 441, 120, 1, 0, 0, 0, 38, 0, 155, 187, 193, 201, 216, 218, 250, 256, 260, 265, 267, 271, 275, 282, 287, 296, 307, 313, 320, 348, 352, 357, 363, 368, 375, 379, 386, 389, 396, 401, 405, 414, 417, 424, 429, 435, 438, 1, 6, 0, 0] \ No newline at end of file diff --git a/internal/parser/planparserv2/generated/generate.go b/internal/parser/planparserv2/generated/generate.go new file mode 100644 index 0000000000..1c32288bc4 --- /dev/null +++ b/internal/parser/planparserv2/generated/generate.go @@ -0,0 +1,3 @@ +package planparserv2 + +//go:generate ./generate.sh diff --git a/internal/parser/planparserv2/generated/generate.sh b/internal/parser/planparserv2/generated/generate.sh new file mode 100755 index 0000000000..4973aa3461 --- /dev/null +++ b/internal/parser/planparserv2/generated/generate.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +alias antlr4='java -Xmx500M -cp "../../../../tools/antlr/antlr-4.11.1-complete.jar:$CLASSPATH" org.antlr.v4.Tool' +antlr4 -Dlanguage=Go -no-listener -visitor -package planparserv2 *.g4 diff --git a/internal/parser/planparserv2/generated/plan_base_visitor.go b/internal/parser/planparserv2/generated/plan_base_visitor.go index 5757568c68..e10e081c38 100644 --- a/internal/parser/planparserv2/generated/plan_base_visitor.go +++ b/internal/parser/planparserv2/generated/plan_base_visitor.go @@ -1,7 +1,7 @@ -// Code generated from Plan.g4 by ANTLR 4.9. DO NOT EDIT. +// Code generated from java-escape by ANTLR 4.11.1. DO NOT EDIT. package planparserv2 // Plan -import "github.com/antlr/antlr4/runtime/Go/antlr" +import "github.com/antlr/antlr4/runtime/Go/antlr/v4" type BasePlanVisitor struct { *antlr.BaseParseTreeVisitor diff --git a/internal/parser/planparserv2/generated/plan_lexer.go b/internal/parser/planparserv2/generated/plan_lexer.go index 7317a68268..3813f5167a 100644 --- a/internal/parser/planparserv2/generated/plan_lexer.go +++ b/internal/parser/planparserv2/generated/plan_lexer.go @@ -1,261 +1,20 @@ -// Code generated from Plan.g4 by ANTLR 4.9. DO NOT EDIT. +// Code generated from java-escape by ANTLR 4.11.1. DO NOT EDIT. package planparserv2 import ( "fmt" + "sync" "unicode" - "github.com/antlr/antlr4/runtime/Go/antlr" + "github.com/antlr/antlr4/runtime/Go/antlr/v4" ) // Suppress unused import error var _ = fmt.Printf +var _ = sync.Once{} var _ = unicode.IsLetter -var serializedLexerAtn = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 39, 444, - 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, - 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, - 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, - 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, - 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, - 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, - 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, - 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, - 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, - 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, - 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, - 60, 9, 60, 4, 61, 9, 61, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, - 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, - 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, - 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 158, 10, 13, 3, 14, 3, 14, 3, 15, 3, - 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, - 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, - 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 190, 10, 25, 3, 26, 3, 26, - 3, 26, 3, 26, 5, 26, 196, 10, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, - 28, 5, 28, 204, 10, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, - 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 7, 31, 219, 10, 31, 12, 31, 14, - 31, 222, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, - 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, - 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, - 5, 32, 253, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 259, 10, 33, 3, - 34, 3, 34, 5, 34, 263, 10, 34, 3, 35, 3, 35, 3, 35, 7, 35, 268, 10, 35, - 12, 35, 14, 35, 271, 11, 35, 3, 36, 5, 36, 274, 10, 36, 3, 36, 3, 36, 5, - 36, 278, 10, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 5, 37, 285, 10, 37, - 3, 38, 6, 38, 288, 10, 38, 13, 38, 14, 38, 289, 3, 39, 3, 39, 3, 39, 3, - 39, 3, 39, 3, 39, 3, 39, 5, 39, 299, 10, 39, 3, 40, 3, 40, 3, 41, 3, 41, - 3, 42, 3, 42, 3, 42, 6, 42, 308, 10, 42, 13, 42, 14, 42, 309, 3, 43, 3, - 43, 7, 43, 314, 10, 43, 12, 43, 14, 43, 317, 11, 43, 3, 44, 3, 44, 7, 44, - 321, 10, 44, 12, 44, 14, 44, 324, 11, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, - 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, - 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, - 50, 351, 10, 50, 3, 51, 3, 51, 5, 51, 355, 10, 51, 3, 51, 3, 51, 3, 51, - 5, 51, 360, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 366, 10, 52, 3, - 52, 3, 52, 3, 53, 5, 53, 371, 10, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, - 5, 53, 378, 10, 53, 3, 54, 3, 54, 5, 54, 382, 10, 54, 3, 54, 3, 54, 3, - 55, 6, 55, 387, 10, 55, 13, 55, 14, 55, 388, 3, 56, 5, 56, 392, 10, 56, - 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 399, 10, 56, 3, 57, 6, 57, 402, - 10, 57, 13, 57, 14, 57, 403, 3, 58, 3, 58, 5, 58, 408, 10, 58, 3, 58, 3, - 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 417, 10, 59, 3, 59, 5, 59, - 420, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 427, 10, 59, 3, - 60, 6, 60, 430, 10, 60, 13, 60, 14, 60, 431, 3, 60, 3, 60, 3, 61, 3, 61, - 5, 61, 438, 10, 61, 3, 61, 5, 61, 441, 10, 61, 3, 61, 3, 61, 2, 2, 62, - 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, - 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, - 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, - 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 2, 75, 2, 77, 2, - 79, 2, 81, 2, 83, 2, 85, 2, 87, 2, 89, 2, 91, 2, 93, 2, 95, 2, 97, 2, 99, - 2, 101, 2, 103, 2, 105, 2, 107, 2, 109, 2, 111, 2, 113, 2, 115, 2, 117, - 2, 119, 38, 121, 39, 3, 2, 17, 5, 2, 78, 78, 87, 87, 119, 119, 6, 2, 12, - 12, 15, 15, 36, 36, 94, 94, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, - 4, 2, 68, 68, 100, 100, 3, 2, 50, 51, 4, 2, 90, 90, 122, 122, 3, 2, 51, - 59, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, - 4, 2, 45, 45, 47, 47, 4, 2, 82, 82, 114, 114, 12, 2, 36, 36, 41, 41, 65, - 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, - 4, 2, 11, 11, 34, 34, 2, 467, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, - 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, - 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, - 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, - 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, - 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, - 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, - 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, - 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, - 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, - 2, 2, 3, 123, 3, 2, 2, 2, 5, 125, 3, 2, 2, 2, 7, 127, 3, 2, 2, 2, 9, 129, - 3, 2, 2, 2, 11, 131, 3, 2, 2, 2, 13, 133, 3, 2, 2, 2, 15, 135, 3, 2, 2, - 2, 17, 138, 3, 2, 2, 2, 19, 140, 3, 2, 2, 2, 21, 143, 3, 2, 2, 2, 23, 146, - 3, 2, 2, 2, 25, 157, 3, 2, 2, 2, 27, 159, 3, 2, 2, 2, 29, 161, 3, 2, 2, - 2, 31, 163, 3, 2, 2, 2, 33, 165, 3, 2, 2, 2, 35, 167, 3, 2, 2, 2, 37, 169, - 3, 2, 2, 2, 39, 172, 3, 2, 2, 2, 41, 175, 3, 2, 2, 2, 43, 178, 3, 2, 2, - 2, 45, 180, 3, 2, 2, 2, 47, 182, 3, 2, 2, 2, 49, 189, 3, 2, 2, 2, 51, 195, - 3, 2, 2, 2, 53, 197, 3, 2, 2, 2, 55, 203, 3, 2, 2, 2, 57, 205, 3, 2, 2, - 2, 59, 208, 3, 2, 2, 2, 61, 215, 3, 2, 2, 2, 63, 252, 3, 2, 2, 2, 65, 258, - 3, 2, 2, 2, 67, 262, 3, 2, 2, 2, 69, 264, 3, 2, 2, 2, 71, 273, 3, 2, 2, - 2, 73, 284, 3, 2, 2, 2, 75, 287, 3, 2, 2, 2, 77, 298, 3, 2, 2, 2, 79, 300, - 3, 2, 2, 2, 81, 302, 3, 2, 2, 2, 83, 304, 3, 2, 2, 2, 85, 311, 3, 2, 2, - 2, 87, 318, 3, 2, 2, 2, 89, 325, 3, 2, 2, 2, 91, 329, 3, 2, 2, 2, 93, 331, - 3, 2, 2, 2, 95, 333, 3, 2, 2, 2, 97, 335, 3, 2, 2, 2, 99, 350, 3, 2, 2, - 2, 101, 359, 3, 2, 2, 2, 103, 361, 3, 2, 2, 2, 105, 377, 3, 2, 2, 2, 107, - 379, 3, 2, 2, 2, 109, 386, 3, 2, 2, 2, 111, 398, 3, 2, 2, 2, 113, 401, - 3, 2, 2, 2, 115, 405, 3, 2, 2, 2, 117, 426, 3, 2, 2, 2, 119, 429, 3, 2, - 2, 2, 121, 440, 3, 2, 2, 2, 123, 124, 7, 42, 2, 2, 124, 4, 3, 2, 2, 2, - 125, 126, 7, 43, 2, 2, 126, 6, 3, 2, 2, 2, 127, 128, 7, 93, 2, 2, 128, - 8, 3, 2, 2, 2, 129, 130, 7, 46, 2, 2, 130, 10, 3, 2, 2, 2, 131, 132, 7, - 95, 2, 2, 132, 12, 3, 2, 2, 2, 133, 134, 7, 62, 2, 2, 134, 14, 3, 2, 2, - 2, 135, 136, 7, 62, 2, 2, 136, 137, 7, 63, 2, 2, 137, 16, 3, 2, 2, 2, 138, - 139, 7, 64, 2, 2, 139, 18, 3, 2, 2, 2, 140, 141, 7, 64, 2, 2, 141, 142, - 7, 63, 2, 2, 142, 20, 3, 2, 2, 2, 143, 144, 7, 63, 2, 2, 144, 145, 7, 63, - 2, 2, 145, 22, 3, 2, 2, 2, 146, 147, 7, 35, 2, 2, 147, 148, 7, 63, 2, 2, - 148, 24, 3, 2, 2, 2, 149, 150, 7, 110, 2, 2, 150, 151, 7, 107, 2, 2, 151, - 152, 7, 109, 2, 2, 152, 158, 7, 103, 2, 2, 153, 154, 7, 78, 2, 2, 154, - 155, 7, 75, 2, 2, 155, 156, 7, 77, 2, 2, 156, 158, 7, 71, 2, 2, 157, 149, - 3, 2, 2, 2, 157, 153, 3, 2, 2, 2, 158, 26, 3, 2, 2, 2, 159, 160, 7, 45, - 2, 2, 160, 28, 3, 2, 2, 2, 161, 162, 7, 47, 2, 2, 162, 30, 3, 2, 2, 2, - 163, 164, 7, 44, 2, 2, 164, 32, 3, 2, 2, 2, 165, 166, 7, 49, 2, 2, 166, - 34, 3, 2, 2, 2, 167, 168, 7, 39, 2, 2, 168, 36, 3, 2, 2, 2, 169, 170, 7, - 44, 2, 2, 170, 171, 7, 44, 2, 2, 171, 38, 3, 2, 2, 2, 172, 173, 7, 62, - 2, 2, 173, 174, 7, 62, 2, 2, 174, 40, 3, 2, 2, 2, 175, 176, 7, 64, 2, 2, - 176, 177, 7, 64, 2, 2, 177, 42, 3, 2, 2, 2, 178, 179, 7, 40, 2, 2, 179, - 44, 3, 2, 2, 2, 180, 181, 7, 126, 2, 2, 181, 46, 3, 2, 2, 2, 182, 183, - 7, 96, 2, 2, 183, 48, 3, 2, 2, 2, 184, 185, 7, 40, 2, 2, 185, 190, 7, 40, - 2, 2, 186, 187, 7, 99, 2, 2, 187, 188, 7, 112, 2, 2, 188, 190, 7, 102, - 2, 2, 189, 184, 3, 2, 2, 2, 189, 186, 3, 2, 2, 2, 190, 50, 3, 2, 2, 2, - 191, 192, 7, 126, 2, 2, 192, 196, 7, 126, 2, 2, 193, 194, 7, 113, 2, 2, - 194, 196, 7, 116, 2, 2, 195, 191, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 196, - 52, 3, 2, 2, 2, 197, 198, 7, 128, 2, 2, 198, 54, 3, 2, 2, 2, 199, 204, - 7, 35, 2, 2, 200, 201, 7, 112, 2, 2, 201, 202, 7, 113, 2, 2, 202, 204, - 7, 118, 2, 2, 203, 199, 3, 2, 2, 2, 203, 200, 3, 2, 2, 2, 204, 56, 3, 2, - 2, 2, 205, 206, 7, 107, 2, 2, 206, 207, 7, 112, 2, 2, 207, 58, 3, 2, 2, - 2, 208, 209, 7, 112, 2, 2, 209, 210, 7, 113, 2, 2, 210, 211, 7, 118, 2, - 2, 211, 212, 7, 34, 2, 2, 212, 213, 7, 107, 2, 2, 213, 214, 7, 112, 2, - 2, 214, 60, 3, 2, 2, 2, 215, 220, 7, 93, 2, 2, 216, 219, 5, 119, 60, 2, - 217, 219, 5, 121, 61, 2, 218, 216, 3, 2, 2, 2, 218, 217, 3, 2, 2, 2, 219, - 222, 3, 2, 2, 2, 220, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 223, - 3, 2, 2, 2, 222, 220, 3, 2, 2, 2, 223, 224, 7, 95, 2, 2, 224, 62, 3, 2, - 2, 2, 225, 226, 7, 118, 2, 2, 226, 227, 7, 116, 2, 2, 227, 228, 7, 119, - 2, 2, 228, 253, 7, 103, 2, 2, 229, 230, 7, 86, 2, 2, 230, 231, 7, 116, - 2, 2, 231, 232, 7, 119, 2, 2, 232, 253, 7, 103, 2, 2, 233, 234, 7, 86, - 2, 2, 234, 235, 7, 84, 2, 2, 235, 236, 7, 87, 2, 2, 236, 253, 7, 71, 2, - 2, 237, 238, 7, 104, 2, 2, 238, 239, 7, 99, 2, 2, 239, 240, 7, 110, 2, - 2, 240, 241, 7, 117, 2, 2, 241, 253, 7, 103, 2, 2, 242, 243, 7, 72, 2, - 2, 243, 244, 7, 99, 2, 2, 244, 245, 7, 110, 2, 2, 245, 246, 7, 117, 2, - 2, 246, 253, 7, 103, 2, 2, 247, 248, 7, 72, 2, 2, 248, 249, 7, 67, 2, 2, - 249, 250, 7, 78, 2, 2, 250, 251, 7, 85, 2, 2, 251, 253, 7, 71, 2, 2, 252, - 225, 3, 2, 2, 2, 252, 229, 3, 2, 2, 2, 252, 233, 3, 2, 2, 2, 252, 237, - 3, 2, 2, 2, 252, 242, 3, 2, 2, 2, 252, 247, 3, 2, 2, 2, 253, 64, 3, 2, - 2, 2, 254, 259, 5, 85, 43, 2, 255, 259, 5, 87, 44, 2, 256, 259, 5, 89, - 45, 2, 257, 259, 5, 83, 42, 2, 258, 254, 3, 2, 2, 2, 258, 255, 3, 2, 2, - 2, 258, 256, 3, 2, 2, 2, 258, 257, 3, 2, 2, 2, 259, 66, 3, 2, 2, 2, 260, - 263, 5, 101, 51, 2, 261, 263, 5, 103, 52, 2, 262, 260, 3, 2, 2, 2, 262, - 261, 3, 2, 2, 2, 263, 68, 3, 2, 2, 2, 264, 269, 5, 79, 40, 2, 265, 268, - 5, 79, 40, 2, 266, 268, 5, 81, 41, 2, 267, 265, 3, 2, 2, 2, 267, 266, 3, - 2, 2, 2, 268, 271, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 269, 270, 3, 2, 2, - 2, 270, 70, 3, 2, 2, 2, 271, 269, 3, 2, 2, 2, 272, 274, 5, 73, 37, 2, 273, - 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 277, - 7, 36, 2, 2, 276, 278, 5, 75, 38, 2, 277, 276, 3, 2, 2, 2, 277, 278, 3, - 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 280, 7, 36, 2, 2, 280, 72, 3, 2, 2, - 2, 281, 282, 7, 119, 2, 2, 282, 285, 7, 58, 2, 2, 283, 285, 9, 2, 2, 2, - 284, 281, 3, 2, 2, 2, 284, 283, 3, 2, 2, 2, 285, 74, 3, 2, 2, 2, 286, 288, - 5, 77, 39, 2, 287, 286, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 287, 3, - 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 76, 3, 2, 2, 2, 291, 299, 10, 3, 2, - 2, 292, 299, 5, 117, 59, 2, 293, 294, 7, 94, 2, 2, 294, 299, 7, 12, 2, - 2, 295, 296, 7, 94, 2, 2, 296, 297, 7, 15, 2, 2, 297, 299, 7, 12, 2, 2, - 298, 291, 3, 2, 2, 2, 298, 292, 3, 2, 2, 2, 298, 293, 3, 2, 2, 2, 298, - 295, 3, 2, 2, 2, 299, 78, 3, 2, 2, 2, 300, 301, 9, 4, 2, 2, 301, 80, 3, - 2, 2, 2, 302, 303, 9, 5, 2, 2, 303, 82, 3, 2, 2, 2, 304, 305, 7, 50, 2, - 2, 305, 307, 9, 6, 2, 2, 306, 308, 9, 7, 2, 2, 307, 306, 3, 2, 2, 2, 308, - 309, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 84, 3, - 2, 2, 2, 311, 315, 5, 91, 46, 2, 312, 314, 5, 81, 41, 2, 313, 312, 3, 2, - 2, 2, 314, 317, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, - 316, 86, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 318, 322, 7, 50, 2, 2, 319, - 321, 5, 93, 47, 2, 320, 319, 3, 2, 2, 2, 321, 324, 3, 2, 2, 2, 322, 320, - 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 88, 3, 2, 2, 2, 324, 322, 3, 2, - 2, 2, 325, 326, 7, 50, 2, 2, 326, 327, 9, 8, 2, 2, 327, 328, 5, 113, 57, - 2, 328, 90, 3, 2, 2, 2, 329, 330, 9, 9, 2, 2, 330, 92, 3, 2, 2, 2, 331, - 332, 9, 10, 2, 2, 332, 94, 3, 2, 2, 2, 333, 334, 9, 11, 2, 2, 334, 96, - 3, 2, 2, 2, 335, 336, 5, 95, 48, 2, 336, 337, 5, 95, 48, 2, 337, 338, 5, - 95, 48, 2, 338, 339, 5, 95, 48, 2, 339, 98, 3, 2, 2, 2, 340, 341, 7, 94, - 2, 2, 341, 342, 7, 119, 2, 2, 342, 343, 3, 2, 2, 2, 343, 351, 5, 97, 49, - 2, 344, 345, 7, 94, 2, 2, 345, 346, 7, 87, 2, 2, 346, 347, 3, 2, 2, 2, - 347, 348, 5, 97, 49, 2, 348, 349, 5, 97, 49, 2, 349, 351, 3, 2, 2, 2, 350, - 340, 3, 2, 2, 2, 350, 344, 3, 2, 2, 2, 351, 100, 3, 2, 2, 2, 352, 354, - 5, 105, 53, 2, 353, 355, 5, 107, 54, 2, 354, 353, 3, 2, 2, 2, 354, 355, - 3, 2, 2, 2, 355, 360, 3, 2, 2, 2, 356, 357, 5, 109, 55, 2, 357, 358, 5, - 107, 54, 2, 358, 360, 3, 2, 2, 2, 359, 352, 3, 2, 2, 2, 359, 356, 3, 2, - 2, 2, 360, 102, 3, 2, 2, 2, 361, 362, 7, 50, 2, 2, 362, 365, 9, 8, 2, 2, - 363, 366, 5, 111, 56, 2, 364, 366, 5, 113, 57, 2, 365, 363, 3, 2, 2, 2, - 365, 364, 3, 2, 2, 2, 366, 367, 3, 2, 2, 2, 367, 368, 5, 115, 58, 2, 368, - 104, 3, 2, 2, 2, 369, 371, 5, 109, 55, 2, 370, 369, 3, 2, 2, 2, 370, 371, - 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 373, 7, 48, 2, 2, 373, 378, 5, 109, - 55, 2, 374, 375, 5, 109, 55, 2, 375, 376, 7, 48, 2, 2, 376, 378, 3, 2, - 2, 2, 377, 370, 3, 2, 2, 2, 377, 374, 3, 2, 2, 2, 378, 106, 3, 2, 2, 2, - 379, 381, 9, 12, 2, 2, 380, 382, 9, 13, 2, 2, 381, 380, 3, 2, 2, 2, 381, - 382, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 384, 5, 109, 55, 2, 384, 108, - 3, 2, 2, 2, 385, 387, 5, 81, 41, 2, 386, 385, 3, 2, 2, 2, 387, 388, 3, - 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 110, 3, 2, 2, - 2, 390, 392, 5, 113, 57, 2, 391, 390, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, - 392, 393, 3, 2, 2, 2, 393, 394, 7, 48, 2, 2, 394, 399, 5, 113, 57, 2, 395, - 396, 5, 113, 57, 2, 396, 397, 7, 48, 2, 2, 397, 399, 3, 2, 2, 2, 398, 391, - 3, 2, 2, 2, 398, 395, 3, 2, 2, 2, 399, 112, 3, 2, 2, 2, 400, 402, 5, 95, - 48, 2, 401, 400, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, - 403, 404, 3, 2, 2, 2, 404, 114, 3, 2, 2, 2, 405, 407, 9, 14, 2, 2, 406, - 408, 9, 13, 2, 2, 407, 406, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, - 3, 2, 2, 2, 409, 410, 5, 109, 55, 2, 410, 116, 3, 2, 2, 2, 411, 412, 7, - 94, 2, 2, 412, 427, 9, 15, 2, 2, 413, 414, 7, 94, 2, 2, 414, 416, 5, 93, - 47, 2, 415, 417, 5, 93, 47, 2, 416, 415, 3, 2, 2, 2, 416, 417, 3, 2, 2, - 2, 417, 419, 3, 2, 2, 2, 418, 420, 5, 93, 47, 2, 419, 418, 3, 2, 2, 2, - 419, 420, 3, 2, 2, 2, 420, 427, 3, 2, 2, 2, 421, 422, 7, 94, 2, 2, 422, - 423, 7, 122, 2, 2, 423, 424, 3, 2, 2, 2, 424, 427, 5, 113, 57, 2, 425, - 427, 5, 99, 50, 2, 426, 411, 3, 2, 2, 2, 426, 413, 3, 2, 2, 2, 426, 421, - 3, 2, 2, 2, 426, 425, 3, 2, 2, 2, 427, 118, 3, 2, 2, 2, 428, 430, 9, 16, - 2, 2, 429, 428, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, - 431, 432, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 434, 8, 60, 2, 2, 434, - 120, 3, 2, 2, 2, 435, 437, 7, 15, 2, 2, 436, 438, 7, 12, 2, 2, 437, 436, - 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 441, 3, 2, 2, 2, 439, 441, 7, 12, - 2, 2, 440, 435, 3, 2, 2, 2, 440, 439, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, - 442, 443, 8, 61, 2, 2, 443, 122, 3, 2, 2, 2, 40, 2, 157, 189, 195, 203, - 218, 220, 252, 258, 262, 267, 269, 273, 277, 284, 289, 298, 309, 315, 322, - 350, 354, 359, 365, 370, 377, 381, 388, 391, 398, 403, 407, 416, 419, 426, - 431, 437, 440, 3, 8, 2, 2, -} - -var lexerChannelNames = []string{ - "DEFAULT_TOKEN_CHANNEL", "HIDDEN", -} - -var lexerModeNames = []string{ - "DEFAULT_MODE", -} - -var lexerLiteralNames = []string{ - "", "'('", "')'", "'['", "','", "']'", "'<'", "'<='", "'>'", "'>='", "'=='", - "'!='", "", "'+'", "'-'", "'*'", "'/'", "'%'", "'**'", "'<<'", "'>>'", - "'&'", "'|'", "'^'", "", "", "'~'", "", "'in'", "'not in'", -} - -var lexerSymbolicNames = []string{ - "", "", "", "", "", "", "LT", "LE", "GT", "GE", "EQ", "NE", "LIKE", "ADD", - "SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR", "BAND", "BOR", "BXOR", - "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "BooleanConstant", - "IntegerConstant", "FloatingConstant", "Identifier", "StringLiteral", "Whitespace", - "Newline", -} - -var lexerRuleNames = []string{ - "T__0", "T__1", "T__2", "T__3", "T__4", "LT", "LE", "GT", "GE", "EQ", "NE", - "LIKE", "ADD", "SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR", "BAND", - "BOR", "BXOR", "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "BooleanConstant", - "IntegerConstant", "FloatingConstant", "Identifier", "StringLiteral", "EncodingPrefix", - "SCharSequence", "SChar", "Nondigit", "Digit", "BinaryConstant", "DecimalConstant", - "OctalConstant", "HexadecimalConstant", "NonzeroDigit", "OctalDigit", "HexadecimalDigit", - "HexQuad", "UniversalCharacterName", "DecimalFloatingConstant", "HexadecimalFloatingConstant", - "FractionalConstant", "ExponentPart", "DigitSequence", "HexadecimalFractionalConstant", - "HexadecimalDigitSequence", "BinaryExponentPart", "EscapeSequence", "Whitespace", - "Newline", -} - type PlanLexer struct { *antlr.BaseLexer channelNames []string @@ -263,28 +22,288 @@ type PlanLexer struct { // TODO: EOF string } -// NewPlanLexer produces a new lexer instance for the optional input antlr.CharStream. -// -// The *PlanLexer instance produced may be reused by calling the SetInputStream method. -// The initial lexer configuration is expensive to construct, and the object is not thread-safe; -// however, if used within a Golang sync.Pool, the construction cost amortizes well and the -// objects can be used in a thread-safe manner. -func NewPlanLexer(input antlr.CharStream) *PlanLexer { - l := new(PlanLexer) - lexerDeserializer := antlr.NewATNDeserializer(nil) - lexerAtn := lexerDeserializer.DeserializeFromUInt16(serializedLexerAtn) - lexerDecisionToDFA := make([]*antlr.DFA, len(lexerAtn.DecisionToState)) - for index, ds := range lexerAtn.DecisionToState { - lexerDecisionToDFA[index] = antlr.NewDFA(ds, index) - } - l.BaseLexer = antlr.NewBaseLexer(input) - l.Interpreter = antlr.NewLexerATNSimulator(l, lexerAtn, lexerDecisionToDFA, antlr.NewPredictionContextCache()) +var planlexerLexerStaticData struct { + once sync.Once + serializedATN []int32 + channelNames []string + modeNames []string + literalNames []string + symbolicNames []string + ruleNames []string + predictionContextCache *antlr.PredictionContextCache + atn *antlr.ATN + decisionToDFA []*antlr.DFA +} - l.channelNames = lexerChannelNames - l.modeNames = lexerModeNames - l.RuleNames = lexerRuleNames - l.LiteralNames = lexerLiteralNames - l.SymbolicNames = lexerSymbolicNames +func planlexerLexerInit() { + staticData := &planlexerLexerStaticData + staticData.channelNames = []string{ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", + } + staticData.modeNames = []string{ + "DEFAULT_MODE", + } + staticData.literalNames = []string{ + "", "'('", "')'", "'['", "','", "']'", "'<'", "'<='", "'>'", "'>='", + "'=='", "'!='", "", "'+'", "'-'", "'*'", "'/'", "'%'", "'**'", "'<<'", + "'>>'", "'&'", "'|'", "'^'", "", "", "'~'", "", "'in'", "'not in'", + } + staticData.symbolicNames = []string{ + "", "", "", "", "", "", "LT", "LE", "GT", "GE", "EQ", "NE", "LIKE", + "ADD", "SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR", "BAND", "BOR", + "BXOR", "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "BooleanConstant", + "IntegerConstant", "FloatingConstant", "Identifier", "StringLiteral", + "Whitespace", "Newline", + } + staticData.ruleNames = []string{ + "T__0", "T__1", "T__2", "T__3", "T__4", "LT", "LE", "GT", "GE", "EQ", + "NE", "LIKE", "ADD", "SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR", + "BAND", "BOR", "BXOR", "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", + "BooleanConstant", "IntegerConstant", "FloatingConstant", "Identifier", + "StringLiteral", "EncodingPrefix", "SCharSequence", "SChar", "Nondigit", + "Digit", "BinaryConstant", "DecimalConstant", "OctalConstant", "HexadecimalConstant", + "NonzeroDigit", "OctalDigit", "HexadecimalDigit", "HexQuad", "UniversalCharacterName", + "DecimalFloatingConstant", "HexadecimalFloatingConstant", "FractionalConstant", + "ExponentPart", "DigitSequence", "HexadecimalFractionalConstant", "HexadecimalDigitSequence", + "BinaryExponentPart", "EscapeSequence", "Whitespace", "Newline", + } + staticData.predictionContextCache = antlr.NewPredictionContextCache() + staticData.serializedATN = []int32{ + 4, 0, 37, 442, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, + 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, + 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, + 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, + 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, + 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, + 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, + 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, + 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, + 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, + 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, + 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, + 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, + 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, + 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 156, 8, 11, 1, 12, 1, 12, 1, + 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, + 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, + 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 188, 8, 23, 1, 24, + 1, 24, 1, 24, 1, 24, 3, 24, 194, 8, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, + 26, 1, 26, 3, 26, 202, 8, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, + 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 5, 29, 217, 8, 29, 10, + 29, 12, 29, 220, 9, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, + 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, + 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, + 1, 30, 3, 30, 251, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 257, 8, 31, + 1, 32, 1, 32, 3, 32, 261, 8, 32, 1, 33, 1, 33, 1, 33, 5, 33, 266, 8, 33, + 10, 33, 12, 33, 269, 9, 33, 1, 34, 3, 34, 272, 8, 34, 1, 34, 1, 34, 3, + 34, 276, 8, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 3, 35, 283, 8, 35, 1, + 36, 4, 36, 286, 8, 36, 11, 36, 12, 36, 287, 1, 37, 1, 37, 1, 37, 1, 37, + 1, 37, 1, 37, 1, 37, 3, 37, 297, 8, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, + 40, 1, 40, 1, 40, 4, 40, 306, 8, 40, 11, 40, 12, 40, 307, 1, 41, 1, 41, + 5, 41, 312, 8, 41, 10, 41, 12, 41, 315, 9, 41, 1, 42, 1, 42, 5, 42, 319, + 8, 42, 10, 42, 12, 42, 322, 9, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, + 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, + 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 349, + 8, 48, 1, 49, 1, 49, 3, 49, 353, 8, 49, 1, 49, 1, 49, 1, 49, 3, 49, 358, + 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 364, 8, 50, 1, 50, 1, 50, 1, + 51, 3, 51, 369, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 376, 8, + 51, 1, 52, 1, 52, 3, 52, 380, 8, 52, 1, 52, 1, 52, 1, 53, 4, 53, 385, 8, + 53, 11, 53, 12, 53, 386, 1, 54, 3, 54, 390, 8, 54, 1, 54, 1, 54, 1, 54, + 1, 54, 1, 54, 3, 54, 397, 8, 54, 1, 55, 4, 55, 400, 8, 55, 11, 55, 12, + 55, 401, 1, 56, 1, 56, 3, 56, 406, 8, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, + 57, 1, 57, 1, 57, 3, 57, 415, 8, 57, 1, 57, 3, 57, 418, 8, 57, 1, 57, 1, + 57, 1, 57, 1, 57, 1, 57, 3, 57, 425, 8, 57, 1, 58, 4, 58, 428, 8, 58, 11, + 58, 12, 58, 429, 1, 58, 1, 58, 1, 59, 1, 59, 3, 59, 436, 8, 59, 1, 59, + 3, 59, 439, 8, 59, 1, 59, 1, 59, 0, 0, 60, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, + 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, + 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, + 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, + 33, 67, 34, 69, 35, 71, 0, 73, 0, 75, 0, 77, 0, 79, 0, 81, 0, 83, 0, 85, + 0, 87, 0, 89, 0, 91, 0, 93, 0, 95, 0, 97, 0, 99, 0, 101, 0, 103, 0, 105, + 0, 107, 0, 109, 0, 111, 0, 113, 0, 115, 0, 117, 36, 119, 37, 1, 0, 15, + 3, 0, 76, 76, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 3, + 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 66, 66, 98, 98, 1, 0, 48, + 49, 2, 0, 88, 88, 120, 120, 1, 0, 49, 57, 1, 0, 48, 55, 3, 0, 48, 57, 65, + 70, 97, 102, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 2, 0, 80, 80, + 112, 112, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 97, 98, 102, 102, 110, + 110, 114, 114, 116, 116, 118, 118, 2, 0, 9, 9, 32, 32, 465, 0, 1, 1, 0, + 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, + 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, + 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, + 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, + 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, + 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, + 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, + 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, + 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 117, + 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 1, 121, 1, 0, 0, 0, 3, 123, 1, 0, 0, 0, + 5, 125, 1, 0, 0, 0, 7, 127, 1, 0, 0, 0, 9, 129, 1, 0, 0, 0, 11, 131, 1, + 0, 0, 0, 13, 133, 1, 0, 0, 0, 15, 136, 1, 0, 0, 0, 17, 138, 1, 0, 0, 0, + 19, 141, 1, 0, 0, 0, 21, 144, 1, 0, 0, 0, 23, 155, 1, 0, 0, 0, 25, 157, + 1, 0, 0, 0, 27, 159, 1, 0, 0, 0, 29, 161, 1, 0, 0, 0, 31, 163, 1, 0, 0, + 0, 33, 165, 1, 0, 0, 0, 35, 167, 1, 0, 0, 0, 37, 170, 1, 0, 0, 0, 39, 173, + 1, 0, 0, 0, 41, 176, 1, 0, 0, 0, 43, 178, 1, 0, 0, 0, 45, 180, 1, 0, 0, + 0, 47, 187, 1, 0, 0, 0, 49, 193, 1, 0, 0, 0, 51, 195, 1, 0, 0, 0, 53, 201, + 1, 0, 0, 0, 55, 203, 1, 0, 0, 0, 57, 206, 1, 0, 0, 0, 59, 213, 1, 0, 0, + 0, 61, 250, 1, 0, 0, 0, 63, 256, 1, 0, 0, 0, 65, 260, 1, 0, 0, 0, 67, 262, + 1, 0, 0, 0, 69, 271, 1, 0, 0, 0, 71, 282, 1, 0, 0, 0, 73, 285, 1, 0, 0, + 0, 75, 296, 1, 0, 0, 0, 77, 298, 1, 0, 0, 0, 79, 300, 1, 0, 0, 0, 81, 302, + 1, 0, 0, 0, 83, 309, 1, 0, 0, 0, 85, 316, 1, 0, 0, 0, 87, 323, 1, 0, 0, + 0, 89, 327, 1, 0, 0, 0, 91, 329, 1, 0, 0, 0, 93, 331, 1, 0, 0, 0, 95, 333, + 1, 0, 0, 0, 97, 348, 1, 0, 0, 0, 99, 357, 1, 0, 0, 0, 101, 359, 1, 0, 0, + 0, 103, 375, 1, 0, 0, 0, 105, 377, 1, 0, 0, 0, 107, 384, 1, 0, 0, 0, 109, + 396, 1, 0, 0, 0, 111, 399, 1, 0, 0, 0, 113, 403, 1, 0, 0, 0, 115, 424, + 1, 0, 0, 0, 117, 427, 1, 0, 0, 0, 119, 438, 1, 0, 0, 0, 121, 122, 5, 40, + 0, 0, 122, 2, 1, 0, 0, 0, 123, 124, 5, 41, 0, 0, 124, 4, 1, 0, 0, 0, 125, + 126, 5, 91, 0, 0, 126, 6, 1, 0, 0, 0, 127, 128, 5, 44, 0, 0, 128, 8, 1, + 0, 0, 0, 129, 130, 5, 93, 0, 0, 130, 10, 1, 0, 0, 0, 131, 132, 5, 60, 0, + 0, 132, 12, 1, 0, 0, 0, 133, 134, 5, 60, 0, 0, 134, 135, 5, 61, 0, 0, 135, + 14, 1, 0, 0, 0, 136, 137, 5, 62, 0, 0, 137, 16, 1, 0, 0, 0, 138, 139, 5, + 62, 0, 0, 139, 140, 5, 61, 0, 0, 140, 18, 1, 0, 0, 0, 141, 142, 5, 61, + 0, 0, 142, 143, 5, 61, 0, 0, 143, 20, 1, 0, 0, 0, 144, 145, 5, 33, 0, 0, + 145, 146, 5, 61, 0, 0, 146, 22, 1, 0, 0, 0, 147, 148, 5, 108, 0, 0, 148, + 149, 5, 105, 0, 0, 149, 150, 5, 107, 0, 0, 150, 156, 5, 101, 0, 0, 151, + 152, 5, 76, 0, 0, 152, 153, 5, 73, 0, 0, 153, 154, 5, 75, 0, 0, 154, 156, + 5, 69, 0, 0, 155, 147, 1, 0, 0, 0, 155, 151, 1, 0, 0, 0, 156, 24, 1, 0, + 0, 0, 157, 158, 5, 43, 0, 0, 158, 26, 1, 0, 0, 0, 159, 160, 5, 45, 0, 0, + 160, 28, 1, 0, 0, 0, 161, 162, 5, 42, 0, 0, 162, 30, 1, 0, 0, 0, 163, 164, + 5, 47, 0, 0, 164, 32, 1, 0, 0, 0, 165, 166, 5, 37, 0, 0, 166, 34, 1, 0, + 0, 0, 167, 168, 5, 42, 0, 0, 168, 169, 5, 42, 0, 0, 169, 36, 1, 0, 0, 0, + 170, 171, 5, 60, 0, 0, 171, 172, 5, 60, 0, 0, 172, 38, 1, 0, 0, 0, 173, + 174, 5, 62, 0, 0, 174, 175, 5, 62, 0, 0, 175, 40, 1, 0, 0, 0, 176, 177, + 5, 38, 0, 0, 177, 42, 1, 0, 0, 0, 178, 179, 5, 124, 0, 0, 179, 44, 1, 0, + 0, 0, 180, 181, 5, 94, 0, 0, 181, 46, 1, 0, 0, 0, 182, 183, 5, 38, 0, 0, + 183, 188, 5, 38, 0, 0, 184, 185, 5, 97, 0, 0, 185, 186, 5, 110, 0, 0, 186, + 188, 5, 100, 0, 0, 187, 182, 1, 0, 0, 0, 187, 184, 1, 0, 0, 0, 188, 48, + 1, 0, 0, 0, 189, 190, 5, 124, 0, 0, 190, 194, 5, 124, 0, 0, 191, 192, 5, + 111, 0, 0, 192, 194, 5, 114, 0, 0, 193, 189, 1, 0, 0, 0, 193, 191, 1, 0, + 0, 0, 194, 50, 1, 0, 0, 0, 195, 196, 5, 126, 0, 0, 196, 52, 1, 0, 0, 0, + 197, 202, 5, 33, 0, 0, 198, 199, 5, 110, 0, 0, 199, 200, 5, 111, 0, 0, + 200, 202, 5, 116, 0, 0, 201, 197, 1, 0, 0, 0, 201, 198, 1, 0, 0, 0, 202, + 54, 1, 0, 0, 0, 203, 204, 5, 105, 0, 0, 204, 205, 5, 110, 0, 0, 205, 56, + 1, 0, 0, 0, 206, 207, 5, 110, 0, 0, 207, 208, 5, 111, 0, 0, 208, 209, 5, + 116, 0, 0, 209, 210, 5, 32, 0, 0, 210, 211, 5, 105, 0, 0, 211, 212, 5, + 110, 0, 0, 212, 58, 1, 0, 0, 0, 213, 218, 5, 91, 0, 0, 214, 217, 3, 117, + 58, 0, 215, 217, 3, 119, 59, 0, 216, 214, 1, 0, 0, 0, 216, 215, 1, 0, 0, + 0, 217, 220, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, + 221, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 221, 222, 5, 93, 0, 0, 222, 60, + 1, 0, 0, 0, 223, 224, 5, 116, 0, 0, 224, 225, 5, 114, 0, 0, 225, 226, 5, + 117, 0, 0, 226, 251, 5, 101, 0, 0, 227, 228, 5, 84, 0, 0, 228, 229, 5, + 114, 0, 0, 229, 230, 5, 117, 0, 0, 230, 251, 5, 101, 0, 0, 231, 232, 5, + 84, 0, 0, 232, 233, 5, 82, 0, 0, 233, 234, 5, 85, 0, 0, 234, 251, 5, 69, + 0, 0, 235, 236, 5, 102, 0, 0, 236, 237, 5, 97, 0, 0, 237, 238, 5, 108, + 0, 0, 238, 239, 5, 115, 0, 0, 239, 251, 5, 101, 0, 0, 240, 241, 5, 70, + 0, 0, 241, 242, 5, 97, 0, 0, 242, 243, 5, 108, 0, 0, 243, 244, 5, 115, + 0, 0, 244, 251, 5, 101, 0, 0, 245, 246, 5, 70, 0, 0, 246, 247, 5, 65, 0, + 0, 247, 248, 5, 76, 0, 0, 248, 249, 5, 83, 0, 0, 249, 251, 5, 69, 0, 0, + 250, 223, 1, 0, 0, 0, 250, 227, 1, 0, 0, 0, 250, 231, 1, 0, 0, 0, 250, + 235, 1, 0, 0, 0, 250, 240, 1, 0, 0, 0, 250, 245, 1, 0, 0, 0, 251, 62, 1, + 0, 0, 0, 252, 257, 3, 83, 41, 0, 253, 257, 3, 85, 42, 0, 254, 257, 3, 87, + 43, 0, 255, 257, 3, 81, 40, 0, 256, 252, 1, 0, 0, 0, 256, 253, 1, 0, 0, + 0, 256, 254, 1, 0, 0, 0, 256, 255, 1, 0, 0, 0, 257, 64, 1, 0, 0, 0, 258, + 261, 3, 99, 49, 0, 259, 261, 3, 101, 50, 0, 260, 258, 1, 0, 0, 0, 260, + 259, 1, 0, 0, 0, 261, 66, 1, 0, 0, 0, 262, 267, 3, 77, 38, 0, 263, 266, + 3, 77, 38, 0, 264, 266, 3, 79, 39, 0, 265, 263, 1, 0, 0, 0, 265, 264, 1, + 0, 0, 0, 266, 269, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 267, 268, 1, 0, 0, + 0, 268, 68, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 270, 272, 3, 71, 35, 0, 271, + 270, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 275, + 5, 34, 0, 0, 274, 276, 3, 73, 36, 0, 275, 274, 1, 0, 0, 0, 275, 276, 1, + 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 278, 5, 34, 0, 0, 278, 70, 1, 0, 0, + 0, 279, 280, 5, 117, 0, 0, 280, 283, 5, 56, 0, 0, 281, 283, 7, 0, 0, 0, + 282, 279, 1, 0, 0, 0, 282, 281, 1, 0, 0, 0, 283, 72, 1, 0, 0, 0, 284, 286, + 3, 75, 37, 0, 285, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 285, 1, + 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 74, 1, 0, 0, 0, 289, 297, 8, 1, 0, + 0, 290, 297, 3, 115, 57, 0, 291, 292, 5, 92, 0, 0, 292, 297, 5, 10, 0, + 0, 293, 294, 5, 92, 0, 0, 294, 295, 5, 13, 0, 0, 295, 297, 5, 10, 0, 0, + 296, 289, 1, 0, 0, 0, 296, 290, 1, 0, 0, 0, 296, 291, 1, 0, 0, 0, 296, + 293, 1, 0, 0, 0, 297, 76, 1, 0, 0, 0, 298, 299, 7, 2, 0, 0, 299, 78, 1, + 0, 0, 0, 300, 301, 7, 3, 0, 0, 301, 80, 1, 0, 0, 0, 302, 303, 5, 48, 0, + 0, 303, 305, 7, 4, 0, 0, 304, 306, 7, 5, 0, 0, 305, 304, 1, 0, 0, 0, 306, + 307, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 82, 1, + 0, 0, 0, 309, 313, 3, 89, 44, 0, 310, 312, 3, 79, 39, 0, 311, 310, 1, 0, + 0, 0, 312, 315, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, + 314, 84, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 316, 320, 5, 48, 0, 0, 317, + 319, 3, 91, 45, 0, 318, 317, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, + 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 86, 1, 0, 0, 0, 322, 320, 1, 0, + 0, 0, 323, 324, 5, 48, 0, 0, 324, 325, 7, 6, 0, 0, 325, 326, 3, 111, 55, + 0, 326, 88, 1, 0, 0, 0, 327, 328, 7, 7, 0, 0, 328, 90, 1, 0, 0, 0, 329, + 330, 7, 8, 0, 0, 330, 92, 1, 0, 0, 0, 331, 332, 7, 9, 0, 0, 332, 94, 1, + 0, 0, 0, 333, 334, 3, 93, 46, 0, 334, 335, 3, 93, 46, 0, 335, 336, 3, 93, + 46, 0, 336, 337, 3, 93, 46, 0, 337, 96, 1, 0, 0, 0, 338, 339, 5, 92, 0, + 0, 339, 340, 5, 117, 0, 0, 340, 341, 1, 0, 0, 0, 341, 349, 3, 95, 47, 0, + 342, 343, 5, 92, 0, 0, 343, 344, 5, 85, 0, 0, 344, 345, 1, 0, 0, 0, 345, + 346, 3, 95, 47, 0, 346, 347, 3, 95, 47, 0, 347, 349, 1, 0, 0, 0, 348, 338, + 1, 0, 0, 0, 348, 342, 1, 0, 0, 0, 349, 98, 1, 0, 0, 0, 350, 352, 3, 103, + 51, 0, 351, 353, 3, 105, 52, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, + 0, 353, 358, 1, 0, 0, 0, 354, 355, 3, 107, 53, 0, 355, 356, 3, 105, 52, + 0, 356, 358, 1, 0, 0, 0, 357, 350, 1, 0, 0, 0, 357, 354, 1, 0, 0, 0, 358, + 100, 1, 0, 0, 0, 359, 360, 5, 48, 0, 0, 360, 363, 7, 6, 0, 0, 361, 364, + 3, 109, 54, 0, 362, 364, 3, 111, 55, 0, 363, 361, 1, 0, 0, 0, 363, 362, + 1, 0, 0, 0, 364, 365, 1, 0, 0, 0, 365, 366, 3, 113, 56, 0, 366, 102, 1, + 0, 0, 0, 367, 369, 3, 107, 53, 0, 368, 367, 1, 0, 0, 0, 368, 369, 1, 0, + 0, 0, 369, 370, 1, 0, 0, 0, 370, 371, 5, 46, 0, 0, 371, 376, 3, 107, 53, + 0, 372, 373, 3, 107, 53, 0, 373, 374, 5, 46, 0, 0, 374, 376, 1, 0, 0, 0, + 375, 368, 1, 0, 0, 0, 375, 372, 1, 0, 0, 0, 376, 104, 1, 0, 0, 0, 377, + 379, 7, 10, 0, 0, 378, 380, 7, 11, 0, 0, 379, 378, 1, 0, 0, 0, 379, 380, + 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 382, 3, 107, 53, 0, 382, 106, 1, + 0, 0, 0, 383, 385, 3, 79, 39, 0, 384, 383, 1, 0, 0, 0, 385, 386, 1, 0, + 0, 0, 386, 384, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 108, 1, 0, 0, 0, + 388, 390, 3, 111, 55, 0, 389, 388, 1, 0, 0, 0, 389, 390, 1, 0, 0, 0, 390, + 391, 1, 0, 0, 0, 391, 392, 5, 46, 0, 0, 392, 397, 3, 111, 55, 0, 393, 394, + 3, 111, 55, 0, 394, 395, 5, 46, 0, 0, 395, 397, 1, 0, 0, 0, 396, 389, 1, + 0, 0, 0, 396, 393, 1, 0, 0, 0, 397, 110, 1, 0, 0, 0, 398, 400, 3, 93, 46, + 0, 399, 398, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, + 402, 1, 0, 0, 0, 402, 112, 1, 0, 0, 0, 403, 405, 7, 12, 0, 0, 404, 406, + 7, 11, 0, 0, 405, 404, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 407, 1, 0, + 0, 0, 407, 408, 3, 107, 53, 0, 408, 114, 1, 0, 0, 0, 409, 410, 5, 92, 0, + 0, 410, 425, 7, 13, 0, 0, 411, 412, 5, 92, 0, 0, 412, 414, 3, 91, 45, 0, + 413, 415, 3, 91, 45, 0, 414, 413, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, + 417, 1, 0, 0, 0, 416, 418, 3, 91, 45, 0, 417, 416, 1, 0, 0, 0, 417, 418, + 1, 0, 0, 0, 418, 425, 1, 0, 0, 0, 419, 420, 5, 92, 0, 0, 420, 421, 5, 120, + 0, 0, 421, 422, 1, 0, 0, 0, 422, 425, 3, 111, 55, 0, 423, 425, 3, 97, 48, + 0, 424, 409, 1, 0, 0, 0, 424, 411, 1, 0, 0, 0, 424, 419, 1, 0, 0, 0, 424, + 423, 1, 0, 0, 0, 425, 116, 1, 0, 0, 0, 426, 428, 7, 14, 0, 0, 427, 426, + 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, + 0, 0, 430, 431, 1, 0, 0, 0, 431, 432, 6, 58, 0, 0, 432, 118, 1, 0, 0, 0, + 433, 435, 5, 13, 0, 0, 434, 436, 5, 10, 0, 0, 435, 434, 1, 0, 0, 0, 435, + 436, 1, 0, 0, 0, 436, 439, 1, 0, 0, 0, 437, 439, 5, 10, 0, 0, 438, 433, + 1, 0, 0, 0, 438, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 441, 6, 59, + 0, 0, 441, 120, 1, 0, 0, 0, 38, 0, 155, 187, 193, 201, 216, 218, 250, 256, + 260, 265, 267, 271, 275, 282, 287, 296, 307, 313, 320, 348, 352, 357, 363, + 368, 375, 379, 386, 389, 396, 401, 405, 414, 417, 424, 429, 435, 438, 1, + 6, 0, 0, + } + deserializer := antlr.NewATNDeserializer(nil) + staticData.atn = deserializer.Deserialize(staticData.serializedATN) + atn := staticData.atn + staticData.decisionToDFA = make([]*antlr.DFA, len(atn.DecisionToState)) + decisionToDFA := staticData.decisionToDFA + for index, state := range atn.DecisionToState { + decisionToDFA[index] = antlr.NewDFA(state, index) + } +} + +// PlanLexerInit initializes any static state used to implement PlanLexer. By default the +// static state used to implement the lexer is lazily initialized during the first call to +// NewPlanLexer(). You can call this function if you wish to initialize the static state ahead +// of time. +func PlanLexerInit() { + staticData := &planlexerLexerStaticData + staticData.once.Do(planlexerLexerInit) +} + +// NewPlanLexer produces a new lexer instance for the optional input antlr.CharStream. +func NewPlanLexer(input antlr.CharStream) *PlanLexer { + PlanLexerInit() + l := new(PlanLexer) + l.BaseLexer = antlr.NewBaseLexer(input) + staticData := &planlexerLexerStaticData + l.Interpreter = antlr.NewLexerATNSimulator(l, staticData.atn, staticData.decisionToDFA, staticData.predictionContextCache) + l.channelNames = staticData.channelNames + l.modeNames = staticData.modeNames + l.RuleNames = staticData.ruleNames + l.LiteralNames = staticData.literalNames + l.SymbolicNames = staticData.symbolicNames l.GrammarFileName = "Plan.g4" // TODO: l.EOF = antlr.TokenEOF diff --git a/internal/parser/planparserv2/generated/plan_parser.go b/internal/parser/planparserv2/generated/plan_parser.go index 8278984c25..aacb167a3b 100644 --- a/internal/parser/planparserv2/generated/plan_parser.go +++ b/internal/parser/planparserv2/generated/plan_parser.go @@ -1,105 +1,125 @@ -// Code generated from Plan.g4 by ANTLR 4.9. DO NOT EDIT. +// Code generated from java-escape by ANTLR 4.11.1. DO NOT EDIT. package planparserv2 // Plan import ( "fmt" - "reflect" "strconv" + "sync" - "github.com/antlr/antlr4/runtime/Go/antlr" + "github.com/antlr/antlr4/runtime/Go/antlr/v4" ) // Suppress unused import errors var _ = fmt.Printf -var _ = reflect.Copy var _ = strconv.Itoa - -var parserATN = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 39, 89, 4, - 2, 9, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 5, 2, 17, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 71, 10, 2, 12, - 2, 14, 2, 74, 11, 2, 3, 2, 5, 2, 77, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 7, 2, 84, 10, 2, 12, 2, 14, 2, 87, 11, 2, 3, 2, 2, 3, 2, 3, 2, 2, 11, - 4, 2, 15, 16, 28, 29, 3, 2, 17, 19, 3, 2, 15, 16, 3, 2, 21, 22, 3, 2, 8, - 9, 3, 2, 10, 11, 3, 2, 8, 11, 3, 2, 12, 13, 3, 2, 30, 31, 2, 111, 2, 16, - 3, 2, 2, 2, 4, 5, 8, 2, 1, 2, 5, 17, 7, 34, 2, 2, 6, 17, 7, 35, 2, 2, 7, - 17, 7, 33, 2, 2, 8, 17, 7, 37, 2, 2, 9, 17, 7, 36, 2, 2, 10, 11, 7, 3, - 2, 2, 11, 12, 5, 2, 2, 2, 12, 13, 7, 4, 2, 2, 13, 17, 3, 2, 2, 2, 14, 15, - 9, 2, 2, 2, 15, 17, 5, 2, 2, 17, 16, 4, 3, 2, 2, 2, 16, 6, 3, 2, 2, 2, - 16, 7, 3, 2, 2, 2, 16, 8, 3, 2, 2, 2, 16, 9, 3, 2, 2, 2, 16, 10, 3, 2, - 2, 2, 16, 14, 3, 2, 2, 2, 17, 85, 3, 2, 2, 2, 18, 19, 12, 18, 2, 2, 19, - 20, 7, 20, 2, 2, 20, 84, 5, 2, 2, 19, 21, 22, 12, 16, 2, 2, 22, 23, 9, - 3, 2, 2, 23, 84, 5, 2, 2, 17, 24, 25, 12, 15, 2, 2, 25, 26, 9, 4, 2, 2, - 26, 84, 5, 2, 2, 16, 27, 28, 12, 14, 2, 2, 28, 29, 9, 5, 2, 2, 29, 84, - 5, 2, 2, 15, 30, 31, 12, 11, 2, 2, 31, 32, 9, 6, 2, 2, 32, 33, 7, 36, 2, - 2, 33, 34, 9, 6, 2, 2, 34, 84, 5, 2, 2, 12, 35, 36, 12, 10, 2, 2, 36, 37, - 9, 7, 2, 2, 37, 38, 7, 36, 2, 2, 38, 39, 9, 7, 2, 2, 39, 84, 5, 2, 2, 11, - 40, 41, 12, 9, 2, 2, 41, 42, 9, 8, 2, 2, 42, 84, 5, 2, 2, 10, 43, 44, 12, - 8, 2, 2, 44, 45, 9, 9, 2, 2, 45, 84, 5, 2, 2, 9, 46, 47, 12, 7, 2, 2, 47, - 48, 7, 23, 2, 2, 48, 84, 5, 2, 2, 8, 49, 50, 12, 6, 2, 2, 50, 51, 7, 25, - 2, 2, 51, 84, 5, 2, 2, 7, 52, 53, 12, 5, 2, 2, 53, 54, 7, 24, 2, 2, 54, - 84, 5, 2, 2, 6, 55, 56, 12, 4, 2, 2, 56, 57, 7, 26, 2, 2, 57, 84, 5, 2, - 2, 5, 58, 59, 12, 3, 2, 2, 59, 60, 7, 27, 2, 2, 60, 84, 5, 2, 2, 4, 61, - 62, 12, 19, 2, 2, 62, 63, 7, 14, 2, 2, 63, 84, 7, 37, 2, 2, 64, 65, 12, - 13, 2, 2, 65, 66, 9, 10, 2, 2, 66, 67, 7, 5, 2, 2, 67, 72, 5, 2, 2, 2, - 68, 69, 7, 6, 2, 2, 69, 71, 5, 2, 2, 2, 70, 68, 3, 2, 2, 2, 71, 74, 3, - 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 76, 3, 2, 2, 2, 74, - 72, 3, 2, 2, 2, 75, 77, 7, 6, 2, 2, 76, 75, 3, 2, 2, 2, 76, 77, 3, 2, 2, - 2, 77, 78, 3, 2, 2, 2, 78, 79, 7, 7, 2, 2, 79, 84, 3, 2, 2, 2, 80, 81, - 12, 12, 2, 2, 81, 82, 9, 10, 2, 2, 82, 84, 7, 32, 2, 2, 83, 18, 3, 2, 2, - 2, 83, 21, 3, 2, 2, 2, 83, 24, 3, 2, 2, 2, 83, 27, 3, 2, 2, 2, 83, 30, - 3, 2, 2, 2, 83, 35, 3, 2, 2, 2, 83, 40, 3, 2, 2, 2, 83, 43, 3, 2, 2, 2, - 83, 46, 3, 2, 2, 2, 83, 49, 3, 2, 2, 2, 83, 52, 3, 2, 2, 2, 83, 55, 3, - 2, 2, 2, 83, 58, 3, 2, 2, 2, 83, 61, 3, 2, 2, 2, 83, 64, 3, 2, 2, 2, 83, - 80, 3, 2, 2, 2, 84, 87, 3, 2, 2, 2, 85, 83, 3, 2, 2, 2, 85, 86, 3, 2, 2, - 2, 86, 3, 3, 2, 2, 2, 87, 85, 3, 2, 2, 2, 7, 16, 72, 76, 83, 85, -} -var literalNames = []string{ - "", "'('", "')'", "'['", "','", "']'", "'<'", "'<='", "'>'", "'>='", "'=='", - "'!='", "", "'+'", "'-'", "'*'", "'/'", "'%'", "'**'", "'<<'", "'>>'", - "'&'", "'|'", "'^'", "", "", "'~'", "", "'in'", "'not in'", -} -var symbolicNames = []string{ - "", "", "", "", "", "", "LT", "LE", "GT", "GE", "EQ", "NE", "LIKE", "ADD", - "SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR", "BAND", "BOR", "BXOR", - "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "BooleanConstant", - "IntegerConstant", "FloatingConstant", "Identifier", "StringLiteral", "Whitespace", - "Newline", -} - -var ruleNames = []string{ - "expr", -} +var _ = sync.Once{} type PlanParser struct { *antlr.BaseParser } -// NewPlanParser produces a new parser instance for the optional input antlr.TokenStream. -// -// The *PlanParser instance produced may be reused by calling the SetInputStream method. -// The initial parser configuration is expensive to construct, and the object is not thread-safe; -// however, if used within a Golang sync.Pool, the construction cost amortizes well and the -// objects can be used in a thread-safe manner. -func NewPlanParser(input antlr.TokenStream) *PlanParser { - this := new(PlanParser) - deserializer := antlr.NewATNDeserializer(nil) - deserializedATN := deserializer.DeserializeFromUInt16(parserATN) - decisionToDFA := make([]*antlr.DFA, len(deserializedATN.DecisionToState)) - for index, ds := range deserializedATN.DecisionToState { - decisionToDFA[index] = antlr.NewDFA(ds, index) - } - this.BaseParser = antlr.NewBaseParser(input) +var planParserStaticData struct { + once sync.Once + serializedATN []int32 + literalNames []string + symbolicNames []string + ruleNames []string + predictionContextCache *antlr.PredictionContextCache + atn *antlr.ATN + decisionToDFA []*antlr.DFA +} - this.Interpreter = antlr.NewParserATNSimulator(this, deserializedATN, decisionToDFA, antlr.NewPredictionContextCache()) - this.RuleNames = ruleNames - this.LiteralNames = literalNames - this.SymbolicNames = symbolicNames - this.GrammarFileName = "Plan.g4" +func planParserInit() { + staticData := &planParserStaticData + staticData.literalNames = []string{ + "", "'('", "')'", "'['", "','", "']'", "'<'", "'<='", "'>'", "'>='", + "'=='", "'!='", "", "'+'", "'-'", "'*'", "'/'", "'%'", "'**'", "'<<'", + "'>>'", "'&'", "'|'", "'^'", "", "", "'~'", "", "'in'", "'not in'", + } + staticData.symbolicNames = []string{ + "", "", "", "", "", "", "LT", "LE", "GT", "GE", "EQ", "NE", "LIKE", + "ADD", "SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR", "BAND", "BOR", + "BXOR", "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "BooleanConstant", + "IntegerConstant", "FloatingConstant", "Identifier", "StringLiteral", + "Whitespace", "Newline", + } + staticData.ruleNames = []string{ + "expr", + } + staticData.predictionContextCache = antlr.NewPredictionContextCache() + staticData.serializedATN = []int32{ + 4, 1, 37, 87, 2, 0, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 15, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, + 69, 8, 0, 10, 0, 12, 0, 72, 9, 0, 1, 0, 3, 0, 75, 8, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 9, 2, 0, 13, 14, 26, 27, 1, 0, 15, 17, 1, 0, 13, 14, 1, 0, 19, 20, + 1, 0, 6, 7, 1, 0, 8, 9, 1, 0, 6, 9, 1, 0, 10, 11, 1, 0, 28, 29, 109, 0, + 14, 1, 0, 0, 0, 2, 3, 6, 0, -1, 0, 3, 15, 5, 32, 0, 0, 4, 15, 5, 33, 0, + 0, 5, 15, 5, 31, 0, 0, 6, 15, 5, 35, 0, 0, 7, 15, 5, 34, 0, 0, 8, 9, 5, + 1, 0, 0, 9, 10, 3, 0, 0, 0, 10, 11, 5, 2, 0, 0, 11, 15, 1, 0, 0, 0, 12, + 13, 7, 0, 0, 0, 13, 15, 3, 0, 0, 15, 14, 2, 1, 0, 0, 0, 14, 4, 1, 0, 0, + 0, 14, 5, 1, 0, 0, 0, 14, 6, 1, 0, 0, 0, 14, 7, 1, 0, 0, 0, 14, 8, 1, 0, + 0, 0, 14, 12, 1, 0, 0, 0, 15, 83, 1, 0, 0, 0, 16, 17, 10, 16, 0, 0, 17, + 18, 5, 18, 0, 0, 18, 82, 3, 0, 0, 17, 19, 20, 10, 14, 0, 0, 20, 21, 7, + 1, 0, 0, 21, 82, 3, 0, 0, 15, 22, 23, 10, 13, 0, 0, 23, 24, 7, 2, 0, 0, + 24, 82, 3, 0, 0, 14, 25, 26, 10, 12, 0, 0, 26, 27, 7, 3, 0, 0, 27, 82, + 3, 0, 0, 13, 28, 29, 10, 9, 0, 0, 29, 30, 7, 4, 0, 0, 30, 31, 5, 34, 0, + 0, 31, 32, 7, 4, 0, 0, 32, 82, 3, 0, 0, 10, 33, 34, 10, 8, 0, 0, 34, 35, + 7, 5, 0, 0, 35, 36, 5, 34, 0, 0, 36, 37, 7, 5, 0, 0, 37, 82, 3, 0, 0, 9, + 38, 39, 10, 7, 0, 0, 39, 40, 7, 6, 0, 0, 40, 82, 3, 0, 0, 8, 41, 42, 10, + 6, 0, 0, 42, 43, 7, 7, 0, 0, 43, 82, 3, 0, 0, 7, 44, 45, 10, 5, 0, 0, 45, + 46, 5, 21, 0, 0, 46, 82, 3, 0, 0, 6, 47, 48, 10, 4, 0, 0, 48, 49, 5, 23, + 0, 0, 49, 82, 3, 0, 0, 5, 50, 51, 10, 3, 0, 0, 51, 52, 5, 22, 0, 0, 52, + 82, 3, 0, 0, 4, 53, 54, 10, 2, 0, 0, 54, 55, 5, 24, 0, 0, 55, 82, 3, 0, + 0, 3, 56, 57, 10, 1, 0, 0, 57, 58, 5, 25, 0, 0, 58, 82, 3, 0, 0, 2, 59, + 60, 10, 17, 0, 0, 60, 61, 5, 12, 0, 0, 61, 82, 5, 35, 0, 0, 62, 63, 10, + 11, 0, 0, 63, 64, 7, 8, 0, 0, 64, 65, 5, 3, 0, 0, 65, 70, 3, 0, 0, 0, 66, + 67, 5, 4, 0, 0, 67, 69, 3, 0, 0, 0, 68, 66, 1, 0, 0, 0, 69, 72, 1, 0, 0, + 0, 70, 68, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 74, 1, 0, 0, 0, 72, 70, + 1, 0, 0, 0, 73, 75, 5, 4, 0, 0, 74, 73, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, + 75, 76, 1, 0, 0, 0, 76, 77, 5, 5, 0, 0, 77, 82, 1, 0, 0, 0, 78, 79, 10, + 10, 0, 0, 79, 80, 7, 8, 0, 0, 80, 82, 5, 30, 0, 0, 81, 16, 1, 0, 0, 0, + 81, 19, 1, 0, 0, 0, 81, 22, 1, 0, 0, 0, 81, 25, 1, 0, 0, 0, 81, 28, 1, + 0, 0, 0, 81, 33, 1, 0, 0, 0, 81, 38, 1, 0, 0, 0, 81, 41, 1, 0, 0, 0, 81, + 44, 1, 0, 0, 0, 81, 47, 1, 0, 0, 0, 81, 50, 1, 0, 0, 0, 81, 53, 1, 0, 0, + 0, 81, 56, 1, 0, 0, 0, 81, 59, 1, 0, 0, 0, 81, 62, 1, 0, 0, 0, 81, 78, + 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, + 84, 1, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 5, 14, 70, 74, 81, 83, + } + deserializer := antlr.NewATNDeserializer(nil) + staticData.atn = deserializer.Deserialize(staticData.serializedATN) + atn := staticData.atn + staticData.decisionToDFA = make([]*antlr.DFA, len(atn.DecisionToState)) + decisionToDFA := staticData.decisionToDFA + for index, state := range atn.DecisionToState { + decisionToDFA[index] = antlr.NewDFA(state, index) + } +} + +// PlanParserInit initializes any static state used to implement PlanParser. By default the +// static state used to implement the parser is lazily initialized during the first call to +// NewPlanParser(). You can call this function if you wish to initialize the static state ahead +// of time. +func PlanParserInit() { + staticData := &planParserStaticData + staticData.once.Do(planParserInit) +} + +// NewPlanParser produces a new parser instance for the optional input antlr.TokenStream. +func NewPlanParser(input antlr.TokenStream) *PlanParser { + PlanParserInit() + this := new(PlanParser) + this.BaseParser = antlr.NewBaseParser(input) + staticData := &planParserStaticData + this.Interpreter = antlr.NewParserATNSimulator(this, staticData.atn, staticData.decisionToDFA, staticData.predictionContextCache) + this.RuleNames = staticData.ruleNames + this.LiteralNames = staticData.literalNames + this.SymbolicNames = staticData.symbolicNames + this.GrammarFileName = "java-escape" return this } @@ -223,12 +243,20 @@ func (s *ShiftContext) GetRuleContext() antlr.RuleContext { } func (s *ShiftContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -236,7 +264,17 @@ func (s *ShiftContext) AllExpr() []IExprContext { } func (s *ShiftContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -292,12 +330,20 @@ func (s *ReverseRangeContext) GetRuleContext() antlr.RuleContext { } func (s *ReverseRangeContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -305,7 +351,17 @@ func (s *ReverseRangeContext) AllExpr() []IExprContext { } func (s *ReverseRangeContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -363,12 +419,20 @@ func (s *BitOrContext) GetRuleContext() antlr.RuleContext { } func (s *BitOrContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -376,7 +440,17 @@ func (s *BitOrContext) AllExpr() []IExprContext { } func (s *BitOrContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -423,12 +497,20 @@ func (s *AddSubContext) GetRuleContext() antlr.RuleContext { } func (s *AddSubContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -436,7 +518,17 @@ func (s *AddSubContext) AllExpr() []IExprContext { } func (s *AddSubContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -482,7 +574,13 @@ func (s *ParensContext) GetRuleContext() antlr.RuleContext { } func (s *ParensContext) Expr() IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), 0) + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } if t == nil { return nil @@ -525,12 +623,20 @@ func (s *RelationalContext) GetRuleContext() antlr.RuleContext { } func (s *RelationalContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -538,7 +644,17 @@ func (s *RelationalContext) AllExpr() []IExprContext { } func (s *RelationalContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -629,12 +745,20 @@ func (s *TermContext) GetRuleContext() antlr.RuleContext { } func (s *TermContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -642,7 +766,17 @@ func (s *TermContext) AllExpr() []IExprContext { } func (s *TermContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -730,12 +864,20 @@ func (s *RangeContext) GetRuleContext() antlr.RuleContext { } func (s *RangeContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -743,7 +885,17 @@ func (s *RangeContext) AllExpr() []IExprContext { } func (s *RangeContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -806,7 +958,13 @@ func (s *UnaryContext) GetRuleContext() antlr.RuleContext { } func (s *UnaryContext) Expr() IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), 0) + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } if t == nil { return nil @@ -860,12 +1018,20 @@ func (s *LogicalOrContext) GetRuleContext() antlr.RuleContext { } func (s *LogicalOrContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -873,7 +1039,17 @@ func (s *LogicalOrContext) AllExpr() []IExprContext { } func (s *LogicalOrContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -952,12 +1128,20 @@ func (s *MulDivModContext) GetRuleContext() antlr.RuleContext { } func (s *MulDivModContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -965,7 +1149,17 @@ func (s *MulDivModContext) AllExpr() []IExprContext { } func (s *MulDivModContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -1047,12 +1241,20 @@ func (s *BitXorContext) GetRuleContext() antlr.RuleContext { } func (s *BitXorContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -1060,7 +1262,17 @@ func (s *BitXorContext) AllExpr() []IExprContext { } func (s *BitXorContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -1102,7 +1314,13 @@ func (s *LikeContext) GetRuleContext() antlr.RuleContext { } func (s *LikeContext) Expr() IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), 0) + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } if t == nil { return nil @@ -1148,12 +1366,20 @@ func (s *BitAndContext) GetRuleContext() antlr.RuleContext { } func (s *BitAndContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -1161,7 +1387,17 @@ func (s *BitAndContext) AllExpr() []IExprContext { } func (s *BitAndContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -1203,12 +1439,20 @@ func (s *LogicalAndContext) GetRuleContext() antlr.RuleContext { } func (s *LogicalAndContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -1216,7 +1460,17 @@ func (s *LogicalAndContext) AllExpr() []IExprContext { } func (s *LogicalAndContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -1263,7 +1517,13 @@ func (s *EmptyTermContext) GetRuleContext() antlr.RuleContext { } func (s *EmptyTermContext) Expr() IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), 0) + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } if t == nil { return nil @@ -1318,12 +1578,20 @@ func (s *EqualityContext) GetRuleContext() antlr.RuleContext { } func (s *EqualityContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -1331,7 +1599,17 @@ func (s *EqualityContext) AllExpr() []IExprContext { } func (s *EqualityContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -1409,12 +1687,20 @@ func (s *PowerContext) GetRuleContext() antlr.RuleContext { } func (s *PowerContext) AllExpr() []IExprContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem()) - var tst = make([]IExprContext, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExprContext); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]IExprContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExprContext); ok { tst[i] = t.(IExprContext) + i++ } } @@ -1422,7 +1708,17 @@ func (s *PowerContext) AllExpr() []IExprContext { } func (s *PowerContext) Expr(i int) IExprContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i) + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } if t == nil { return nil @@ -1450,6 +1746,9 @@ func (p *PlanParser) Expr() (localctx IExprContext) { } func (p *PlanParser) expr(_p int) (localctx IExprContext) { + this := p + _ = this + var _parentctx antlr.ParserRuleContext = p.GetParserRuleContext() _parentState := p.GetState() localctx = NewExprContext(p, p.GetParserRuleContext(), _parentState) @@ -1558,7 +1857,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { _la = p.GetTokenStream().LA(1) - if !(((_la)&-(0x1f+1)) == 0 && ((1<> ${FILE_COVERAGE_INFO} + grep -v kafka profile.out | grep -v planparserv2/generated | grep -v mocks | grep -v mysqld/parser/antlrparser/parser | sed '1d' >> ${FILE_COVERAGE_INFO} rm profile.out fi done diff --git a/scripts/start_cluster.sh b/scripts/start_cluster.sh index 042dc8f2e7..06d3ecc23e 100755 --- a/scripts/start_cluster.sh +++ b/scripts/start_cluster.sh @@ -26,6 +26,14 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then fi fi +# This should be set when the project depends on two pb packages +# who were generated by same file name. For example, project depends +# on libA and libB, where libA has a package schemapb which is generated +# by `schema.proto` inside libA, and same to libB, then namespace +# will conflict if this environment is not set. +# TODO: check if upgrading protoc works. +export GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn + echo "Starting rootcoord..." nohup ./bin/milvus run rootcoord > /tmp/rootcoord.log 2>&1 & diff --git a/scripts/start_standalone.sh b/scripts/start_standalone.sh index 31732ba0d3..46982717ed 100755 --- a/scripts/start_standalone.sh +++ b/scripts/start_standalone.sh @@ -26,5 +26,13 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then fi fi +# This should be set when the project depends on two pb packages +# who were generated by same file name. For example, project depends +# on libA and libB, where libA has a package schemapb which is generated +# by `schema.proto` inside libA, and same to libB, then namespace +# will conflict if this environment is not set. +# TODO: check if upgrading protoc works. +export GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn + echo "Starting standalone..." nohup ./bin/milvus run standalone > /tmp/standalone.log 2>&1 & diff --git a/tools/antlr/antlr-4.11.1-complete.jar b/tools/antlr/antlr-4.11.1-complete.jar new file mode 100644 index 0000000000..bb96df9510 Binary files /dev/null and b/tools/antlr/antlr-4.11.1-complete.jar differ